tripleo-heat-templates/docker/compute-post.yaml
Ryan Hallisey 2928886f88 Allow container template to recognize an update
The deployment resource looks for a change in name when
running an update.  If there is no change in containers,
docker will recognize that and the deployment will return.
If there is a new available container, docker will swap out
the old running container for a new one.

Change-Id: I60d45b5ef45714e6e0140dfc80c14d6a12701f32
2016-01-20 12:39:34 +00:00

361 lines
13 KiB
YAML

heat_template_version: 2015-10-15
description: >
OpenStack compute node post deployment for Docker.
parameters:
servers:
type: json
NodeConfigIdentifiers:
type: json
description: Value which changes if the node configuration may need to be re-applied
DockerNamespace:
type: string
default: tripleoupstream
DockerComputeImage:
type: string
DockerComputeDataImage:
type: string
DockerLibvirtImage:
type: string
DockerNeutronAgentImage:
type: string
DockerOpenvswitchImage:
type: string
DockerOvsVswitchdImage:
type: string
DockerOpenvswitchDBImage:
type: string
LibvirtConfig:
type: string
default: "/etc/libvirt/libvirtd.conf"
NovaConfig:
type: string
default: "/etc/nova/nova.conf"
NeutronOpenvswitchAgentConfig:
type: string
default: "/etc/neutron/neutron.conf,/etc/neutron/plugins/ml2/ml2_conf.ini"
NeutronAgentConfig:
type: string
default: "/etc/neutron/neutron.conf,/etc/neutron/plugins/openvswitch/ovs_neutron_plugin.ini"
NeutronAgentPluginVolume:
type: string
description: The neutron agent plugin to mount into the neutron-agents container
default: "/var/lib/etc-data/neutron/plugins/ml2/openvswitch_agent.ini:/var/lib/kolla/config_files/ovs_neutron_plugin.ini:ro"
NeutronAgentOvsVolume:
type: string
description: The neutron agent ovs agents to mount into the neutron-agents container
default: " "
resources:
ComputePuppetConfig:
type: OS::Heat::SoftwareConfig
properties:
group: puppet
options:
enable_hiera: True
enable_facter: False
tags: package,file,concat,file_line,nova_config,neutron_config,neutron_agent_ovs,neutron_plugin_ml2
inputs:
- name: tripleo::packages::enable_install
type: Boolean
default: True
outputs:
- name: result
config:
get_file: ../puppet/manifests/overcloud_compute.pp
ComputePuppetDeployment:
type: OS::Heat::SoftwareDeployments
properties:
name: ComputePuppetDeployment
servers: {get_param: servers}
config: {get_resource: ComputePuppetConfig}
input_values:
update_identifier: {get_param: NodeConfigIdentifiers}
tripleo::packages::enable_install: True
CopyEtcConfig:
type: OS::Heat::SoftwareConfig
properties:
group: script
outputs:
- name: result
config: {get_file: ./copy-etc.sh}
CopyEtcDeployment:
type: OS::Heat::SoftwareDeployments
depends_on: ComputePuppetDeployment
properties:
name: CopyEtcDeployment
config: {get_resource: CopyEtcConfig}
servers: {get_param: servers}
CopyJsonConfig:
type: OS::Heat::SoftwareConfig
properties:
group: script
inputs:
- name: libvirt_config
- name: nova_config
- name: neutron_openvswitch_agent_config
- name: neutron_agent_config
config: |
#!/bin/python
import json
import os
data = {}
file_perms = '600'
libvirt_perms = '644'
libvirt_config = os.getenv('libvirt_config').split(',')
nova_config = os.getenv('nova_config').split(',')
neutron_openvswitch_agent_config = os.getenv('neutron_openvswitch_agent_config').split(',')
neutron_agent_config = os.getenv('neutron_agent_config').split(',')
# Command, Config_files, Owner, Perms
services = {'nova-libvirt': ['/usr/sbin/libvirtd', libvirt_config, 'root', libvirt_perms],
'nova-compute': ['/usr/bin/nova-compute', nova_config, 'nova', file_perms],
'neutron-openvswitch-agent': ['/usr/bin/neutron-openvswitch-agent', neutron_openvswitch_agent_config, 'neutron', file_perms],
'neutron-agent': ['/usr/bin/neutron-openvswitch-agent', neutron_agent_config, 'neutron', file_perms],
'ovs-vswitchd': ['/usr/sbin/ovs-vswitchd unix:/run/openvswitch/db.sock -vconsole:emer -vsyslog:err -vfile:info --mlockall --log-file=/var/log/openvswitch/ovs-vswitchd.log'],
'ovsdb-server': ['/usr/sbin/ovsdb-server /etc/openvswitch/conf.db -vconsole:emer -vsyslog:err -vfile:info --remote=punix:/run/openvswitch/db.sock --log-file=/var/log/openvswitch/ovsdb-server.log']
}
def build_config_files(config, owner, perms):
config_source = '/var/lib/kolla/config_files/'
config_files_dict = {}
source = os.path.basename(config)
dest = config
config_files_dict.update({'source': config_source + source,
'dest': dest,
'owner': owner,
'perm': perms})
return config_files_dict
for service in services:
if service != 'ovs-vswitchd' and service != 'ovsdb-server':
command = services.get(service)[0]
config_files = services.get(service)[1]
owner = services.get(service)[2]
perms = services.get(service)[3]
config_files_list = []
for config_file in config_files:
if service == 'nova-libvirt':
command = command + ' --config ' + config_file
else:
command = command + ' --config-file ' + config_file
data['command'] = command
config_files_dict = build_config_files(config_file, owner, perms)
config_files_list.append(config_files_dict)
data['config_files'] = config_files_list
else:
data['command'] = services.get(service)[0]
data['config_files'] = []
json_config_dir = '/var/lib/etc-data/json-config/'
with open(json_config_dir + service + '.json', 'w') as json_file:
json.dump(data, json_file, sort_keys=True, indent=4, separators=(',', ': '))
CopyJsonDeployment:
type: OS::Heat::SoftwareDeployments
depends_on: CopyEtcDeployment
properties:
name: CopyJsonDeployment
config: {get_resource: CopyJsonConfig}
servers: {get_param: servers}
input_values:
libvirt_config: {get_param: LibvirtConfig}
nova_config: {get_param: NovaConfig}
neutron_openvswitch_agent_config: {get_param: NeutronOpenvswitchAgentConfig}
neutron_agent_config: {get_param: NeutronAgentConfig}
NovaComputeContainersDeploymentOVS:
type: OS::Heat::StructuredDeployments
depends_on: CopyJsonDeployment
properties:
name: NovaComputeContainersDeploymentOVS
config: {get_resource: NovaComputeContainersConfigOVS}
servers: {get_param: servers}
NovaComputeContainersConfigOVS:
type: OS::Heat::StructuredConfig
properties:
group: docker-compose
config:
ovsvswitchd:
image:
list_join:
- '/'
- [ {get_param: DockerNamespace}, {get_param: DockerOvsVswitchdImage} ]
net: host
privileged: true
restart: always
volumes:
- /run:/run
- /lib/modules:/lib/modules:ro
- /var/lib/etc-data/json-config/ovs-vswitchd.json:/var/lib/kolla/config_files/config.json
environment:
- KOLLA_CONFIG_STRATEGY=COPY_ALWAYS
openvswitchdb:
image:
list_join:
- '/'
- [ {get_param: DockerNamespace}, {get_param: DockerOpenvswitchDBImage} ]
net: host
restart: always
volumes:
- /run:/run
- /var/lib/etc-data/json-config/ovsdb-server.json:/var/lib/kolla/config_files/config.json
environment:
- KOLLA_CONFIG_STRATEGY=COPY_ALWAYS
NovaComputeContainersDeploymentNetconfig:
type: OS::Heat::SoftwareDeployments
depends_on: NovaComputeContainersDeploymentOVS
properties:
name: NovaComputeContainersDeploymentNetconfig
config: {get_resource: NovaComputeContainersConfigNetconfig}
servers: {get_param: servers}
# We run os-net-config here because we depend on the ovs containers to be up
# and running before we configure the network. This allows explicit timing
# of the network configuration.
NovaComputeContainersConfigNetconfig:
type: OS::Heat::SoftwareConfig
properties:
group: script
outputs:
- name: result
config: |
#!/bin/bash
/usr/local/bin/run-os-net-config
LibvirtContainersDeployment:
type: OS::Heat::StructuredDeployments
depends_on: [CopyJsonDeployment, CopyEtcDeployment, ComputePuppetDeployment, NovaComputeContainersDeploymentNetconfig]
properties:
name: LibvirtContainersDeployment
config: {get_resource: LibvirtContainersConfig}
servers: {get_param: servers}
LibvirtContainersConfig:
type: OS::Heat::StructuredConfig
properties:
group: docker-compose
config:
computedata:
image:
list_join:
- '/'
- [ {get_param: DockerNamespace}, {get_param: DockerComputeDataImage} ]
container_name: computedata
volumes:
- /var/lib/nova/instances
- /var/lib/libvirt
libvirt:
image:
list_join:
- '/'
- [ {get_param: DockerNamespace}, {get_param: DockerLibvirtImage} ]
net: host
pid: host
privileged: true
restart: always
volumes:
- /run:/run
- /lib/modules:/lib/modules:ro
- /sys/fs/cgroup:/sys/fs/cgroup
- /var/lib/etc-data/json-config/nova-libvirt.json:/var/lib/kolla/config_files/config.json
- /var/lib/etc-data/libvirt/libvirtd.conf:/var/lib/kolla/config_files/libvirtd.conf
environment:
- KOLLA_CONFIG_STRATEGY=COPY_ALWAYS
volumes_from:
- computedata
NovaComputeContainersDeployment:
type: OS::Heat::StructuredDeployments
depends_on: [CopyJsonDeployment, CopyEtcDeployment, ComputePuppetDeployment, NovaComputeContainersDeploymentNetconfig, LibvirtContainersDeployment]
properties:
name: NovaComputeContainersDeployment
config: {get_resource: NovaComputeContainersConfig}
servers: {get_param: servers}
NovaComputeContainersConfig:
type: OS::Heat::StructuredConfig
properties:
group: docker-compose
config:
openvswitch:
image:
list_join:
- '/'
- [ {get_param: DockerNamespace}, {get_param: DockerOpenvswitchImage} ]
net: host
privileged: true
restart: always
volumes:
- /run:/run
- /lib/modules:/lib/modules:ro
- /var/lib/etc-data/json-config/neutron-openvswitch-agent.json:/var/lib/kolla/config_files/config.json
- /var/lib/etc-data/neutron/neutron.conf:/etc/kolla/neutron-openvswitch-agent/:ro
- /var/lib/etc-data/neutron/plugins/ml2/ml2_conf.ini:/var/lib/kolla/config_files/ml2_conf.ini:ro
- /var/lib/etc-data/neutron/neutron.conf:/var/lib/kolla/config_files/neutron.conf:ro
environment:
- KOLLA_CONFIG_STRATEGY=COPY_ALWAYS
volumes_from:
- computedata
neutronagent:
image:
list_join:
- '/'
- [ {get_param: DockerNamespace}, {get_param: DockerOpenvswitchImage} ]
net: host
pid: host
privileged: true
restart: always
volumes:
str_split:
- ","
- list_join:
- ","
- [ "/run:/run", "/lib/modules:/lib/modules:ro",
"/var/lib/etc-data/json-config/neutron-agent.json:/var/lib/kolla/config_files/config.json",
"/var/lib/etc-data/neutron/neutron.conf:/var/lib/kolla/config_files/neutron.conf:ro",
{get_param: NeutronAgentPluginVolume},
{get_param: NeutronAgentOvsVolume} ]
environment:
- KOLLA_CONFIG_STRATEGY=COPY_ALWAYS
volumes_from:
- computedata
novacompute:
image:
list_join:
- '/'
- [ {get_param: DockerNamespace}, {get_param: DockerComputeImage} ]
net: host
privileged: true
restart: always
volumes:
- /run:/run
- /lib/modules:/lib/modules:ro
- /var/lib/etc-data/json-config/nova-compute.json:/var/lib/kolla/config_files/config.json
- /var/lib/etc-data/nova/nova.conf:/var/lib/kolla/config_files/nova.conf:ro
environment:
- KOLLA_CONFIG_STRATEGY=COPY_ALWAYS
volumes_from:
- computedata
ExtraConfig:
depends_on: NovaComputeContainersDeployment
type: OS::TripleO::NodeExtraConfigPost
properties:
servers: {get_param: servers}