Add Ansible support for Magnum
Change-Id: Idb25ac4d3148c9b9400cf675ac2e47d35cce6224 Implements: blueprint ansible-magnum
This commit is contained in:
parent
b178ed2021
commit
2cd5d9ed74
@ -104,6 +104,8 @@ murano_api_port: "8082"
|
||||
|
||||
ironic_api_port: "6385"
|
||||
|
||||
magnum_api_port: "9511"
|
||||
|
||||
|
||||
####################
|
||||
# Openstack options
|
||||
@ -155,6 +157,7 @@ enable_horizon: "yes"
|
||||
enable_swift: "no"
|
||||
enable_murano: "no"
|
||||
enable_ironic: "no"
|
||||
enable_magnum: "no"
|
||||
|
||||
ironic_keystone_user: "ironic"
|
||||
|
||||
|
@ -63,6 +63,9 @@ storage
|
||||
[ironic:children]
|
||||
control
|
||||
|
||||
[magnum:children]
|
||||
control
|
||||
|
||||
# Additional control implemented here. These groups allow you to control which
|
||||
# services run on which hosts at a per-service level.
|
||||
#
|
||||
@ -155,3 +158,10 @@ ironic
|
||||
|
||||
[ironic-pxe:children]
|
||||
ironic
|
||||
|
||||
# Magnum
|
||||
[magnum-api:children]
|
||||
magnum
|
||||
|
||||
[magnum-conductor:children]
|
||||
magnum
|
||||
|
@ -71,6 +71,9 @@ control
|
||||
[ceph-osd:children]
|
||||
storage
|
||||
|
||||
[magnum:children]
|
||||
control
|
||||
|
||||
|
||||
# Additional control implemented here. These groups allow you to control which
|
||||
# services run on which hosts at a per-service level.
|
||||
@ -164,3 +167,10 @@ ironic
|
||||
|
||||
[ironic-pxe:children]
|
||||
ironic
|
||||
|
||||
# Magnum
|
||||
[magnum-api:children]
|
||||
magnum
|
||||
|
||||
[magnum-conductor:children]
|
||||
magnum
|
||||
|
@ -132,6 +132,12 @@ $template MuranoEngineFile,"/var/log/murano/murano-engine.log"
|
||||
$template MuranoApiFile,"/var/log/murano/murano-api.log"
|
||||
:syslogtag,contains,"murano-api" ?MuranoApiFile
|
||||
|
||||
$template MagnumApiFile,"/var/log/magnum/magnum-api.log"
|
||||
:syslogtag,contains,"magnum-api" ?MagnumApiFile
|
||||
|
||||
$template MagnumConductorFile,"/var/log/magnum/magnum-conductor.log"
|
||||
:syslogtag,contains,"magnum-conductor" ?MagnumConductorFile
|
||||
|
||||
$template DynFile,"/var/log/syslog.log"
|
||||
*.* ?DynFile
|
||||
& ~
|
||||
|
@ -157,3 +157,11 @@ listen murano_api
|
||||
server {{ hostvars[host]['ansible_hostname'] }} {{ hostvars[host]['ansible_' + api_interface]['ipv4']['address'] }}:{{ murano_api_port }} check inter 2000 rise 2 fall 5
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
|
||||
{% if enable_magnum | bool %}
|
||||
listen magnum_api
|
||||
bind {{ kolla_internal_address }}:{{ magnum_api_port }}
|
||||
{% for host in groups['magnum-api'] %}
|
||||
server {{ hostvars[host]['ansible_hostname'] }} {{ hostvars[host]['ansible_' + api_interface]['ipv4']['address'] }}:{{ magnum_api_port }} check inter 2000 rise 2 fall 5
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
|
35
ansible/roles/magnum/defaults/main.yml
Normal file
35
ansible/roles/magnum/defaults/main.yml
Normal file
@ -0,0 +1,35 @@
|
||||
---
|
||||
project_name: "magnum"
|
||||
|
||||
####################
|
||||
# Database
|
||||
####################
|
||||
magnum_database_name: "magnum"
|
||||
magnum_database_user: "magnum"
|
||||
magnum_database_address: "{{ kolla_internal_address }}"
|
||||
|
||||
|
||||
####################
|
||||
# Docker
|
||||
####################
|
||||
magnum_api_image: "{{ docker_registry ~ '/' if docker_registry else '' }}{{ docker_namespace }}/{{ kolla_base_distro }}-{{ kolla_install_type }}-magnum-api"
|
||||
magnum_api_tag: "{{ openstack_release }}"
|
||||
magnum_api_image_full: "{{ magnum_api_image }}:{{ magnum_api_tag }}"
|
||||
magnum_conductor_image: "{{ docker_registry ~ '/' if docker_registry else '' }}{{ docker_namespace }}/{{ kolla_base_distro }}-{{ kolla_install_type }}-magnum-conductor"
|
||||
magnum_conductor_tag: "{{ openstack_release }}"
|
||||
magnum_conductor_image_full: "{{ magnum_conductor_image }}:{{ magnum_conductor_tag }}"
|
||||
|
||||
|
||||
####################
|
||||
# Openstack
|
||||
####################
|
||||
magnum_public_address: "{{ kolla_external_address }}"
|
||||
magnum_admin_address: "{{ kolla_internal_address }}"
|
||||
magnum_internal_address: "{{ kolla_internal_address }}"
|
||||
|
||||
magnum_logging_verbose: "{{ openstack_logging_verbose }}"
|
||||
magnum_logging_debug: "{{ openstack_logging_debug }}"
|
||||
|
||||
magnum_keystone_user: "magnum"
|
||||
|
||||
openstack_magnum_auth: "{'auth_url':'{{ openstack_auth_v2.auth_url }}','username':'{{ openstack_auth_v2.username }}','password':'{{ openstack_auth_v2.password }}','project_name':'{{ openstack_auth_v2.project_name }}'}"
|
3
ansible/roles/magnum/meta/main.yml
Normal file
3
ansible/roles/magnum/meta/main.yml
Normal file
@ -0,0 +1,3 @@
|
||||
---
|
||||
dependencies:
|
||||
- { role: common }
|
65
ansible/roles/magnum/tasks/bootstrap.yml
Normal file
65
ansible/roles/magnum/tasks/bootstrap.yml
Normal file
@ -0,0 +1,65 @@
|
||||
---
|
||||
- name: Creating Magnum database
|
||||
command: docker exec -t kolla_ansible /usr/bin/ansible localhost
|
||||
-m mysql_db
|
||||
-a "login_host='{{ database_address }}'
|
||||
login_user='{{ database_user }}'
|
||||
login_password='{{ database_password }}'
|
||||
name='{{ magnum_database_name }}'"
|
||||
register: database
|
||||
changed_when: "{{ database.stdout.find('localhost | SUCCESS => ') != -1 and (database.stdout.split('localhost | SUCCESS => ')[1]|from_json).changed }}"
|
||||
failed_when: database.stdout.split()[2] != 'SUCCESS'
|
||||
run_once: True
|
||||
|
||||
- name: Creating Magnum database user and setting permissions
|
||||
command: docker exec -t kolla_ansible /usr/bin/ansible localhost
|
||||
-m mysql_user
|
||||
-a "login_host='{{ database_address }}'
|
||||
login_user='{{ database_user }}'
|
||||
login_password='{{ database_password }}'
|
||||
name='{{ magnum_database_name }}'
|
||||
password='{{ magnum_database_password }}'
|
||||
host='%'
|
||||
priv='{{ magnum_database_name }}.*:ALL'
|
||||
append_privs='yes'"
|
||||
register: database_user_create
|
||||
changed_when: "{{ database.stdout.find('localhost | SUCCESS => ') != -1 and (database_user_create.stdout.split('localhost | SUCCESS => ')[1]|from_json).changed }}"
|
||||
failed_when: database_user_create.stdout.split()[2] != 'SUCCESS'
|
||||
run_once: True
|
||||
|
||||
- name: Starting Magnum bootstrap container
|
||||
docker:
|
||||
tty: True
|
||||
detach: False
|
||||
net: host
|
||||
pull: "{{ docker_pull_policy }}"
|
||||
restart_policy: "no"
|
||||
state: reloaded
|
||||
registry: "{{ docker_registry }}"
|
||||
username: "{{ docker_registry_username }}"
|
||||
password: "{{ docker_registry_password }}"
|
||||
insecure_registry: "{{ docker_insecure_registry }}"
|
||||
name: bootstrap_magnum
|
||||
image: "{{ magnum_api_image_full }}"
|
||||
volumes: "{{ node_config_directory }}/magnum-api/:{{ container_config_directory }}/:ro"
|
||||
env:
|
||||
KOLLA_BOOTSTRAP:
|
||||
KOLLA_CONFIG_STRATEGY: "{{ config_strategy }}"
|
||||
run_once: True
|
||||
when: database.stdout.find('localhost | SUCCESS => ') != -1 and (database.stdout.split('localhost | SUCCESS => ')[1]|from_json).changed
|
||||
|
||||
# https://github.com/ansible/ansible-modules-core/pull/1031
|
||||
- name: Waiting for bootstrap container to exit
|
||||
command: docker wait bootstrap_magnum
|
||||
register: bootstrap_result
|
||||
run_once: True
|
||||
failed_when: bootstrap_result.stdout != "0"
|
||||
when: database.stdout.find('localhost | SUCCESS => ') != -1 and (database.stdout.split('localhost | SUCCESS => ')[1]|from_json).changed
|
||||
|
||||
- name: Cleaning up Magnum boostrap container
|
||||
docker:
|
||||
tty: True
|
||||
name: bootstrap_magnum
|
||||
image: "{{ magnum_api_image_full }}"
|
||||
state: absent
|
||||
when: database.stdout.find('localhost | SUCCESS => ') != -1 and (database.stdout.split('localhost | SUCCESS => ')[1]|from_json).changed
|
50
ansible/roles/magnum/tasks/config.yml
Normal file
50
ansible/roles/magnum/tasks/config.yml
Normal file
@ -0,0 +1,50 @@
|
||||
---
|
||||
- include: ../../config.yml
|
||||
vars:
|
||||
service_name: "magnum-api"
|
||||
config_source:
|
||||
- "roles/{{ project_name }}/templates/magnum.conf.j2"
|
||||
- "/etc/kolla/config/global.conf"
|
||||
- "/etc/kolla/config/database.conf"
|
||||
- "/etc/kolla/config/messaging.conf"
|
||||
- "/etc/kolla/config/{{ project_name }}.conf"
|
||||
- "/etc/kolla/config/{{ project_name }}/{{ service_name }}.conf"
|
||||
config_template_dest:
|
||||
- "{{ node_templates_directory }}/{{ service_name }}/{{ project_name }}.conf_minimal"
|
||||
- "{{ node_templates_directory }}/{{ service_name }}/{{ project_name }}.conf_global"
|
||||
- "{{ node_templates_directory }}/{{ service_name }}/{{ project_name }}.conf_database"
|
||||
- "{{ node_templates_directory }}/{{ service_name }}/{{ project_name }}.conf_messaging"
|
||||
- "{{ node_templates_directory }}/{{ service_name }}/{{ project_name }}.conf_augment"
|
||||
- "{{ node_templates_directory }}/{{ service_name }}/{{ service_name }}.conf_augment"
|
||||
config_dest: "{{ node_config_directory }}/{{ service_name }}/magnum.conf"
|
||||
when: inventory_hostname in groups['magnum-api']
|
||||
|
||||
- name: Copying over Magnum API JSON configuration file
|
||||
template:
|
||||
src: "roles/magnum/templates/magnum-api.json.j2"
|
||||
dest: "{{ node_config_directory }}/magnum-api/config.json"
|
||||
|
||||
- include: ../../config.yml
|
||||
vars:
|
||||
service_name: "magnum-conductor"
|
||||
config_source:
|
||||
- "roles/{{ project_name }}/templates/magnum.conf.j2"
|
||||
- "/etc/kolla/config/global.conf"
|
||||
- "/etc/kolla/config/database.conf"
|
||||
- "/etc/kolla/config/messaging.conf"
|
||||
- "/etc/kolla/config/{{ project_name }}.conf"
|
||||
- "/etc/kolla/config/{{ project_name }}/{{ service_name }}.conf"
|
||||
config_template_dest:
|
||||
- "{{ node_templates_directory }}/{{ service_name }}/{{ project_name }}.conf_minimal"
|
||||
- "{{ node_templates_directory }}/{{ service_name }}/{{ project_name }}.conf_global"
|
||||
- "{{ node_templates_directory }}/{{ service_name }}/{{ project_name }}.conf_database"
|
||||
- "{{ node_templates_directory }}/{{ service_name }}/{{ project_name }}.conf_messaging"
|
||||
- "{{ node_templates_directory }}/{{ service_name }}/{{ project_name }}.conf_augment"
|
||||
- "{{ node_templates_directory }}/{{ service_name }}/{{ service_name }}.conf_augment"
|
||||
config_dest: "{{ node_config_directory }}/{{ service_name }}/magnum.conf"
|
||||
when: inventory_hostname in groups['magnum-conductor']
|
||||
|
||||
- name: Copying over Magnum conductor JSON configuration file
|
||||
template:
|
||||
src: "roles/magnum/templates/magnum-conductor.json.j2"
|
||||
dest: "{{ node_config_directory }}/magnum-conductor/config.json"
|
8
ansible/roles/magnum/tasks/main.yml
Normal file
8
ansible/roles/magnum/tasks/main.yml
Normal file
@ -0,0 +1,8 @@
|
||||
---
|
||||
- include: register.yml
|
||||
|
||||
- include: config.yml
|
||||
|
||||
- include: bootstrap.yml
|
||||
|
||||
- include: start.yml
|
37
ansible/roles/magnum/tasks/register.yml
Normal file
37
ansible/roles/magnum/tasks/register.yml
Normal file
@ -0,0 +1,37 @@
|
||||
---
|
||||
- name: Creating the Magnum service and endpoint
|
||||
command: docker exec -t kolla_ansible /usr/bin/ansible localhost
|
||||
-m kolla_keystone_service
|
||||
-a "service_name=magnum
|
||||
service_type=container
|
||||
description='Openstack Container Service'
|
||||
endpoint_region={{ openstack_region_name }}
|
||||
admin_url='http://{{ kolla_internal_address }}:{{ magnum_api_port }}/v1'
|
||||
internal_url='http://{{ kolla_internal_address }}:{{ magnum_api_port }}/v1'
|
||||
public_url='http://{{ kolla_external_address }}:{{ magnum_api_port }}/v1'
|
||||
region_name={{ openstack_region_name }}
|
||||
auth={{ '{{ openstack_magnum_auth }}' }}"
|
||||
-e "{'openstack_magnum_auth':{{ openstack_magnum_auth }}}"
|
||||
register: magnum_endpoint
|
||||
changed_when: "{{ magnum_endpoint.stdout.find('localhost | SUCCESS => ') != -1 and (magnum_endpoint.stdout.split('localhost | SUCCESS => ')[1]|from_json).changed }}"
|
||||
until: magnum_endpoint.stdout.split()[2] == 'SUCCESS'
|
||||
retries: 10
|
||||
delay: 5
|
||||
run_once: True
|
||||
|
||||
- name: Creating the Magnum project, user, and role
|
||||
command: docker exec -t kolla_ansible /usr/bin/ansible localhost
|
||||
-m kolla_keystone_user
|
||||
-a "project=service
|
||||
user=magnum
|
||||
password={{ magnum_keystone_password }}
|
||||
role=admin
|
||||
region_name={{ openstack_region_name }}
|
||||
auth={{ '{{ openstack_magnum_auth }}' }}"
|
||||
-e "{'openstack_magnum_auth':{{ openstack_magnum_auth }}}"
|
||||
register: magnum_user
|
||||
changed_when: "{{ magnum_user.stdout.find('localhost | SUCCESS => ') != -1 and (magnum_user.stdout.split('localhost | SUCCESS => ')[1]|from_json).changed }}"
|
||||
until: magnum_user.stdout.split()[2] == 'SUCCESS'
|
||||
retries: 10
|
||||
delay: 5
|
||||
run_once: True
|
42
ansible/roles/magnum/tasks/start.yml
Normal file
42
ansible/roles/magnum/tasks/start.yml
Normal file
@ -0,0 +1,42 @@
|
||||
---
|
||||
- name: Starting magnum-api container
|
||||
docker:
|
||||
tty: True
|
||||
net: host
|
||||
pull: "{{ docker_pull_policy }}"
|
||||
restart_policy: "{{ docker_restart_policy }}"
|
||||
restart_policy_retry: "{{ docker_restart_policy_retry }}"
|
||||
state: reloaded
|
||||
registry: "{{ docker_registry }}"
|
||||
username: "{{ docker_registry_username }}"
|
||||
password: "{{ docker_registry_password }}"
|
||||
insecure_registry: "{{ docker_insecure_registry }}"
|
||||
name: magnum_api
|
||||
image: "{{ magnum_api_image_full }}"
|
||||
volumes:
|
||||
- "{{ node_config_directory }}/magnum-api/:{{ container_config_directory }}/:ro"
|
||||
- "/var/lib/kolla/dev/log:/dev/log"
|
||||
env:
|
||||
KOLLA_CONFIG_STRATEGY: "{{ config_strategy }}"
|
||||
when: inventory_hostname in groups['magnum-api']
|
||||
|
||||
- name: Starting magnum-conductor container
|
||||
docker:
|
||||
tty: True
|
||||
net: host
|
||||
pull: "{{ docker_pull_policy }}"
|
||||
restart_policy: "{{ docker_restart_policy }}"
|
||||
restart_policy_retry: "{{ docker_restart_policy_retry }}"
|
||||
state: reloaded
|
||||
registry: "{{ docker_registry }}"
|
||||
username: "{{ docker_registry_username }}"
|
||||
password: "{{ docker_registry_password }}"
|
||||
insecure_registry: "{{ docker_insecure_registry }}"
|
||||
name: magnum_conductor
|
||||
image: "{{ magnum_conductor_image_full }}"
|
||||
volumes:
|
||||
- "{{ node_config_directory }}/magnum-conductor/:{{ container_config_directory }}/:ro"
|
||||
- "/var/lib/kolla/dev/log:/dev/log"
|
||||
env:
|
||||
KOLLA_CONFIG_STRATEGY: "{{ config_strategy }}"
|
||||
when: inventory_hostname in groups['magnum-conductor']
|
11
ansible/roles/magnum/templates/magnum-api.json.j2
Normal file
11
ansible/roles/magnum/templates/magnum-api.json.j2
Normal file
@ -0,0 +1,11 @@
|
||||
{
|
||||
"command": "/usr/bin/magnum-api --config-file /etc/magnum/magnum.conf",
|
||||
"config_files": [
|
||||
{
|
||||
"source": "{{ container_config_directory }}/magnum.conf",
|
||||
"dest": "/etc/magnum/magnum.conf",
|
||||
"owner": "magnum",
|
||||
"perm": "0600"
|
||||
}
|
||||
]
|
||||
}
|
11
ansible/roles/magnum/templates/magnum-conductor.json.j2
Normal file
11
ansible/roles/magnum/templates/magnum-conductor.json.j2
Normal file
@ -0,0 +1,11 @@
|
||||
{
|
||||
"command": "/usr/bin/magnum-conductor --config-file /etc/magnum/magnum.conf",
|
||||
"config_files": [
|
||||
{
|
||||
"source": "{{ container_config_directory }}/magnum.conf",
|
||||
"dest": "/etc/magnum/magnum.conf",
|
||||
"owner": "magnum",
|
||||
"perm": "0600"
|
||||
}
|
||||
]
|
||||
}
|
47
ansible/roles/magnum/templates/magnum.conf.j2
Normal file
47
ansible/roles/magnum/templates/magnum.conf.j2
Normal file
@ -0,0 +1,47 @@
|
||||
[DEFAULT]
|
||||
debug = {{ openstack_logging_debug }}
|
||||
verbose = {{ openstack_logging_verbose }}
|
||||
|
||||
use_syslog = true
|
||||
syslog_log_facility = LOG_LOCAL0
|
||||
|
||||
{% if service_name == 'magnum-api' %}
|
||||
[api]
|
||||
port = {{ magnum_api_port }}
|
||||
host = {{ hostvars[inventory_hostname]['ansible_' + api_interface]['ipv4']['address'] }}
|
||||
{% endif %}
|
||||
|
||||
[database]
|
||||
connection = mysql://{{ magnum_database_user }}:{{ magnum_database_password }}@{{ magnum_database_address}}/{{ magnum_database_name }}
|
||||
|
||||
[heat_client]
|
||||
region_name = {{ openstack_region_name }}
|
||||
|
||||
[keystone_authtoken]
|
||||
auth_uri = http://{{ kolla_internal_address }}:{{ keystone_public_port }}
|
||||
auth_uri = http://{{ kolla_internal_address }}:{{ keystone_admin_port }}
|
||||
auth_plugin = password
|
||||
project_domain_id = default
|
||||
user_domain_id = default
|
||||
project_name = service
|
||||
username = {{ magnum_keystone_user }}
|
||||
password = {{ magnum_keystone_password }}
|
||||
|
||||
[trustee]
|
||||
auth_uri = http://{{ kolla_internal_address }}:{{ keystone_public_port }}
|
||||
auth_uri = http://{{ kolla_internal_address }}:{{ keystone_admin_port }}
|
||||
auth_plugin = password
|
||||
project_domain_id = default
|
||||
user_domain_id = default
|
||||
project_name = service
|
||||
username = {{ magnum_keystone_user }}
|
||||
password = {{ magnum_keystone_password }}
|
||||
|
||||
[oslo_concurrency]
|
||||
lock_path = /var/lib/magnum/tmp
|
||||
|
||||
[oslo_messaging_rabbit]
|
||||
rabbit_userid = {{ rabbitmq_user }}
|
||||
rabbit_password = {{ rabbitmq_password }}
|
||||
rabbit_ha_queues = true
|
||||
rabbit_hosts = {% for host in groups['rabbitmq'] %}{{ hostvars[host]['ansible_' + api_interface]['ipv4']['address'] }}:{{ rabbitmq_port }}{% if not loop.last %},{% endif %}{% endfor %}
|
@ -140,3 +140,12 @@
|
||||
- { role: ironic,
|
||||
tags: ironic,
|
||||
when: enable_ironic | bool }
|
||||
|
||||
- hosts:
|
||||
- magnum-api
|
||||
- magnum-conductor
|
||||
- rabbitmq
|
||||
roles:
|
||||
- { role: magnum,
|
||||
tags: magnum,
|
||||
when: enable_magnum | bool }
|
||||
|
@ -3,6 +3,6 @@
|
||||
# Bootstrap and exit if KOLLA_BOOTSTRAP variable is set. This catches all cases
|
||||
# of the KOLLA_BOOTSTRAP variable being set, including empty.
|
||||
if [[ "${!KOLLA_BOOTSTRAP[@]}" ]]; then
|
||||
sudo -H -u magnum magnum-manage db_sync
|
||||
sudo -H -u magnum magnum-db-manage upgrade
|
||||
exit 0
|
||||
fi
|
||||
|
0
etc/kolla/config/magnum.conf
Normal file
0
etc/kolla/config/magnum.conf
Normal file
0
etc/kolla/config/magnum/magnum-api.conf
Normal file
0
etc/kolla/config/magnum/magnum-api.conf
Normal file
0
etc/kolla/config/magnum/magnum-conductor.conf
Normal file
0
etc/kolla/config/magnum/magnum-conductor.conf
Normal file
@ -87,6 +87,7 @@ neutron_external_interface: "eth1"
|
||||
# OpenStack services can be enabled or disabled with these options
|
||||
#enable_cinder: "yes"
|
||||
#enable_heat: "no"
|
||||
#enable_magnum: "no"
|
||||
|
||||
|
||||
###################
|
||||
|
@ -56,6 +56,9 @@ murano_keystone_password: "password"
|
||||
ironic_database_password: "password"
|
||||
ironic_keystone_password: "password"
|
||||
|
||||
magnum_database_password: "password"
|
||||
magnum_keystone_password: "password"
|
||||
|
||||
horizon_secret_key: "password"
|
||||
|
||||
####################
|
||||
|
@ -15,6 +15,7 @@ containers_to_kill=(
|
||||
keystone \
|
||||
kolla_ansible \
|
||||
log_data \
|
||||
magnum_{api,conductor} \
|
||||
mariadb{,_data} \
|
||||
murano_{api,engine} \
|
||||
neutron_{server,agents,linuxbridge_agent,openvswitch_agent} \
|
||||
|
Loading…
Reference in New Issue
Block a user