Merge "Convert JSON generations from bash to python"
This commit is contained in:
commit
5e30128459
@ -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:
|
||||
|
@ -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
|
Loading…
x
Reference in New Issue
Block a user