Merge "Convert JSON generations from bash to python"

This commit is contained in:
Jenkins 2016-01-04 19:04:12 +00:00 committed by Gerrit Code Review
commit 5e30128459
2 changed files with 101 additions and 108 deletions

View File

@ -1,5 +1,4 @@
heat_template_version: 2015-04-30
heat_template_version: 2015-10-15
description: >
OpenStack compute node post deployment for Docker.
@ -26,6 +25,26 @@ parameters:
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:
@ -74,9 +93,70 @@ resources:
type: OS::Heat::SoftwareConfig
properties:
group: script
outputs:
- name: result
config: {get_file: ./generate_json_config.sh}
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
@ -84,6 +164,11 @@ resources:
properties:
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
@ -118,12 +203,12 @@ resources:
list_join:
- '/'
- [ {get_param: DockerNamespace}, {get_param: DockerOpenvswitchDBImage} ]
container_name: ovs-db-server
container_name: ovsdb-server
net: host
restart: always
volumes:
- /run:/run
- /var/lib/etc-data/json-config/ovs-dbserver.json:/var/lib/kolla/config_files/config.json
- /var/lib/etc-data/json-config/ovsdb-server.json:/var/lib/kolla/config_files/config.json
environment:
- KOLLA_CONFIG_STRATEGY=COPY_ALWAYS
@ -234,11 +319,15 @@ resources:
privileged: true
restart: always
volumes:
- /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/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
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:

View File

@ -1,96 +0,0 @@
#!/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_NAME>=(<command> <source> <dest> <owner> <perms>)
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