From b3ef443cd3993f7a1c2f13ed6cc6f406da74a98c Mon Sep 17 00:00:00 2001 From: Swapnil Kulkarni Date: Tue, 11 Aug 2015 07:03:47 +0000 Subject: [PATCH] Remove Ansible abstraction for Nova Co-Authored-By: Sam Yaple Change-Id: Iad9fd7010eaf112f169feb54d9a0e97fd693e5f1 Partially-Implements: blueprint remove-abstraction-ansible --- ansible/roles/nova/defaults/main.yml | 59 +++----- ansible/roles/nova/tasks/bootstrap.yml | 73 +++++++--- ansible/roles/nova/tasks/start.yml | 180 +++++++++++++++++-------- 3 files changed, 201 insertions(+), 111 deletions(-) diff --git a/ansible/roles/nova/defaults/main.yml b/ansible/roles/nova/defaults/main.yml index 7dbdc6b591..a800a7605d 100644 --- a/ansible/roles/nova/defaults/main.yml +++ b/ansible/roles/nova/defaults/main.yml @@ -8,54 +8,37 @@ nova_database_name: "nova" nova_database_user: "nova" nova_database_address: "{{ kolla_internal_address }}" -# Do not override "service_*" variables -service_database_name: "{{ nova_database_name }}" -service_database_user: "{{ nova_database_user }}" -service_database_password: "{{ nova_database_password }}" - #################### # Docker #################### -docker_nova_registry: "{{ docker_registry ~ '/' if docker_registry else '' }}" -docker_nova_namespace: "{{ docker_namespace }}" -kolla_nova_base_distro: "{{ kolla_base_distro }}" -kolla_nova_install_type: "{{ kolla_install_type }}" +nova_libvirt_image: "{{ docker_registry ~ '/' if docker_registry else '' }}{{ docker_namespace }}/{{ kolla_base_distro }}-{{ kolla_install_type }}-nova-libvirt" +nova_libvirt_tag: "{{ openstack_release }}" +nova_libvirt_image_full: "{{ nova_libvirt_image }}:{{ nova_libvirt_tag }}" -kolla_nova_libvirt_container_name: "nova-libvirt" -docker_nova_libvirt_image: "{{ docker_nova_registry }}{{ docker_nova_namespace }}/{{ kolla_nova_base_distro }}-{{ kolla_nova_install_type }}-{{ kolla_nova_libvirt_container_name }}" -docker_nova_libvirt_tag: "{{ openstack_release }}" -docker_nova_libvirt_image_full: "{{ docker_nova_libvirt_image }}:{{ docker_nova_libvirt_tag }}" +nova_conductor_image: "{{ docker_registry ~ '/' if docker_registry else '' }}{{ docker_namespace }}/{{ kolla_base_distro }}-{{ kolla_install_type }}-nova-conductor" +nova_conductor_tag: "{{ openstack_release }}" +nova_conductor_image_full: "{{ nova_conductor_image }}:{{ nova_conductor_tag }}" -kolla_nova_api_container_name: "nova-api" -docker_nova_api_image: "{{ docker_nova_registry }}{{ docker_nova_namespace }}/{{ kolla_nova_base_distro }}-{{ kolla_nova_install_type }}-{{ kolla_nova_api_container_name }}" -docker_nova_api_tag: "{{ openstack_release }}" -docker_nova_api_image_full: "{{ docker_nova_api_image }}:{{ docker_nova_api_tag }}" +nova_consoleauth_image: "{{ docker_registry ~ '/' if docker_registry else '' }}{{ docker_namespace }}/{{ kolla_base_distro }}-{{ kolla_install_type }}-nova-consoleauth" +nova_consoleauth_tag: "{{ openstack_release }}" +nova_consoleauth_image_full: "{{ nova_consoleauth_image }}:{{ nova_consoleauth_tag }}" -kolla_nova_conductor_container_name: "nova-conductor" -docker_nova_conductor_image: "{{ docker_nova_registry }}{{ docker_nova_namespace }}/{{ kolla_nova_base_distro }}-{{ kolla_nova_install_type }}-{{ kolla_nova_conductor_container_name }}" -docker_nova_conductor_tag: "{{ openstack_release }}" -docker_nova_conductor_image_full: "{{ docker_nova_conductor_image }}:{{ docker_nova_conductor_tag }}" +nova_novncproxy_image: "{{ docker_registry ~ '/' if docker_registry else '' }}{{ docker_namespace }}/{{ kolla_base_distro }}-{{ kolla_install_type }}-nova-novncproxy" +nova_novncproxy_tag: "{{ openstack_release }}" +nova_novncproxy_image_full: "{{ nova_novncproxy_image }}:{{ nova_novncproxy_tag }}" -kolla_nova_consoleauth_container_name: "nova-consoleauth" -docker_nova_consoleauth_image: "{{ docker_nova_registry }}{{ docker_nova_namespace }}/{{ kolla_nova_base_distro }}-{{ kolla_nova_install_type }}-{{ kolla_nova_consoleauth_container_name }}" -docker_nova_consoleauth_tag: "{{ openstack_release }}" -docker_nova_consoleauth_image_full: "{{ docker_nova_consoleauth_image }}:{{ docker_nova_consoleauth_tag }}" +nova_scheduler_image: "{{ docker_registry ~ '/' if docker_registry else '' }}{{ docker_namespace }}/{{ kolla_base_distro }}-{{ kolla_install_type }}-nova-scheduler" +nova_scheduler_tag: "{{ openstack_release }}" +nova_scheduler_image_full: "{{ nova_scheduler_image }}:{{ nova_scheduler_tag }}" -kolla_nova_novncproxy_container_name: "nova-novncproxy" -docker_nova_novncproxy_image: "{{ docker_nova_registry }}{{ docker_nova_namespace }}/{{ kolla_nova_base_distro }}-{{ kolla_nova_install_type }}-{{ kolla_nova_novncproxy_container_name }}" -docker_nova_novncproxy_tag: "{{ openstack_release }}" -docker_nova_novncproxy_image_full: "{{ docker_nova_novncproxy_image }}:{{ docker_nova_novncproxy_tag }}" +nova_compute_image: "{{ docker_registry ~ '/' if docker_registry else '' }}{{ docker_namespace }}/{{ kolla_base_distro }}-{{ kolla_install_type }}-nova-compute" +nova_compute_tag: "{{ openstack_release }}" +nova_compute_image_full: "{{ nova_compute_image }}:{{ nova_compute_tag }}" -kolla_nova_scheduler_container_name: "nova-scheduler" -docker_nova_scheduler_image: "{{ docker_nova_registry }}{{ docker_nova_namespace }}/{{ kolla_nova_base_distro }}-{{ kolla_nova_install_type }}-{{ kolla_nova_scheduler_container_name }}" -docker_nova_scheduler_tag: "{{ openstack_release }}" -docker_nova_scheduler_image_full: "{{ docker_nova_scheduler_image }}:{{ docker_nova_scheduler_tag }}" - -kolla_nova_compute_container_name: "nova-compute" -docker_nova_compute_image: "{{ docker_nova_registry }}{{ docker_nova_namespace }}/{{ kolla_nova_base_distro }}-{{ kolla_nova_install_type }}-{{ kolla_nova_compute_container_name }}" -docker_nova_compute_tag: "{{ openstack_release }}" -docker_nova_compute_image_full: "{{ docker_nova_compute_image }}:{{ docker_nova_compute_tag }}" +nova_api_image: "{{ docker_registry ~ '/' if docker_registry else '' }}{{ docker_namespace }}/{{ kolla_base_distro }}-{{ kolla_install_type }}-nova-api" +nova_api_tag: "{{ openstack_release }}" +nova_api_image_full: "{{ nova_api_image }}:{{ nova_api_tag }}" #################### diff --git a/ansible/roles/nova/tasks/bootstrap.yml b/ansible/roles/nova/tasks/bootstrap.yml index a42d75bcfa..e0830ccdfb 100644 --- a/ansible/roles/nova/tasks/bootstrap.yml +++ b/ansible/roles/nova/tasks/bootstrap.yml @@ -1,20 +1,61 @@ --- -- include: ../../start.yml - vars: - container_command: "/bin/sleep infinity" - container_image: "{{ docker_nova_api_image_full }}" - container_name: "nova_data" - container_volumes: - - "/var/lib/nova/" +- 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 -- include: ../../bootstrap.yml - vars: - container_detach: False - container_environment: +- 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 + changed_when: "{{ database.stdout.find('localhost | SUCCESS => ') != -1 and (database_user.stdout.split('localhost | SUCCESS => ')[1]|from_json).changed }}" + failed_when: database_user.stdout.split()[2] != 'SUCCESS' + run_once: True + +- name: Starting Nova bootstrap container + docker: + detach: False + docker_api_version: "{{ docker_api_version }}" + 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/:/opt/kolla/nova-api/:ro" + env: KOLLA_BOOTSTRAP: KOLLA_CONFIG_STRATEGY: "{{ config_strategy }}" - container_image: "{{ docker_nova_api_image_full }}" - container_name: "bootstrap_nova" - container_restart_policy: "no" - container_volumes: - - "{{ node_config_directory }}/nova-api/:/opt/kolla/nova-api/:ro" + run_once: True + 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 + when: database.stdout.find('localhost | SUCCESS => ') != -1 and (database.stdout.split('localhost | SUCCESS => ')[1]|from_json).changed + +- name: Cleaning up Nova boostrap container + docker: + name: bootstrap_nova + image: "{{ nova_api_image_full }}" + state: absent + when: database.stdout.find('localhost | SUCCESS => ') != -1 and (database.stdout.split('localhost | SUCCESS => ')[1]|from_json).changed diff --git a/ansible/roles/nova/tasks/start.yml b/ansible/roles/nova/tasks/start.yml index ebe17a16e4..165a2f31d4 100644 --- a/ansible/roles/nova/tasks/start.yml +++ b/ansible/roles/nova/tasks/start.yml @@ -1,81 +1,147 @@ --- -- include: ../../start.yml - vars: - container_environment: - KOLLA_CONFIG_STRATEGY: "{{ config_strategy }}" - container_image: "{{ docker_nova_libvirt_image_full }}" - container_name: "nova_libvirt" - container_privileged: "True" - container_pid: "True" - container_volumes: +- name: Starting Nova-libvirt container + docker: + docker_api_version: "{{ docker_api_version }}" + net: host + pull: "{{ docker_pull_policy }}" + restart_policy: "{{ docker_restart_policy }}" + restart_policy_retry: "{{ docker_restart_policy_retry }}" + state: reloaded + registry: "{{ docker_registry }}" + username: "{{ docker_registry_username }}" + password: "{{ docker_registry_password }}" + insecure_registry: "{{ docker_insecure_registry }}" + privileged: True + pid: host + name: nova_libvirt + image: "{{ nova_libvirt_image_full }}" + volumes: + - "{{ node_config_directory }}/nova-libvirt/:/opt/kolla/nova-libvirt/:ro" - "/run:/run" - - "/lib/modules:/lib/modules:ro" - "/var/lib/nova/instances" + env: + KOLLA_CONFIG_STRATEGY: "{{ config_strategy }}" when: inventory_hostname in groups['compute'] -- include: ../../start.yml - vars: - container_environment: - KOLLA_CONFIG_STRATEGY: "{{ config_strategy }}" - container_image: "{{ docker_nova_api_image_full }}" - container_name: "nova_api" - container_privileged: "True" - container_volumes: +- name: Starting Nova-api container + docker: + docker_api_version: "{{ docker_api_version }}" + net: host + pull: "{{ docker_pull_policy }}" + restart_policy: "{{ docker_restart_policy }}" + restart_policy_retry: "{{ docker_restart_policy_retry }}" + state: reloaded + registry: "{{ docker_registry }}" + username: "{{ docker_registry_username }}" + password: "{{ docker_registry_password }}" + insecure_registry: "{{ docker_insecure_registry }}" + privileged: True + name: nova_api + image: "{{ nova_api_image_full }}" + volumes: - "{{ node_config_directory }}/nova-api/:/opt/kolla/nova-api/:ro" - "/lib/modules:/lib/modules:ro" + env: + KOLLA_CONFIG_STRATEGY: "{{ config_strategy }}" when: inventory_hostname in groups['nova-api'] -- include: ../../start.yml - vars: - container_environment: +- name: Starting Nova-conductor container + docker: + docker_api_version: "{{ docker_api_version }}" + net: host + pull: "{{ docker_pull_policy }}" + restart_policy: "{{ docker_restart_policy }}" + restart_policy_retry: "{{ docker_restart_policy_retry }}" + state: reloaded + registry: "{{ docker_registry }}" + username: "{{ docker_registry_username }}" + password: "{{ docker_registry_password }}" + insecure_registry: "{{ docker_insecure_registry }}" + name: nova_conductor + image: "{{ nova_conductor_image_full }}" + volumes: "{{ node_config_directory }}/nova-conductor/:/opt/kolla/nova-conductor/:ro" + env: KOLLA_CONFIG_STRATEGY: "{{ config_strategy }}" - container_image: "{{ docker_nova_conductor_image_full }}" - container_name: "nova_conductor" - container_volumes: - - "{{ node_config_directory }}/nova-conductor/:/opt/kolla/nova-conductor/:ro" when: inventory_hostname in groups['nova-conductor'] -- include: ../../start.yml - vars: - container_environment: +- name: Starting Nova-consoleauth container + docker: + docker_api_version: "{{ docker_api_version }}" + net: host + pull: "{{ docker_pull_policy }}" + restart_policy: "{{ docker_restart_policy }}" + restart_policy_retry: "{{ docker_restart_policy_retry }}" + state: reloaded + registry: "{{ docker_registry }}" + username: "{{ docker_registry_username }}" + password: "{{ docker_registry_password }}" + insecure_registry: "{{ docker_insecure_registry }}" + name: nova_consoleauth + image: "{{ nova_consoleauth_image_full }}" + volumes: "{{ node_config_directory }}/nova-consoleauth/:/opt/kolla/nova-consoleauth/:ro" + env: KOLLA_CONFIG_STRATEGY: "{{ config_strategy }}" - container_image: "{{ docker_nova_consoleauth_image_full }}" - container_name: "nova_consoleauth" - container_volumes: - - "{{ node_config_directory }}/nova-consoleauth/:/opt/kolla/nova-consoleauth/:ro" when: inventory_hostname in groups['nova-consoleauth'] -- include: ../../start.yml - vars: - container_environment: +- name: Starting Nova-novncproxy container + docker: + docker_api_version: "{{ docker_api_version }}" + net: host + pull: "{{ docker_pull_policy }}" + restart_policy: "{{ docker_restart_policy }}" + restart_policy_retry: "{{ docker_restart_policy_retry }}" + state: reloaded + registry: "{{ docker_registry }}" + username: "{{ docker_registry_username }}" + password: "{{ docker_registry_password }}" + insecure_registry: "{{ docker_insecure_registry }}" + name: nova_novncproxy + image: "{{ nova_novncproxy_image_full }}" + volumes: "{{ node_config_directory }}/nova-novncproxy/:/opt/kolla/nova-novncproxy/:ro" + env: KOLLA_CONFIG_STRATEGY: "{{ config_strategy }}" - container_image: "{{ docker_nova_novncproxy_image_full }}" - container_name: "nova_novncproxy" - container_volumes: - - "{{ node_config_directory }}/nova-novncproxy/:/opt/kolla/nova-novncproxy/:ro" when: inventory_hostname in groups['nova-novncproxy'] -- include: ../../start.yml - vars: - container_environment: +- name: Starting Nova-scheduler container + docker: + docker_api_version: "{{ docker_api_version }}" + net: host + pull: "{{ docker_pull_policy }}" + restart_policy: "{{ docker_restart_policy }}" + restart_policy_retry: "{{ docker_restart_policy_retry }}" + state: reloaded + registry: "{{ docker_registry }}" + username: "{{ docker_registry_username }}" + password: "{{ docker_registry_password }}" + insecure_registry: "{{ docker_insecure_registry }}" + name: nova_scheduler + image: "{{ nova_scheduler_image_full }}" + volumes: "{{ node_config_directory }}/nova-scheduler/:/opt/kolla/nova-scheduler/:ro" + env: KOLLA_CONFIG_STRATEGY: "{{ config_strategy }}" - container_image: "{{ docker_nova_scheduler_image_full }}" - container_name: "nova_scheduler" - container_volumes: - - "{{ node_config_directory }}/nova-scheduler/:/opt/kolla/nova-scheduler/:ro" when: inventory_hostname in groups['nova-scheduler'] -- include: ../../start.yml - vars: - container_environment: - KOLLA_CONFIG_STRATEGY: "{{ config_strategy }}" - container_image: "{{ docker_nova_compute_image_full }}" - container_name: "nova_compute" - container_privileged: "True" - container_volumes: +- name: Starting Nova-compute container + docker: + docker_api_version: "{{ docker_api_version }}" + net: host + pull: "{{ docker_pull_policy }}" + restart_policy: "{{ docker_restart_policy }}" + restart_policy_retry: "{{ docker_restart_policy_retry }}" + state: reloaded + registry: "{{ docker_registry }}" + username: "{{ docker_registry_username }}" + password: "{{ docker_registry_password }}" + insecure_registry: "{{ docker_insecure_registry }}" + privileged: True + name: nova_compute + image: "{{ nova_compute_image_full }}" + volumes: - "{{ node_config_directory }}/nova-compute/:/opt/kolla/nova-compute/:ro" - - "/run:/run" - "/lib/modules:/lib/modules:ro" - container_volumes_from: - - "nova_libvirt" + - "/run:/run" + volumes_from: + - nova_libvirt + env: + KOLLA_CONFIG_STRATEGY: "{{ config_strategy }}" when: inventory_hostname in groups['compute']