From bbcc22751f689fb1002a85e641a854006280ad66 Mon Sep 17 00:00:00 2001
From: Markos Chandras <mchandras@suse.de>
Date: Tue, 18 Oct 2016 23:21:07 +0100
Subject: [PATCH] elements: Add new openssh-server element

Add new 'openssh-server' element to ensure that openssh server
is installed and enabled during boot. This is mostly useful for
*-minimal images which do not come with openssh installed and/or
enabled in order to keep a small dependency footprint.

Change-Id: Ide15ee04f5de123dbc8ce4bb56d638d8a167c341
---
 elements/debian/element-deps                  |  1 +
 elements/debian/package-installs.yaml         |  1 -
 elements/dynamic-login/element-deps           |  2 +-
 elements/local-config/element-deps            |  2 +-
 elements/local-config/package-installs.yaml   |  1 -
 elements/openssh-server/README.rst            | 14 +++++++++
 elements/openssh-server/element-deps          |  3 ++
 .../package-installs.yaml                     |  0
 elements/openssh-server/pkg-map               | 10 +++++++
 .../post-install.d/80-enable-sshd-service     | 29 +++++++++++++++++++
 .../openssh-server-0f6d065748a2fc18.yaml      |  4 +++
 11 files changed, 63 insertions(+), 4 deletions(-)
 delete mode 100644 elements/local-config/package-installs.yaml
 create mode 100644 elements/openssh-server/README.rst
 create mode 100644 elements/openssh-server/element-deps
 rename elements/{dynamic-login => openssh-server}/package-installs.yaml (100%)
 create mode 100644 elements/openssh-server/pkg-map
 create mode 100755 elements/openssh-server/post-install.d/80-enable-sshd-service
 create mode 100644 releasenotes/notes/openssh-server-0f6d065748a2fc18.yaml

diff --git a/elements/debian/element-deps b/elements/debian/element-deps
index 0f508629a..1c0ebe248 100644
--- a/elements/debian/element-deps
+++ b/elements/debian/element-deps
@@ -1 +1,2 @@
 debian-minimal
+openssh-server
diff --git a/elements/debian/package-installs.yaml b/elements/debian/package-installs.yaml
index 862c274f3..58880aca1 100644
--- a/elements/debian/package-installs.yaml
+++ b/elements/debian/package-installs.yaml
@@ -1,4 +1,3 @@
-openssh-server:
 file:
 less:
 kbd:
diff --git a/elements/dynamic-login/element-deps b/elements/dynamic-login/element-deps
index 74451ffbe..34c57c762 100644
--- a/elements/dynamic-login/element-deps
+++ b/elements/dynamic-login/element-deps
@@ -1,3 +1,3 @@
 dib-init-system
 install-static
-package-installs
+openssh-server
diff --git a/elements/local-config/element-deps b/elements/local-config/element-deps
index 7076aba94..dd21b5aa9 100644
--- a/elements/local-config/element-deps
+++ b/elements/local-config/element-deps
@@ -1 +1 @@
-package-installs
+openssh-server
diff --git a/elements/local-config/package-installs.yaml b/elements/local-config/package-installs.yaml
deleted file mode 100644
index c342a0be5..000000000
--- a/elements/local-config/package-installs.yaml
+++ /dev/null
@@ -1 +0,0 @@
-openssh-server:
diff --git a/elements/openssh-server/README.rst b/elements/openssh-server/README.rst
new file mode 100644
index 000000000..7190deab4
--- /dev/null
+++ b/elements/openssh-server/README.rst
@@ -0,0 +1,14 @@
+==============
+openssh-server
+==============
+This element ensures that openssh server is installed and enabled during boot.
+
+
+Note
+----
+Most cloud images come with the openssh server service installed and enabled
+during boot. However, certain cloud images, especially those created by the
+\*-minimal elements may not have it installed or enabled. In these cases,
+using this element may be helpful to ensure your image will accessible via SSH.
+It's usually helpful to combine this element with others such as the
+`runtime-ssh-host-keys`.
diff --git a/elements/openssh-server/element-deps b/elements/openssh-server/element-deps
new file mode 100644
index 000000000..fe8fa3f8b
--- /dev/null
+++ b/elements/openssh-server/element-deps
@@ -0,0 +1,3 @@
+dib-init-system
+package-installs
+runtime-ssh-host-keys
diff --git a/elements/dynamic-login/package-installs.yaml b/elements/openssh-server/package-installs.yaml
similarity index 100%
rename from elements/dynamic-login/package-installs.yaml
rename to elements/openssh-server/package-installs.yaml
diff --git a/elements/openssh-server/pkg-map b/elements/openssh-server/pkg-map
new file mode 100644
index 000000000..9b0393414
--- /dev/null
+++ b/elements/openssh-server/pkg-map
@@ -0,0 +1,10 @@
+{
+  "family": {
+    "suse": {
+      "openssh-server": "openssh"
+    },
+    "gentoo": {
+      "openssh-server": "openssh"
+    }
+  }
+}
diff --git a/elements/openssh-server/post-install.d/80-enable-sshd-service b/elements/openssh-server/post-install.d/80-enable-sshd-service
new file mode 100755
index 000000000..50238bbcc
--- /dev/null
+++ b/elements/openssh-server/post-install.d/80-enable-sshd-service
@@ -0,0 +1,29 @@
+#!/bin/bash
+
+if [ "${DIB_DEBUG_TRACE:-0}" -gt 0 ]; then
+    set -x
+fi
+set -eu
+set -o pipefail
+
+case "$DIB_INIT_SYSTEM" in
+    upstart)
+        # nothing to do
+        exit 0
+        ;;
+    systemd)
+        if [[ $DISTRO_NAME = "ubuntu" || $DISTRO_NAME = "debian" ]]; then
+            systemctl enable ssh.service
+        else
+            systemctl enable sshd.service
+        fi
+        ;;
+    openrc)
+        # let dib-init-system's postinstall handle enabling init scripts
+        exit 0
+        ;;
+    *)
+        echo "Unsupported init system"
+        exit 1
+        ;;
+esac
diff --git a/releasenotes/notes/openssh-server-0f6d065748a2fc18.yaml b/releasenotes/notes/openssh-server-0f6d065748a2fc18.yaml
new file mode 100644
index 000000000..985475b8e
--- /dev/null
+++ b/releasenotes/notes/openssh-server-0f6d065748a2fc18.yaml
@@ -0,0 +1,4 @@
+---
+features:
+  - New openssh-server element to ensure that the openssh
+    server is installed and enabled during boot.