- name: Install Nova controller
hosts: controller
become: true
roles:
- role: init_database
vars:
database: nova
user: nova
- role: init_database
vars:
database: nova_api
user: nova
- role: init_database
vars:
database: nova_cell0
user: nova
- role: create_identity_user
vars:
user: nova
- role: create_identity_service
vars:
service: nova
type: compute
description: "OpenStack Compute"
endpoint: http://{{ hostvars['controller']['ansible_default_ipv4']['address'] }}:8774/v2.1
tasks:
- name: Install nova package
yum:
name:
- openstack-nova-api
- openstack-nova-conductor
- openstack-nova-novncproxy
- openstack-nova-scheduler
- name: Install Nova compute
hosts: compute
become: true
tasks:
- name: Install nova-compute package
yum:
name:
- openstack-nova-compute
- dmidecode
- name: Install edk2 for aarch64
yum:
name:
- edk2-aarch64
when: ansible_architecture == "aarch64"
- name: Check node architecture
shell: |
mkdir -p /etc/qemu/firmware
cat << EOF > /etc/qemu/firmware/edk2-aarch64.json
{
"description": "UEFI firmware for ARM64 virtual machines",
"interface-types": [
"uefi"
],
"mapping": {
"device": "flash",
"executable": {
"filename": "/usr/share/edk2/aarch64/QEMU_EFI-pflash.raw",
"format": "raw"
},
"nvram-template": {
"filename": "/usr/share/edk2/aarch64/vars-template-pflash.raw",
"format": "raw"
}
},
"targets": [
{
"architecture": "aarch64",
"machines": [
"virt-*"
]
}
],
"features": [
],
"tags": [
]
}
EOF
when: ansible_architecture == "aarch64" and "{{ openstack_release }}" != "train"
- name: Config mutual trust for nova
hosts: compute
become: true
tasks:
- name: Change login shell for nova
shell: |
usermod -s /bin/bash nova
- name: Create directory
file:
path: /var/lib/nova/.ssh
owner: nova
group: nova
mode: 0755
state: directory
- name: Copy file for hosts
copy:
src: "{{ item.src }}"
dest: "{{ item.dest }}"
mode: "{{ item.mode }}"
owner: nova
group: nova
remote_src: yes
with_items:
- { src: '/root/.ssh/id_rsa',dest: '/var/lib/nova/.ssh/id_rsa', mode: '0600'}
- { src: '/root/.ssh/authorized_keys',dest: '/var/lib/nova/.ssh/authorized_keys', mode: '0644'}
- name: Initialize config file
shell: |
cat << EOF > /var/lib/nova/.ssh/config
Host *
StrictHostKeyChecking no
EOF
- name: Init config file
hosts: all
become: true
tasks:
- name: Initialize config file
shell: |
cat << EOF > /etc/nova/nova.conf
[DEFAULT]
osapi_compute_workers = {{ nova_api_workers }}
metadata_workers = {{ nova_metadata_api_workers }}
enabled_apis = osapi_compute,metadata
transport_url = rabbit://openstack:{{ rabbitmq_password }}@{{ hostvars['controller']['ansible_default_ipv4']['address'] }}:5672/
my_ip = {{ ansible_default_ipv4['address'] }}
use_neutron = true
firewall_driver = nova.virt.firewall.NoopFirewallDriver
compute_driver=libvirt.LibvirtDriver
instances_path = /var/lib/nova/instances/
lock_path = /var/lib/nova/tmp
log_dir = /var/log/nova
state_path = /var/lib/nova
[api_database]
connection = mysql+pymysql://nova:{{ mysql_project_password }}@{{ hostvars['controller']['ansible_default_ipv4']['address'] }}/nova_api
[database]
connection = mysql+pymysql://nova:{{ mysql_project_password }}@{{ hostvars['controller']['ansible_default_ipv4']['address'] }}/nova
[api]
auth_strategy = keystone
[keystone_authtoken]
www_authenticate_uri = http://{{ hostvars['controller']['ansible_default_ipv4']['address'] }}:5000/
auth_url = http://{{ hostvars['controller']['ansible_default_ipv4']['address'] }}:5000/
memcached_servers = {{ hostvars['controller']['ansible_default_ipv4']['address'] }}:11211
auth_type = password
project_domain_name = Default
user_domain_name = Default
project_name = service
username = nova
password = {{ project_identity_password }}
[vnc]
enabled = true
server_listen = {{ ansible_default_ipv4['address'] }}
server_proxyclient_address = {{ ansible_default_ipv4['address'] }}
novncproxy_base_url = http://{{ hostvars['controller']['ansible_default_ipv4']['address'] }}:6080/vnc_auto.html
[glance]
api_servers = http://{{ hostvars['controller']['ansible_default_ipv4']['address'] }}:9292
[oslo_concurrency]
lock_path = /var/lib/nova/tmp
[placement]
region_name = RegionOne
project_domain_name = Default
project_name = service
auth_type = password
user_domain_name = Default
auth_url = http://{{ hostvars['controller']['ansible_default_ipv4']['address'] }}:5000/v3
username = placement
password = {{ project_identity_password }}
[neutron]
auth_url = http://{{ hostvars['controller']['ansible_default_ipv4']['address'] }}:5000
auth_type = password
project_domain_name = default
user_domain_name = default
region_name = RegionOne
project_name = service
username = neutron
password = {{ project_identity_password }}
service_metadata_proxy = true
metadata_proxy_shared_secret = secret
[conductor]
workers = {{ nova_conductor_workers }}
[scheduler]
workers = {{ nova_scheduler_workers }}
EOF
- name: Update Nova compute
hosts: compute
become: true
tasks:
- name: Update config file
shell: |
cat << EOF >> /etc/nova/nova.conf
[libvirt]
virt_type = qemu
num_pcie_ports = 28
EOF
if [[ `uname -m` == 'aarch64' ]];then
cat << EOF >> /etc/nova/nova.conf
cpu_mode = custom
cpu_model = cortex-a72
EOF
mkdir -p /usr/share/AAVMF
chown nova:nova /usr/share/AAVMF
ln -s /usr/share/edk2/aarch64/QEMU_EFI-pflash.raw /usr/share/AAVMF/AAVMF_CODE.fd
ln -s /usr/share/edk2/aarch64/vars-template-pflash.raw /usr/share/AAVMF/AAVMF_VARS.fd
cat << EOF >> /etc/libvirt/qemu.conf
nvram = ["/usr/share/AAVMF/AAVMF_CODE.fd:/usr/share/AAVMF/AAVMF_VARS.fd",
"/usr/share/edk2/aarch64/QEMU_EFI-pflash.raw:/usr/share/edk2/aarch64/vars-template-pflash.raw"]
EOF
fi
- name: Complete Nova controller install
hosts: controller
become: true
tasks:
- name: Sync database
shell: |
su -s /bin/sh -c "nova-manage api_db sync" nova
su -s /bin/sh -c "nova-manage cell_v2 map_cell0" nova
su -s /bin/sh -c "nova-manage cell_v2 create_cell --name=cell1 --verbose" nova
su -s /bin/sh -c "nova-manage db sync" nova
su -s /bin/sh -c "nova-manage cell_v2 list_cells" nova
- name: Start openstack-nova-api service
systemd:
name: openstack-nova-api
state: started
enabled: True
- name: Start openstack-nova-scheduler service
systemd:
name: openstack-nova-scheduler
state: started
enabled: True
- name: Start openstack-nova-conductor service
systemd:
name: openstack-nova-conductor
state: started
enabled: True
- name: Start openstack-nova-novncproxy service
systemd:
name: openstack-nova-novncproxy
state: started
enabled: True
- name: Complete Nova compute install
hosts: compute
become: true
tasks:
- name: Start libvirtd service
systemd:
name: libvirtd
state: started
enabled: True
- name: Start openstack-nova-compute service
systemd:
name: openstack-nova-compute
state: started
enabled: True
- name: Discover compute node
hosts: controller
become: true
tasks:
- name: Discover compute node
shell: su -s /bin/sh -c "nova-manage cell_v2 discover_hosts --verbose" nova