Convert JSON generations from bash to python
[apex-tripleo-heat-templates.git] / docker / compute-post.yaml
index 2a37b62..8f786f7 100644 (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.
 
@@ -9,6 +8,9 @@ parameters:
   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:
@@ -23,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:
 
@@ -71,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
@@ -81,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
@@ -95,7 +183,10 @@ resources:
       group: docker-compose
       config:
         ovsvswitchd:
-          image: {get_param: DockerOvsVswitchdImage}
+          image:
+            list_join:
+            - '/'
+            - [ {get_param: DockerNamespace}, {get_param: DockerOvsVswitchdImage} ]
           container_name: ovs-vswitchd
           net: host
           privileged: true
@@ -108,13 +199,16 @@ resources:
            - KOLLA_CONFIG_STRATEGY=COPY_ALWAYS
 
         openvswitchdb:
-          image: {get_param: DockerOpenvswitchDBImage}
-          container_name: ovs-db-server
+          image:
+            list_join:
+            - '/'
+            - [ {get_param: DockerNamespace}, {get_param: DockerOpenvswitchDBImage} ]
+          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
 
@@ -151,14 +245,20 @@ resources:
       group: docker-compose
       config:
         computedata:
-          image: {get_param: DockerComputeDataImage}
+          image:
+            list_join:
+            - '/'
+            - [ {get_param: DockerNamespace}, {get_param: DockerComputeDataImage} ]
           container_name: computedata
           volumes:
            - /var/lib/nova/instances
            - /var/lib/libvirt
 
         libvirt:
-          image: {get_param: DockerLibvirtImage}
+          image:
+            list_join:
+            - '/'
+            - [ {get_param: DockerNamespace}, {get_param: DockerLibvirtImage} ]
           container_name: libvirt
           net: host
           pid: host
@@ -167,6 +267,7 @@ resources:
           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:
@@ -187,7 +288,10 @@ resources:
       group: docker-compose
       config:
         openvswitch:
-          image: {get_param: DockerOpenvswitchImage}
+          image:
+            list_join:
+            - '/'
+            - [ {get_param: DockerNamespace}, {get_param: DockerOpenvswitchImage} ]
           container_name: openvswitch
           net: host
           privileged: true
@@ -205,32 +309,41 @@ resources:
            - computedata
 
         neutronagent:
-          image: {get_param: DockerOpenvswitchImage}
+          image:
+            list_join:
+            - '/'
+            - [ {get_param: DockerNamespace}, {get_param: DockerOpenvswitchImage} ]
           container_name: neutronagent
           net: host
           pid: host
           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:
            - computedata
 
         novacompute:
-          image: {get_param: DockerComputeImage}
+          image:
+            list_join:
+            - '/'
+            - [ {get_param: DockerNamespace}, {get_param: DockerComputeImage} ]
           container_name: novacompute
           net: host
           privileged: true
           restart: always
           volumes:
            - /run:/run
-           - /sys/fs/cgroup:/sys/fs/cgroup
            - /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