8b1bcf00cd
When using the Deployed Server feature, we rely on Puppet to install packages. But nova-compute/libvirt puppet is running in a container, so it cannot install anything on the host. We rely on virtlogd on the host, so we need to install it there some way. This patch uses host_prep_tasks for that, conditionally based on the EnablePackageInstall stack parameter value. Also multinode-container-upgrade.yaml env is copied as multinode-containers.yaml, to remove the naming confusion, as the environment file can be used for more than just upgrades. The old env file will be removed once we make the upgrade job use the new one (catch 22 type of issue). Change-Id: Ia9b3071daa15bc30792110e5f34cd859cc205fb8
152 lines
5.2 KiB
YAML
152 lines
5.2 KiB
YAML
heat_template_version: pike
|
|
|
|
description: >
|
|
OpenStack Libvirt Service
|
|
|
|
parameters:
|
|
DockerNamespace:
|
|
description: namespace
|
|
default: 'tripleoupstream'
|
|
type: string
|
|
DockerLibvirtImage:
|
|
description: image
|
|
default: 'centos-binary-nova-libvirt:latest'
|
|
type: string
|
|
# we configure libvirt via the nova-compute container due to coupling
|
|
# in the puppet modules
|
|
DockerNovaConfigImage:
|
|
description: image
|
|
default: 'centos-binary-nova-compute:latest'
|
|
type: string
|
|
EnablePackageInstall:
|
|
default: 'false'
|
|
description: Set to true to enable package installation
|
|
type: boolean
|
|
ServiceNetMap:
|
|
default: {}
|
|
description: Mapping of service_name -> network name. Typically set
|
|
via parameter_defaults in the resource registry. This
|
|
mapping overrides those in ServiceNetMapDefaults.
|
|
type: json
|
|
DefaultPasswords:
|
|
default: {}
|
|
type: json
|
|
RoleName:
|
|
default: ''
|
|
description: Role name on which the service is applied
|
|
type: string
|
|
RoleParameters:
|
|
default: {}
|
|
description: Parameters specific to the role
|
|
type: json
|
|
EndpointMap:
|
|
default: {}
|
|
description: Mapping of service endpoint -> protocol. Typically set
|
|
via parameter_defaults in the resource registry.
|
|
type: json
|
|
|
|
resources:
|
|
|
|
ContainersCommon:
|
|
type: ./containers-common.yaml
|
|
|
|
NovaLibvirtBase:
|
|
type: ../../puppet/services/nova-libvirt.yaml
|
|
properties:
|
|
EndpointMap: {get_param: EndpointMap}
|
|
ServiceNetMap: {get_param: ServiceNetMap}
|
|
DefaultPasswords: {get_param: DefaultPasswords}
|
|
RoleName: {get_param: RoleName}
|
|
RoleParameters: {get_param: RoleParameters}
|
|
|
|
outputs:
|
|
role_data:
|
|
description: Role data for the Libvirt service.
|
|
value:
|
|
service_name: {get_attr: [NovaLibvirtBase, role_data, service_name]}
|
|
config_settings:
|
|
map_merge:
|
|
- get_attr: [NovaLibvirtBase, role_data, config_settings]
|
|
# FIXME: we need to disable migration for now as the
|
|
# hieradata is common for all services, and this means nova
|
|
# and nova_placement puppet runs also try to configure
|
|
# libvirt, and they fail. We can remove this override when
|
|
# we have hieradata separation between containers.
|
|
- tripleo::profile::base::nova::manage_migration: false
|
|
step_config: &step_config
|
|
get_attr: [NovaLibvirtBase, role_data, step_config]
|
|
puppet_config:
|
|
config_volume: nova_libvirt
|
|
puppet_tags: nova_config
|
|
step_config: *step_config
|
|
config_image:
|
|
list_join:
|
|
- '/'
|
|
- [ {get_param: DockerNamespace}, {get_param: DockerNovaConfigImage} ]
|
|
kolla_config:
|
|
/var/lib/kolla/config_files/nova-libvirt.json:
|
|
command: /usr/sbin/libvirtd --config /etc/libvirt/libvirtd.conf
|
|
permissions:
|
|
- path: /var/log/nova
|
|
owner: nova:nova
|
|
recurse: true
|
|
docker_config:
|
|
step_3:
|
|
nova_libvirt:
|
|
image:
|
|
list_join:
|
|
- '/'
|
|
- [ {get_param: DockerNamespace}, {get_param: DockerLibvirtImage} ]
|
|
net: host
|
|
pid: host
|
|
privileged: true
|
|
restart: always
|
|
volumes:
|
|
list_concat:
|
|
- {get_attr: [ContainersCommon, volumes]}
|
|
-
|
|
- /var/lib/kolla/config_files/nova-libvirt.json:/var/lib/kolla/config_files/config.json:ro
|
|
- /var/lib/config-data/nova_libvirt/etc/libvirt/:/etc/libvirt/:ro
|
|
- /lib/modules:/lib/modules:ro
|
|
- /dev:/dev
|
|
- /run:/run
|
|
- /sys/fs/cgroup:/sys/fs/cgroup
|
|
- /var/lib/nova:/var/lib/nova
|
|
# Needed to use host's virtlogd
|
|
- /var/run/libvirt:/var/run/libvirt
|
|
- /var/lib/libvirt:/var/lib/libvirt
|
|
- /etc/libvirt/qemu:/etc/libvirt/qemu
|
|
- /var/log/libvirt/qemu:/var/log/libvirt/qemu:ro
|
|
- /var/log/containers/nova:/var/log/nova
|
|
environment:
|
|
- KOLLA_CONFIG_STRATEGY=COPY_ALWAYS
|
|
host_prep_tasks:
|
|
- name: create libvirt persistent data directories
|
|
file:
|
|
path: "{{ item }}"
|
|
state: directory
|
|
with_items:
|
|
- /etc/libvirt/qemu
|
|
- /var/lib/libvirt
|
|
- /var/log/containers/nova
|
|
- name: set enable_package_install fact
|
|
set_fact:
|
|
enable_package_install: {get_param: EnablePackageInstall}
|
|
# We use virtlogd on host, so when using Deployed Server
|
|
# feature, we need to ensure libvirt is installed.
|
|
- name: install libvirt-daemon
|
|
package:
|
|
name: libvirt-daemon
|
|
state: present
|
|
when: enable_package_install
|
|
- name: start virtlogd socket
|
|
service:
|
|
name: virtlogd.socket
|
|
state: started
|
|
enabled: yes
|
|
when: enable_package_install
|
|
upgrade_tasks:
|
|
- name: Stop and disable libvirtd service
|
|
tags: step2
|
|
service: name=libvirtd state=stopped enabled=no
|