summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--playbooks/openstack/advanced-configuration.md12
-rw-r--r--roles/openshift_openstack/templates/user_data.j213
2 files changed, 17 insertions, 8 deletions
diff --git a/playbooks/openstack/advanced-configuration.md b/playbooks/openstack/advanced-configuration.md
index 6fbfca3dc..df53f3681 100644
--- a/playbooks/openstack/advanced-configuration.md
+++ b/playbooks/openstack/advanced-configuration.md
@@ -291,15 +291,15 @@ possible, like this `provision_install_custom.yml` example playbook:
The playbook leverages a two existing provider interfaces: `provision.yml` and
`install.yml`. For some cases, like SSH keys configuration and coordinated reboots of
servers, the cloud-init runcmd directive may be a better choice though. User specified
-shell commands for cloud-init need to be lists, for example:
+shell commands for cloud-init need to be either strings or lists, for example:
```
- openshift_openstack_cloud_init_runcmd:
- - ['echo', 'foo']
- - ['reboot']
+ - set -vx
+ - systemctl stop sshd # fences off ansible playbooks as we want to reboot later
+ - ['echo', 'foo', '>', '/tmp/foo']
+ - [ ls, /tmp/foo, '||', true ]
+ - reboot # unfences ansible playbooks to continue after reboot
```
-The commands should not use JSON escaped characters: `> < & '`. So the command
-`['foo', '>', '"bar"', '<', "'baz'", "&"]` is a bad one, while
-`['echo', '"${HOME}"']` is OK.
**Note** To protect Nova servers from recreating when the user-data changes via
`openshift_openstack_cloud_init_runcmd`, the
diff --git a/roles/openshift_openstack/templates/user_data.j2 b/roles/openshift_openstack/templates/user_data.j2
index e130e71c3..352744285 100644
--- a/roles/openshift_openstack/templates/user_data.j2
+++ b/roles/openshift_openstack/templates/user_data.j2
@@ -13,8 +13,17 @@ write_files:
Defaults:openshift !requiretty
{% if openshift_openstack_cloud_init_runcmd %}
-runcmd:
+ - path: /root/ansible_install.sh
+ permissions: '0544'
+ content: |
{% for cmd in openshift_openstack_cloud_init_runcmd %}
- - {{ cmd|map('string')|list|tojson }}
+{% if cmd is string %}
+ {{ cmd }}
+{% elif cmd is iterable %}
+ {{ cmd|join(' ') }}
+{% endif %}
{% endfor %}
+
+runcmd:
+ - /root/ansible_install.sh
{% endif %}