-
Hui Kang authored
The bootstrap tasks could be started on any node listed in the site.yml The issue is that all the tasks must run on the same node, and the only node that all the tasks can run on is the 'api' node due to needing to start the bootstrap container which binds in the configs. delegate_to is required to ensure that the proper node gets the task. Co-Authored-By:
Sam Yaple <sam@yaple.net> Change-Id: Ica04ab366777a571a92212ac22c482f1881d4ecd Closes-Bug: #1513598 Related-Bug: #1513439
Hui Kang authoredThe bootstrap tasks could be started on any node listed in the site.yml The issue is that all the tasks must run on the same node, and the only node that all the tasks can run on is the 'api' node due to needing to start the bootstrap container which binds in the configs. delegate_to is required to ensure that the proper node gets the task. Co-Authored-By:
Sam Yaple <sam@yaple.net> Change-Id: Ica04ab366777a571a92212ac22c482f1881d4ecd Closes-Bug: #1513598 Related-Bug: #1513439
bootstrap.yml 2.88 KiB
---
- name: Creating Nova database
command: docker exec -t kolla_ansible /usr/bin/ansible localhost
-m mysql_db
-a "login_host='{{ database_address }}'
login_user='{{ database_user }}'
login_password='{{ database_password }}'
name='{{ nova_database_name }}'"
register: database
changed_when: "{{ database.stdout.find('localhost | SUCCESS => ') != -1 and (database.stdout.split('localhost | SUCCESS => ')[1]|from_json).changed }}"
failed_when: database.stdout.split()[2] != 'SUCCESS'
run_once: True
delegate_to: "{{ groups['nova-api'][0] }}"
- name: Creating Nova database user and setting permissions
command: docker exec -t kolla_ansible /usr/bin/ansible localhost
-m mysql_user
-a "login_host='{{ database_address }}'
login_user='{{ database_user }}'
login_password='{{ database_password }}'
name='{{ nova_database_name }}'
password='{{ nova_database_password }}'
host='%'
priv='{{ nova_database_name }}.*:ALL'
append_privs='yes'"
register: database_user_create
changed_when: "{{ database_user_create.stdout.find('localhost | SUCCESS => ') != -1 and (database_user_create.stdout.split('localhost | SUCCESS => ')[1]|from_json).changed }}"
failed_when: database_user_create.stdout.split()[2] != 'SUCCESS'
run_once: True
delegate_to: "{{ groups['nova-api'][0] }}"
- name: Starting Nova bootstrap container
docker:
tty: True
detach: False
net: host
pull: "{{ docker_pull_policy }}"
restart_policy: "no"
state: reloaded
registry: "{{ docker_registry }}"
username: "{{ docker_registry_username }}"
password: "{{ docker_registry_password }}"
insecure_registry: "{{ docker_insecure_registry }}"
name: bootstrap_nova
image: "{{ nova_api_image_full }}"
volumes: "{{ node_config_directory }}/nova-api/:{{ container_config_directory }}/:ro"
env:
KOLLA_BOOTSTRAP:
KOLLA_CONFIG_STRATEGY: "{{ config_strategy }}"
run_once: True
delegate_to: "{{ groups['nova-api'][0] }}"
when: database.stdout.find('localhost | SUCCESS => ') != -1 and (database.stdout.split('localhost | SUCCESS => ')[1]|from_json).changed
# https://github.com/ansible/ansible-modules-core/pull/1031
- name: Waiting for bootstrap container to exit
command: docker wait bootstrap_nova
register: bootstrap_result
run_once: True
failed_when: bootstrap_result.stdout != "0"
delegate_to: "{{ groups['nova-api'][0] }}"
when: database.stdout.find('localhost | SUCCESS => ') != -1 and (database.stdout.split('localhost | SUCCESS => ')[1]|from_json).changed
- name: Cleaning up Nova bootstrap container
docker:
tty: True
name: bootstrap_nova
image: "{{ nova_api_image_full }}"
state: absent
delegate_to: "{{ groups['nova-api'][0] }}"
when: database.stdout.find('localhost | SUCCESS => ') != -1 and (database.stdout.split('localhost | SUCCESS => ')[1]|from_json).changed