diff options
Diffstat (limited to 'ansible')
165 files changed, 1575 insertions, 243 deletions
diff --git a/ansible/action_plugins/merge_configs.py b/ansible/action_plugins/merge_configs.py index dd4e382db..7218a2ac9 100644 --- a/ansible/action_plugins/merge_configs.py +++ b/ansible/action_plugins/merge_configs.py @@ -49,7 +49,7 @@ class ActionModule(action.ActionBase): if not tmp and len(make_tmp_path_args) == 1: tmp = self._make_tmp_path() if not tmp and len(make_tmp_path_args) == 2: - remote_user = (task_vars.get('ansible_ssh_user') + remote_user = (task_vars.get('ansible_user') or self._play_context.remote_user) tmp = self._make_tmp_path(remote_user) diff --git a/ansible/action_plugins/merge_yaml.py b/ansible/action_plugins/merge_yaml.py index 76410833b..34ba7fb8d 100755 --- a/ansible/action_plugins/merge_yaml.py +++ b/ansible/action_plugins/merge_yaml.py @@ -57,7 +57,7 @@ class ActionModule(action.ActionBase): if not tmp and len(make_tmp_path_args) == 1: tmp = self._make_tmp_path() if not tmp and len(make_tmp_path_args) == 2: - remote_user = (task_vars.get('ansible_ssh_user') + remote_user = (task_vars.get('ansible_user') or self._play_context.remote_user) tmp = self._make_tmp_path(remote_user) # save template args. diff --git a/ansible/group_vars/all.yml b/ansible/group_vars/all.yml index 9cda21a60..24772f765 100644 --- a/ansible/group_vars/all.yml +++ b/ansible/group_vars/all.yml @@ -26,7 +26,7 @@ orchestration_engine: "ANSIBLE" # Valid options are [ COPY_ONCE, COPY_ALWAYS ] config_strategy: "COPY_ALWAYS" -# Valid options are [ centos, fedora, oraclelinux, ubuntu ] +# Valid options are [ centos, oraclelinux, ubuntu ] kolla_base_distro: "centos" # Valid options are [ binary, source ] kolla_install_type: "binary" @@ -200,6 +200,10 @@ etcd_peer_port: "2380" kuryr_port: "23750" +searchlight_api_port: "9393" + +grafana_server_port: "3000" + public_protocol: "{{ 'https' if kolla_enable_tls_external | bool else 'http' }}" internal_protocol: "http" admin_protocol: "http" @@ -276,6 +280,7 @@ enable_neutron_qos: "no" enable_neutron_agent_ha: "no" enable_rally: "no" enable_sahara: "no" +enable_searchlight: "no" enable_senlin: "no" enable_swift: "no" enable_telegraf: "no" @@ -317,6 +322,7 @@ haproxy_user: "openstack" haproxy_enable_external_vip: "{{ 'no' if kolla_external_vip_address == kolla_internal_vip_address else 'yes' }}" kolla_enable_tls_external: "no" kolla_external_fqdn_cert: "{{ node_config_directory }}/certificates/haproxy.pem" +kolla_external_fqdn_cacert: "{{ node_config_directory }}/certificates/haproxy-ca.crt" #################### diff --git a/ansible/inventory/all-in-one b/ansible/inventory/all-in-one index 8d6a009ee..f603b04c0 100644 --- a/ansible/inventory/all-in-one +++ b/ansible/inventory/all-in-one @@ -20,6 +20,9 @@ localhost ansible_connection=local [collectd:children] compute +[baremetal:children] +control + [grafana:children] monitoring @@ -30,7 +33,11 @@ control control [telegraf:children] +compute +control monitoring +network +storage [elasticsearch:children] control @@ -132,6 +139,9 @@ control [rally:children] control +[searchlight:children] +control + # Additional control implemented here. These groups allow you to control which # services run on which hosts at a per-service level. # @@ -236,6 +246,9 @@ manila [manila-share:children] storage +[manila-data:children] +storage + # Swift [swift-proxy-server:children] swift @@ -382,3 +395,10 @@ senlin [senlin-engine:children] senlin + +# Searchlight +[searchlight-api:children] +searchlight + +[searchlight-listener:children] +searchlight diff --git a/ansible/inventory/multinode b/ansible/inventory/multinode index 95d0edc94..6139dae8a 100644 --- a/ansible/inventory/multinode +++ b/ansible/inventory/multinode @@ -7,7 +7,7 @@ control02 control03 # The above can also be specified as follows: -#control[01:03] ansible_ssh_user=kolla +#control[01:03] ansible_user=kolla # The network nodes are where your l3-agent and loadbalancers will run # This can be the same as a host in the control group @@ -51,7 +51,11 @@ monitoring control [telegraf:children] +compute +control monitoring +network +storage [elasticsearch:children] control @@ -150,6 +154,9 @@ control [rally:children] control +[searchlight:children] +control + # Additional control implemented here. These groups allow you to control which # services run on which hosts at a per-service level. # @@ -254,6 +261,9 @@ manila [manila-share:children] storage +[manila-data:children] +storage + # Swift [swift-proxy-server:children] swift @@ -400,3 +410,10 @@ senlin [senlin-engine:children] senlin + +# Searchlight +[searchlight-api:children] +searchlight + +[searchlight-listener:children] +searchlight diff --git a/ansible/prechecks.yml b/ansible/prechecks.yml deleted file mode 100644 index 49903a95b..000000000 --- a/ansible/prechecks.yml +++ /dev/null @@ -1,4 +0,0 @@ ---- -- hosts: all - roles: - - prechecks diff --git a/ansible/roles/aodh/tasks/config.yml b/ansible/roles/aodh/tasks/config.yml index d420bd6c6..90179933a 100644 --- a/ansible/roles/aodh/tasks/config.yml +++ b/ansible/roles/aodh/tasks/config.yml @@ -45,3 +45,14 @@ dest: "{{ node_config_directory }}/{{ item }}/wsgi-aodh.conf" with_items: - "aodh-api" + +- name: Check if policies shall be overwritten + local_action: stat path="{{ node_custom_config }}/aodh/policy.json" + register: aodh_policy + +- name: Copying over existing policy.json + template: + src: "{{ node_custom_config }}/aodh/policy.json" + dest: "{{ node_config_directory }}/aodh/policy.json" + when: + aodh_policy.stat.exists diff --git a/ansible/roles/aodh/tasks/precheck.yml b/ansible/roles/aodh/tasks/precheck.yml new file mode 100644 index 000000000..ed97d539c --- /dev/null +++ b/ansible/roles/aodh/tasks/precheck.yml @@ -0,0 +1 @@ +--- diff --git a/ansible/roles/aodh/tasks/pull.yml b/ansible/roles/aodh/tasks/pull.yml index 20030c261..dae4426a5 100644 --- a/ansible/roles/aodh/tasks/pull.yml +++ b/ansible/roles/aodh/tasks/pull.yml @@ -25,4 +25,4 @@ action: "pull_image" common_options: "{{ docker_common_options }}" image: "{{ aodh_notifier_image_full }}" - when: inventory_hostname in groups['aodh-notifier']
\ No newline at end of file + when: inventory_hostname in groups['aodh-notifier'] diff --git a/ansible/roles/aodh/templates/wsgi-aodh.conf.j2 b/ansible/roles/aodh/templates/wsgi-aodh.conf.j2 index 448820469..e09266198 100644 --- a/ansible/roles/aodh/templates/wsgi-aodh.conf.j2 +++ b/ansible/roles/aodh/templates/wsgi-aodh.conf.j2 @@ -19,7 +19,7 @@ Listen {{ hostvars[inventory_hostname]['ansible_' + api_interface]['ipv4']['addr ServerSignature Off CustomLog "/var/log/kolla/aodh/aodh_wsgi_access.log" combined WSGIApplicationGroup %{GLOBAL} - WSGIDaemonProcess aodh group=aodh processes=2 threads=2 user=aodh python-path={{ python_path }} + WSGIDaemonProcess aodh group=aodh processes={{ openstack_service_workers }} threads=1 user=aodh python-path={{ python_path }} WSGIProcessGroup aodh WSGIScriptAlias / "/var/www/cgi-bin/aodh/app.wsgi" </VirtualHost> diff --git a/ansible/roles/barbican/tasks/config.yml b/ansible/roles/barbican/tasks/config.yml index 38383d544..fab9b3dda 100644 --- a/ansible/roles/barbican/tasks/config.yml +++ b/ansible/roles/barbican/tasks/config.yml @@ -51,3 +51,14 @@ - "barbican-api" - "barbican-keystone-listener" - "barbican-worker" + +- name: Check if policies shall be overwritten + local_action: stat path="{{ node_custom_config }}/barbican/policy.json" + register: barbican_policy + +- name: Copying over existing policy.json + template: + src: "{{ node_custom_config }}/barbican/policy.json" + dest: "{{ node_config_directory }}/barbican/policy.json" + when: + barbican_policy.stat.exists diff --git a/ansible/roles/barbican/tasks/precheck.yml b/ansible/roles/barbican/tasks/precheck.yml new file mode 100644 index 000000000..ed97d539c --- /dev/null +++ b/ansible/roles/barbican/tasks/precheck.yml @@ -0,0 +1 @@ +--- diff --git a/ansible/roles/barbican/templates/barbican.conf.j2 b/ansible/roles/barbican/templates/barbican.conf.j2 index b6e0e14a1..55c6b2210 100644 --- a/ansible/roles/barbican/templates/barbican.conf.j2 +++ b/ansible/roles/barbican/templates/barbican.conf.j2 @@ -10,6 +10,7 @@ backlog = 4096 max_allowed_secret_in_bytes = 10000 max_allowed_request_size_in_bytes = 1000000 +db_auto_create = False sql_connection = mysql://{{ barbican_database_user }}:{{ barbican_database_password }}@{{ barbican_database_address }}/{{ barbican_database_name }} transport_url = rabbit://{% for host in groups['rabbitmq'] %}{{ rabbitmq_user }}:{{ rabbitmq_password }}@{{ hostvars[host]['ansible_' + hostvars[host]['api_interface']]['ipv4']['address'] }}:{{ rabbitmq_port }}{% if not loop.last %},{% endif %}{% endfor %} diff --git a/ansible/roles/baremetal/tasks/install.yml b/ansible/roles/baremetal/tasks/install.yml index 3c9b0f539..f6ee106b1 100644 --- a/ansible/roles/baremetal/tasks/install.yml +++ b/ansible/roles/baremetal/tasks/install.yml @@ -1,16 +1,16 @@ --- -- name: update apt cache +- name: Update apt cache command: apt-get update become: True when: ansible_os_family == 'Debian' -- name: install apt packages +- name: Install apt packages package: name={{item}} state=present become: True with_items: "{{ debian_pkg_install }}" when: ansible_os_family == 'Debian' -- name: install wily kernel +- name: Install wily kernel package: name=linux-generic-lts-wily state=latest register: kernel_updated become: True @@ -18,27 +18,27 @@ - ansible_distribution|lower == "ubuntu" | bool - ansible_distribution_release|lower == "trusty" | bool -- name: set reboot required +- name: Set reboot required set_fact: reboot_required: True when: - kernel_updated is defined - kernel_updated.changed -- name: install deltarpm packages +- name: Install deltarpm packages package: name={{item}} state=installed become: True with_items: - deltarpm when: ansible_os_family == 'RedHat' -- name: install yum packages +- name: Install yum packages package: name={{item}} state=present become: True with_items: "{{ redhat_pkg_install }}" when: ansible_os_family == 'RedHat' -- name: install pip +- name: Install pip easy_install: name=pip become: True @@ -46,13 +46,13 @@ pip: name=docker-py state=latest become: True -- name: remove packages +- name: Remove packages package: name={{item}} state=absent with_items: "{{ ubuntu_pkg_removals }}" become: True when: ansible_distribution|lower == "ubuntu" | bool -- name: remove packages +- name: Remove packages package: name={{item}} state=absent with_items: "{{ redhat_pkg_removals }}" become: True diff --git a/ansible/roles/baremetal/tasks/post-install.yml b/ansible/roles/baremetal/tasks/post-install.yml index 146f4835e..f74577662 100644 --- a/ansible/roles/baremetal/tasks/post-install.yml +++ b/ansible/roles/baremetal/tasks/post-install.yml @@ -8,7 +8,7 @@ when: (ansible_distribution == "Ubuntu" and ansible_distribution_major_version > "14") or (ansible_os_family == "RedHat") or (ansible_distribution == "Debian") -- name: configure docker service +- name: Configure docker service become: True template: src=docker_systemd_service.j2 @@ -16,42 +16,42 @@ when: (ansible_distribution == "Ubuntu" and ansible_distribution_major_version > "14") or (ansible_os_family == "RedHat") or (ansible_distribution == "Debian") -- name: reload docker service file +- name: Reload docker service file become: True command: systemctl daemon-reload when: (ansible_distribution == "Ubuntu" and ansible_distribution_major_version > "14") or (ansible_os_family == "RedHat") or (ansible_distribution == "Debian") -- name: configure docker service +- name: Configure docker service become: True template: src=docker_defaults.j2 dest=/etc/default/docker when: (ansible_distribution == "Ubuntu" and ansible_distribution_major_version < "15") -- name: docker mount shared +- name: Docker mount shared command: mount --make-shared /run become: True when: (ansible_distribution == "Ubuntu" and ansible_distribution_major_version < "15") -- name: get stat of libvirtd apparmor profile +- name: Get stat of libvirtd apparmor profile stat: path=/etc/apparmor.d/usr.sbin.libvirtd register: apparmor_libvirtd_profile when: ansible_distribution == "Ubuntu" -- name: remove apparmor profile for libvirt +- name: Remove apparmor profile for libvirt command: apparmor_parser -R /etc/apparmor.d/usr.sbin.libvirtd become: True when: - ansible_distribution == "Ubuntu" - apparmor_libvirtd_profile.stat.exists == True -- name: create docker group +- name: Create docker group group: name: docker become: True -- name: add kolla user to docker group +- name: Add kolla user to docker group user: name: kolla append: yes @@ -59,25 +59,25 @@ become: True when: create_kolla_user | bool == True -- name: start docker +- name: Start docker service: name: docker state: started become: yes -- name: restart docker +- name: Restart docker service: name: docker state: restarted become: yes -- name: enable docker +- name: Enable docker service: name: docker enabled: yes become: yes -- name: reboot +- name: Reboot command: reboot -f become: yes when: diff --git a/ansible/roles/baremetal/tasks/pre-install.yml b/ansible/roles/baremetal/tasks/pre-install.yml index 43993229a..0ea5e5a18 100644 --- a/ansible/roles/baremetal/tasks/pre-install.yml +++ b/ansible/roles/baremetal/tasks/pre-install.yml @@ -1,26 +1,22 @@ --- # NOTE: raw install is required to support cloud images which do not have python installed -- name: "install python2 and python-simplejson" +- name: "Install python2 and python-simplejson" become: true raw: "yum install -y python python-simplejson || (apt-get update && apt-get install -y python2.7 python-simplejson)" -- name: gather facts +- name: Gather facts setup: -- name: get node hostname - shell: echo $(hostname) - register: node_hostname - -- name: update /etc/hosts with hostname +- name: Ensure localhost in /etc/hosts lineinfile: dest: /etc/hosts - regexp: "127.0.0.1 {{ node_hostname.stdout }} localhost" - line: "127.0.0.1 {{ node_hostname.stdout }} localhost" + regexp: "^127.0.0.1.*" + line: "127.0.0.1 localhost" state: present become: True when: customize_etc_hosts | bool == True -- name: Generate etc/hosts +- name: Generate /etc/hosts for all of the nodes blockinfile: dest: /etc/hosts marker: "# {mark} ANSIBLE GENERATED HOSTS" @@ -28,18 +24,19 @@ {% for host in groups['all'] %} {{ hostvars[host]['ansible_' + hostvars[host]['api_interface']]['ipv4']['address'] }} {{ hostvars[host]['ansible_hostname'] }} {% endfor %} - when: customize_etc_hosts | bool + become: True + when: customize_etc_hosts | bool == True -- name: ensure sudo group is present +- name: Ensure sudo group is present group: name=sudo state=present become: True -- name: ensure kolla group is present +- name: Ensure kolla group is present group: name=kolla state=present become: True when: create_kolla_user | bool == True -- name: create kolla user +- name: Create kolla user user: name: kolla state: present @@ -48,7 +45,7 @@ become: True when: create_kolla_user | bool == True -- name: grant kolla user passwordless sudo +- name: Grant kolla user passwordless sudo lineinfile: dest: /etc/sudoers state: present @@ -57,19 +54,19 @@ become: True when: create_kolla_user | bool == True -- name: add public key to kolla user authorized keys +- name: Add public key to kolla user authorized keys authorized_key: user: kolla key: "{{ kolla_ssh_key.public_key }}" become: True when: create_kolla_user | bool == True -- name: install apt packages +- name: Install apt packages command: apt-get update become: True when: ansible_os_family == 'Debian' -- name: install ubuntu ca certs +- name: Install ubuntu ca certs package: name={{item}} state=latest become: True with_items: @@ -83,14 +80,14 @@ become: True when: ansible_os_family == 'Debian' -- name: enable docker repo apt +- name: Enable docker repo apt template: src: docker_apt_repo.j2 dest: /etc/apt/sources.list.d/docker.list become: True when: ansible_os_family == 'Debian' -- name: install docker apt gpg key +- name: Install docker apt gpg key apt_key: url: "{{ docker_apt_url }}/gpg" id: "{{ docker_apt_key_id }}" @@ -105,14 +102,14 @@ become: True when: ansible_os_family == 'RedHat' -- name: enable docker repo yum +- name: Enable docker repo yum become: True template: src: docker_yum_repo.j2 dest: /etc/yum.repos.d/docker.repo when: ansible_os_family == 'RedHat' -- name: install docker rpm gpg key +- name: Install docker rpm gpg key rpm_key: state: present key: "{{ docker_yum_url }}/gpg" diff --git a/ansible/roles/baremetal/tasks/precheck.yml b/ansible/roles/baremetal/tasks/precheck.yml new file mode 100644 index 000000000..ed97d539c --- /dev/null +++ b/ansible/roles/baremetal/tasks/precheck.yml @@ -0,0 +1 @@ +--- diff --git a/ansible/roles/bifrost/tasks/bootstrap.yml b/ansible/roles/bifrost/tasks/bootstrap.yml index 8332c1d9e..3d505b3c8 100644 --- a/ansible/roles/bifrost/tasks/bootstrap.yml +++ b/ansible/roles/bifrost/tasks/bootstrap.yml @@ -7,7 +7,7 @@ ansible-playbook -vvvv -i /bifrost/playbooks/inventory/localhost /bifrost/playbooks/install.yaml -e @/etc/bifrost/bifrost.yml -e @/etc/bifrost/dib.yml -e skip_package_install=true' -- name: installing ssh keys +- name: Installing ssh keys command: > docker exec bifrost_deploy bash -c 'mkdir /root/.ssh ; mkdir /home/ironic/.ssh; diff --git a/ansible/roles/bifrost/tasks/config.yml b/ansible/roles/bifrost/tasks/config.yml index 5f99372b0..717c4dead 100644 --- a/ansible/roles/bifrost/tasks/config.yml +++ b/ansible/roles/bifrost/tasks/config.yml @@ -19,7 +19,7 @@ - "dib" - "servers" -- name: template ssh keys +- name: Template ssh keys template: src: "{{ item.src }}" dest: "{{ node_config_directory }}/bifrost/{{ item.dest }}" diff --git a/ansible/roles/bifrost/tasks/deploy-servers.yml b/ansible/roles/bifrost/tasks/deploy-servers.yml index 7c99a24b3..e8d98abda 100644 --- a/ansible/roles/bifrost/tasks/deploy-servers.yml +++ b/ansible/roles/bifrost/tasks/deploy-servers.yml @@ -9,7 +9,7 @@ /bifrost/playbooks/enroll-dynamic.yaml -e "ansible_python_interpreter=/var/lib/kolla/venv/bin/python" -e @/etc/bifrost/bifrost.yml' -- name: deploy physical servers with ironic +- name: Deploy physical servers with ironic command: > docker exec bifrost_deploy bash -c 'source /bifrost/env-vars diff --git a/ansible/roles/bifrost/tasks/deploy.yml b/ansible/roles/bifrost/tasks/deploy.yml index 1129e90b8..fe58cc3f7 100644 --- a/ansible/roles/bifrost/tasks/deploy.yml +++ b/ansible/roles/bifrost/tasks/deploy.yml @@ -1,4 +1,6 @@ --- - include: config.yml + - include: start.yml + - include: bootstrap.yml diff --git a/ansible/roles/bifrost/tasks/precheck.yml b/ansible/roles/bifrost/tasks/precheck.yml new file mode 100644 index 000000000..ed97d539c --- /dev/null +++ b/ansible/roles/bifrost/tasks/precheck.yml @@ -0,0 +1 @@ +--- diff --git a/ansible/roles/bifrost/tasks/reconfigure.yml b/ansible/roles/bifrost/tasks/reconfigure.yml index ed97d539c..fdd316fcc 100644 --- a/ansible/roles/bifrost/tasks/reconfigure.yml +++ b/ansible/roles/bifrost/tasks/reconfigure.yml @@ -1 +1,64 @@ --- +- name: Ensuring the containers up + kolla_docker: + name: "{{ item.name }}" + action: "get_container_state" + register: container_state + failed_when: container_state.Running == false + when: inventory_hostname in groups[item.group] + with_items: + - { name: bifrost-deploy, group: bifrost-deploy } + +- include: config.yml + +- name: Check the configs + command: docker exec {{ item.name }} /usr/local/bin/kolla_set_configs --check + changed_when: false + failed_when: false + register: check_results + when: inventory_hostname in groups[item.group] + with_items: + - { name: bifrost-deploy, group: bifrost-deploy } + +# NOTE(jeffrey4l): when config_strategy == 'COPY_ALWAYS' +# and container env['KOLLA_CONFIG_STRATEGY'] == 'COPY_ONCE', +# just remove the container and start again +- name: Containers config strategy + kolla_docker: + name: "{{ item.name }}" + action: "get_container_env" + register: container_envs + when: inventory_hostname in groups[item.group] + with_items: + - { name: bifrost-deploy, group: bifrost-deploy } + +- name: Remove the containers + kolla_docker: + name: "{{ item[0]['name'] }}" + action: "remove_container" + register: remove_containers + when: + - inventory_hostname in groups[item[0]['group']] + - config_strategy == "COPY_ONCE" or item[1]['KOLLA_CONFIG_STRATEGY'] == 'COPY_ONCE' + - item[2]['rc'] == 1 + with_together: + - [{ name: bifrost-deploy, group: bifrost-deploy }] + - "{{ container_envs.results }}" + - "{{ check_results.results }}" + +- include: start.yml + when: remove_containers.changed + +- name: Restart containers + kolla_docker: + name: "{{ item[0]['name'] }}" + action: "restart_container" + when: + - inventory_hostname in groups[item[0]['group']] + - config_strategy == 'COPY_ALWAYS' + - item[1]['KOLLA_CONFIG_STRATEGY'] != 'COPY_ONCE' + - item[2]['rc'] == 1 + with_together: + - [{ name: bifrost-deploy, group: bifrost-deploy }] + - "{{ container_envs.results }}" + - "{{ check_results.results }}" diff --git a/ansible/roles/bifrost/tasks/upgrade.yml b/ansible/roles/bifrost/tasks/upgrade.yml index ed97d539c..1f16915ad 100644 --- a/ansible/roles/bifrost/tasks/upgrade.yml +++ b/ansible/roles/bifrost/tasks/upgrade.yml @@ -1 +1,4 @@ --- +- include: config.yml + +- include: start.yml diff --git a/ansible/roles/ceilometer/defaults/main.yml b/ansible/roles/ceilometer/defaults/main.yml index b914e62d9..e3d015df6 100644 --- a/ansible/roles/ceilometer/defaults/main.yml +++ b/ansible/roles/ceilometer/defaults/main.yml @@ -7,9 +7,10 @@ project_name: "ceilometer" #################### ceilometer_database_name: "ceilometer" ceilometer_database_user: "ceilometer" +ceilometer_database_port: "{{ mondodb_port if ceilometer_database_type == 'mongodb' else database_port }}" -ceilometer_database_mongodb_address: "{% for host in groups['mongodb'] %}{{ hostvars[host]['ansible_' + hostvars[host]['api_interface']]['ipv4']['address'] }}:{{ mongodb_port }}{% if not loop.last %},{% endif %}{% endfor %}" -ceilometer_database_mysql_address: "{{ kolla_internal_fqdn }}:{{ database_port }}" +ceilometer_database_mongodb_address: "{% for host in groups['mongodb'] %}{{ hostvars[host]['ansible_' + hostvars[host]['api_interface']]['ipv4']['address'] }}:{{ ceilometer_database_port }}{% if not loop.last %},{% endif %}{% endfor %}" +ceilometer_database_mysql_address: "{{ kolla_internal_fqdn }}:{{ ceilometer_database_port }}" #################### diff --git a/ansible/roles/ceilometer/tasks/bootstrap.yml b/ansible/roles/ceilometer/tasks/bootstrap.yml index a3253f175..7078709ed 100644 --- a/ansible/roles/ceilometer/tasks/bootstrap.yml +++ b/ansible/roles/ceilometer/tasks/bootstrap.yml @@ -1,37 +1,53 @@ --- - name: Creating Ceilometer MongoDB database - command: docker exec -t mongodb mongo --host {{ ceilometer_database_mongodb_address }} --eval 'db = db.getSiblingDB("{{ ceilometer_database_name }}"); db.addUser({user':' "{{ ceilometer_database_user }}", pwd':' "{{ ceilometer_database_password}}", roles':' [ "readWrite", "dbAdmin" ]})' + command: docker exec -t mongodb mongo --host {{ ceilometer_database_mongodb_address }} --eval 'db = db.getSiblingDB("{{ ceilometer_database_name }}"); db.createUser({user':' "{{ ceilometer_database_user }}", pwd':' "{{ ceilometer_database_password}}", roles':' [ "readWrite", "dbAdmin" ]})' register: mongodb_ceilometer_database run_once: true failed_when: - - "'already' not in database.stdout" - - database.stdout.split()[4] != 'connecting' + - "'already' not in mongodb_ceilometer_database.stdout" + - mongodb_ceilometer_database.stdout.split()[4] != 'connecting' delegate_to: "{{ groups['mongodb'][0] }}" when: - ceilometer_database_type == "mongodb" +- name: Checking Ceilometer mysql database + command: docker exec -t kolla_toolbox /usr/bin/ansible localhost + -m mysql_db + -a "login_host='{{ ceilometer_database_mysql_address }}' + login_port='{{ ceilometer_database_port }}' + login_user='{{ ceilometer_database_user }}' + login_password='{{ ceilometer_database_password }}' + name='{{ ceilometer_database_name }}'" + register: mysql_access + failed_when: False + changed_when: False + run_once: True + when: + - ceilometer_database_type == "mysql" + - name: Creating Ceilometer mysql database command: docker exec -t kolla_toolbox /usr/bin/ansible localhost -m mysql_db -a "login_host='{{ ceilometer_database_mysql_address }}' - login_port='{{ database_port }}' + login_port='{{ ceilometer_database_port }}' login_user='{{ database_user }}' login_password='{{ database_password }}' name='{{ ceilometer_database_name }}'" register: mysql_ceilometer_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' + changed_when: "{{ mysql_ceilometer_database.stdout.find('localhost | SUCCESS => ') != -1 and + (mysql_ceilometer_database.stdout.split('localhost | SUCCESS => ')[1]|from_json).changed }}" + failed_when: mysql_ceilometer_database.stdout.split()[2] != 'SUCCESS' run_once: True delegate_to: "{{ groups['ceilometer-api'][0] }}" when: - ceilometer_database_type == "mysql" + - "'FAILED' in mysql_access.stdout" - name: Creating Ceilometer database user and setting permissions command: docker exec -t kolla_toolbox /usr/bin/ansible localhost -m mysql_user -a "login_host='{{ ceilometer_database_mysql_address }}' - login_port='{{ database_port }}' + login_port='{{ ceilometer_database_port }}' login_user='{{ database_user }}' login_password='{{ database_password }}' name='{{ ceilometer_database_name }}' @@ -47,9 +63,11 @@ delegate_to: "{{ groups['ceilometer-api'][0] }}" when: - ceilometer_database_type == "mysql" + - "'FAILED' in mysql_access.stdout" # TODO(Jeffrey4l): fix idempotent when ceilomter_database_type == "gnocchi" +# NOTE(vbel): bootstrapping of mysql db for ceilometer is idempotent - include: bootstrap_service.yml when: ((ceilometer_database_type == "mongodb" and mongodb_ceilometer_database.changed) - or (ceilometer_database_type == "mysql" and mysql_ceilometer_database.changed) + or ceilometer_database_type == "mysql" or ceilometer_database_type == "gnocchi") diff --git a/ansible/roles/ceilometer/tasks/config.yml b/ansible/roles/ceilometer/tasks/config.yml index 5d9336fec..63c77f38d 100644 --- a/ansible/roles/ceilometer/tasks/config.yml +++ b/ansible/roles/ceilometer/tasks/config.yml @@ -59,3 +59,14 @@ - "event_definitions.yaml" - "event_pipeline.yaml" - "pipeline.yaml" + +- name: Check if policies shall be overwritten + local_action: stat path="{{ node_custom_config }}/ceilometer/policy.json" + register: ceilometer_policy + +- name: Copying over existing policy.json + template: + src: "{{ node_custom_config }}/ceilometer/policy.json" + dest: "{{ node_config_directory }}/ceilometer/policy.json" + when: + ceilometer_policy.stat.exists diff --git a/ansible/roles/ceilometer/tasks/precheck.yml b/ansible/roles/ceilometer/tasks/precheck.yml new file mode 100644 index 000000000..ed97d539c --- /dev/null +++ b/ansible/roles/ceilometer/tasks/precheck.yml @@ -0,0 +1 @@ +--- diff --git a/ansible/roles/ceilometer/templates/ceilometer.conf.j2 b/ansible/roles/ceilometer/templates/ceilometer.conf.j2 index 2bffb57e4..1a4515830 100644 --- a/ansible/roles/ceilometer/templates/ceilometer.conf.j2 +++ b/ansible/roles/ceilometer/templates/ceilometer.conf.j2 @@ -26,7 +26,6 @@ metering_connection = mysql+pymysql://{{ ceilometer_database_user }}:{{ ceilomet {% endif %} [keystone_authtoken] -memcached_servers = {{ kolla_internal_fqdn }}:{{ memcached_port }} auth_uri = {{ internal_protocol }}://{{ kolla_internal_fqdn }}:{{ keystone_public_port }} project_domain_name = Default project_name = service @@ -36,6 +35,11 @@ password = {{ ceilometer_keystone_password }} auth_url = {{ admin_protocol }}://{{ kolla_internal_fqdn }}:{{ keystone_admin_port }} auth_type = password +memcache_security_strategy = ENCRYPT +memcache_secret_key = {{ memcache_secret_key }} +memcached_servers = {% for host in groups['memcached'] %}{{ hostvars[host]['ansible_' + hostvars[host]['api_interface']]['ipv4']['address'] }}:{{ memcached_port }}{% if not loop.last %},{% endif %}{% endfor %} + + [notification] store_events = true diff --git a/ansible/roles/ceilometer/templates/wsgi-ceilometer-api.conf.j2 b/ansible/roles/ceilometer/templates/wsgi-ceilometer-api.conf.j2 index c91167f3e..4adb84bf2 100644 --- a/ansible/roles/ceilometer/templates/wsgi-ceilometer-api.conf.j2 +++ b/ansible/roles/ceilometer/templates/wsgi-ceilometer-api.conf.j2 @@ -7,7 +7,7 @@ Listen {{ api_interface_address }}:{{ ceilometer_api_port }} CustomLog /var/log/kolla/ceilometer/ceilometer-api-access.log combined WSGIScriptReloading On - WSGIDaemonProcess ceilometer-api processes=5 threads=1 user=ceilometer group=ceilometer display-name=%{GROUP} python-path={{ python_path }} + WSGIDaemonProcess ceilometer-api processes={{ openstack_service_workers }} threads=1 user=ceilometer group=ceilometer display-name=%{GROUP} python-path={{ python_path }} WSGIProcessGroup ceilometer-api WSGIScriptAlias / {{ python_path }}/ceilometer/api/app.wsgi diff --git a/ansible/roles/ceph/tasks/precheck.yml b/ansible/roles/ceph/tasks/precheck.yml new file mode 100644 index 000000000..ed97d539c --- /dev/null +++ b/ansible/roles/ceph/tasks/precheck.yml @@ -0,0 +1 @@ +--- diff --git a/ansible/roles/certificates/tasks/precheck.yml b/ansible/roles/certificates/tasks/precheck.yml new file mode 100644 index 000000000..ed97d539c --- /dev/null +++ b/ansible/roles/certificates/tasks/precheck.yml @@ -0,0 +1 @@ +--- diff --git a/ansible/roles/cinder/tasks/config.yml b/ansible/roles/cinder/tasks/config.yml index f40187816..800401615 100644 --- a/ansible/roles/cinder/tasks/config.yml +++ b/ansible/roles/cinder/tasks/config.yml @@ -38,3 +38,14 @@ - "cinder-backup" - "cinder-scheduler" - "cinder-volume" + +- name: Check if policies shall be overwritten + local_action: stat path="{{ node_custom_config }}/cinder/policy.json" + register: cinder_policy + +- name: Copying over existing policy.json + template: + src: "{{ node_custom_config }}/cinder/policy.json" + dest: "{{ node_config_directory }}/cinder/policy.json" + when: + cinder_policy.stat.exists diff --git a/ansible/roles/cinder/tasks/precheck.yml b/ansible/roles/cinder/tasks/precheck.yml new file mode 100644 index 000000000..ed97d539c --- /dev/null +++ b/ansible/roles/cinder/tasks/precheck.yml @@ -0,0 +1 @@ +--- diff --git a/ansible/roles/cloudkitty/tasks/config.yml b/ansible/roles/cloudkitty/tasks/config.yml index 234109eba..ea3d13cbb 100644 --- a/ansible/roles/cloudkitty/tasks/config.yml +++ b/ansible/roles/cloudkitty/tasks/config.yml @@ -32,3 +32,14 @@ with_items: - "cloudkitty-api" - "cloudkitty-processor" + +- name: Check if policies shall be overwritten + local_action: stat path="{{ node_custom_config }}/cloudkitty/policy.json" + register: cloudkitty_policy + +- name: Copying over existing policy.json + template: + src: "{{ node_custom_config }}/cloudkitty/policy.json" + dest: "{{ node_config_directory }}/cloudkitty/policy.json" + when: + cloudkitty_policy.stat.exists diff --git a/ansible/roles/cloudkitty/tasks/precheck.yml b/ansible/roles/cloudkitty/tasks/precheck.yml new file mode 100644 index 000000000..ed97d539c --- /dev/null +++ b/ansible/roles/cloudkitty/tasks/precheck.yml @@ -0,0 +1 @@ +--- diff --git a/ansible/roles/collectd/tasks/precheck.yml b/ansible/roles/collectd/tasks/precheck.yml new file mode 100644 index 000000000..ed97d539c --- /dev/null +++ b/ansible/roles/collectd/tasks/precheck.yml @@ -0,0 +1 @@ +--- diff --git a/ansible/roles/common/tasks/config.yml b/ansible/roles/common/tasks/config.yml index a13fa96d2..6124aa2b3 100644 --- a/ansible/roles/common/tasks/config.yml +++ b/ansible/roles/common/tasks/config.yml @@ -27,9 +27,10 @@ with_items: - { name: "aodh", enabled: "{{ enable_aodh }}" } - { name: "barbican", enabled: "{{ enable_barbican }}"} - - { name: "elasticsearch", enabled: "{{ enable_central_logging }}" } + - { name: "elasticsearch", enabled: "{{ enable_elasticsearch }}" } - { name: "global", enabled: "yes" } - { name: "gnocchi", enabled: "{{ enable_gnocchi }}" } + - { name: "grafana", enabled: "{{ enable_grafana }}" } - { name: "haproxy", enabled: "{{ enable_haproxy }}" } - { name: "horizon", enabled: "{{ enable_horizon }}" } - { name: "keepalived", enabled: "{{ enable_haproxy }}" } @@ -72,11 +73,14 @@ - { name: "ansible", enabled: "yes" } - { name: "aodh", enabled: "{{ enable_aodh }}" } - { name: "barbican", enabled: "{{ enable_barbican }}" } + - { name: "ceilometer", enabled: "{{ enable_ceilometer }}" } - { name: "cinder", enabled: "{{ enable_cinder }}" } - { name: "cloudkitty", enabled: "{{ enable_cloudkitty }}" } + - { name: "elasticsearch", enabled: "{{ enable_elasticsearch }}" } - { name: "glance", enabled: "{{ enable_glance }}" } - { name: "global", enabled: "yes" } - { name: "gnocchi", enabled: "{{ enable_gnocchi }}" } + - { name: "grafana", enabled: "{{ enable_grafana }}" } - { name: "haproxy", enabled: "{{ enable_haproxy }}" } - { name: "heat", enabled: "{{ enable_heat }}" } - { name: "iscsid", enabled: "{{ enable_iscsid }}" } @@ -91,6 +95,7 @@ - { name: "nova", enabled: "{{ enable_nova }}" } - { name: "rabbitmq", enabled: "{{ enable_rabbitmq }}" } - { name: "sahara", enabled: "{{ enable_sahara }}" } + - { name: "searchlight", enabled: "{{ enable_searchlight }}" } - { name: "senlin", enabled: "{{ enable_senlin }}" } - { name: "swift", enabled: "{{ enable_swift }}" } - { name: "watcher", enabled: "{{ enable_watcher }}" } diff --git a/ansible/roles/common/tasks/precheck.yml b/ansible/roles/common/tasks/precheck.yml new file mode 100644 index 000000000..ed97d539c --- /dev/null +++ b/ansible/roles/common/tasks/precheck.yml @@ -0,0 +1 @@ +--- diff --git a/ansible/roles/common/templates/admin-openrc.sh.j2 b/ansible/roles/common/templates/admin-openrc.sh.j2 index 7b5a3939b..ef3890043 100644 --- a/ansible/roles/common/templates/admin-openrc.sh.j2 +++ b/ansible/roles/common/templates/admin-openrc.sh.j2 @@ -6,3 +6,6 @@ export OS_USERNAME=admin export OS_PASSWORD={{ keystone_admin_password }} export OS_AUTH_URL={{ admin_protocol }}://{{ kolla_internal_fqdn }}:{{ keystone_admin_port }}/v3 export OS_IDENTITY_API_VERSION=3 +{% if kolla_enable_tls_external | bool and kolla_external_fqdn_cacert %} +export OS_CACERT={{ kolla_external_fqdn_cacert }} +{% endif %} diff --git a/ansible/roles/common/templates/cron-logrotate-ceilometer.conf.j2 b/ansible/roles/common/templates/cron-logrotate-ceilometer.conf.j2 new file mode 100644 index 000000000..5993500a5 --- /dev/null +++ b/ansible/roles/common/templates/cron-logrotate-ceilometer.conf.j2 @@ -0,0 +1,3 @@ +"/var/log/kolla/ceilometer/*.log" +{ +} diff --git a/ansible/roles/common/templates/cron-logrotate-elasticsearch.conf.j2 b/ansible/roles/common/templates/cron-logrotate-elasticsearch.conf.j2 new file mode 100644 index 000000000..cbdd2c780 --- /dev/null +++ b/ansible/roles/common/templates/cron-logrotate-elasticsearch.conf.j2 @@ -0,0 +1,3 @@ +"/var/log/kolla/elasticsearch/*.log" +{ +} diff --git a/ansible/roles/common/templates/cron-logrotate-grafana.conf.j2 b/ansible/roles/common/templates/cron-logrotate-grafana.conf.j2 new file mode 100644 index 000000000..2a3a0889a --- /dev/null +++ b/ansible/roles/common/templates/cron-logrotate-grafana.conf.j2 @@ -0,0 +1,3 @@ +"/var/log/kolla/grafana/*.log" +{ +} diff --git a/ansible/roles/common/templates/cron-logrotate-searchlight.conf.j2 b/ansible/roles/common/templates/cron-logrotate-searchlight.conf.j2 new file mode 100644 index 000000000..da916664a --- /dev/null +++ b/ansible/roles/common/templates/cron-logrotate-searchlight.conf.j2 @@ -0,0 +1,3 @@ +"/var/log/kolla/searchlight/*.log" +{ +} diff --git a/ansible/roles/common/templates/cron.json.j2 b/ansible/roles/common/templates/cron.json.j2 index e90ab4f9c..8a338195e 100644 --- a/ansible/roles/common/templates/cron.json.j2 +++ b/ansible/roles/common/templates/cron.json.j2 @@ -3,10 +3,13 @@ ( 'ansible', 'yes' ), ( 'aodh', enable_aodh ), ( 'barbican', enable_barbican ), + ( 'ceilometer', enable_ceilometer ), ( 'cinder', enable_cinder ), ( 'cloudkitty', enable_cloudkitty ), + ( 'elasticsearch', enable_elasticsearch ), ( 'glance', enable_glance ), ( 'gnocchi', enable_gnocchi ), + ( 'grafana', enable_grafana ), ( 'haproxy', enable_haproxy ), ( 'heat', enable_heat ), ( 'iscsid', enable_iscsid ), @@ -21,6 +24,7 @@ ( 'nova', enable_nova ), ( 'rabbitmq', enable_rabbitmq ), ( 'sahara', enable_sahara ), + ( 'searchlight', enable_searchlight ), ( 'senlin', enable_senlin ), ( 'swift', enable_swift ) ] %} diff --git a/ansible/roles/common/templates/heka-ceilometer.toml.j2 b/ansible/roles/common/templates/heka-ceilometer.toml.j2 new file mode 100644 index 000000000..cb2cb538e --- /dev/null +++ b/ansible/roles/common/templates/heka-ceilometer.toml.j2 @@ -0,0 +1,13 @@ +[ceilometer_apache_log_decoder] +type = "SandboxDecoder" +filename = "lua_decoders/os_ceilometer_apache_log.lua" + [ceilometer_apache_log_decoder.config] + apache_log_pattern = '%{X-Forwarded-For}i %l %u %t \"%r\" %>s %b %D \"%{Referer}i\" \"%{User-Agent}i\"' + +[ceilometer_apache_logstreamer_input] +type = "LogstreamerInput" +decoder = "ceilometer_apache_log_decoder" +log_directory = "/var/log/kolla" +file_match = 'ceilometer/(?P<Service>ceilometer-api.*)\.log\.?(?P<Seq>\d*)$' +priority = ["^Seq"] +differentiator = ["Service"] diff --git a/ansible/roles/common/templates/heka-grafana.toml.j2 b/ansible/roles/common/templates/heka-grafana.toml.j2 new file mode 100644 index 000000000..7565c083e --- /dev/null +++ b/ansible/roles/common/templates/heka-grafana.toml.j2 @@ -0,0 +1,18 @@ +[grafana_log_decoder] +type = "SandboxDecoder" +filename = "lua_decoders/os_grafana_log.lua" + +[grafana_log_splitter] +type = "RegexSplitter" +delimiter = '\n\n(=[^=]+====)' +delimiter_eol = false +deliver_incomplete_final = true + +[grafana_logstreamer_input] +type = "LogstreamerInput" +decoder = "grafana_log_decoder" +splitter = "grafana_log_splitter" +log_directory = "/var/log/kolla" +file_match = 'grafana/(?P<Service>grafana.*)\.log\.?(?P<Seq>\d*)$' +priority = ["^Seq"] +differentiator = ["Service"] diff --git a/ansible/roles/common/templates/heka-openstack.toml.j2 b/ansible/roles/common/templates/heka-openstack.toml.j2 index 51a1535f4..ef6334dc1 100644 --- a/ansible/roles/common/templates/heka-openstack.toml.j2 +++ b/ansible/roles/common/templates/heka-openstack.toml.j2 @@ -6,6 +6,6 @@ filename = "lua_decoders/os_openstack_log.lua" type = "LogstreamerInput" decoder = "openstack_log_decoder" log_directory = "/var/log/kolla" -file_match = '(?P<Service>cloudkitty|nova|glance|keystone|neutron|ceph|cinder|heat|murano|magnum|mistral|manila|senlin|sahara)/(?P<Program>.*)\.log\.?(?P<Seq>\d*)$' +file_match = '(?P<Service>cloudkitty|nova|glance|keystone|neutron|ceilometer|ceph|cinder|heat|murano|magnum|mistral|manila|searchlight|senlin|sahara)/(?P<Program>.*)\.log\.?(?P<Seq>\d*)$' priority = ["^Seq"] differentiator = ["Service", "_", "Program"] diff --git a/ansible/roles/common/templates/heka.json.j2 b/ansible/roles/common/templates/heka.json.j2 index d94409c77..a49258e4a 100644 --- a/ansible/roles/common/templates/heka.json.j2 +++ b/ansible/roles/common/templates/heka.json.j2 @@ -30,6 +30,13 @@ "optional": {{ (not enable_gnocchi | bool) | string | lower }} }, { + "source": "{{ container_config_directory }}/heka-grafana.toml", + "dest": "/etc/heka/heka-grafana.toml", + "owner": "heka", + "perm": "0600", + "optional": {{ (not enable_grafana | bool) | string | lower }} + }, + { "source": "{{ container_config_directory }}/heka-barbican.toml", "dest": "/etc/heka/heka-barbican.toml", "owner": "heka", diff --git a/ansible/roles/congress/tasks/config.yml b/ansible/roles/congress/tasks/config.yml index 832a2da86..0e9a63135 100644 --- a/ansible/roles/congress/tasks/config.yml +++ b/ansible/roles/congress/tasks/config.yml @@ -35,3 +35,14 @@ - "congress-api" - "congress-policy-engine" - "congress-datasource" + +- name: Check if policies shall be overwritten + local_action: stat path="{{ node_custom_config }}/congress/policy.json" + register: congress_policy + +- name: Copying over existing policy.json + template: + src: "{{ node_custom_config }}/congress/policy.json" + dest: "{{ node_config_directory }}/congress/policy.json" + when: + congress_policy.stat.exists diff --git a/ansible/roles/congress/tasks/precheck.yml b/ansible/roles/congress/tasks/precheck.yml new file mode 100644 index 000000000..ed97d539c --- /dev/null +++ b/ansible/roles/congress/tasks/precheck.yml @@ -0,0 +1 @@ +--- diff --git a/ansible/roles/destroy/tasks/precheck.yml b/ansible/roles/destroy/tasks/precheck.yml new file mode 100644 index 000000000..ed97d539c --- /dev/null +++ b/ansible/roles/destroy/tasks/precheck.yml @@ -0,0 +1 @@ +--- diff --git a/ansible/roles/elasticsearch/tasks/precheck.yml b/ansible/roles/elasticsearch/tasks/precheck.yml new file mode 100644 index 000000000..ed97d539c --- /dev/null +++ b/ansible/roles/elasticsearch/tasks/precheck.yml @@ -0,0 +1 @@ +--- diff --git a/ansible/roles/etcd/tasks/precheck.yml b/ansible/roles/etcd/tasks/precheck.yml new file mode 100644 index 000000000..ed97d539c --- /dev/null +++ b/ansible/roles/etcd/tasks/precheck.yml @@ -0,0 +1 @@ +--- diff --git a/ansible/roles/glance/tasks/config.yml b/ansible/roles/glance/tasks/config.yml index e943f54d7..743815ba8 100644 --- a/ansible/roles/glance/tasks/config.yml +++ b/ansible/roles/glance/tasks/config.yml @@ -28,4 +28,15 @@ - "{{ node_custom_config }}/glance/{{ inventory_hostname }}/{{ item.service }}.conf" dest: "{{ node_config_directory }}/{{ item.service }}/{{ item.service }}.conf" when: inventory_hostname in groups[item.group] - with_items: "{{ glance_service_groups }}"
\ No newline at end of file + with_items: "{{ glance_service_groups }}" + +- name: Check if policies shall be overwritten + local_action: stat path="{{ node_custom_config }}/glance/policy.json" + register: glance_policy + +- name: Copying over existing policy.json + template: + src: "{{ node_custom_config }}/glance/policy.json" + dest: "{{ node_config_directory }}/glance/policy.json" + when: + glance_policy.stat.exists diff --git a/ansible/roles/glance/tasks/precheck.yml b/ansible/roles/glance/tasks/precheck.yml new file mode 100644 index 000000000..ed97d539c --- /dev/null +++ b/ansible/roles/glance/tasks/precheck.yml @@ -0,0 +1 @@ +--- diff --git a/ansible/roles/glance/templates/glance-api.conf.j2 b/ansible/roles/glance/templates/glance-api.conf.j2 index fd01f2b19..9d5373594 100644 --- a/ansible/roles/glance/templates/glance-api.conf.j2 +++ b/ansible/roles/glance/templates/glance-api.conf.j2 @@ -61,7 +61,7 @@ flavor = keystone [glance_store] {% if enable_ceph | bool and glance_backend_ceph | bool %} default_store = rbd -stores = rbd +stores = rbd,http rbd_store_user = glance rbd_store_pool = {{ ceph_glance_pool_name }} rbd_store_chunk_size = 8 diff --git a/ansible/roles/glance/templates/glance-api.json.j2 b/ansible/roles/glance/templates/glance-api.json.j2 index 949817726..2b6caebbd 100644 --- a/ansible/roles/glance/templates/glance-api.json.j2 +++ b/ansible/roles/glance/templates/glance-api.json.j2 @@ -26,6 +26,5 @@ "owner": "glance:glance", "recurse": true } - ] } diff --git a/ansible/roles/gnocchi/tasks/config.yml b/ansible/roles/gnocchi/tasks/config.yml index 2e7a75a8a..b6fa16dd0 100644 --- a/ansible/roles/gnocchi/tasks/config.yml +++ b/ansible/roles/gnocchi/tasks/config.yml @@ -50,3 +50,14 @@ dest: "{{ node_config_directory }}/{{ item }}/wsgi-gnocchi.conf" with_items: - "gnocchi-api" + +- name: Check if policies shall be overwritten + local_action: stat path="{{ node_custom_config }}/gnocchi/policy.json" + register: gnocchi_policy + +- name: Copying over existing policy.json + template: + src: "{{ node_custom_config }}/gnocchi/policy.json" + dest: "{{ node_config_directory }}/gnocchi/policy.json" + when: + gnocchi_policy.stat.exists diff --git a/ansible/roles/gnocchi/tasks/precheck.yml b/ansible/roles/gnocchi/tasks/precheck.yml new file mode 100644 index 000000000..ed97d539c --- /dev/null +++ b/ansible/roles/gnocchi/tasks/precheck.yml @@ -0,0 +1 @@ +--- diff --git a/ansible/roles/gnocchi/templates/wsgi-gnocchi.conf.j2 b/ansible/roles/gnocchi/templates/wsgi-gnocchi.conf.j2 index 5d1317ec0..3257eb237 100644 --- a/ansible/roles/gnocchi/templates/wsgi-gnocchi.conf.j2 +++ b/ansible/roles/gnocchi/templates/wsgi-gnocchi.conf.j2 @@ -6,7 +6,7 @@ Listen {{ hostvars[inventory_hostname]['ansible_' + api_interface]['ipv4']['addr ErrorLog "/var/log/kolla/gnocchi/gnocchi-api-error.log" CustomLog "/var/log/kolla/gnocchi/gnocchi-api-access.log" combined WSGIApplicationGroup %{GLOBAL} - WSGIDaemonProcess gnocchi group=gnocchi processes=5 threads=1 user=gnocchi python-path={{ python_path }} + WSGIDaemonProcess gnocchi group=gnocchi processes={{ openstack_service_workers }} threads=1 user=gnocchi python-path={{ python_path }} WSGIProcessGroup gnocchi WSGIScriptAlias / "{{ python_path }}/gnocchi/rest/app.wsgi" diff --git a/ansible/roles/grafana/tasks/precheck.yml b/ansible/roles/grafana/tasks/precheck.yml new file mode 100644 index 000000000..ed97d539c --- /dev/null +++ b/ansible/roles/grafana/tasks/precheck.yml @@ -0,0 +1 @@ +--- diff --git a/ansible/roles/grafana/templates/grafana.ini.j2 b/ansible/roles/grafana/templates/grafana.ini.j2 index b7f10f638..6128a48d1 100644 --- a/ansible/roles/grafana/templates/grafana.ini.j2 +++ b/ansible/roles/grafana/templates/grafana.ini.j2 @@ -6,7 +6,7 @@ plugins = /var/lib/grafana/plugins [server] protocol = http http_addr = {{ hostvars[inventory_hostname]['ansible_' + api_interface]['ipv4']['address'] }} -http_port = 3000 +http_port = {{ grafana_server_port }} router_logging = true diff --git a/ansible/roles/haproxy/tasks/precheck.yml b/ansible/roles/haproxy/tasks/precheck.yml new file mode 100644 index 000000000..ed97d539c --- /dev/null +++ b/ansible/roles/haproxy/tasks/precheck.yml @@ -0,0 +1 @@ +--- diff --git a/ansible/roles/haproxy/templates/haproxy.cfg.j2 b/ansible/roles/haproxy/templates/haproxy.cfg.j2 index 4746f34ba..89b7997c6 100644 --- a/ansible/roles/haproxy/templates/haproxy.cfg.j2 +++ b/ansible/roles/haproxy/templates/haproxy.cfg.j2 @@ -289,6 +289,26 @@ listen heat_api_cfn_external {% endif %} {% endif %} +{% if enable_grafana | bool %} +listen grafana_server + bind {{ kolla_internal_vip_address }}:{{ grafana_server_port }} + http-request del-header X-Forwarded-Proto + http-request set-header X-Forwarded-Proto https if { ssl_fc } +{% for host in groups['grafana'] %} + server {{ hostvars[host]['ansible_hostname'] }} {{ hostvars[host]['ansible_' + hostvars[host]['api_interface']]['ipv4']['address'] }}:{{ grafana_server_port }} check inter 2000 rise 2 fall 5 +{% endfor %} +{% if haproxy_enable_external_vip | bool %} + +listen grafana_server_external + bind {{ kolla_external_vip_address }}:{{ grafana_server_port }} {{ tls_bind_info }} + http-request del-header X-Forwarded-Proto + http-request set-header X-Forwarded-Proto https if { ssl_fc } +{% for host in groups['grafana'] %} + server {{ hostvars[host]['ansible_hostname'] }} {{ hostvars[host]['ansible_' + hostvars[host]['api_interface']]['ipv4']['address'] }}:{{ grafana_server_port }} check inter 2000 rise 2 fall 5 +{% endfor %} +{% endif %} +{% endif %} + {% if enable_ironic | bool %} listen ironic_api bind {{ kolla_internal_vip_address }}:{{ ironic_api_port }} @@ -417,6 +437,21 @@ listen sahara_api_external {% endif %} {% endif %} +{% if enable_searchlight | bool %} +listen searchlight_api + bind {{ kolla_internal_vip_address }}:{{ searchlight_api_port }} +{% for host in groups['searchlight-api'] %} + server {{ hostvars[host]['ansible_hostname'] }} {{ hostvars[host]['ansible_' + hostvars[host]['api_interface']]['ipv4']['address'] }}:{{ searchlight_api_port }} check inter 2000 rise 2 fall 5 +{% endfor %} +{% if haproxy_enable_external_vip | bool %} + +listen searchlight_api_external + bind {{ kolla_external_vip_address }}:{{ searchlight_api_port }} {{ tls_bind_info }} +{% for host in groups['searchlight-api'] %} + server {{ hostvars[host]['ansible_hostname'] }} {{ hostvars[host]['ansible_' + hostvars[host]['api_interface']]['ipv4']['address'] }}:{{ searchlight_api_port }} check inter 2000 rise 2 fall 5 +{% endfor %} +{% endif %} +{% endif %} {% if enable_ceph | bool and enable_ceph_rgw | bool %} listen radosgw @@ -568,7 +603,7 @@ listen mistral_api_external {% endif %} {% endif %} -# (NOTE): This defaults section deletes forwardfor as recomended by: +# (NOTE): This defaults section deletes forwardfor as recommended by: # https://marc.info/?l=haproxy&m=141684110710132&w=1 defaults diff --git a/ansible/roles/heat/tasks/config.yml b/ansible/roles/heat/tasks/config.yml index 41b9effaf..dca462a50 100644 --- a/ansible/roles/heat/tasks/config.yml +++ b/ansible/roles/heat/tasks/config.yml @@ -42,3 +42,14 @@ - "heat-api" - "heat-api-cfn" - "heat-engine" + +- name: Check if policies shall be overwritten + local_action: stat path="{{ node_custom_config }}/heat/policy.json" + register: heat_policy + +- name: Copying over existing policy.json + template: + src: "{{ node_custom_config }}/heat/policy.json" + dest: "{{ node_config_directory }}/heat/policy.json" + when: + heat_policy.stat.exists diff --git a/ansible/roles/heat/tasks/precheck.yml b/ansible/roles/heat/tasks/precheck.yml new file mode 100644 index 000000000..ed97d539c --- /dev/null +++ b/ansible/roles/heat/tasks/precheck.yml @@ -0,0 +1 @@ +--- diff --git a/ansible/roles/heat/templates/heat.conf.j2 b/ansible/roles/heat/templates/heat.conf.j2 index b2fad08c4..c68e4453f 100644 --- a/ansible/roles/heat/templates/heat.conf.j2 +++ b/ansible/roles/heat/templates/heat.conf.j2 @@ -65,7 +65,7 @@ auth_url = {{ keystone_admin_url }} auth_uri = {{ internal_protocol }}://{{ kolla_internal_fqdn }}:{{ keystone_public_port }} auth_url = {{ admin_protocol }}://{{ kolla_internal_fqdn }}:{{ keystone_admin_port }} {% endif %} -auth_plugin = password +auth_type = password user_domain_id = default username = {{ heat_keystone_user }} password = {{ heat_keystone_password }} diff --git a/ansible/roles/horizon/tasks/precheck.yml b/ansible/roles/horizon/tasks/precheck.yml new file mode 100644 index 000000000..ed97d539c --- /dev/null +++ b/ansible/roles/horizon/tasks/precheck.yml @@ -0,0 +1 @@ +--- diff --git a/ansible/roles/influxdb/tasks/precheck.yml b/ansible/roles/influxdb/tasks/precheck.yml new file mode 100644 index 000000000..ed97d539c --- /dev/null +++ b/ansible/roles/influxdb/tasks/precheck.yml @@ -0,0 +1 @@ +--- diff --git a/ansible/roles/ironic/tasks/config.yml b/ansible/roles/ironic/tasks/config.yml index 89ac3b51c..797b49482 100644 --- a/ansible/roles/ironic/tasks/config.yml +++ b/ansible/roles/ironic/tasks/config.yml @@ -37,3 +37,14 @@ - "ironic-api" - "ironic-conductor" - "ironic-inspector" + +- name: Check if policies shall be overwritten + local_action: stat path="{{ node_custom_config }}/ironic/policy.json" + register: ironic_policy + +- name: Copying over existing policy.json + template: + src: "{{ node_custom_config }}/ironic/policy.json" + dest: "{{ node_config_directory }}/ironic/policy.json" + when: + ironic_policy.stat.exists diff --git a/ansible/roles/ironic/tasks/precheck.yml b/ansible/roles/ironic/tasks/precheck.yml new file mode 100644 index 000000000..ed97d539c --- /dev/null +++ b/ansible/roles/ironic/tasks/precheck.yml @@ -0,0 +1 @@ +--- diff --git a/ansible/roles/ironic/templates/ironic-api.json.j2 b/ansible/roles/ironic/templates/ironic-api.json.j2 index d9b650dd8..bf10f3105 100644 --- a/ansible/roles/ironic/templates/ironic-api.json.j2 +++ b/ansible/roles/ironic/templates/ironic-api.json.j2 @@ -10,7 +10,7 @@ ], "permissions": [ { - "path": "/var/log/kolla/ironic" + "path": "/var/log/kolla/ironic", "owner": "ironic:ironic", "recurse": true } diff --git a/ansible/roles/ironic/templates/ironic-conductor.json.j2 b/ansible/roles/ironic/templates/ironic-conductor.json.j2 index 1118c5d24..46aa5ed6b 100644 --- a/ansible/roles/ironic/templates/ironic-conductor.json.j2 +++ b/ansible/roles/ironic/templates/ironic-conductor.json.j2 @@ -20,7 +20,7 @@ "recurse": true }, { - "path": "/tftpboot" + "path": "/tftpboot", "owner": "ironic:ironic", "recurse": true } diff --git a/ansible/roles/iscsi/tasks/config.yml b/ansible/roles/iscsi/tasks/config.yml index 4393db15f..0ebe3dd74 100644 --- a/ansible/roles/iscsi/tasks/config.yml +++ b/ansible/roles/iscsi/tasks/config.yml @@ -23,7 +23,9 @@ path: "{{ node_config_directory }}/{{ item }}" state: "directory" recurse: yes - when: inventory_hostname in groups['tgtd'] + when: + - inventory_hostname in groups['tgtd'] + - enable_cinder_backend_lvm | bool with_items: - "tgtd" @@ -31,6 +33,8 @@ template: src: "{{ item }}.json.j2" dest: "{{ node_config_directory }}/{{ item }}/config.json" - when: inventory_hostname in groups['tgtd'] + when: + - inventory_hostname in groups['tgtd'] + - enable_cinder_backend_lvm | bool with_items: - "tgtd" diff --git a/ansible/roles/iscsi/tasks/precheck.yml b/ansible/roles/iscsi/tasks/precheck.yml new file mode 100644 index 000000000..ed97d539c --- /dev/null +++ b/ansible/roles/iscsi/tasks/precheck.yml @@ -0,0 +1 @@ +--- diff --git a/ansible/roles/keystone/tasks/config.yml b/ansible/roles/keystone/tasks/config.yml index e39e7d618..e531d6869 100644 --- a/ansible/roles/keystone/tasks/config.yml +++ b/ansible/roles/keystone/tasks/config.yml @@ -1,5 +1,5 @@ --- -- name: Check if Policies shall be overwritten +- name: Check if policies shall be overwritten local_action: stat path="{{ node_custom_config }}/keystone/policy.json" register: keystone_policy diff --git a/ansible/roles/keystone/tasks/init_fernet.yml b/ansible/roles/keystone/tasks/init_fernet.yml index 0d2bb0076..c608202ab 100644 --- a/ansible/roles/keystone/tasks/init_fernet.yml +++ b/ansible/roles/keystone/tasks/init_fernet.yml @@ -12,4 +12,4 @@ - name: Run key distribution command: docker exec -t keystone_fernet /usr/bin/fernet-rotate.sh run_once: True - delegate_to: "{{ groups['keystone'][0] }}"
\ No newline at end of file + delegate_to: "{{ groups['keystone'][0] }}" diff --git a/ansible/roles/keystone/tasks/precheck.yml b/ansible/roles/keystone/tasks/precheck.yml new file mode 100644 index 000000000..ed97d539c --- /dev/null +++ b/ansible/roles/keystone/tasks/precheck.yml @@ -0,0 +1 @@ +--- diff --git a/ansible/roles/keystone/tasks/pull.yml b/ansible/roles/keystone/tasks/pull.yml index 544940070..c9152b148 100644 --- a/ansible/roles/keystone/tasks/pull.yml +++ b/ansible/roles/keystone/tasks/pull.yml @@ -22,4 +22,4 @@ image: "{{ keystone_ssh_image_full }}" when: - inventory_hostname in groups['keystone'] - - keystone_token_provider == 'fernet'
\ No newline at end of file + - keystone_token_provider == 'fernet' diff --git a/ansible/roles/keystone/tasks/reconfigure.yml b/ansible/roles/keystone/tasks/reconfigure.yml index 7cfeded61..6ef22ad9f 100644 --- a/ansible/roles/keystone/tasks/reconfigure.yml +++ b/ansible/roles/keystone/tasks/reconfigure.yml @@ -4,11 +4,15 @@ keystone_items: - { name: keystone, group: keystone } -- name: Add fernet related components to variable if fernet is enabled +- name: Create fernet related components for variable if fernet is enabled set_fact: keystone_fernet_items: - { name: keystone_fernet, group: keystone } - { name: keystone_ssh, group: keystone } + when: keystone_token_provider == 'fernet' + +- name: Merge fernet related components to variable if fernet is enabled + set_fact: keystone_items: "{{ keystone_items + keystone_fernet_items }}" when: keystone_token_provider == 'fernet' diff --git a/ansible/roles/keystone/tasks/start.yml b/ansible/roles/keystone/tasks/start.yml index 0470b3c11..382a0d1e6 100644 --- a/ansible/roles/keystone/tasks/start.yml +++ b/ansible/roles/keystone/tasks/start.yml @@ -46,4 +46,4 @@ - "/etc/localtime:/etc/localtime:ro" - "kolla_logs:/var/log/kolla/" - "keystone_fernet_tokens:/etc/keystone/fernet-keys" - when: keystone_token_provider == 'fernet'
\ No newline at end of file + when: keystone_token_provider == 'fernet' diff --git a/ansible/roles/keystone/templates/wsgi-keystone.conf.j2 b/ansible/roles/keystone/templates/wsgi-keystone.conf.j2 index e1bb125dc..a3f98173a 100644 --- a/ansible/roles/keystone/templates/wsgi-keystone.conf.j2 +++ b/ansible/roles/keystone/templates/wsgi-keystone.conf.j2 @@ -4,7 +4,7 @@ Listen {{ api_interface_address }}:{{ keystone_public_port }} Listen {{ api_interface_address }}:{{ keystone_admin_port }} <VirtualHost *:{{ keystone_public_port }}> - WSGIDaemonProcess keystone-public processes=5 threads=1 user=keystone group=keystone display-name=%{GROUP} python-path={{ python_path }} + WSGIDaemonProcess keystone-public processes={{ openstack_service_workers }} threads=1 user=keystone group=keystone display-name=%{GROUP} python-path={{ python_path }} WSGIProcessGroup keystone-public WSGIScriptAlias / /var/www/cgi-bin/keystone/main WSGIApplicationGroup %{GLOBAL} @@ -18,7 +18,7 @@ Listen {{ api_interface_address }}:{{ keystone_admin_port }} </VirtualHost> <VirtualHost *:{{ keystone_admin_port }}> - WSGIDaemonProcess keystone-admin processes=5 threads=1 user=keystone group=keystone display-name=%{GROUP} python-path={{ python_path }} + WSGIDaemonProcess keystone-admin processes={{ openstack_service_workers }} threads=1 user=keystone group=keystone display-name=%{GROUP} python-path={{ python_path }} WSGIProcessGroup keystone-admin WSGIScriptAlias / /var/www/cgi-bin/keystone/admin WSGIApplicationGroup %{GLOBAL} diff --git a/ansible/roles/kibana/tasks/precheck.yml b/ansible/roles/kibana/tasks/precheck.yml new file mode 100644 index 000000000..ed97d539c --- /dev/null +++ b/ansible/roles/kibana/tasks/precheck.yml @@ -0,0 +1 @@ +--- diff --git a/ansible/roles/kibana/tasks/reconfigure.yml b/ansible/roles/kibana/tasks/reconfigure.yml index ed97d539c..54cfea05d 100644 --- a/ansible/roles/kibana/tasks/reconfigure.yml +++ b/ansible/roles/kibana/tasks/reconfigure.yml @@ -1 +1,64 @@ --- +- name: Ensuring the containers up + kolla_docker: + name: "{{ item.name }}" + action: "get_container_state" + register: container_state + failed_when: container_state.Running == false + when: inventory_hostname in groups[item.group] + with_items: + - { name: kibana, group: kibana } + +- include: config.yml + +- name: Check the configs + command: docker exec {{ item.name }} /usr/local/bin/kolla_set_configs --check + changed_when: false + failed_when: false + register: check_results + when: inventory_hostname in groups[item.group] + with_items: + - { name: kibana, group: kibana } + +# NOTE(jeffrey4l): when config_strategy == 'COPY_ALWAYS' +# and container env['KOLLA_CONFIG_STRATEGY'] == 'COPY_ONCE', +# just remove the container and start again +- name: Containers config strategy + kolla_docker: + name: "{{ item.name }}" + action: "get_container_env" + register: container_envs + when: inventory_hostname in groups[item.group] + with_items: + - { name: kibana, group: kibana } + +- name: Remove the containers + kolla_docker: + name: "{{ item[0]['name'] }}" + action: "remove_container" + register: remove_containers + when: + - config_strategy == "COPY_ONCE" or item[1]['KOLLA_CONFIG_STRATEGY'] == 'COPY_ONCE' + - item[2]['rc'] == 1 + - inventory_hostname in groups[item[0]['group']] + with_together: + - [{ name: kibana, group: kibana }] + - "{{ container_envs.results }}" + - "{{ check_results.results }}" + +- include: start.yml + when: remove_containers.changed + +- name: Restart containers + kolla_docker: + name: "{{ item[0]['name'] }}" + action: "restart_container" + when: + - config_strategy == 'COPY_ALWAYS' + - item[1]['KOLLA_CONFIG_STRATEGY'] != 'COPY_ONCE' + - item[2]['rc'] == 1 + - inventory_hostname in groups[item[0]['group']] + with_together: + - [{ name: kibana, group: kibana }] + - "{{ container_envs.results }}" + - "{{ check_results.results }}" diff --git a/ansible/roles/kibana/templates/kibana.yml.j2 b/ansible/roles/kibana/templates/kibana.yml.j2 index 7d9fcbe14..9d161b0fb 100644 --- a/ansible/roles/kibana/templates/kibana.yml.j2 +++ b/ansible/roles/kibana/templates/kibana.yml.j2 @@ -1,4 +1,5 @@ kibana.defaultAppId: "{{ kibana_default_app_id }}" +logging.dest: /var/log/kolla/kibana/kibana.log server.port: {{ kibana_server_port }} server.host: "{% if orchestration_engine == 'KUBERNETES' %}0.0.0.0{% else %}{{ hostvars[inventory_hostname]['ansible_' + api_interface]['ipv4']['address'] }}{% endif %}" elasticsearch.url: "{{ internal_protocol }}://{% if orchestration_engine == 'KUBERNETES' %}elasticsearch{% else %}{{ hostvars[inventory_hostname]['ansible_' + api_interface]['ipv4']['address'] }}{% endif %}:{{ elasticsearch_port }}" diff --git a/ansible/roles/kuryr/tasks/config.yml b/ansible/roles/kuryr/tasks/config.yml index 8b31c7ab1..001793780 100644 --- a/ansible/roles/kuryr/tasks/config.yml +++ b/ansible/roles/kuryr/tasks/config.yml @@ -23,3 +23,14 @@ template: src: "kuryr.spec.j2" dest: "{{ node_config_directory }}/kuryr/kuryr.spec" + +- name: Check if policies shall be overwritten + local_action: stat path="{{ node_custom_config }}/kuryr/policy.json" + register: kuryr_policy + +- name: Copying over existing policy.json + template: + src: "{{ node_custom_config }}/kuryr/policy.json" + dest: "{{ node_config_directory }}/kuryr/policy.json" + when: + kuryr_policy.stat.exists diff --git a/ansible/roles/kuryr/tasks/precheck.yml b/ansible/roles/kuryr/tasks/precheck.yml new file mode 100644 index 000000000..ed97d539c --- /dev/null +++ b/ansible/roles/kuryr/tasks/precheck.yml @@ -0,0 +1 @@ +--- diff --git a/ansible/roles/magnum/tasks/config.yml b/ansible/roles/magnum/tasks/config.yml index 183b6bb43..5baa4a6ca 100644 --- a/ansible/roles/magnum/tasks/config.yml +++ b/ansible/roles/magnum/tasks/config.yml @@ -32,3 +32,14 @@ with_items: - "magnum-api" - "magnum-conductor" + +- name: Check if policies shall be overwritten + local_action: stat path="{{ node_custom_config }}/magnum/policy.json" + register: magnum_policy + +- name: Copying over existing policy.json + template: + src: "{{ node_custom_config }}/magnum/policy.json" + dest: "{{ node_config_directory }}/magnum/policy.json" + when: + magnum_policy.stat.exists diff --git a/ansible/roles/magnum/tasks/precheck.yml b/ansible/roles/magnum/tasks/precheck.yml new file mode 100644 index 000000000..ed97d539c --- /dev/null +++ b/ansible/roles/magnum/tasks/precheck.yml @@ -0,0 +1 @@ +--- diff --git a/ansible/roles/manila/defaults/main.yml b/ansible/roles/manila/defaults/main.yml index 05d7b833a..2ba966595 100644 --- a/ansible/roles/manila/defaults/main.yml +++ b/ansible/roles/manila/defaults/main.yml @@ -24,6 +24,9 @@ manila_api_image: "{{ docker_registry ~ '/' if docker_registry else '' }}{{ dock manila_api_tag: "{{ openstack_release }}" manila_api_image_full: "{{ manila_api_image }}:{{ manila_api_tag }}" +manila_data_image: "{{ docker_registry ~ '/' if docker_registry else '' }}{{ docker_namespace }}/{{ kolla_base_distro }}-{{ kolla_install_type }}-manila-data" +manila_data_tag: "{{ openstack_release }}" +manila_data_image_full: "{{ manila_data_image }}:{{ manila_data_tag }}" ##################### ## OpenStack diff --git a/ansible/roles/manila/tasks/config.yml b/ansible/roles/manila/tasks/config.yml index 4f83ff55b..5e03b4d47 100644 --- a/ansible/roles/manila/tasks/config.yml +++ b/ansible/roles/manila/tasks/config.yml @@ -6,6 +6,7 @@ recurse: yes with_items: - "manila-api" + - "manila-data" - "manila-scheduler" - "manila-share" @@ -15,6 +16,7 @@ dest: "{{ node_config_directory }}/{{ item }}/config.json" with_items: - "manila-api" + - "manila-data" - "manila-scheduler" - "manila-share" @@ -33,6 +35,7 @@ dest: "{{ node_config_directory }}/{{ item }}/manila.conf" with_items: - "manila-api" + - "manila-data" - "manila-scheduler" - name: Copying over manila-share.conf @@ -52,3 +55,14 @@ dest: "{{ node_config_directory }}/{{ item }}/manila.conf" with_items: - "manila-share" + +- name: Check if policies shall be overwritten + local_action: stat path="{{ node_custom_config }}/manila/policy.json" + register: manila_policy + +- name: Copying over existing policy.json + template: + src: "{{ node_custom_config }}/manila/policy.json" + dest: "{{ node_config_directory }}/manila/policy.json" + when: + manila_policy.stat.exists diff --git a/ansible/roles/manila/tasks/deploy.yml b/ansible/roles/manila/tasks/deploy.yml index c4e32b6e4..37135a409 100644 --- a/ansible/roles/manila/tasks/deploy.yml +++ b/ansible/roles/manila/tasks/deploy.yml @@ -4,6 +4,7 @@ - include: config.yml when: inventory_hostname in groups['manila-api'] or + inventory_hostname in groups['manila-data'] or inventory_hostname in groups['manila-share'] or inventory_hostname in groups['manila-scheduler'] @@ -12,5 +13,6 @@ - include: start.yml when: inventory_hostname in groups['manila-api'] or + inventory_hostname in groups['manila-data'] or inventory_hostname in groups['manila-share'] or inventory_hostname in groups['manila-scheduler'] diff --git a/ansible/roles/manila/tasks/precheck.yml b/ansible/roles/manila/tasks/precheck.yml new file mode 100644 index 000000000..ed97d539c --- /dev/null +++ b/ansible/roles/manila/tasks/precheck.yml @@ -0,0 +1 @@ +--- diff --git a/ansible/roles/manila/tasks/pull.yml b/ansible/roles/manila/tasks/pull.yml index 608646f69..520e29c08 100644 --- a/ansible/roles/manila/tasks/pull.yml +++ b/ansible/roles/manila/tasks/pull.yml @@ -19,3 +19,10 @@ common_options: "{{ docker_common_options }}" image: "{{ manila_share_image_full }}" when: inventory_hostname in groups['manila-share'] + +- name: Pulling manila-data image + kolla_docker: + action: "pull_image" + common_options: "{{ docker_common_options }}" + image: "{{ manila_data_image_full }}" + when: inventory_hostname in groups['manila-data'] diff --git a/ansible/roles/manila/tasks/reconfigure.yml b/ansible/roles/manila/tasks/reconfigure.yml index 3c265fb0d..90ab18104 100644 --- a/ansible/roles/manila/tasks/reconfigure.yml +++ b/ansible/roles/manila/tasks/reconfigure.yml @@ -8,6 +8,7 @@ when: inventory_hostname in groups[item.group] with_items: - { name: manila_api, group: manila-api } + - { name: manila_data, group: manila-data } - { name: manila_scheduler, group: manila-scheduler } - { name: manila_share, group: manila-share } @@ -21,6 +22,7 @@ when: inventory_hostname in groups[item.group] with_items: - { name: manila_api, group: manila-api } + - { name: manila_data, group: manila-data } - { name: manila_scheduler, group: manila-scheduler } - { name: manila_share, group: manila-share } @@ -35,6 +37,7 @@ when: inventory_hostname in groups[item.group] with_items: - { name: manila_api, group: manila-api } + - { name: manila_data, group: manila-data } - { name: manila_scheduler, group: manila-scheduler } - { name: manila_share, group: manila-share } @@ -49,6 +52,7 @@ - item[2]['rc'] == 1 with_together: - [{ name: manila_api, group: manila-api }, + { name: manila_data, group: manila-data }, { name: manila_scheduler, group: manila-scheduler }, { name: manila_share, group: manila-share }] - "{{ container_envs.results }}" @@ -68,6 +72,7 @@ - item[2]['rc'] == 1 with_together: - [{ name: manila_api, group: manila-api }, + { name: manila_data, group: manila-data }, { name: manila_scheduler, group: manila-scheduler }, { name: manila_share, group: manila-share }] - "{{ container_envs.results }}" diff --git a/ansible/roles/manila/tasks/start.yml b/ansible/roles/manila/tasks/start.yml index 7adaff712..103b9f506 100644 --- a/ansible/roles/manila/tasks/start.yml +++ b/ansible/roles/manila/tasks/start.yml @@ -36,3 +36,17 @@ - "/run/:/run/:shared" - "kolla_logs:/var/log/kolla/" when: inventory_hostname in groups['manila-share'] + +- name: Starting manila-data container + kolla_docker: + action: "start_container" + common_options: "{{ docker_common_options }}" + name: "manila_data" + image: "{{ manila_data_image_full }}" + privileged: True + volumes: + - "{{ node_config_directory }}/manila-data/:{{ container_config_directory }}/:ro" + - "/etc/localtime:/etc/localtime:ro" + - "/run/:/run/:shared" + - "kolla_logs:/var/log/kolla/" + when: inventory_hostname in groups['manila-data'] diff --git a/ansible/roles/manila/templates/manila-data.json.j2 b/ansible/roles/manila/templates/manila-data.json.j2 new file mode 100644 index 000000000..b5a8ce2bb --- /dev/null +++ b/ansible/roles/manila/templates/manila-data.json.j2 @@ -0,0 +1,18 @@ +{ + "command": "manila-data --config-file /etc/manila/manila.conf", + "config_files": [ + { + "source": "{{ container_config_directory }}/manila.conf", + "dest": "/etc/manila/manila.conf", + "owner": "manila", + "perm": "0600" + } + ], + "permissions": [ + { + "path": "/var/log/kolla/manila", + "owner": "manila:manila", + "recurse": true + } + ] +} diff --git a/ansible/roles/manila/templates/manila-share.conf.j2 b/ansible/roles/manila/templates/manila-share.conf.j2 index 69322cfbf..cd15fd10e 100644 --- a/ansible/roles/manila/templates/manila-share.conf.j2 +++ b/ansible/roles/manila/templates/manila-share.conf.j2 @@ -15,6 +15,9 @@ region_name = {{ openstack_region_name }} project_name = service username = cinder password = {{ cinder_keystone_password }} + +memcache_security_strategy = ENCRYPT +memcache_secret_key = {{ memcache_secret_key }} memcached_servers = {% for host in groups['memcached'] %}{{ hostvars[host]['ansible_' + hostvars[host]['api_interface']]['ipv4']['address'] }}:{{ memcached_port }}{% if not loop.last %},{% endif %}{% endfor %} [nova] @@ -27,6 +30,9 @@ region_name = {{ openstack_region_name }} project_name = service username = {{ nova_keystone_user }} password = {{ nova_keystone_password }} + +memcache_security_strategy = ENCRYPT +memcache_secret_key = {{ memcache_secret_key }} memcached_servers = {% for host in groups['memcached'] %}{{ hostvars[host]['ansible_' + hostvars[host]['api_interface']]['ipv4']['address'] }}:{{ memcached_port }}{% if not loop.last %},{% endif %}{% endfor %} [neutron] @@ -40,6 +46,9 @@ region_name = {{ openstack_region_name }} project_name = service username = {{ neutron_keystone_user }} password = {{ neutron_keystone_password }} + +memcache_security_strategy = ENCRYPT +memcache_secret_key = {{ memcache_secret_key }} memcached_servers = {% for host in groups['memcached'] %}{{ hostvars[host]['ansible_' + hostvars[host]['api_interface']]['ipv4']['address'] }}:{{ memcached_port }}{% if not loop.last %},{% endif %}{% endfor %} {% if enable_manila_backend_generic | bool %} diff --git a/ansible/roles/manila/templates/manila.conf.j2 b/ansible/roles/manila/templates/manila.conf.j2 index 2c286558d..08f518e09 100644 --- a/ansible/roles/manila/templates/manila.conf.j2 +++ b/ansible/roles/manila/templates/manila.conf.j2 @@ -30,7 +30,7 @@ max_retries = -1 signing_dir = /var/cache/manila auth_uri = {{ internal_protocol }}://{{ kolla_internal_fqdn }}:{{ keystone_public_port }} auth_url = {{ admin_protocol }}://{{ kolla_internal_fqdn }}:{{ keystone_admin_port }} -auth_plugin = password +auth_type = password project_domain_id = default user_domain_id = default project_name = service diff --git a/ansible/roles/mariadb/tasks/do_upgrade.yml b/ansible/roles/mariadb/tasks/do_upgrade.yml deleted file mode 100644 index 3f395feec..000000000 --- a/ansible/roles/mariadb/tasks/do_upgrade.yml +++ /dev/null @@ -1,4 +0,0 @@ ---- -- include: start.yml - -- include: register.yml diff --git a/ansible/roles/mariadb/tasks/precheck.yml b/ansible/roles/mariadb/tasks/precheck.yml new file mode 100644 index 000000000..ed97d539c --- /dev/null +++ b/ansible/roles/mariadb/tasks/precheck.yml @@ -0,0 +1 @@ +--- diff --git a/ansible/roles/mariadb/tasks/upgrade.yml b/ansible/roles/mariadb/tasks/upgrade.yml index 1a2825230..fafc44ff3 100644 --- a/ansible/roles/mariadb/tasks/upgrade.yml +++ b/ansible/roles/mariadb/tasks/upgrade.yml @@ -3,6 +3,6 @@ - include: lookup_cluster.yml -- include: do_upgrade.yml +- include: start.yml - include: check.yml diff --git a/ansible/roles/mariadb/templates/galera.cnf.j2 b/ansible/roles/mariadb/templates/galera.cnf.j2 index 3d7eb938e..d74c74f29 100644 --- a/ansible/roles/mariadb/templates/galera.cnf.j2 +++ b/ansible/roles/mariadb/templates/galera.cnf.j2 @@ -43,5 +43,15 @@ wsrep_notify_cmd=/usr/local/bin/wsrep-notify.sh max_connections=10000 +key_buffer_size = '64M' +max_heap_table_size = '64M' +tmp_table_size = '64M' +{% set dynamic_pool_size_mb = (hostvars[inventory_hostname]['ansible_memtotal_mb'] * 0.4) | round | int %} +{% if dynamic_pool_size_mb < 8192 %} +innodb_buffer_pool_size = '{{ dynamic_pool_size_mb }}M' +{% else %} +innodb_buffer_pool_size = '8192M' +{% endif %} + [server] pid-file=/var/lib/mysql/mariadb.pid diff --git a/ansible/roles/memcached/defaults/main.yml b/ansible/roles/memcached/defaults/main.yml index 9c219d4fb..8377b77d4 100644 --- a/ansible/roles/memcached/defaults/main.yml +++ b/ansible/roles/memcached/defaults/main.yml @@ -7,3 +7,8 @@ project_name: "memcached" memcached_image: "{{ docker_registry ~ '/' if docker_registry else '' }}{{ docker_namespace }}/{{ kolla_base_distro }}-{{ kolla_install_type }}-memcached" memcached_tag: "{{ openstack_release }}" memcached_image_full: "{{ memcached_image }}:{{ memcached_tag }}" + +#################### +# Memcached options +#################### +memcached_connection_limit: "5000" diff --git a/ansible/roles/memcached/tasks/precheck.yml b/ansible/roles/memcached/tasks/precheck.yml new file mode 100644 index 000000000..ed97d539c --- /dev/null +++ b/ansible/roles/memcached/tasks/precheck.yml @@ -0,0 +1 @@ +--- diff --git a/ansible/roles/memcached/templates/memcached.json.j2 b/ansible/roles/memcached/templates/memcached.json.j2 index fc59fd01c..dcad615a6 100644 --- a/ansible/roles/memcached/templates/memcached.json.j2 +++ b/ansible/roles/memcached/templates/memcached.json.j2 @@ -1,4 +1,4 @@ { - "command": "/usr/bin/memcached -vv -l {{ api_interface_address }} -p {{ memcached_port }}", + "command": "/usr/bin/memcached -vv -l {{ api_interface_address }} -p {{ memcached_port }} -c {{ memcached_connection_limit }}", "config_files": [] } diff --git a/ansible/roles/mistral/tasks/config.yml b/ansible/roles/mistral/tasks/config.yml index 8c6d0d616..723074eac 100644 --- a/ansible/roles/mistral/tasks/config.yml +++ b/ansible/roles/mistral/tasks/config.yml @@ -35,3 +35,14 @@ - "mistral-api" - "mistral-engine" - "mistral-executor" + +- name: Check if policies shall be overwritten + local_action: stat path="{{ node_custom_config }}/mistral/policy.json" + register: mistral_policy + +- name: Copying over existing policy.json + template: + src: "{{ node_custom_config }}/mistral/policy.json" + dest: "{{ node_config_directory }}/mistral/policy.json" + when: + mistral_policy.stat.exists diff --git a/ansible/roles/mistral/tasks/precheck.yml b/ansible/roles/mistral/tasks/precheck.yml new file mode 100644 index 000000000..ed97d539c --- /dev/null +++ b/ansible/roles/mistral/tasks/precheck.yml @@ -0,0 +1 @@ +--- diff --git a/ansible/roles/mongodb/tasks/precheck.yml b/ansible/roles/mongodb/tasks/precheck.yml new file mode 100644 index 000000000..ed97d539c --- /dev/null +++ b/ansible/roles/mongodb/tasks/precheck.yml @@ -0,0 +1 @@ +--- diff --git a/ansible/roles/mongodb/tasks/upgrade.yml b/ansible/roles/mongodb/tasks/upgrade.yml index ed97d539c..1f16915ad 100644 --- a/ansible/roles/mongodb/tasks/upgrade.yml +++ b/ansible/roles/mongodb/tasks/upgrade.yml @@ -1 +1,4 @@ --- +- include: config.yml + +- include: start.yml diff --git a/ansible/roles/multipathd/tasks/precheck.yml b/ansible/roles/multipathd/tasks/precheck.yml new file mode 100644 index 000000000..ed97d539c --- /dev/null +++ b/ansible/roles/multipathd/tasks/precheck.yml @@ -0,0 +1 @@ +--- diff --git a/ansible/roles/murano/tasks/config.yml b/ansible/roles/murano/tasks/config.yml index a544a4a08..779c277d5 100644 --- a/ansible/roles/murano/tasks/config.yml +++ b/ansible/roles/murano/tasks/config.yml @@ -32,3 +32,14 @@ with_items: - "murano-api" - "murano-engine" + +- name: Check if policies shall be overwritten + local_action: stat path="{{ node_custom_config }}/murano/policy.json" + register: murano_policy + +- name: Copying over existing policy.json + template: + src: "{{ node_custom_config }}/murano/policy.json" + dest: "{{ node_config_directory }}/murano/policy.json" + when: + murano_policy.stat.exists diff --git a/ansible/roles/murano/tasks/precheck.yml b/ansible/roles/murano/tasks/precheck.yml new file mode 100644 index 000000000..ed97d539c --- /dev/null +++ b/ansible/roles/murano/tasks/precheck.yml @@ -0,0 +1 @@ +--- diff --git a/ansible/roles/murano/tasks/start.yml b/ansible/roles/murano/tasks/start.yml index 5d8282f12..a4311b105 100644 --- a/ansible/roles/murano/tasks/start.yml +++ b/ansible/roles/murano/tasks/start.yml @@ -23,9 +23,9 @@ - "kolla_logs:/var/log/kolla/" when: inventory_hostname in groups['murano-api'] -- name: Waiting for Murano API service to be ready +- name: Waiting for Murano API service to be ready on first node wait_for: - host: "{{ hostvars[inventory_hostname]['ansible_' + api_interface]['ipv4']['address'] }}" + host: "{{ api_interface_address }}" port: "{{ murano_api_port }}" connect_timeout: 1 timeout: 60 @@ -34,7 +34,7 @@ until: check_murano_port | success retries: 10 delay: 6 - when: inventory_hostname in groups['murano-api'] + delegate_to: "{{ groups['murano-api'][0] }}" - name: Checking if Murano core library package exists command: "docker exec murano_api murano \ @@ -43,11 +43,13 @@ --os-project-name admin \ --os-auth-url \ {{ admin_protocol }}://{{ kolla_internal_fqdn }}:{{ keystone_admin_port }}/v3 \ + --murano-url \ + {{ admin_protocol }}://{{ api_interface_address }}:{{ murano_api_port }} \ package-list" register: status changed_when: False run_once: True - when: inventory_hostname in groups['murano-api'] + delegate_to: "{{ groups['murano-api'][0] }}" - name: Importing Murano core library package command: "docker exec murano_api murano \ @@ -56,8 +58,10 @@ --os-project-name admin \ --os-auth-url \ {{ admin_protocol }}://{{ kolla_internal_fqdn }}:{{ keystone_admin_port }}/v3 \ + --murano-url \ + {{ admin_protocol }}://{{ api_interface_address }}:{{ murano_api_port }} \ package-import --is-public /io.murano.zip" run_once: True + delegate_to: "{{ groups['murano-api'][0] }}" when: - - inventory_hostname in groups['murano-api'] - status.stdout.find("io.murano") == -1 diff --git a/ansible/roles/murano/templates/murano-api.json.j2 b/ansible/roles/murano/templates/murano-api.json.j2 index 38a81f544..07a6b8693 100644 --- a/ansible/roles/murano/templates/murano-api.json.j2 +++ b/ansible/roles/murano/templates/murano-api.json.j2 @@ -5,7 +5,7 @@ "source": "{{ container_config_directory }}/murano.conf", "dest": "/etc/murano/murano.conf", "owner": "murano", - "perm": "0644" + "perm": "0600" } ], "permissions": [ diff --git a/ansible/roles/murano/templates/murano-engine.json.j2 b/ansible/roles/murano/templates/murano-engine.json.j2 index 2c25cd0f4..98a328e72 100644 --- a/ansible/roles/murano/templates/murano-engine.json.j2 +++ b/ansible/roles/murano/templates/murano-engine.json.j2 @@ -5,7 +5,7 @@ "source": "{{ container_config_directory }}/murano.conf", "dest": "/etc/murano/murano.conf", "owner": "murano", - "perm": "0644" + "perm": "0600" } ], "permissions": [ diff --git a/ansible/roles/murano/templates/murano.conf.j2 b/ansible/roles/murano/templates/murano.conf.j2 index 7b0cfd408..5e95df866 100644 --- a/ansible/roles/murano/templates/murano.conf.j2 +++ b/ansible/roles/murano/templates/murano.conf.j2 @@ -11,7 +11,7 @@ bind_port = {{ murano_api_port }} transport_url = rabbit://{% for host in groups['rabbitmq'] %}{{ rabbitmq_user }}:{{ rabbitmq_password }}@{{ hostvars[host]['ansible_' + hostvars[host]['api_interface']]['ipv4']['address'] }}:{{ rabbitmq_port }}{% if not loop.last %},{% endif %}{% endfor %} [engine] -workers = {{ openstack_service_workers }} +engine_workers = {{ openstack_service_workers }} [database] connection = mysql+pymysql://{{ murano_database_user }}:{{ murano_database_password }}@{{ murano_database_address }}/{{ murano_database_name }} @@ -36,6 +36,7 @@ memcached_servers = {% for host in groups['memcached'] %}{{ hostvars[host]['ansi [murano] url = {{ internal_protocol }}://{{ kolla_internal_fqdn }}:{{ murano_api_port }} +api_workers = {{ openstack_service_workers }} [oslo_messaging_notifications] diff --git a/ansible/roles/neutron/tasks/config.yml b/ansible/roles/neutron/tasks/config.yml index 1c7d0238b..82921cd96 100644 --- a/ansible/roles/neutron/tasks/config.yml +++ b/ansible/roles/neutron/tasks/config.yml @@ -183,3 +183,14 @@ dest: "{{ node_config_directory }}/{{ item }}/vpnaas_agent.ini" with_items: - "neutron-vpnaas-agent" + +- name: Check if policies shall be overwritten + local_action: stat path="{{ node_custom_config }}/neutron/policy.json" + register: neutron_policy + +- name: Copying over existing policy.json + template: + src: "{{ node_custom_config }}/neutron/policy.json" + dest: "{{ node_config_directory }}/neutron/policy.json" + when: + neutron_policy.stat.exists diff --git a/ansible/roles/neutron/tasks/precheck.yml b/ansible/roles/neutron/tasks/precheck.yml new file mode 100644 index 000000000..ed97d539c --- /dev/null +++ b/ansible/roles/neutron/tasks/precheck.yml @@ -0,0 +1 @@ +--- diff --git a/ansible/roles/neutron/templates/l3_agent.ini.j2 b/ansible/roles/neutron/templates/l3_agent.ini.j2 index c869fbc77..7b513d4eb 100644 --- a/ansible/roles/neutron/templates/l3_agent.ini.j2 +++ b/ansible/roles/neutron/templates/l3_agent.ini.j2 @@ -9,4 +9,3 @@ agent_mode = dvr {% else %} agent_mode = legacy {% endif %} -external_network_bridge = diff --git a/ansible/roles/nova/defaults/main.yml b/ansible/roles/nova/defaults/main.yml index 2d80abf33..bf24c02f7 100644 --- a/ansible/roles/nova/defaults/main.yml +++ b/ansible/roles/nova/defaults/main.yml @@ -13,6 +13,10 @@ nova_pool_name: "{{ ceph_nova_pool_name }}" nova_pool_type: "{{ ceph_nova_pool_type }}" nova_cache_mode: "{{ ceph_nova_cache_mode }}" +# Discard option for nova managed disks. Requires libvirt (1, 0, 6) or later and +# qemu (1, 6, 0) or later. Set to "" to disable. +nova_hw_disk_discard: "unmap" + #################### # Database diff --git a/ansible/roles/nova/tasks/config.yml b/ansible/roles/nova/tasks/config.yml index 884163570..b8750b930 100644 --- a/ansible/roles/nova/tasks/config.yml +++ b/ansible/roles/nova/tasks/config.yml @@ -83,3 +83,14 @@ - { src: "id_rsa", dest: "id_rsa" } - { src: "id_rsa.pub", dest: "id_rsa.pub" } - { src: "ssh_config.j2", dest: "ssh_config" } + +- name: Check if policies shall be overwritten + local_action: stat path="{{ node_custom_config }}/nova/policy.json" + register: nova_policy + +- name: Copying over existing policy.json + template: + src: "{{ node_custom_config }}/nova/policy.json" + dest: "{{ node_config_directory }}/nova/policy.json" + when: + nova_policy.stat.exists diff --git a/ansible/roles/nova/tasks/precheck.yml b/ansible/roles/nova/tasks/precheck.yml new file mode 100644 index 000000000..ed97d539c --- /dev/null +++ b/ansible/roles/nova/tasks/precheck.yml @@ -0,0 +1 @@ +--- diff --git a/ansible/roles/nova/templates/nova.conf.j2 b/ansible/roles/nova/templates/nova.conf.j2 index 0378c60b6..6706d16e9 100644 --- a/ansible/roles/nova/templates/nova.conf.j2 +++ b/ansible/roles/nova/templates/nova.conf.j2 @@ -5,7 +5,6 @@ debug = {{ nova_logging_debug }} log_dir = /var/log/kolla/nova use_forwarded_for = true -api_paste_config = /etc/nova/api-paste.ini state_path = /var/lib/nova {% if kolla_enable_tls_external | bool %} @@ -175,7 +174,9 @@ images_rbd_pool = {{ ceph_nova_pool_name }} images_rbd_ceph_conf = /etc/ceph/ceph.conf rbd_user = nova disk_cachemodes="network=writeback" -hw_disk_discard = unmap +{% if nova_hw_disk_discard != '' %} +hw_disk_discard = {{ nova_hw_disk_discard }} +{% endif %} {% endif %} {% if nova_backend == "rbd" %} rbd_secret_uuid = {{ rbd_secret_uuid }} @@ -195,3 +196,12 @@ driver = noop [privsep_entrypoint] helper_command=sudo nova-rootwrap /etc/nova/rootwrap.conf privsep-helper --config-file /etc/nova/nova.conf + +[glance] +debug = {{ nova_logging_debug }} + +[guestfs] +debug = {{ nova_logging_debug }} + +[wsgi] +api_paste_config = /etc/nova/api-paste.ini diff --git a/ansible/roles/prechecks/tasks/port_checks.yml b/ansible/roles/prechecks/tasks/port_checks.yml index 93c680ac9..7aa1e0d67 100644 --- a/ansible/roles/prechecks/tasks/port_checks.yml +++ b/ansible/roles/prechecks/tasks/port_checks.yml @@ -1,11 +1,47 @@ --- +- name: Checking the api_interface is present + fail: "msg='Please check the api_interface property - interface {{ api_interface }} not found'" + when: api_interface not in ansible_interfaces + +- name: Checking the api_interface is active + fail: "msg='Please check the api_interface settings - interface {{ api_interface }} is not active'" + when: hostvars[inventory_hostname]['ansible_' + api_interface]['active'] != True + +- name: Checking the api_interface configuration + fail: "msg='Please check the api_interface settings - interface {{ api_interface }} configuration missing'" + when: hostvars[inventory_hostname]['ansible_' + api_interface]['ipv4'] is not defined + +- name: Checking the api_interface ip address configuration + fail: "msg='Please check the api_interface settings - interface {{ api_interface }} ip address problem'" + when: hostvars[inventory_hostname]['ansible_' + api_interface]['ipv4']['address'] is not defined + +- name: Checking if kolla_internal_vip_address and kolla_external_vip_address are not pingable from any node + command: ping -c 3 {{ item }} + register: ping_output + changed_when: false + with_items: + - "{{ kolla_internal_vip_address }}" + - "{{ kolla_external_vip_address }}" + failed_when: ping_output.rc != 1 + when: enable_haproxy | bool + +- name: Checking if kolla_internal_vip_address is in the same network as api_interface on all nodes + command: ip -4 -o addr show dev {{ api_interface }} + register: ip_addr_output + changed_when: false + failed_when: "'169.254.' not in kolla_internal_vip_address and \ + kolla_internal_vip_address | ipaddr(ip_addr_output.stdout.split()[3]) is none" + when: enable_haproxy | bool + - name: Checking free port for Aodh API wait_for: host: "{{ hostvars[inventory_hostname]['ansible_' + api_interface]['ipv4']['address'] }}" port: "{{ aodh_api_port }}" connect_timeout: 1 state: stopped - when: inventory_hostname in groups['aodh-api'] + when: + - inventory_hostname in groups['aodh-api'] + - enable_aodh | bool - name: Checking free port for Aodh API HAProxy wait_for: @@ -13,7 +49,9 @@ port: "{{ aodh_api_port }}" connect_timeout: 1 state: stopped - when: inventory_hostname in groups['haproxy'] + when: + - inventory_hostname in groups['haproxy'] + - enable_aodh | bool - name: Checking free port for Barbican API wait_for: @@ -21,7 +59,9 @@ port: "{{ barbican_api_port }}" connect_timeout: 1 state: stopped - when: inventory_hostname in groups['barbican-api'] + when: + - inventory_hostname in groups['barbican-api'] + - enable_barbican | bool - name: Checking free port for Barbican API HAProxy wait_for: @@ -29,7 +69,9 @@ port: "{{ barbican_api_port }}" connect_timeout: 1 state: stopped - when: inventory_hostname in groups['haproxy'] + when: + - inventory_hostname in groups['haproxy'] + - enable_barbican | bool - name: Checking free port for Ceilometer API wait_for: @@ -37,7 +79,9 @@ port: "{{ ceilometer_api_port }}" connect_timeout: 1 state: stopped - when: inventory_hostname in groups['ceilometer-api'] + when: + - inventory_hostname in groups['ceilometer-api'] + - enable_ceilometer | bool - name: Checking free port for Ceilometer API HAProxy wait_for: @@ -45,7 +89,9 @@ port: "{{ ceilometer_api_port }}" connect_timeout: 1 state: stopped - when: inventory_hostname in groups['haproxy'] + when: + - inventory_hostname in groups['haproxy'] + - enable_ceilometer | bool - name: Checking free port for Congress API wait_for: @@ -53,7 +99,9 @@ port: "{{ congress_api_port }}" connect_timeout: 1 state: stopped - when: inventory_hostname in groups['congress-api'] + when: + - inventory_hostname in groups['congress-api'] + - enable_congress | bool - name: Checking free port for Congress API HAProxy wait_for: @@ -61,7 +109,9 @@ port: "{{ congress_api_port }}" connect_timeout: 1 state: stopped - when: inventory_hostname in groups['haproxy'] + when: + - inventory_hostname in groups['haproxy'] + - enable_congress | bool - name: Checking free port for Cinder API wait_for: @@ -69,7 +119,9 @@ port: "{{ cinder_api_port }}" connect_timeout: 1 state: stopped - when: inventory_hostname in groups['cinder-api'] + when: + - inventory_hostname in groups['cinder-api'] + - enable_cinder | bool - name: Checking free port for Cinder API HAProxy wait_for: @@ -77,7 +129,9 @@ port: "{{ cinder_api_port }}" connect_timeout: 1 state: stopped - when: inventory_hostname in groups['haproxy'] + when: + - inventory_hostname in groups['haproxy'] + - enable_cinder | bool - name: Checking free port for Cloudkitty API wait_for: @@ -85,7 +139,9 @@ port: "{{ cloudkitty_api_port }}" connect_timeout: 1 state: stopped - when: inventory_hostname in groups['cloudkitty-api'] + when: + - inventory_hostname in groups['cloudkitty-api'] + - enable_cloudkitty | bool - name: Checking free port for Cloudkitty API HAProxy wait_for: @@ -93,7 +149,9 @@ port: "{{ cloudkitty_api_port }}" connect_timeout: 1 state: stopped - when: inventory_hostname in groups['haproxy'] + when: + - inventory_hostname in groups['haproxy'] + - enable_cloudkitty | bool - name: Checking free port for Etcd Peer wait_for: @@ -101,7 +159,9 @@ port: "{{ etcd_peer_port }}" connect_timeout: 1 state: stopped - when: inventory_hostname in groups['etcd'] + when: + - inventory_hostname in groups['etcd'] + - enable_etcd | bool - name: Checking free port for Etcd Client wait_for: @@ -109,7 +169,9 @@ port: "{{ etcd_client_port }}" connect_timeout: 1 state: stopped - when: inventory_hostname in groups['etcd'] + when: + - inventory_hostname in groups['etcd'] + - enable_etcd | bool - name: Checking free port for Glance API wait_for: @@ -117,7 +179,9 @@ port: "{{ glance_api_port }}" connect_timeout: 1 state: stopped - when: inventory_hostname in groups['glance-api'] + when: + - inventory_hostname in groups['glance-api'] + - enable_glance | bool - name: Checking free port for Glance API HAProxy wait_for: @@ -125,7 +189,9 @@ port: "{{ glance_api_port }}" connect_timeout: 1 state: stopped - when: inventory_hostname in groups['haproxy'] + when: + - inventory_hostname in groups['haproxy'] + - enable_glance | bool - name: Checking free port for Glance Registry wait_for: @@ -133,7 +199,9 @@ port: "{{ glance_registry_port }}" connect_timeout: 1 state: stopped - when: inventory_hostname in groups['glance-registry'] + when: + - inventory_hostname in groups['glance-registry'] + - enable_glance | bool - name: Checking free port for Glance Registry HAProxy wait_for: @@ -141,7 +209,9 @@ port: "{{ glance_registry_port }}" connect_timeout: 1 state: stopped - when: inventory_hostname in groups['haproxy'] + when: + - inventory_hostname in groups['haproxy'] + - enable_glance | bool - name: Checking free port for Gnocchi API wait_for: @@ -149,7 +219,9 @@ port: "{{ gnocchi_api_port }}" connect_timeout: 1 state: stopped - when: inventory_hostname in groups['gnocchi-api'] + when: + - inventory_hostname in groups['gnocchi-api'] + - enable_gnocchi | bool - name: Checking free port for Gnocchi API HAProxy wait_for: @@ -157,7 +229,19 @@ port: "{{ gnocchi_api_port }}" connect_timeout: 1 state: stopped - when: inventory_hostname in groups['haproxy'] + when: + - inventory_hostname in groups['haproxy'] + - enable_gnocchi | bool + +- name: Checking free port for Kuryr + wait_for: + host: "{{ hostvars[inventory_hostname]['ansible_' + api_interface]['ipv4']['address'] }}" + port: "{{ kuryr_port }}" + connect_timeout: 1 + state: stopped + when: + - inventory_hostname in groups['compute'] + - enable_kuryr | bool - name: Checking free port for Sahara API wait_for: @@ -165,7 +249,9 @@ port: "{{ sahara_api_port }}" connect_timeout: 1 state: stopped - when: inventory_hostname in groups['sahara-api'] + when: + - inventory_hostname in groups['sahara-api'] + - enable_sahara | bool - name: Checking free port for Sahara API HAProxy wait_for: @@ -173,7 +259,9 @@ port: "{{ sahara_api_port }}" connect_timeout: 1 state: stopped - when: inventory_hostname in groups['haproxy'] + when: + - inventory_hostname in groups['haproxy'] + - enable_sahara | bool - name: Checking free port for HAProxy stats wait_for: @@ -181,7 +269,9 @@ port: "{{ haproxy_stats_port }}" connect_timeout: 1 state: stopped - when: inventory_hostname in groups['haproxy'] + when: + - inventory_hostname in groups['haproxy'] + - enable_haproxy | bool - name: Checking free port for Heat API wait_for: @@ -189,7 +279,9 @@ port: "{{ heat_api_port }}" connect_timeout: 1 state: stopped - when: inventory_hostname in groups['heat-api'] + when: + - inventory_hostname in groups['heat-api'] + - enable_heat | bool - name: Checking free port for Heat API HAProxy wait_for: @@ -197,7 +289,9 @@ port: "{{ heat_api_port }}" connect_timeout: 1 state: stopped - when: inventory_hostname in groups['haproxy'] + when: + - inventory_hostname in groups['haproxy'] + - enable_heat | bool - name: Checking free port for Heat API CFN wait_for: @@ -205,7 +299,9 @@ port: "{{ heat_api_cfn_port }}" connect_timeout: 1 state: stopped - when: inventory_hostname in groups['heat-api-cfn'] + when: + - inventory_hostname in groups['heat-api-cfn'] + - enable_heat | bool - name: Checking free port for Heat API CFN HAProxy wait_for: @@ -213,7 +309,9 @@ port: "{{ heat_api_cfn_port }}" connect_timeout: 1 state: stopped - when: inventory_hostname in groups['haproxy'] + when: + - inventory_hostname in groups['haproxy'] + - enable_heat | bool - name: Checking free port for Horizon wait_for: @@ -221,7 +319,9 @@ port: "80" connect_timeout: 1 state: stopped - when: inventory_hostname in groups['horizon'] + when: + - inventory_hostname in groups['horizon'] + - enable_horizon | bool - name: Checking free port for Horizon HAProxy wait_for: @@ -229,7 +329,9 @@ port: "80" connect_timeout: 1 state: stopped - when: inventory_hostname in groups['haproxy'] + when: + - inventory_hostname in groups['haproxy'] + - enable_horizon | bool - name: Checking free port for Ironic wait_for: @@ -237,7 +339,9 @@ port: "{{ ironic_api_port }}" connect_timeout: 1 state: stopped - when: inventory_hostname in groups['ironic-api'] + when: + - inventory_hostname in groups['ironic-api'] + - enable_ironic | bool - name: Checking free port for Ironic HAProxy wait_for: @@ -245,7 +349,29 @@ port: "{{ ironic_api_port }}" connect_timeout: 1 state: stopped - when: inventory_hostname in groups['haproxy'] + when: + - inventory_hostname in groups['haproxy'] + - enable_ironic | bool + +- name: Checking free port for Influxdb Admin + wait_for: + host: "{{ hostvars[inventory_hostname]['ansible_' + api_interface]['ipv4']['address'] }}" + port: "{{ influxdb_admin_port }}" + connect_timeout: 1 + state: stopped + when: + - inventory_hostname in groups['influxdb'] + - enable_influxdb | bool + +- name: Checking free port for Influxdb Http + wait_for: + host: "{{ hostvars[inventory_hostname]['ansible_' + api_interface]['ipv4']['address'] }}" + port: "{{ influxdb_http_port }}" + connect_timeout: 1 + state: stopped + when: + - inventory_hostname in groups['influxdb'] + - enable_influxdb | bool - name: Checking free port for Keystone Admin wait_for: @@ -253,7 +379,9 @@ port: "{{ keystone_admin_port }}" connect_timeout: 1 state: stopped - when: inventory_hostname in groups['keystone'] + when: + - inventory_hostname in groups['keystone'] + - enable_keystone | bool - name: Checking free port for Keystone Admin HAProxy wait_for: @@ -261,7 +389,9 @@ port: "{{ keystone_admin_port }}" connect_timeout: 1 state: stopped - when: inventory_hostname in groups['haproxy'] + when: + - inventory_hostname in groups['haproxy'] + - enable_keystone | bool - name: Checking free port for Keystone Public wait_for: @@ -269,7 +399,9 @@ port: "{{ keystone_public_port }}" connect_timeout: 1 state: stopped - when: inventory_hostname in groups['keystone'] + when: + - inventory_hostname in groups['keystone'] + - enable_keystone | bool - name: Checking free port for Keystone Public HAProxy wait_for: @@ -277,7 +409,9 @@ port: "{{ keystone_public_port }}" connect_timeout: 1 state: stopped - when: inventory_hostname in groups['haproxy'] + when: + - inventory_hostname in groups['haproxy'] + - enable_keystone | bool - name: Checking free port for iscsi wait_for: @@ -285,7 +419,9 @@ port: "{{ iscsi_port }}" connect_timeout: 1 state: stopped - when: inventory_hostname in groups['tgtd'] + when: + - inventory_hostname in groups['tgtd'] + - enable_iscsid | bool - name: Checking free port for Magnum API wait_for: @@ -293,7 +429,9 @@ port: "{{ magnum_api_port }}" connect_timeout: 1 state: stopped - when: inventory_hostname in groups['magnum-api'] + when: + - inventory_hostname in groups['magnum-api'] + - enable_magnum | bool - name: Checking free port for Magnum API HAProxy wait_for: @@ -301,7 +439,9 @@ port: "{{ magnum_api_port }}" connect_timeout: 1 state: stopped - when: inventory_hostname in groups['haproxy'] + when: + - inventory_hostname in groups['haproxy'] + - enable_magnum | bool - name: Checking free port for MariaDB wait_for: @@ -309,7 +449,9 @@ port: "{{ database_port }}" connect_timeout: 1 state: stopped - when: inventory_hostname in groups['mariadb'] + when: + - inventory_hostname in groups['mariadb'] + - enable_mariadb | bool - name: Checking free port for MariaDB HAProxy wait_for: @@ -317,7 +459,9 @@ port: "{{ database_port }}" connect_timeout: 1 state: stopped - when: inventory_hostname in groups['haproxy'] + when: + - inventory_hostname in groups['haproxy'] + - enable_mariadb | bool - name: Checking free port for MariaDB WSREP wait_for: @@ -325,7 +469,9 @@ port: "{{ mariadb_wsrep_port }}" connect_timeout: 1 state: stopped - when: inventory_hostname in groups['mariadb'] + when: + - inventory_hostname in groups['mariadb'] + - enable_mariadb | bool - name: Checking free port for MariaDB IST wait_for: @@ -333,7 +479,9 @@ port: "{{ mariadb_ist_port }}" connect_timeout: 1 state: stopped - when: inventory_hostname in groups['mariadb'] + when: + - inventory_hostname in groups['mariadb'] + - enable_mariadb | bool - name: Checking free port for MariaDB SST wait_for: @@ -341,7 +489,9 @@ port: "{{ mariadb_sst_port }}" connect_timeout: 1 state: stopped - when: inventory_hostname in groups['mariadb'] + when: + - inventory_hostname in groups['mariadb'] + - enable_mariadb | bool - name: Checking free port for Manila API wait_for: @@ -349,7 +499,9 @@ port: "{{ manila_api_port }}" connect_timeout: 1 state: stopped - when: inventory_hostname in groups['manila-api'] + when: + - inventory_hostname in groups['manila-api'] + - enable_manila | bool - name: Checking free port for Manila API HAProxy wait_for: @@ -357,7 +509,9 @@ port: "{{ manila_api_port }}" connect_timeout: 1 state: stopped - when: inventory_hostname in groups['haproxy'] + when: + - inventory_hostname in groups['haproxy'] + - enable_manila | bool - name: Checking free port for Memcached wait_for: @@ -365,7 +519,9 @@ port: "{{ memcached_port }}" connect_timeout: 1 state: stopped - when: inventory_hostname in groups['memcached'] + when: + - inventory_hostname in groups['memcached'] + - enable_memcached | bool - name: Checking free port for Murano API wait_for: @@ -373,7 +529,9 @@ port: "{{ murano_api_port }}" connect_timeout: 1 state: stopped - when: inventory_hostname in groups['murano-api'] + when: + - inventory_hostname in groups['murano-api'] + - enable_murano | bool - name: Checking free port for Murano API HAProxy wait_for: @@ -381,7 +539,9 @@ port: "{{ murano_api_port }}" connect_timeout: 1 state: stopped - when: inventory_hostname in groups['haproxy'] + when: + - inventory_hostname in groups['haproxy'] + - enable_murano | bool - name: Checking free port for Neutron Server wait_for: @@ -389,7 +549,9 @@ port: "{{ neutron_server_port }}" connect_timeout: 1 state: stopped - when: inventory_hostname in groups['neutron-server'] + when: + - inventory_hostname in groups['neutron-server'] + - enable_neutron | bool - name: Checking free port for Neutron Server HAProxy wait_for: @@ -397,7 +559,9 @@ port: "{{ neutron_server_port }}" connect_timeout: 1 state: stopped - when: inventory_hostname in groups['haproxy'] + when: + - inventory_hostname in groups['haproxy'] + - enable_neutron | bool - name: Checking free port for Nova API wait_for: @@ -405,7 +569,9 @@ port: "{{ nova_api_port }}" connect_timeout: 1 state: stopped - when: inventory_hostname in groups['nova-api'] + when: + - inventory_hostname in groups['nova-api'] + - enable_nova | bool - name: Checking free port for Nova API HAProxy wait_for: @@ -413,7 +579,9 @@ port: "{{ nova_api_port }}" connect_timeout: 1 state: stopped - when: inventory_hostname in groups['haproxy'] + when: + - inventory_hostname in groups['haproxy'] + - enable_nova | bool - name: Checking free port for Nova Metadata wait_for: @@ -421,7 +589,9 @@ port: "{{ nova_metadata_port }}" connect_timeout: 1 state: stopped - when: inventory_hostname in groups['nova-api'] + when: + - inventory_hostname in groups['nova-api'] + - enable_nova | bool - name: Checking free port for Nova Metadata HAProxy wait_for: @@ -429,7 +599,9 @@ port: "{{ nova_metadata_port }}" connect_timeout: 1 state: stopped - when: inventory_hostname in groups['haproxy'] + when: + - inventory_hostname in groups['haproxy'] + - enable_nova | bool - name: Checking free port for Nova NoVNC Proxy wait_for: @@ -437,7 +609,10 @@ port: "{{ nova_novncproxy_port }}" connect_timeout: 1 state: stopped - when: inventory_hostname in groups['nova-novncproxy'] + when: + - inventory_hostname in groups['nova-novncproxy'] + - enable_nova | bool + - nova_console == 'novnc' - name: Checking free port for Nova NoVNC HAProxy wait_for: @@ -445,7 +620,10 @@ port: "{{ nova_novncproxy_port }}" connect_timeout: 1 state: stopped - when: inventory_hostname in groups['haproxy'] + when: + - inventory_hostname in groups['haproxy'] + - enable_nova | bool + - nova_console == 'novnc' - name: Checking free port for Nova Spice HTML5 Proxy wait_for: @@ -453,7 +631,10 @@ port: "{{ nova_spicehtml5proxy_port }}" connect_timeout: 1 state: stopped - when: inventory_hostname in groups['nova-spicehtml5proxy'] + when: + - inventory_hostname in groups['nova-spicehtml5proxy'] + - enable_nova | bool + - nova_console == 'spice' - name: Checking free port for Nova Spice HTML5 HAProxy wait_for: @@ -461,7 +642,10 @@ port: "{{ nova_spicehtml5proxy_port }}" connect_timeout: 1 state: stopped - when: inventory_hostname in groups['haproxy'] + when: + - inventory_hostname in groups['haproxy'] + - enable_nova | bool + - nova_console == 'spice' - name: Checking free port for RabbitMQ wait_for: @@ -469,7 +653,9 @@ port: "{{ rabbitmq_port }}" connect_timeout: 1 state: stopped - when: inventory_hostname in groups['rabbitmq'] + when: + - inventory_hostname in groups['rabbitmq'] + - enable_rabbitmq | bool - name: Checking free port for RabbitMQ Management wait_for: @@ -477,7 +663,9 @@ port: "{{ rabbitmq_management_port }}" connect_timeout: 1 state: stopped - when: inventory_hostname in groups['rabbitmq'] + when: + - inventory_hostname in groups['rabbitmq'] + - enable_rabbitmq | bool - name: Checking free port for RabbitMQ Management HAProxy wait_for: @@ -485,7 +673,9 @@ port: "{{ rabbitmq_management_port }}" connect_timeout: 1 state: stopped - when: inventory_hostname in groups['haproxy'] + when: + - inventory_hostname in groups['haproxy'] + - enable_rabbitmq | bool - name: Checking free port for RabbitMQ Cluster wait_for: @@ -493,7 +683,9 @@ port: "{{ rabbitmq_cluster_port }}" connect_timeout: 1 state: stopped - when: inventory_hostname in groups['rabbitmq'] + when: + - inventory_hostname in groups['rabbitmq'] + - enable_rabbitmq | bool - name: Checking free port for RabbitMQ EPMD wait_for: @@ -501,17 +693,22 @@ port: "{{ rabbitmq_epmd_port }}" connect_timeout: 1 state: stopped - when: inventory_hostname in groups['rabbitmq'] + when: + - inventory_hostname in groups['rabbitmq'] + - enable_rabbitmq | bool - name: Check if all rabbit hostnames are resolvable command: "getent ahostsv4 {{ hostvars[item]['ansible_hostname'] }}" changed_when: false register: rabbitmq_hostnames with_items: "{{ groups['rabbitmq'] }}" + when: enable_rabbitmq | bool - fail: msg="Hostname has to resolve to IP address of api_interface" with_items: "{{ rabbitmq_hostnames.results }}" - when: "'{{ hostvars[item['item']]['ansible_' + hostvars[item['item']]['api_interface']]['ipv4']['address'] }}' not in '{{ item.stdout }}'" + when: + - "'{{ hostvars[item['item']]['ansible_' + hostvars[item['item']]['api_interface']]['ipv4']['address'] }}' not in '{{ item.stdout }}'" + - enable_rabbitmq | bool - name: Checking free port for Mongodb wait_for: @@ -519,7 +716,9 @@ port: "{{ mongodb_port }}" connect_timeout: 1 state: stopped - when: inventory_hostname in groups['mongodb'] + when: + - inventory_hostname in groups['mongodb'] + - enable_mongodb | bool - name: Checking free port for Mongodb Web wait_for: @@ -527,7 +726,9 @@ port: "{{ mongodb_web_port }}" connect_timeout: 1 state: stopped - when: inventory_hostname in groups['mongodb'] + when: + - inventory_hostname in groups['mongodb'] + - enable_mongodb | bool - name: Checking free port for Mongodb HAProxy wait_for: @@ -535,7 +736,9 @@ port: "{{ mongodb_port }}" connect_timeout: 1 state: stopped - when: inventory_hostname in groups['haproxy'] + when: + - inventory_hostname in groups['haproxy'] + - enable_mongodb | bool - name: Checking free port for Kibana Server wait_for: @@ -543,7 +746,9 @@ port: "{{ kibana_server_port }}" connect_timeout: 1 state: stopped - when: inventory_hostname in groups['kibana'] + when: + - inventory_hostname in groups['kibana'] + - enable_kibana | bool - name: Checking free port for Rsync wait_for: @@ -551,7 +756,9 @@ port: "873" connect_timeout: 1 state: stopped - when: inventory_hostname in groups['swift-object-server'] + when: + - inventory_hostname in groups['swift-object-server'] + - enable_swift | bool - name: Checking free port for Swift Object Server wait_for: @@ -559,7 +766,9 @@ port: "{{ swift_object_server_port }}" connect_timeout: 1 state: stopped - when: inventory_hostname in groups['swift-object-server'] + when: + - inventory_hostname in groups['swift-object-server'] + - enable_swift | bool - name: Checking free port for Swift Account Server wait_for: @@ -567,7 +776,9 @@ port: "{{ swift_account_server_port }}" connect_timeout: 1 state: stopped - when: inventory_hostname in groups['swift-account-server'] + when: + - inventory_hostname in groups['swift-account-server'] + - enable_swift | bool - name: Checking free port for Swift Container Server wait_for: @@ -575,7 +786,9 @@ port: "{{ swift_container_server_port }}" connect_timeout: 1 state: stopped - when: inventory_hostname in groups['swift-container-server'] + when: + - inventory_hostname in groups['swift-container-server'] + - enable_swift | bool - name: Checking free port for Swift Proxy Server wait_for: @@ -583,7 +796,9 @@ port: "{{ swift_proxy_server_port }}" connect_timeout: 1 state: stopped - when: inventory_hostname in groups['swift-proxy-server'] + when: + - inventory_hostname in groups['swift-proxy-server'] + - enable_swift | bool - name: Checking free port for Swift Proxy Server HAProxy wait_for: @@ -591,7 +806,9 @@ port: "{{ swift_proxy_server_port }}" connect_timeout: 1 state: stopped - when: inventory_hostname in groups['haproxy'] + when: + - inventory_hostname in groups['haproxy'] + - enable_swift | bool - name: Checking free port for RadosGW wait_for: @@ -599,7 +816,9 @@ port: "{{ rgw_port }}" connect_timeout: 1 state: stopped - when: inventory_hostname in groups['ceph-rgw'] + when: + - inventory_hostname in groups['ceph-rgw'] + - enable_ceph_rgw | bool - name: Checking free port for RadosGW HAProxy wait_for: @@ -607,7 +826,29 @@ port: "{{ rgw_port }}" connect_timeout: 1 state: stopped - when: inventory_hostname in groups['haproxy'] + when: + - inventory_hostname in groups['haproxy'] + - enable_ceph_rgw | bool + +- name: Checking free port for Grafana server + wait_for: + host: "{{ hostvars[inventory_hostname]['ansible_' + api_interface]['ipv4']['address'] }}" + port: "{{ grafana_server_port }}" + connect_timeout: 1 + state: stopped + when: + - inventory_hostname in groups['grafana'] + - enable_grafana | bool + +- name: Checking free port for Grafana server HAProxy + wait_for: + host: "{{ kolla_internal_vip_address }}" + port: "{{ grafana_server_port }}" + connect_timeout: 1 + state: stopped + when: + - inventory_hostname in groups['haproxy'] + - enable_grafana | bool - name: Checking free port for Senlin API wait_for: @@ -615,7 +856,9 @@ port: "{{ senlin_api_port }}" connect_timeout: 1 state: stopped - when: inventory_hostname in groups['senlin-api'] + when: + - inventory_hostname in groups['senlin-api'] + - enable_senlin | bool - name: Checking free port for Senlin API HAProxy wait_for: @@ -623,7 +866,9 @@ port: "{{ senlin_api_port }}" connect_timeout: 1 state: stopped - when: inventory_hostname in groups['haproxy'] + when: + - inventory_hostname in groups['haproxy'] + - enable_senlin | bool - name: Checking free port for Mistral API wait_for: @@ -631,7 +876,9 @@ port: "{{ mistral_api_port }}" connect_timeout: 1 state: stopped - when: inventory_hostname in groups['mistral-api'] + when: + - inventory_hostname in groups['mistral-api'] + - enable_mistral | bool - name: Checking free port for Mistral API HAProxy wait_for: @@ -639,7 +886,9 @@ port: "{{ mistral_api_port }}" connect_timeout: 1 state: stopped - when: inventory_hostname in groups['haproxy'] + when: + - inventory_hostname in groups['haproxy'] + - enable_mistral | bool - name: Checking free port for Watcher API wait_for: @@ -647,7 +896,9 @@ port: "{{ watcher_api_port }}" connect_timeout: 1 state: stopped - when: inventory_hostname in groups['watcher-api'] + when: + - inventory_hostname in groups['watcher-api'] + - enable_watcher | bool - name: Checking free port for Watcher API HAProxy wait_for: @@ -655,38 +906,26 @@ port: "{{ watcher_api_port }}" connect_timeout: 1 state: stopped - when: inventory_hostname in groups['haproxy'] + when: + - inventory_hostname in groups['haproxy'] + - enable_watcher | bool -- name: Checking the network_interface is present - fail: "msg='Please check the network_interface property - interface {{ network_interface }} not found'" - when: network_interface not in ansible_interfaces - -- name: Checking the network_interface is active - fail: "msg='Please check the network_interface settings - interface {{ network_interface }} is not active'" - when: hostvars[inventory_hostname]['ansible_' + network_interface]['active'] != True - -- name: Checking the network_interface configuration - fail: "msg='Please check the network_interface settings - interface {{ network_interface }} configuration missing'" - when: hostvars[inventory_hostname]['ansible_' + network_interface]['ipv4'] is not defined - -- name: Checking the network_interface ip address configuration - fail: "msg='Please check the network_interface settings - interface {{ network_interface }} ip address problem'" - when: hostvars[inventory_hostname]['ansible_' + network_interface]['ipv4']['address'] is not defined - -- name: Checking if kolla_internal_vip_address and kolla_external_vip_address are not pingable from any node - command: ping -c 3 {{ item }} - register: ping_output - changed_when: false - with_items: - - "{{ kolla_internal_vip_address }}" - - "{{ kolla_external_vip_address }}" - failed_when: ping_output.rc != 1 - when: enable_haproxy | bool +- name: Checking free port for Searchlight API + wait_for: + host: "{{ hostvars[inventory_hostname]['ansible_' + api_interface]['ipv4']['address'] }}" + port: "{{ searchlight_api_port }}" + connect_timeout: 1 + state: stopped + when: + - inventory_hostname in groups['searchlight-api'] + - enable_searchlight | bool -- name: Checking if kolla_internal_vip_address is in the same network as network_interface on all nodes - command: ip -4 -o addr show dev {{ network_interface }} - register: ip_addr_output - changed_when: false - failed_when: "'169.254.' not in kolla_internal_vip_address and \ - kolla_internal_vip_address | ipaddr(ip_addr_output.stdout.split()[3]) is none" - when: enable_haproxy | bool +- name: Checking free port for Searchlight API HAProxy + wait_for: + host: "{{ kolla_internal_vip_address }}" + port: "{{ searchlight_api_port }}" + connect_timeout: 1 + state: stopped + when: + - inventory_hostname in groups['haproxy'] + - enable_searchlight | bool diff --git a/ansible/roles/prechecks/tasks/precheck.yml b/ansible/roles/prechecks/tasks/precheck.yml new file mode 100644 index 000000000..ed97d539c --- /dev/null +++ b/ansible/roles/prechecks/tasks/precheck.yml @@ -0,0 +1 @@ +--- diff --git a/ansible/roles/rabbitmq/tasks/precheck.yml b/ansible/roles/rabbitmq/tasks/precheck.yml new file mode 100644 index 000000000..ed97d539c --- /dev/null +++ b/ansible/roles/rabbitmq/tasks/precheck.yml @@ -0,0 +1 @@ +--- diff --git a/ansible/roles/rally/tasks/bootstrap_service.yml b/ansible/roles/rally/tasks/bootstrap_service.yml index 6d5f1f086..47a7c8f7f 100644 --- a/ansible/roles/rally/tasks/bootstrap_service.yml +++ b/ansible/roles/rally/tasks/bootstrap_service.yml @@ -17,4 +17,4 @@ - "/etc/localtime:/etc/localtime:ro" - "kolla_logs:/var/log/kolla/" run_once: True - delegate_to: "{{ groups['rally'][0] }}"
\ No newline at end of file + delegate_to: "{{ groups['rally'][0] }}" diff --git a/ansible/roles/rally/tasks/config.yml b/ansible/roles/rally/tasks/config.yml index c210dc338..3304915de 100644 --- a/ansible/roles/rally/tasks/config.yml +++ b/ansible/roles/rally/tasks/config.yml @@ -24,3 +24,14 @@ dest: "{{ node_config_directory }}/{{ item }}/rally.conf" with_items: - "rally" + +- name: Check if policies shall be overwritten + local_action: stat path="{{ node_custom_config }}/rally/policy.json" + register: rally_policy + +- name: Copying over existing policy.json + template: + src: "{{ node_custom_config }}/rally/policy.json" + dest: "{{ node_config_directory }}/rally/policy.json" + when: + rally_policy.stat.exists diff --git a/ansible/roles/rally/tasks/precheck.yml b/ansible/roles/rally/tasks/precheck.yml new file mode 100644 index 000000000..ed97d539c --- /dev/null +++ b/ansible/roles/rally/tasks/precheck.yml @@ -0,0 +1 @@ +--- diff --git a/ansible/roles/sahara/tasks/config.yml b/ansible/roles/sahara/tasks/config.yml index b3a3405cc..a83df50ca 100644 --- a/ansible/roles/sahara/tasks/config.yml +++ b/ansible/roles/sahara/tasks/config.yml @@ -32,3 +32,14 @@ with_items: - "sahara-api" - "sahara-engine" + +- name: Check if policies shall be overwritten + local_action: stat path="{{ node_custom_config }}/sahara/policy.json" + register: sahara_policy + +- name: Copying over existing policy.json + template: + src: "{{ node_custom_config }}/sahara/policy.json" + dest: "{{ node_config_directory }}/sahara/policy.json" + when: + sahara_policy.stat.exists diff --git a/ansible/roles/sahara/tasks/precheck.yml b/ansible/roles/sahara/tasks/precheck.yml new file mode 100644 index 000000000..ed97d539c --- /dev/null +++ b/ansible/roles/sahara/tasks/precheck.yml @@ -0,0 +1 @@ +--- diff --git a/ansible/roles/searchlight/defaults/main.yml b/ansible/roles/searchlight/defaults/main.yml new file mode 100644 index 000000000..303094363 --- /dev/null +++ b/ansible/roles/searchlight/defaults/main.yml @@ -0,0 +1,32 @@ +--- +project_name: "searchlight" + +#################### +# Elasticsearch +#################### +searchlight_elasticsearch_url: "{{ kolla_internal_fqdn }}:{{ elasticsearch_port }}" + +#################### +# Docker +#################### +searchlight_listener_image: "{{ docker_registry ~ '/' if docker_registry else '' }}{{ docker_namespace }}/{{ kolla_base_distro }}-{{ kolla_install_type }}-searchlight-listener" +searchlight_listener_tag: "{{ openstack_release }}" +searchlight_listener_image_full: "{{ searchlight_listener_image }}:{{ searchlight_listener_tag }}" + +searchlight_api_image: "{{ docker_registry ~ '/' if docker_registry else '' }}{{ docker_namespace }}/{{ kolla_base_distro }}-{{ kolla_install_type }}-searchlight-api" +searchlight_api_tag: "{{ openstack_release }}" +searchlight_api_image_full: "{{ searchlight_api_image }}:{{ searchlight_api_tag }}" + + +#################### +# OpenStack +#################### +searchlight_admin_endpoint: "{{ admin_protocol }}://{{ kolla_internal_fqdn }}:{{ searchlight_api_port }}" +searchlight_internal_endpoint: "{{ internal_protocol }}://{{ kolla_internal_fqdn }}:{{ searchlight_api_port }}" +searchlight_public_endpoint: "{{ public_protocol }}://{{ kolla_external_fqdn }}:{{ searchlight_api_port }}" + +searchlight_logging_debug: "{{ openstack_logging_debug }}" + +searchlight_keystone_user: "searchlight" + +openstack_searchlight_auth: "{'auth_url':'{{ openstack_auth.auth_url }}','username':'{{ openstack_auth.username }}','password':'{{ openstack_auth.password }}','project_name':'{{ openstack_auth.project_name }}'}" diff --git a/ansible/roles/searchlight/meta/main.yml b/ansible/roles/searchlight/meta/main.yml new file mode 100644 index 000000000..6b4fff8fe --- /dev/null +++ b/ansible/roles/searchlight/meta/main.yml @@ -0,0 +1,3 @@ +--- +dependencies: + - { role: common } diff --git a/ansible/roles/searchlight/tasks/bootstrap.yml b/ansible/roles/searchlight/tasks/bootstrap.yml new file mode 100644 index 000000000..a537e12f7 --- /dev/null +++ b/ansible/roles/searchlight/tasks/bootstrap.yml @@ -0,0 +1,2 @@ +--- +- include: bootstrap_service.yml diff --git a/ansible/roles/searchlight/tasks/bootstrap_service.yml b/ansible/roles/searchlight/tasks/bootstrap_service.yml new file mode 100644 index 000000000..7f114924b --- /dev/null +++ b/ansible/roles/searchlight/tasks/bootstrap_service.yml @@ -0,0 +1,20 @@ +--- +- name: Running Searchlight bootstrap container + kolla_docker: + action: "start_container" + common_options: "{{ docker_common_options }}" + detach: False + environment: + KOLLA_BOOTSTRAP: + KOLLA_CONFIG_STRATEGY: "{{ config_strategy }}" + image: "{{ searchlight_api_image_full }}" + labels: + BOOTSTRAP: + name: "bootstrap_searchlight" + restart_policy: "never" + volumes: + - "{{ node_config_directory }}/searchlight-api/:{{ container_config_directory }}/:ro" + - "/etc/localtime:/etc/localtime:ro" + - "kolla_logs:/var/log/kolla/" + run_once: True + delegate_to: "{{ groups['searchlight-api'][0] }}" diff --git a/ansible/roles/searchlight/tasks/config.yml b/ansible/roles/searchlight/tasks/config.yml new file mode 100644 index 000000000..4237b6bdd --- /dev/null +++ b/ansible/roles/searchlight/tasks/config.yml @@ -0,0 +1,43 @@ +--- +- name: Ensuring config directories exist + file: + path: "{{ node_config_directory }}/{{ item }}" + state: "directory" + recurse: yes + with_items: + - "searchlight-api" + - "searchlight-listener" + +- name: Copying over config.json files for services + template: + src: "{{ item }}.json.j2" + dest: "{{ node_config_directory }}/{{ item }}/config.json" + with_items: + - "searchlight-api" + - "searchlight-listener" + +- name: Copying over searchlight.conf + merge_configs: + vars: + service_name: "{{ item }}" + sources: + - "{{ role_path }}/templates/searchlight.conf.j2" + - "{{ node_custom_config }}/global.conf" + - "{{ node_custom_config }}/messaging.conf" + - "{{ node_custom_config }}/searchlight.conf" + - "{{ node_custom_config }}/searchlight/{{ inventory_hostname }}/searchlight.conf" + dest: "{{ node_config_directory }}/{{ item }}/searchlight.conf" + with_items: + - "searchlight-api" + - "searchlight-listener" + +- name: Check if policies shall be overwritten + local_action: stat path="{{ node_custom_config }}/searchlight/policy.json" + register: searchlight_policy + +- name: Copying over existing policy.json + template: + src: "{{ node_custom_config }}/searchlight/policy.json" + dest: "{{ node_config_directory }}/searchlight/policy.json" + when: + searchlight_policy.stat.exists diff --git a/ansible/roles/searchlight/tasks/deploy.yml b/ansible/roles/searchlight/tasks/deploy.yml new file mode 100644 index 000000000..ea73ba9f3 --- /dev/null +++ b/ansible/roles/searchlight/tasks/deploy.yml @@ -0,0 +1,12 @@ +--- +- include: register.yml + when: inventory_hostname in groups['searchlight'] + +- include: config.yml + when: inventory_hostname in groups['searchlight'] + +- include: bootstrap.yml + when: inventory_hostname in groups['searchlight'] + +- include: start.yml + when: inventory_hostname in groups['searchlight'] diff --git a/ansible/roles/searchlight/tasks/main.yml b/ansible/roles/searchlight/tasks/main.yml new file mode 100644 index 000000000..b017e8b4a --- /dev/null +++ b/ansible/roles/searchlight/tasks/main.yml @@ -0,0 +1,2 @@ +--- +- include: "{{ action }}.yml" diff --git a/ansible/roles/searchlight/tasks/precheck.yml b/ansible/roles/searchlight/tasks/precheck.yml new file mode 100644 index 000000000..ed97d539c --- /dev/null +++ b/ansible/roles/searchlight/tasks/precheck.yml @@ -0,0 +1 @@ +--- diff --git a/ansible/roles/searchlight/tasks/pull.yml b/ansible/roles/searchlight/tasks/pull.yml new file mode 100644 index 000000000..738965381 --- /dev/null +++ b/ansible/roles/searchlight/tasks/pull.yml @@ -0,0 +1,14 @@ +--- +- name: Pulling searchlight-api image + kolla_docker: + action: "pull_image" + common_options: "{{ docker_common_options }}" + image: "{{ searchlight_api_image_full }}" + when: inventory_hostname in groups['searchlight-api'] + +- name: Pulling searchlight-listener image + kolla_docker: + action: "pull_image" + common_options: "{{ docker_common_options }}" + image: "{{ searchlight_listener_image_full }}" + when: inventory_hostname in groups['searchlight-listener'] diff --git a/ansible/roles/searchlight/tasks/reconfigure.yml b/ansible/roles/searchlight/tasks/reconfigure.yml new file mode 100644 index 000000000..c1a1403fc --- /dev/null +++ b/ansible/roles/searchlight/tasks/reconfigure.yml @@ -0,0 +1,66 @@ +--- +- name: Ensuring the containers up + kolla_docker: + name: "{{ item.name }}" + action: "get_container_state" + register: container_state + failed_when: container_state.Running == false + when: inventory_hostname in groups[item.group] + with_items: + - { name: searchlight_api, group: searchlight-api } + - { name: searchlight_listener, group: searchlight-listener } + +- include: config.yml + +- name: Check the configs + command: docker exec {{ item.name }} /usr/local/bin/kolla_set_configs --check + changed_when: false + failed_when: false + register: check_results + when: inventory_hostname in groups[item.group] + with_items: + - { name: searchlight_api, group: searchlight-api } + - { name: searchlight_listener, group: searchlight-listener } + +- name: Containers config strategy + kolla_docker: + name: "{{ item.name }}" + action: "get_container_env" + register: container_envs + when: inventory_hostname in groups[item.group] + with_items: + - { name: searchlight_api, group: searchlight-api } + - { name: searchlight_listener, group: searchlight-listener } + +- name: Remove the containers + kolla_docker: + name: "{{ item[0]['name'] }}" + action: "remove_container" + register: remove_containers + when: + - config_strategy == "COPY_ONCE" or item[1]['KOLLA_CONFIG_STRATEGY'] == 'COPY_ONCE' + - item[2]['rc'] == 1 + - inventory_hostname in groups[item[0]['group']] + with_together: + - [{ name: searchlight_api, group: searchlight-api }, + { name: searchlight_listener, group: searchlight-listener }] + - "{{ container_envs.results }}" + - "{{ check_results.results }}" + +- include: start.yml + when: remove_containers.changed + +- name: Restart containers + kolla_docker: + name: "{{ item[0]['name'] }}" + action: "restart_container" + when: + - config_strategy == 'COPY_ALWAYS' + - item[1]['KOLLA_CONFIG_STRATEGY'] != 'COPY_ONCE' + - item[2]['rc'] == 1 + - inventory_hostname in groups[item[0]['group']] + with_together: + - [{ name: searchlight_api, group: searchlight-api }, + { name: searchlight_listener, group: searchlight-listener }] + - "{{ container_envs.results }}" + - "{{ check_results.results }}" diff --git a/ansible/roles/searchlight/tasks/register.yml b/ansible/roles/searchlight/tasks/register.yml new file mode 100644 index 000000000..4724e7b96 --- /dev/null +++ b/ansible/roles/searchlight/tasks/register.yml @@ -0,0 +1,40 @@ +--- +- name: Creating the Searchlight service and endpoint + command: docker exec -t kolla_toolbox /usr/bin/ansible localhost + -m kolla_keystone_service + -a "service_name=searchlight + service_type=search + description='Openstack Index Service' + endpoint_region={{ openstack_region_name }} + url='{{ item.url }}' + interface='{{ item.interface }}' + region_name={{ openstack_region_name }} + auth={{ '{{ openstack_searchlight_auth }}' }}" + -e "{'openstack_searchlight_auth':{{ openstack_searchlight_auth }}}" + register: searchlight_endpoint + changed_when: "{{ searchlight_endpoint.stdout.find('localhost | SUCCESS => ') != -1 and (searchlight_endpoint.stdout.split('localhost | SUCCESS => ')[1]|from_json).changed }}" + until: searchlight_endpoint.stdout.split()[2] == 'SUCCESS' + retries: 10 + delay: 5 + run_once: True + with_items: + - {'interface': 'admin', 'url': '{{ searchlight_admin_endpoint }}'} + - {'interface': 'internal', 'url': '{{ searchlight_internal_endpoint }}'} + - {'interface': 'public', 'url': '{{ searchlight_public_endpoint }}'} + +- name: Creating the Searchlight project, user, and role + command: docker exec -t kolla_toolbox /usr/bin/ansible localhost + -m kolla_keystone_user + -a "project=service + user=searchlight + password={{ searchlight_keystone_password }} + role=admin + region_name={{ openstack_region_name }} + auth={{ '{{ openstack_searchlight_auth }}' }}" + -e "{'openstack_searchlight_auth':{{ openstack_searchlight_auth }}}" + register: searchlight_user + changed_when: "{{ searchlight_user.stdout.find('localhost | SUCCESS => ') != -1 and (searchlight_user.stdout.split('localhost | SUCCESS => ')[1]|from_json).changed }}" + until: searchlight_user.stdout.split()[2] == 'SUCCESS' + retries: 10 + delay: 5 + run_once: True diff --git a/ansible/roles/searchlight/tasks/start.yml b/ansible/roles/searchlight/tasks/start.yml new file mode 100644 index 000000000..f97e789d0 --- /dev/null +++ b/ansible/roles/searchlight/tasks/start.yml @@ -0,0 +1,24 @@ +--- +- name: Starting searchlight-api container + kolla_docker: + action: "start_container" + common_options: "{{ docker_common_options }}" + image: "{{ searchlight_api_image_full }}" + name: "searchlight_api" + volumes: + - "{{ node_config_directory }}/searchlight-api/:{{ container_config_directory }}/:ro" + - "/etc/localtime:/etc/localtime:ro" + - "kolla_logs:/var/log/kolla/" + when: inventory_hostname in groups['searchlight-api'] + +- name: Starting searchlight-listener container + kolla_docker: + action: "start_container" + common_options: "{{ docker_common_options }}" + image: "{{ searchlight_listener_image_full }}" + name: "searchlight_listener" + volumes: + - "{{ node_config_directory }}/searchlight-listener/:{{ container_config_directory }}/:ro" + - "/etc/localtime:/etc/localtime:ro" + - "kolla_logs:/var/log/kolla/" + when: inventory_hostname in groups['searchlight-listener'] diff --git a/ansible/roles/searchlight/tasks/upgrade.yml b/ansible/roles/searchlight/tasks/upgrade.yml new file mode 100644 index 000000000..308053080 --- /dev/null +++ b/ansible/roles/searchlight/tasks/upgrade.yml @@ -0,0 +1,6 @@ +--- +- include: config.yml + +- include: bootstrap_service.yml + +- include: start.yml diff --git a/ansible/roles/searchlight/templates/searchlight-api.json.j2 b/ansible/roles/searchlight/templates/searchlight-api.json.j2 new file mode 100644 index 000000000..a003291ba --- /dev/null +++ b/ansible/roles/searchlight/templates/searchlight-api.json.j2 @@ -0,0 +1,18 @@ +{ + "command": "searchlight-api", + "config_files": [ + { + "source": "{{ container_config_directory }}/searchlight.conf", + "dest": "/etc/searchlight/searchlight.conf", + "owner": "searchlight", + "perm": "0600" + } + ], + "permissions": [ + { + "path": "/var/log/kolla/searchlight", + "owner": "searchlight:searchlight", + "recurse": true + } + ] +} diff --git a/ansible/roles/searchlight/templates/searchlight-listener.json.j2 b/ansible/roles/searchlight/templates/searchlight-listener.json.j2 new file mode 100644 index 000000000..5f06a0499 --- /dev/null +++ b/ansible/roles/searchlight/templates/searchlight-listener.json.j2 @@ -0,0 +1,18 @@ +{ + "command": "searchlight-listener", + "config_files": [ + { + "source": "{{ container_config_directory }}/searchlight.conf", + "dest": "/etc/searchlight/searchlight.conf", + "owner": "searchlight", + "perm": "0600" + } + ], + "permissions": [ + { + "path": "/var/log/kolla/searchlight", + "owner": "searchlight:searchlight", + "recurse": true + } + ] +} diff --git a/ansible/roles/searchlight/templates/searchlight.conf.j2 b/ansible/roles/searchlight/templates/searchlight.conf.j2 new file mode 100644 index 000000000..3317fca1f --- /dev/null +++ b/ansible/roles/searchlight/templates/searchlight.conf.j2 @@ -0,0 +1,90 @@ +[DEFAULT] +debug = {{ searchlight_logging_debug }} + +policy_file = /etc/searchlight/policy.json +log_dir = /var/log/kolla/searchlight +transport_url = rabbit://{% for host in groups['rabbitmq'] %}{{ rabbitmq_user }}:{{ rabbitmq_password }}@{% if orchestration_engine == 'KUBERNETES' %}rabbitmq{% else %}{{ hostvars[host]['ansible_' + hostvars[host]['api_interface']]['ipv4']['address'] }}{% endif %}:{{ rabbitmq_port }}{% if not loop.last %},{% endif %}{% endfor %} + + +[api] +port = {{ searchlight_api_port }} +bind_host = {{ hostvars[inventory_hostname]['ansible_' + api_interface]['ipv4']['address'] }} +public_endpoint = {{ public_protocol }}://{{ kolla_external_fqdn }}:{{ searchlight_api_port }} + +[elasticsearch] +hosts = {{ searchlight_elasticsearch_url }} + +[listener] +workers = {{ openstack_service_workers }} +notifications_pool = searchlight-listener + +[paste_deploy] +flavor = keystone + +[keystone_authtoken] +auth_uri = {{ internal_protocol }}://{{ kolla_internal_fqdn }}:{{ keystone_public_port }} +auth_url = {{ admin_protocol }}://{{ kolla_internal_fqdn }}:{{ keystone_admin_port }} +project_domain_name = default +project_name = service +user_domain_name = default +username = {{ searchlight_keystone_user }} +password = {{ searchlight_keystone_password }} +auth_type = password + +memcache_security_strategy = ENCRYPT +memcache_secret_key = {{ memcache_secret_key }} +memcached_servers = {% for host in groups['memcached'] %}{% if orchestration_engine == 'KUBERNETES' %}memcached{% else %}{{ hostvars[host]['ansible_' + hostvars[host]['api_interface']]['ipv4']['address'] }}{% endif %}:{{ memcached_port }}{% if not loop.last %},{% endif %}{% endfor %} + +[service_credentials] +auth_uri = {{ internal_protocol }}://{{ kolla_internal_fqdn }}:{{ keystone_public_port }} +auth_url = {{ admin_protocol }}://{{ kolla_internal_fqdn }}:{{ keystone_admin_port }} +region_name = {{ openstack_region_name }} +project_domain_name = default +project_name = service +user_domain_name = default +username = {{ searchlight_keystone_user }} +password = {{ searchlight_keystone_password }} +auth_type = password +auth_plugin = password + +memcache_security_strategy = ENCRYPT +memcache_secret_key = {{ memcache_secret_key }} +memcached_servers = {% for host in groups['memcached'] %}{% if orchestration_engine == 'KUBERNETES' %}memcached{% else %}{{ hostvars[host]['ansible_' + hostvars[host]['api_interface']]['ipv4']['address'] }}{% endif %}:{{ memcached_port }}{% if not loop.last %},{% endif %}{% endfor %} + +[resource_plugin:os_designate_zone] +enabled = False + +[resource_plugin:os_designate_recordset] +enabled = False + +{% if not enable_swift | bool %} +[resource_plugin:os_swift_account] +enabled = False + +[resource_plugin:os_swift_container] +enabled = False + +[resource_plugin:os_swift_object] +enabled = False +{% endif %} + +{% if not enable_nova | bool %} +[resource_plugin:os_server_nova] +enabled = False +{% endif %} + +{% if not enable_glance | bool %} +[resource_plugin:os_glance_image] +enabled = False + +[resource_plugin:os_glance_metadef] +enabled = False +{% endif %} + +{% if not enable_neutron | bool %} +[resource_plugin:os_neutron_net] +enabled = False + +[resource_plugin:os_neutron_port] +enabled = False +{% endif %} diff --git a/ansible/roles/senlin/tasks/config.yml b/ansible/roles/senlin/tasks/config.yml index fa714f550..17ff0f83a 100644 --- a/ansible/roles/senlin/tasks/config.yml +++ b/ansible/roles/senlin/tasks/config.yml @@ -32,3 +32,14 @@ with_items: - "senlin-api" - "senlin-engine" + +- name: Check if policies shall be overwritten + local_action: stat path="{{ node_custom_config }}/senlin/policy.json" + register: senlin_policy + +- name: Copying over existing policy.json + template: + src: "{{ node_custom_config }}/senlin/policy.json" + dest: "{{ node_config_directory }}/senlin/policy.json" + when: + senlin_policy.stat.exists diff --git a/ansible/roles/senlin/tasks/precheck.yml b/ansible/roles/senlin/tasks/precheck.yml new file mode 100644 index 000000000..ed97d539c --- /dev/null +++ b/ansible/roles/senlin/tasks/precheck.yml @@ -0,0 +1 @@ +--- diff --git a/ansible/roles/swift/tasks/check.yml b/ansible/roles/swift/tasks/check.yml index 15e438c9d..e655ac0e7 100644 --- a/ansible/roles/swift/tasks/check.yml +++ b/ansible/roles/swift/tasks/check.yml @@ -16,4 +16,4 @@ retries: 10 delay: 5 run_once: True - when: kolla_enable_sanity_swift | bool
\ No newline at end of file + when: kolla_enable_sanity_swift | bool diff --git a/ansible/roles/swift/tasks/config.yml b/ansible/roles/swift/tasks/config.yml index dc04ffaff..10c26de5a 100644 --- a/ansible/roles/swift/tasks/config.yml +++ b/ansible/roles/swift/tasks/config.yml @@ -152,3 +152,14 @@ - "container.ring.gz" - "object.builder" - "object.ring.gz" + +- name: Check if policies shall be overwritten + local_action: stat path="{{ node_custom_config }}/swift/policy.json" + register: swift_policy + +- name: Copying over existing policy.json + template: + src: "{{ node_custom_config }}/swift/policy.json" + dest: "{{ node_config_directory }}/swift/policy.json" + when: + swift_policy.stat.exists diff --git a/ansible/roles/swift/tasks/precheck.yml b/ansible/roles/swift/tasks/precheck.yml new file mode 100644 index 000000000..ed97d539c --- /dev/null +++ b/ansible/roles/swift/tasks/precheck.yml @@ -0,0 +1 @@ +--- diff --git a/ansible/roles/swift/templates/object.conf.j2 b/ansible/roles/swift/templates/object.conf.j2 index ae4f08fd5..bd8b25fa9 100644 --- a/ansible/roles/swift/templates/object.conf.j2 +++ b/ansible/roles/swift/templates/object.conf.j2 @@ -23,8 +23,8 @@ use = egg:swift#object [object-auditor] {% endif %} -{% if service_name == 'swift-object-replicator' %} [object-replicator] +{% if service_name == 'swift-object-replicator' %} sync_module = {replication_ip}:{meta}:object {% endif %} diff --git a/ansible/roles/telegraf/tasks/precheck.yml b/ansible/roles/telegraf/tasks/precheck.yml new file mode 100644 index 000000000..ed97d539c --- /dev/null +++ b/ansible/roles/telegraf/tasks/precheck.yml @@ -0,0 +1 @@ +--- diff --git a/ansible/roles/telegraf/tasks/start.yml b/ansible/roles/telegraf/tasks/start.yml index 443b07249..b50cec453 100644 --- a/ansible/roles/telegraf/tasks/start.yml +++ b/ansible/roles/telegraf/tasks/start.yml @@ -15,5 +15,4 @@ - "/sys:/rootfs/sys:ro" - "/proc:/rootfs/proc:ro" - "/var/run/docker.sock:/var/run/docker.sock:ro" - - "haproxy_socket:/var/lib/kolla/haproxy/:rw" pid_mode: "host" diff --git a/ansible/roles/telegraf/templates/telegraf.conf.j2 b/ansible/roles/telegraf/templates/telegraf.conf.j2 index 0788f854d..1f81ad91c 100644 --- a/ansible/roles/telegraf/templates/telegraf.conf.j2 +++ b/ansible/roles/telegraf/templates/telegraf.conf.j2 @@ -17,8 +17,6 @@ retention_policy = "default" write_consistency = "any" timeout = "5s" -[[inputs.filestat]] -files = ["/var/log/kolla/**.log"] [[inputs.cpu]] percpu = true totalcpu = true @@ -33,21 +31,21 @@ files = ["/var/log/kolla/**.log"] [[inputs.system]] [[inputs.net]] interfaces = [] -{% if enable_haproxy | bool %} +{% if inventory_hostname in groups['haproxy'] and enable_haproxy | bool %} [[inputs.haproxy]] servers = ["{{ haproxy_proto }}://{{ haproxy_user }}:{{ haproxy_password }}@{{ hostvars[inventory_hostname]['ansible_' + api_interface]['ipv4']['address'] }}:{{ haproxy_stats_port }}"] {% endif %} -{% if enable_memcached | bool %} +{% if inventory_hostname in groups['memcached'] and enable_memcached | bool %} [[inputs.memcached]] servers = ["{{ hostvars[inventory_hostname]['ansible_' + api_interface]['ipv4']['address'] }}:{{ memcached_port }}"] {% endif %} -{% if enable_elasticsearch | bool %} +{% if inventory_hostname in groups['elasticsearch'] and enable_elasticsearch | bool %} [[inputs.elasticsearch]] servers = ["{{ elasticsearch_proto }}://{{ hostvars[inventory_hostname]['ansible_' + api_interface]['ipv4']['address'] }}:{{ elasticsearch_port }}"] local = true cluster_health = true {% endif %} -{% if inventory_hostname in groups['rabbitmq'] %} +{% if inventory_hostname in groups['rabbitmq'] and enable_rabbitmq | bool %} [[inputs.rabbitmq]] url = "{{ rabbitmq_proto }}://{{ hostvars[inventory_hostname]['ansible_' + api_interface]['ipv4']['address'] }}:{{ rabbitmq_management_port }}" username = "{{ rabbitmq_user }}" diff --git a/ansible/roles/tempest/tasks/config.yml b/ansible/roles/tempest/tasks/config.yml index 3375790f9..6422270d3 100644 --- a/ansible/roles/tempest/tasks/config.yml +++ b/ansible/roles/tempest/tasks/config.yml @@ -24,3 +24,14 @@ dest: "{{ node_config_directory }}/{{ item }}/tempest.conf" with_items: - "tempest" + +- name: Check if policies shall be overwritten + local_action: stat path="{{ node_custom_config }}/tempest/policy.json" + register: tempest_policy + +- name: Copying over existing policy.json + template: + src: "{{ node_custom_config }}/tempest/policy.json" + dest: "{{ node_config_directory }}/tempest/policy.json" + when: + tempest_policy.stat.exists diff --git a/ansible/roles/tempest/tasks/precheck.yml b/ansible/roles/tempest/tasks/precheck.yml new file mode 100644 index 000000000..ed97d539c --- /dev/null +++ b/ansible/roles/tempest/tasks/precheck.yml @@ -0,0 +1 @@ +--- diff --git a/ansible/roles/vmtp/tasks/main.yml b/ansible/roles/vmtp/tasks/main.yml index bef222f6a..b017e8b4a 100644 --- a/ansible/roles/vmtp/tasks/main.yml +++ b/ansible/roles/vmtp/tasks/main.yml @@ -1,2 +1,2 @@ --- -- include: "{{ action }}.yml"
\ No newline at end of file +- include: "{{ action }}.yml" diff --git a/ansible/roles/vmtp/tasks/precheck.yml b/ansible/roles/vmtp/tasks/precheck.yml new file mode 100644 index 000000000..ed97d539c --- /dev/null +++ b/ansible/roles/vmtp/tasks/precheck.yml @@ -0,0 +1 @@ +--- diff --git a/ansible/roles/watcher/tasks/config.yml b/ansible/roles/watcher/tasks/config.yml index 5116c3ebb..9d4ae9f7a 100644 --- a/ansible/roles/watcher/tasks/config.yml +++ b/ansible/roles/watcher/tasks/config.yml @@ -35,3 +35,14 @@ - "watcher-api" - "watcher-engine" - "watcher-applier" + +- name: Check if policies shall be overwritten + local_action: stat path="{{ node_custom_config }}/watcher/policy.json" + register: watcher_policy + +- name: Copying over existing policy.json + template: + src: "{{ node_custom_config }}/watcher/policy.json" + dest: "{{ node_config_directory }}/watcher/policy.json" + when: + watcher_policy.stat.exists diff --git a/ansible/roles/watcher/tasks/precheck.yml b/ansible/roles/watcher/tasks/precheck.yml new file mode 100644 index 000000000..ed97d539c --- /dev/null +++ b/ansible/roles/watcher/tasks/precheck.yml @@ -0,0 +1 @@ +--- diff --git a/ansible/site.yml b/ansible/site.yml index dbe0f757c..49f6f89d1 100644 --- a/ansible/site.yml +++ b/ansible/site.yml @@ -14,6 +14,12 @@ tags: always - hosts: + - all + roles: + - role: prechecks + when: action == "precheck" + +- hosts: - ceph-mon - ceph-osd - ceph-rgw @@ -140,6 +146,17 @@ when: enable_glance | bool } - hosts: + - ironic-api + - ironic-conductor + - ironic-inspector + - ironic-pxe + serial: '{{ serial|default("0") }}' + roles: + - { role: ironic, + tags: ironic, + when: enable_ironic | bool } + +- hosts: - ceph-mon - compute - nova-api @@ -217,17 +234,6 @@ when: enable_murano | bool } - hosts: - - ironic-api - - ironic-conductor - - ironic-inspector - - ironic-pxe - serial: '{{ serial|default("0") }}' - roles: - - { role: ironic, - tags: ironic, - when: enable_ironic | bool } - -- hosts: - magnum-api - magnum-conductor serial: '{{ serial|default("0") }}' @@ -265,6 +271,7 @@ - hosts: - manila-api + - manila-data - manila-share - manila-scheduler serial: '{{ serial|default("0") }}' @@ -378,3 +385,12 @@ - { role: senlin, tags: senlin, when: enable_senlin | bool } + +- hosts: + - searchlight-api + - searchlight-listener + serial: '{{ serial|default("0") }}' + roles: + - { role: searchlight, + tags: searchlight, + when: enable_searchlight | bool } |
