Simone Tiraboschi has uploaded a new change for review.

Change subject: packaging: setup: using cloud-init to run engine-setup
......................................................................

packaging: setup: using cloud-init to run engine-setup

Using cloud-init to run engine-setup on the engine appliance

Change-Id: I305232fc44a524fd53e2d7fbd819ab5b95d4931c
Signed-off-by: Simone Tiraboschi <[email protected]>
---
M src/ovirt_hosted_engine_setup/constants.py
M src/plugins/ovirt-hosted-engine-setup/vm/cloud_init.py
2 files changed, 76 insertions(+), 5 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-hosted-engine-setup 
refs/changes/46/40546/1

diff --git a/src/ovirt_hosted_engine_setup/constants.py 
b/src/ovirt_hosted_engine_setup/constants.py
index eac86fa..8dffc65 100644
--- a/src/ovirt_hosted_engine_setup/constants.py
+++ b/src/ovirt_hosted_engine_setup/constants.py
@@ -314,6 +314,8 @@
     CLOUD_INIT_GENERATE = 'generate'
     CLOUD_INIT_SKIP = 'skip'
     CLOUD_INIT_EXISTING = 'existing'
+    CLOUD_INIT_APPLIANCEANSWERS = '/root/ovirt-engine-answers'
+    CLOUD_INIT_HEANSWERS = '/root/heanswers.conf'
 
 
 @util.export
@@ -691,9 +693,25 @@
     def CDROM(self):
         return 'OVEHOSTED_VM/vmCDRom'
 
-    GENERATE_CLOUD_INIT_ISO = 'OVEHOSTED_VM/cloudInitISO'
+    @ohostedattrs(
+        answerfile=True,
+    )
+    def GENERATE_CLOUD_INIT_ISO(self):
+        return 'OVEHOSTED_VM/cloudInitISO'
+
     CLOUD_INIT_ROOTPWD = 'OVEHOSTED_VM/cloudinitRootPwd'
-    CLOUD_INIT_INSTANCE_HOSTNAME = 'OVEHOSTED_VM/cloudinitInstanceHostName'
+
+    @ohostedattrs(
+        answerfile=True,
+    )
+    def CLOUD_INIT_INSTANCE_HOSTNAME(self):
+        return 'OVEHOSTED_VM/cloudinitInstanceHostName'
+
+    @ohostedattrs(
+        answerfile=True,
+    )
+    def CLOUD_INIT_EXECUTE_ESETUP(self):
+        return 'OVEHOSTED_VM/cloudinitExecuteEngineSetup'
 
     @ohostedattrs(
         answerfile=True,
diff --git a/src/plugins/ovirt-hosted-engine-setup/vm/cloud_init.py 
b/src/plugins/ovirt-hosted-engine-setup/vm/cloud_init.py
index 99aaa42..a1bd735 100644
--- a/src/plugins/ovirt-hosted-engine-setup/vm/cloud_init.py
+++ b/src/plugins/ovirt-hosted-engine-setup/vm/cloud_init.py
@@ -71,6 +71,10 @@
             ohostedcons.VMEnv.CLOUD_INIT_INSTANCE_HOSTNAME,
             None
         )
+        self.environment.setdefault(
+            ohostedcons.VMEnv.CLOUD_INIT_EXECUTE_ESETUP,
+            None
+        )
 
     @plugin.event(
         stage=plugin.Stages.STAGE_SETUP,
@@ -100,6 +104,7 @@
             self.environment[ohostedcons.VMEnv.GENERATE_CLOUD_INIT_ISO],
             self.environment[ohostedcons.VMEnv.CLOUD_INIT_ROOTPWD],
             self.environment[ohostedcons.VMEnv.CLOUD_INIT_INSTANCE_HOSTNAME],
+            self.environment[ohostedcons.VMEnv.CLOUD_INIT_EXECUTE_ESETUP],
         ]) == set([None])
 
         if interactive:
@@ -164,6 +169,7 @@
                     self.environment[
                         ohostedcons.VMEnv.CLOUD_INIT_INSTANCE_HOSTNAME
                     ] = False
+
                 while self.environment[
                     ohostedcons.VMEnv.CLOUD_INIT_ROOTPWD
                 ] is None:
@@ -197,12 +203,31 @@
                         self.environment[
                             ohostedcons.VMEnv.CLOUD_INIT_ROOTPWD
                         ] = False
+
+                self.environment[
+                    ohostedcons.VMEnv.CLOUD_INIT_EXECUTE_ESETUP
+                ] = self.dialog.queryString(
+                    name='CI_EXECUTE_ESETUP',
+                    note=_(
+                        'Automatically execute '
+                        'engine-setup on the engine appliance on first boot '
+                        '(@VALUES@)[@DEFAULT@]? '
+                    ),
+                    prompt=True,
+                    validValues=(_('Yes'), _('No')),
+                    caseSensitive=False,
+                    default=_('Yes')
+                ) == _('Yes').lower()
+
         if (
             self.environment[
                 ohostedcons.VMEnv.CLOUD_INIT_ROOTPWD
             ] or
             self.environment[
                 ohostedcons.VMEnv.CLOUD_INIT_INSTANCE_HOSTNAME
+            ] or
+            self.environment[
+                ohostedcons.VMEnv.CLOUD_INIT_EXECUTE_ESETUP
             ]
         ):
             self.environment[
@@ -216,12 +241,15 @@
     )
     def _misc(self):
         self._directory_name = tempfile.mkdtemp()
-        user_data = ''
+        user_data = (
+            '#cloud-config'
+            '# vim: syntax=yaml'
+            '#'
+        )
         f_user_data = os.path.join(self._directory_name, 'user-data')
         if self.environment[ohostedcons.VMEnv.CLOUD_INIT_ROOTPWD]:
             # TODO: use salted hashed password
-            user_data = (
-                '#cloud-config\n'
+            user_data += (
                 'ssh_pwauth: True\n'
                 'chpasswd:\n'
                 '  list: |\n'
@@ -232,6 +260,31 @@
                     ohostedcons.VMEnv.CLOUD_INIT_ROOTPWD
                 ],
             )
+
+        if self.environment[ohostedcons.VMEnv.CLOUD_INIT_EXECUTE_ESETUP]:
+            user_data += (
+                'write_files:\n'
+                ' - content: |\n'
+                '     OVESETUP_CONFIG/adminPassword={adminpwd}\n'
+                '     OVESETUP_CONFIG/fqdn={fqdn}\n'
+                '   path: {heanswers}\n'
+                '   owner: root:root\n'
+                '   permissions: \'0640\'\n'
+                'runcmd:\n'
+                ' - [ /usr/bin/engine-setup, --offline, '
+                '--config-append, {applianceanswers},'
+                '--config-append, {heanswers} ]\n'
+            ).format(
+                fqdn=self.environment[
+                    ohostedcons.NetworkEnv.OVIRT_HOSTED_ENGINE_FQDN
+                ],
+                password=self.environment[
+                    ohostedcons.EngineEnv.ADMIN_PASSWORD
+                ],
+                applianceanswers=ohostedcons.Const.CLOUD_INIT_APPLIANCEANSWERS,
+                heanswers=ohostedcons.Const.CLOUD_INIT_HEANSWERS,
+            )
+
         f = open(f_user_data, 'w')
         f.write(user_data)
         f.close()


-- 
To view, visit https://gerrit.ovirt.org/40546
To unsubscribe, visit https://gerrit.ovirt.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I305232fc44a524fd53e2d7fbd819ab5b95d4931c
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-hosted-engine-setup
Gerrit-Branch: master
Gerrit-Owner: Simone Tiraboschi <[email protected]>
_______________________________________________
Engine-patches mailing list
[email protected]
http://lists.ovirt.org/mailman/listinfo/engine-patches

Reply via email to