From 3a9186d6585d13528bf904a40556242c02ba4233 Mon Sep 17 00:00:00 2001 From: Ryan Hallisey Date: Tue, 13 Oct 2015 12:00:20 -0400 Subject: Update docker compute environment to use json config In liberty, Kolla copies around files and runs the service given a specified command, by reading a json file. This will update the existing work to follow that template by creating a json file for each of the services and pushing it into the containers. Change-Id: I5085d1896ea965fd8854765b055068a5ad30bcfd Co-Authored-By: Jeff Peeler --- docker/compute-post.yaml | 62 +++++++++++++-------- docker/firstboot/start_docker_agents.sh | 5 +- docker/generate_json_config.sh | 96 +++++++++++++++++++++++++++++++++ environments/docker-rdo.yaml | 13 ++--- 4 files changed, 144 insertions(+), 32 deletions(-) create mode 100644 docker/generate_json_config.sh diff --git a/docker/compute-post.yaml b/docker/compute-post.yaml index 0d049ebc..2a37b62c 100644 --- a/docker/compute-post.yaml +++ b/docker/compute-post.yaml @@ -67,8 +67,24 @@ resources: config: {get_resource: CopyEtcConfig} servers: {get_param: servers} + CopyJsonConfig: + type: OS::Heat::SoftwareConfig + properties: + group: script + outputs: + - name: result + config: {get_file: ./generate_json_config.sh} + + CopyJsonDeployment: + type: OS::Heat::SoftwareDeployments + depends_on: CopyEtcDeployment + properties: + config: {get_resource: CopyJsonConfig} + servers: {get_param: servers} + NovaComputeContainersDeploymentOVS: type: OS::Heat::StructuredDeployments + depends_on: CopyJsonDeployment properties: config: {get_resource: NovaComputeContainersConfigOVS} servers: {get_param: servers} @@ -87,8 +103,9 @@ resources: 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=CONFIG_EXTERNAL_COPY_ALWAYS + - KOLLA_CONFIG_STRATEGY=COPY_ALWAYS openvswitchdb: image: {get_param: DockerOpenvswitchDBImage} @@ -97,8 +114,9 @@ resources: restart: always volumes: - /run:/run + - /var/lib/etc-data/json-config/ovs-dbserver.json:/var/lib/kolla/config_files/config.json environment: - - KOLLA_CONFIG_STRATEGY=CONFIG_EXTERNAL_COPY_ALWAYS + - KOLLA_CONFIG_STRATEGY=COPY_ALWAYS NovaComputeContainersDeploymentNetconfig: type: OS::Heat::SoftwareDeployments @@ -122,7 +140,7 @@ resources: LibvirtContainersDeployment: type: OS::Heat::StructuredDeployments - depends_on: [CopyEtcDeployment, ComputePuppetDeployment, NovaComputeContainersDeploymentNetconfig] + depends_on: [CopyJsonDeployment, CopyEtcDeployment, ComputePuppetDeployment, NovaComputeContainersDeploymentNetconfig] properties: config: {get_resource: LibvirtContainersConfig} servers: {get_param: servers} @@ -135,6 +153,9 @@ resources: computedata: image: {get_param: DockerComputeDataImage} container_name: computedata + volumes: + - /var/lib/nova/instances + - /var/lib/libvirt libvirt: image: {get_param: DockerLibvirtImage} @@ -146,16 +167,16 @@ resources: volumes: - /run:/run - /lib/modules:/lib/modules:ro - - /var/lib/etc-data/libvirt/libvirtd.conf:/opt/kolla/libvirtd/libvirtd.conf - - /var/lib/nova/instances:/var/lib/nova/instances + - /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=CONFIG_EXTERNAL_COPY_ALWAYS + - KOLLA_CONFIG_STRATEGY=COPY_ALWAYS volumes_from: - computedata NovaComputeContainersDeployment: type: OS::Heat::StructuredDeployments - depends_on: [CopyEtcDeployment, ComputePuppetDeployment, NovaComputeContainersDeploymentNetconfig, LibvirtContainersDeployment] + depends_on: [CopyJsonDeployment, CopyEtcDeployment, ComputePuppetDeployment, NovaComputeContainersDeploymentNetconfig, LibvirtContainersDeployment] properties: config: {get_resource: NovaComputeContainersConfig} servers: {get_param: servers} @@ -174,15 +195,15 @@ resources: 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:/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=CONFIG_EXTERNAL_COPY_ALWAYS + - KOLLA_CONFIG_STRATEGY=COPY_ALWAYS volumes_from: - computedata - # FIXME: Kolla now uses a JSON model to run custom commands. We rebuilt a custom container to read in KOLLA_COMMAND_ARGS - # FIXME: Here we're subjugating kolla's start scripts because we want our custom run command neutronagent: image: {get_param: DockerOpenvswitchImage} container_name: neutronagent @@ -193,12 +214,11 @@ resources: volumes: - /run:/run - /lib/modules:/lib/modules:ro - - /var/lib/etc-data/neutron/neutron.conf:/etc/neutron/neutron.conf:ro - - /var/lib/etc-data/neutron/plugins/ml2/openvswitch_agent.ini:/etc/neutron/plugins/openvswitch/ovs_neutron_plugin.ini:ro + - /var/lib/etc-data/json-config/neutron-agent.json:/var/lib/kolla/config_files/config.json + - /var/lib/etc-data/neutron/plugins/ml2/openvswitch_agent.ini:/var/lib/kolla/config_files/ovs_neutron_plugin.ini:ro + - /var/lib/etc-data/neutron/neutron.conf:/var/lib/kolla/config_files/neutron.conf:ro environment: - - KOLLA_CONFIG_STRATEGY=CONFIG_EXTERNAL_COPY_ALWAYS - # FIXME: Kolla now uses a JSON model to run custom commands. We rebuilt a custom container to read in KOLLA_COMMAND_ARGS - - KOLLA_COMMAND_ARGS=--config-file /usr/share/neutron/neutron-dist.conf --config-file /etc/neutron/neutron.conf --config-file /etc/neutron/plugins/openvswitch/ovs_neutron_plugin.ini + - KOLLA_CONFIG_STRATEGY=COPY_ALWAYS volumes_from: - computedata @@ -212,14 +232,12 @@ resources: - /run:/run - /sys/fs/cgroup:/sys/fs/cgroup - /lib/modules:/lib/modules:ro - - /var/lib/etc-data/:/etc/:ro - - /var/lib/nova/instances:/var/lib/nova/instances + - /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 - # FIXME: this skips the kolla start.sh script and just starts Nova - # Ideally we'd have an environment that switched the kolla container - # to be externally configured. - command: /usr/bin/nova-compute ExtraConfig: depends_on: NovaComputeContainersDeployment diff --git a/docker/firstboot/start_docker_agents.sh b/docker/firstboot/start_docker_agents.sh index caf511bd..cb7c57ff 100644 --- a/docker/firstboot/start_docker_agents.sh +++ b/docker/firstboot/start_docker_agents.sh @@ -7,7 +7,7 @@ if ! hostname | grep compute &>/dev/null; then exit 0 fi -mkdir -p /var/lib/etc-data/ #FIXME: this should be a docker data container +mkdir -p /var/lib/etc-data/json-config #FIXME: this should be a docker data container # heat-docker-agents service cat < /etc/systemd/system/heat-docker-agents.service @@ -43,9 +43,6 @@ EOF /sbin/setenforce 0 /sbin/modprobe ebtables -# Create /var/lib/etc-data for now. FIXME: This should go into a data container. -#mkdir -p /var/lib/etc-data - echo nameserver 8.8.8.8 > /etc/resolv.conf # We need hostname -f to return in a centos container for the puppet hook diff --git a/docker/generate_json_config.sh b/docker/generate_json_config.sh new file mode 100644 index 00000000..5cf49226 --- /dev/null +++ b/docker/generate_json_config.sh @@ -0,0 +1,96 @@ +#!/bin/bash + +KOLLA_DEST=/var/lib/kolla/config_files +JSON_DEST=/var/lib/etc-data/json-config + +# For more config file generation, simply define a new SERVICE_DATA_ +# prefixed variable. The command string is quoted to include config-file +# arguments. Note that the variable name following SERVICE_DATA_ will be +# the filename the JSON config is written to. + +# [EXAMPLE]: SERVICE_DATA_=( ) + +SERVICE_DATA_NOVA_LIBVIRT=("/usr/sbin/libvirtd" libvirtd.conf /etc/libvirt/libvirtd.conf root 0644) +SERVICE_DATA_NOVA_COMPUTE=("/usr/bin/nova-compute" nova.conf /etc/nova/nova.conf nova 0600) +SERVICE_DATA_NEUTRON_OPENVSWITCH_AGENT=("/usr/bin/neutron-openvswitch-agent --config-file /etc/neutron/neutron.conf --config-file /etc/neutron/plugins/ml2/ml2_conf.ini" neutron.conf /etc/neutron/neutron.conf neutron 0600 ml2_conf.ini /etc/neutron/plugins/ml2/ml2_conf.ini neutron 0600) +SERVICE_DATA_NEUTRON_AGENT=("/usr/bin/neutron-openvswitch-agent --config-file /usr/share/neutron/neutron-dist.conf --config-file /etc/neutron/neutron.conf --config-file /etc/neutron/plugins/openvswitch/ovs_neutron_plugin.ini" neutron.conf /etc/neutron/neutron.conf neutron 0600 ovs_neutron_plugin.ini /etc/neutron/plugins/openvswitch/ovs_neutron_plugin.ini neutron 0600) +SERVICE_DATA_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") +SERVICE_DATA_OVS_DBSERVER=("/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") + +function create_json_header() { + local command=$1 + + echo "\ +{ + \"command\": \"${command[@]}\"," + +} + +function create_config_file_header() { + echo " \"config_files\": [" +} + +function create_config_file_block() { + local source=$KOLLA_DEST/$1 + local dest=$2 + local owner=$3 + local perm=$4 + + printf "\ +\t{ +\t \"source\": \"$source\", +\t \"dest\": \"$dest\", +\t \"owner\": \"$owner\", +\t \"perm\": \"$perm\" +\t}" +} + +function add_trailing_comma() { + printf ", \n" +} + +function create_config_file_trailer() { + echo -e "\n ]" +} + +function create_json_trailer() { + echo "}" +} + +function create_json_data() { + local config_data=$1 + shift + + create_json_header "$config_data" + create_config_file_header + while [ "$1" ]; do + create_config_file_block "$@" + shift 4 + if [ "$1" ]; then + add_trailing_comma + fi + done + create_config_file_trailer + create_json_trailer +} + +function write_json_data() { + + local name=$1[@] + local service_data=("${!name}") + + local service_name=${1#SERVICE_DATA_} # chop SERVICE_DATA_ prefix + service_name=${service_name//_/-} # switch underscore to dash + service_name=${service_name,,} # change to lowercase + + echo "Creating JSON file ${service_name}" + create_json_data "${service_data[@]}" > "$JSON_DEST/$service_name.json" +} + +function process_configs() { + for service in ${!SERVICE_DATA_*}; do + write_json_data "${service}" + done +} + +process_configs diff --git a/environments/docker-rdo.yaml b/environments/docker-rdo.yaml index d5791369..5c9f1cb2 100644 --- a/environments/docker-rdo.yaml +++ b/environments/docker-rdo.yaml @@ -7,11 +7,12 @@ resource_registry: parameters: NovaImage: fedora-atomic +# FIXME: When Kolla cuts liberty tag we can use kollaglue registry parameter_defaults: DockerComputeImage: rthallisey/centos-binary-nova-compute:liberty - DockerComputeDataImage: kollaglue/centos-rdo-nova-compute-data:liberty2 - DockerLibvirtImage: kollaglue/centos-rdo-nova-libvirt:liberty2 - DockerNeutronAgentImage: kollaglue/centos-rdo-neutron-agents:liberty2 - DockerOpenvswitchImage: rthallisey/centos-rdo-neutron-openvswitch-agent:latest - DockerOvsVswitchdImage: kollaglue/centos-rdo-ovs-vswitchd:liberty2 - DockerOpenvswitchDBImage: kollaglue/centos-rdo-ovs-db-server:liberty2 + DockerComputeDataImage: rthallisey/centos-binary-data:liberty + DockerLibvirtImage: rthallisey/centos-binary-nova-libvirt:liberty + DockerNeutronAgentImage: rthallisey/centos-binary-neutron-agents:liberty + DockerOpenvswitchImage: rthallisey/centos-binary-neutron-openvswitch-agent:liberty + DockerOvsVswitchdImage: rthallisey/centos-binary-openvswitch-vswitchd:liberty + DockerOpenvswitchDBImage: rthallisey/centos-binary-openvswitch-db-server:liberty -- cgit 1.2.3-korg