Controller: Split out software config
authorDan Prince <dprince@redhat.com>
Tue, 28 Oct 2014 22:00:40 +0000 (18:00 -0400)
committerDan Prince <dprince@redhat.com>
Mon, 5 Jan 2015 18:53:28 +0000 (13:53 -0500)
This is a step towards supporting pluggable software configurations
in the heat templates. By moving controller-config out of controller.yaml
we make it possible to define alternate implementations by
changing the OS::TripleO::ControllerConfig value in the
overcloud-resource-registry.yaml heat environment file.

Change-Id: I228216a0b55ff2d384b281d9ad2a61b93d58dab9

controller-config.yaml [new file with mode: 0644]
controller.yaml
overcloud-resource-registry.yaml

diff --git a/controller-config.yaml b/controller-config.yaml
new file mode 100644 (file)
index 0000000..fad8879
--- /dev/null
@@ -0,0 +1,240 @@
+heat_template_version: 2014-10-16
+
+description: >
+  Controller Config for Controller.
+
+parameters:
+  # unused here but is a placeholder for other compute-config templates
+  # which may choose to create in-templates resources that require controller
+  controller_id:
+    type: string
+    hidden: true
+
+resources:
+
+  ControllerConfigImpl:
+    type: OS::Heat::StructuredConfig
+    properties:
+      group: os-apply-config
+      config:
+        admin-password: {get_input: admin_password}
+        admin-token: {get_input: admin_token}
+        bootstack:
+          public_interface_ip: {get_input: neutron_public_interface_ip}
+        bootstrap_host:
+          nodeid: {get_input: bootstack_nodeid}
+        cinder:
+          db: {get_input: cinder_dsn}
+          debug: {get_input: debug}
+          volume_size_mb: {get_input: cinder_lvm_loop_device_size}
+          service-password: {get_input: cinder_password}
+          iscsi-helper: {get_input: CinderISCSIHelper}
+        controller-address: {get_input: controller_host}
+        corosync:
+          bindnetaddr: {get_input: controller_host}
+          mcastport: 5577
+        pacemaker:
+          stonith_enabled : false
+          recheck_interval : 5
+          quorum_policy : ignore
+        db-password: unset
+        glance:
+          registry:
+            host: {get_input: controller_virtual_ip}
+          backend: swift
+          db: {get_input: glance_dsn}
+          debug: {get_input: debug}
+          host: {get_input: controller_virtual_ip}
+          port: {get_input: glance_port}
+          protocol: {get_input: glance_protocol}
+          service-password: {get_input: glance_password}
+          swift-store-user: service:glance
+          swift-store-key: {get_input: glance_password}
+          notifier-strategy: {get_input: glance_notifier_strategy}
+          log-file: {get_input: glance_log_file}
+        heat:
+          admin_password: {get_input: heat_password}
+          admin_tenant_name: service
+          admin_user: heat
+          auth_encryption_key: unset___________
+          db: {get_input: heat_dsn}
+          debug: {get_input: debug}
+          stack_domain_admin_password: {get_input: heat_stack_domain_admin_password}
+          watch_server_url: {get_input: heat.watch_server_url}
+          metadata_server_url: {get_input: heat.metadata_server_url}
+          waitcondition_server_url: {get_input: heat.waitcondition_server_url}
+        keystone:
+          db: {get_input: keystone_dsn}
+          debug: {get_input: debug}
+          host: {get_input: controller_virtual_ip}
+          ca_certificate: {get_input: keystone_ca_certificate}
+          signing_key: {get_input: keystone_signing_key}
+          signing_certificate: {get_input: keystone_signing_certificate}
+          ssl:
+              certificate: {get_input: keystone_ssl_certificate}
+              certificate_key: {get_input: keystone_ssl_certificate_key}
+        mysql:
+          innodb_buffer_pool_size: {get_input: mysql_innodb_buffer_pool_size}
+          local_bind: true
+          root-password: {get_input: mysql_root_password}
+          cluster_name: {get_input: mysql_cluster_name}
+        neutron:
+          debug: {get_input: debug}
+          flat-networks: {get_input: neutron_flat_networks}
+          host: {get_input: controller_virtual_ip}
+          metadata_proxy_shared_secret: {get_input: neutron_metadata_proxy_shared_secret}
+          agent_mode: {get_input: neutron_agent_mode}
+          router_distributed: {get_input: neutron_router_distributed}
+          mechanism_drivers: {get_input: neutron_mechanism_drivers}
+          allow_automatic_l3agent_failover: {get_input: neutron_allow_l3agent_failover}
+          ovs:
+            enable_tunneling: {get_input: neutron_enable_tunneling}
+            local_ip: {get_input: controller_host}
+            network_vlan_ranges: {get_input: neutron_network_vlan_ranges}
+            bridge_mappings: {get_input: neutron_bridge_mappings}
+            public_interface: {get_input: neutron_public_interface}
+            public_interface_raw_device: {get_input: neutron_public_interface_raw_device}
+            public_interface_route: {get_input: neutron_public_interface_default_route}
+            public_interface_tag: {get_input: neutron_public_interface_tag}
+            physical_bridge: br-ex
+            tenant_network_type: {get_input: neutron_tenant_network_type}
+            tunnel_types: {get_input: neutron_tunnel_types}
+          ovs_db: {get_input: neutron_dsn}
+          service-password: {get_input: neutron_password}
+          dnsmasq-options: {get_input: neutron_dnsmasq_options}
+        ceilometer:
+          db: {get_input: ceilometer_dsn}
+          debug: {get_input: debug}
+          metering_secret: {get_input: ceilometer_metering_secret}
+          service-password: {get_input: ceilometer_password}
+        snmpd:
+          export_MIB: UCD-SNMP-MIB
+          readonly_user_name: {get_input: snmpd_readonly_user_name}
+          readonly_user_password: {get_input: snmpd_readonly_user_password}
+        nova:
+          compute_driver: libvirt.LibvirtDriver
+          db: {get_input: nova_dsn}
+          default_floating_pool:
+            ext-net
+          host: {get_input: controller_virtual_ip}
+          metadata-proxy: true
+          service-password: {get_input: nova_password}
+        rabbit:
+          host: {get_input: controller_virtual_ip}
+          username: {get_input: rabbit_username}
+          password: {get_input: rabbit_password}
+          cookie: {get_input: rabbit_cookie}
+          rabbit_client_use_ssl: {get_input: rabbit_client_use_ssl}
+          rabbit_port: {get_input: rabbit_client_port}
+        ntp:
+          servers:
+              - {server: {get_input: ntp_server}, fudge: "stratum 0"}
+        virtual_interfaces:
+          instances:
+            - vrrp_instance_name: VI_CONTROL
+              virtual_router_id: 51
+              keepalive_interface: {get_input: control_virtual_interface}
+              priority: 101
+              virtual_ips:
+              - ip: {get_input: controller_virtual_ip}
+                interface: {get_input: control_virtual_interface}
+            - vrrp_instance_name: VI_PUBLIC
+              virtual_router_id: 52
+              keepalive_interface: {get_input: public_virtual_interface}
+              priority: 101
+              virtual_ips:
+              - ip: {get_input: public_virtual_ip}
+                interface: {get_input: public_virtual_interface}
+          vrrp_sync_groups:
+            - name: VG1
+              members:
+                - VI_CONTROL
+                - VI_PUBLIC
+        keepalived:
+          keepalive_interface: {get_input: public_virtual_interface}
+          priority: 101
+        virtual_ips:
+            -
+              ip: {get_input: controller_virtual_ip}
+              interface: {get_input: control_virtual_interface}
+            -
+              ip: {get_input: public_virtual_ip}
+              interface: {get_input: public_virtual_interface}
+        haproxy:
+          net_binds:
+            - ip: {get_input: controller_virtual_ip}
+          options:
+            - option httpchk GET /
+          services:
+            - name: keystone_admin
+              port: 35357
+              net_binds: &public_binds
+                - ip: {get_input: controller_virtual_ip}
+                - ip: {get_input: public_virtual_ip}
+            - name: keystone_public
+              port: 5000
+              net_binds: *public_binds
+            - name: horizon
+              port: 80
+              net_binds: *public_binds
+            - name: neutron
+              port: 9696
+              net_binds: *public_binds
+            - name: cinder
+              port: 8776
+              net_binds: *public_binds
+            - name: glance_api
+              port: 9292
+              net_binds: *public_binds
+            - name: glance_registry
+              port: 9191
+              net_binds: *public_binds
+              options: # overwrite options as glace_reg needs auth for http req
+            - name: heat_api
+              port: 8004
+              net_binds: *public_binds
+            - name: heat_cloudwatch
+              port: 8003
+              net_binds: *public_binds
+            - name: heat_cfn
+              port: 8000
+              net_binds: *public_binds
+            - name: mysql
+              port: 3306
+              extra_server_params:
+                - backup
+              options:
+                - timeout client 0
+                - timeout server 0
+            - name: nova_ec2
+              port: 8773
+            - name: nova_osapi
+              port: 8774
+              net_binds: *public_binds
+            - name: nova_metadata
+              port: 8775
+              net_binds: *public_binds
+            - name: nova_novncproxy
+              port: 6080
+              net_binds: *public_binds
+            - name: ceilometer
+              port: 8777
+              net_binds: *public_binds
+              options: # overwrite options as ceil needs auth for http req
+            - name: swift_proxy_server
+              port: 8080
+              net_binds: *public_binds
+              options:
+                - option httpchk GET /info
+            - name: rabbitmq
+              port: 5672
+              options:
+                - timeout client 0
+                - timeout server 0
+                - maxconn 1500
+
+outputs:
+  config_id:
+    description: The ID of the ControllerConfigImpl resource.
+    value:
+      {get_resource: ControllerConfigImpl}
index 9b3745d..739b683 100644 (file)
@@ -376,267 +376,10 @@ resources:
       user_data_format: SOFTWARE_CONFIG
 
   ControllerConfig:
-    type: OS::Heat::StructuredConfig
+    type: OS::TripleO::Controller::SoftwareConfig
     properties:
-      group: os-apply-config
-      config:
-        admin-password: {get_param: AdminPassword}
-        admin-token: {get_param: AdminToken}
-        bootstack:
-          public_interface_ip: {get_param: NeutronPublicInterfaceIP}
-        bootstrap_host:
-          nodeid: {get_input: bootstack_nodeid}
-        database:
-          host: &database_host
-            {get_param: VirtualIP}
-        cinder:
-          db:
-            list_join:
-              - ''
-              - - mysql://cinder:unset@
-                - *database_host
-                - /cinder
-          debug: {get_param: Debug}
-          volume_size_mb: {get_param: CinderLVMLoopDeviceSize}
-          service-password: {get_param: CinderPassword}
-          iscsi-helper: {get_param: CinderISCSIHelper}
-        controller-address: {get_input: controller_host}
-        corosync:
-          bindnetaddr: {get_input: controller_host}
-          mcastport: 5577
-        pacemaker:
-          stonith_enabled : false
-          recheck_interval : 5
-          quorum_policy : ignore
-        db-password: unset
-        glance:
-          registry:
-            host: {get_input: controller_virtual_ip}
-          backend: swift
-          db:
-            list_join:
-              - ''
-              - - mysql://glance:unset@
-                - *database_host
-                - /glance
-          debug: {get_param: Debug}
-          host: {get_input: controller_virtual_ip}
-          port: {get_param: GlancePort}
-          protocol: {get_param: GlanceProtocol}
-          service-password: {get_param: GlancePassword}
-          swift-store-user: service:glance
-          swift-store-key: {get_param: GlancePassword}
-          notifier-strategy: {get_param: GlanceNotifierStrategy}
-          log-file: {get_param: GlanceLogFile}
-        heat:
-          admin_password: {get_param: HeatPassword}
-          admin_tenant_name: service
-          admin_user: heat
-          auth_encryption_key: unset___________
-          db:
-            list_join:
-              - ''
-              - - mysql://heat:unset@
-                - *database_host
-                - /heat
-          debug: {get_param: Debug}
-          stack_domain_admin_password: {get_param: HeatStackDomainAdminPassword}
-          watch_server_url: {get_input: heat.watch_server_url}
-          metadata_server_url: {get_input: heat.metadata_server_url}
-          waitcondition_server_url: {get_input: heat.waitcondition_server_url}
-        keystone:
-          db:
-            list_join:
-              - ''
-              - - mysql://keystone:unset@
-                - *database_host
-                - /keystone
-          debug: {get_param: Debug}
-          host: {get_input: controller_virtual_ip}
-          ca_certificate: {get_param: KeystoneCACertificate}
-          signing_key: {get_param: KeystoneSigningKey}
-          signing_certificate: {get_param: KeystoneSigningCertificate}
-          ssl:
-              certificate: {get_param: KeystoneSSLCertificate}
-              certificate_key: {get_param: KeystoneSSLCertificateKey}
-        mysql:
-          innodb_buffer_pool_size: {get_param: MysqlInnodbBufferPoolSize}
-          local_bind: true
-          root-password: {get_param: MysqlRootPassword}
-          cluster_name:
-            str_replace:
-              template: tripleo-CLUSTER
-              params:
-                CLUSTER: {get_param: MysqlClusterUniquePart}
-        neutron:
-          debug: {get_param: Debug}
-          flat-networks: {get_param: NeutronFlatNetworks}
-          host: {get_input: controller_virtual_ip}
-          metadata_proxy_shared_secret: {get_param: NeutronMetadataProxySharedSecret}
-          agent_mode: {get_param: NeutronAgentMode}
-          router_distributed: {get_param: NeutronDVR}
-          mechanism_drivers: {get_param: NeutronMechanismDrivers}
-          allow_automatic_l3agent_failover: {get_param: NeutronAllowL3AgentFailover}
-          ovs:
-            enable_tunneling: {get_input: neutron_enable_tunneling}
-            local_ip: {get_input: controller_host}
-            network_vlan_ranges: {get_param: NeutronNetworkVLANRanges}
-            bridge_mappings: {get_param: NeutronBridgeMappings}
-            public_interface: {get_param: NeutronPublicInterface}
-            public_interface_raw_device: {get_param: NeutronPublicInterfaceRawDevice}
-            public_interface_route: {get_param: NeutronPublicInterfaceDefaultRoute}
-            public_interface_tag: {get_param: NeutronPublicInterfaceTag}
-            physical_bridge: br-ex
-            tenant_network_type: {get_param: NeutronNetworkType}
-            tunnel_types: {get_param: NeutronTunnelTypes}
-          ovs_db:
-            list_join:
-              - ''
-              - - mysql://neutron:unset@
-                - *database_host
-                - /ovs_neutron?charset=utf8
-          service-password: {get_param: NeutronPassword}
-          dnsmasq-options: {get_param: NeutronDnsmasqOptions}
-        ceilometer:
-          db:
-            list_join:
-              - ''
-              - - mysql://ceilometer:unset@
-                - *database_host
-                - /ceilometer
-          debug: {get_param: Debug}
-          metering_secret: {get_param: CeilometerMeteringSecret}
-          service-password: {get_param: CeilometerPassword}
-        snmpd:
-          export_MIB: UCD-SNMP-MIB
-          readonly_user_name: {get_param: SnmpdReadonlyUserName}
-          readonly_user_password: {get_param: SnmpdReadonlyUserPassword}
-        nova:
-          compute_driver: libvirt.LibvirtDriver
-          db:
-            list_join:
-              - ''
-              - - mysql://nova:unset@
-                - *database_host
-                - /nova
-          default_floating_pool:
-            ext-net
-          host: {get_input: controller_virtual_ip}
-          metadata-proxy: true
-          service-password: {get_param: NovaPassword}
-        rabbit:
-          host: {get_input: controller_virtual_ip}
-          username: {get_param: RabbitUserName}
-          password: {get_param: RabbitPassword}
-          cookie: {get_param: RabbitCookie}
-          rabbit_client_use_ssl: {get_param: RabbitClientUseSSL}
-          rabbit_port: {get_param: RabbitClientPort}
-        ntp:
-          servers:
-              - {server: {get_param: NtpServer}, fudge: "stratum 0"}
-        virtual_interfaces:
-          instances:
-            - vrrp_instance_name: VI_CONTROL
-              virtual_router_id: 51
-              keepalive_interface: {get_param: ControlVirtualInterface}
-              priority: 101
-              virtual_ips:
-              - ip: {get_param: VirtualIP}
-                interface: {get_param: ControlVirtualInterface}
-            - vrrp_instance_name: VI_PUBLIC
-              virtual_router_id: 52
-              keepalive_interface: {get_param: PublicVirtualInterface}
-              priority: 101
-              virtual_ips:
-              - ip: {get_param: PublicVirtualIP}
-                interface: {get_param: PublicVirtualInterface}
-          vrrp_sync_groups:
-            - name: VG1
-              members:
-                - VI_CONTROL
-                - VI_PUBLIC
-        keepalived:
-          keepalive_interface: {get_param: PublicVirtualInterface}
-          priority: 101
-        virtual_ips:
-            -
-              ip: {get_param: VirtualIP}
-              interface: {get_param: ControlVirtualInterface}
-            -
-              ip: {get_param: PublicVirtualIP}
-              interface: {get_param: PublicVirtualInterface}
-        haproxy:
-          net_binds:
-            - ip: {get_param: VirtualIP}
-          options:
-            - option httpchk GET /
-          services:
-            - name: keystone_admin
-              port: 35357
-              net_binds: &public_binds
-                - ip: {get_param: VirtualIP}
-                - ip: {get_param: PublicVirtualIP}
-            - name: keystone_public
-              port: 5000
-              net_binds: *public_binds
-            - name: horizon
-              port: 80
-              net_binds: *public_binds
-            - name: neutron
-              port: 9696
-              net_binds: *public_binds
-            - name: cinder
-              port: 8776
-              net_binds: *public_binds
-            - name: glance_api
-              port: 9292
-              net_binds: *public_binds
-            - name: glance_registry
-              port: 9191
-              net_binds: *public_binds
-              options: # overwrite options as glace_reg needs auth for http req
-            - name: heat_api
-              port: 8004
-              net_binds: *public_binds
-            - name: heat_cloudwatch
-              port: 8003
-              net_binds: *public_binds
-            - name: heat_cfn
-              port: 8000
-              net_binds: *public_binds
-            - name: mysql
-              port: 3306
-              extra_server_params:
-                - backup
-              options:
-                - timeout client 0
-                - timeout server 0
-            - name: nova_ec2
-              port: 8773
-            - name: nova_osapi
-              port: 8774
-              net_binds: *public_binds
-            - name: nova_metadata
-              port: 8775
-              net_binds: *public_binds
-            - name: nova_novncproxy
-              port: 6080
-              net_binds: *public_binds
-            - name: ceilometer
-              port: 8777
-              net_binds: *public_binds
-              options: # overwrite options as ceil needs auth for http req
-            - name: swift_proxy_server
-              port: 8080
-              net_binds: *public_binds
-              options:
-                - option httpchk GET /info
-            - name: rabbitmq
-              port: 5672
-              options:
-                - timeout client 0
-                - timeout server 0
-                - maxconn 1500
+      # allow configs to create sub-resources attached to the controller
+      controller_id: {get_resource: Controller}
 
   ControllerPassthroughConfig:
     type: OS::Heat::StructuredConfig
@@ -651,10 +394,10 @@ resources:
       config: {get_input: passthrough_config_specific}
 
   ControllerDeployment:
-    type: OS::Heat::StructuredDeployment
+    type: OS::TripleO::SoftwareDeployment
     properties:
       signal_transport: NO_SIGNAL
-      config: {get_resource: ControllerConfig}
+      config: {get_attr: [ControllerConfig, config_id]}
       server: {get_resource: Controller}
       input_values:
         bootstack_nodeid: {get_attr: [Controller, name]}
@@ -679,6 +422,104 @@ resources:
             - - 'http://'
               - {get_param: VirtualIP}
               - ':8000/v1/waitcondition'
+        admin_password: {get_param: AdminPassword}
+        admin_token: {get_param: AdminToken}
+        neutron_public_interface_ip: {get_param: NeutronPublicInterfaceIP}
+        debug: {get_param: Debug}
+        cinder_lvm_loop_device_size: {get_param: CinderLVMLoopDeviceSize}
+        cinder_password: {get_param: CinderPassword}
+        cinder_iscsi_helper: {get_param: CinderISCSIHelper}
+        cinder_dsn:
+          list_join:
+            - ''
+            - - 'mysql://cinder:unset@'
+              - {get_param: VirtualIP}
+              - '/cinder'
+        glance_port: {get_param: GlancePort}
+        glance_protocol: {get_param: GlanceProtocol}
+        glance_password: {get_param: GlancePassword}
+        glance_notifier_strategy: {get_param: GlanceNotifierStrategy}
+        glance_log_file: {get_param: GlanceLogFile}
+        glance_dsn:
+          list_join:
+            - ''
+            - - 'mysql://glance:unset@'
+              - {get_param: VirtualIP}
+              - '/glance'
+        heat_password: {get_param: HeatPassword}
+        heat_stack_domain_admin_password: {get_param: HeatStackDomainAdminPassword}
+        heat_dsn:
+          list_join:
+            - ''
+            - - 'mysql://heat:unset@'
+              - {get_param: VirtualIP}
+              - '/heat'
+        keystone_ca_certificate: {get_param: KeystoneCACertificate}
+        keystone_signing_key: {get_param: KeystoneSigningKey}
+        keystone_signing_certificate: {get_param: KeystoneSigningCertificate}
+        keystone_ssl_certificate: {get_param: KeystoneSSLCertificate}
+        keystone_ssl_certificate_key: {get_param: KeystoneSSLCertificateKey}
+        keystone_dsn:
+          list_join:
+            - ''
+            - - 'mysql://keystone:unset@'
+              - {get_param: VirtualIP}
+              - '/keystone'
+        mysql_innodb_buffer_pool_size: {get_param: MysqlInnodbBufferPoolSize}
+        mysql_root_password: {get_param: MysqlRootPassword}
+        mysql_cluster_name:
+          str_replace:
+            template: tripleo-CLUSTER
+            params:
+              CLUSTER: {get_param: MysqlClusterUniquePart}
+        neutron_flat_networks: {get_param: NeutronFlatNetworks}
+        neutron_metadata_proxy_shared_secret: {get_param: NeutronMetadataProxySharedSecret}
+        neutron_agent_mode: {get_param: NeutronAgentMode}
+        neutron_router_distributed: {get_param: NeutronDVR}
+        neutron_mechanism_drivers: {get_param: NeutronMechanismDrivers}
+        neutron_allow_l3agent_failover: {get_param: NeutronAllowL3AgentFailover}
+        neutron_network_vlan_ranges: {get_param: NeutronNetworkVLANRanges}
+        neutron_bridge_mappings: {get_param: NeutronBridgeMappings}
+        neutron_public_interface: {get_param: NeutronPublicInterface}
+        neutron_public_interface_raw_device: {get_param: NeutronPublicInterfaceRawDevice}
+        neutron_public_interface_default_route: {get_param: NeutronPublicInterfaceDefaultRoute}
+        neutron_public_interface_tag: {get_param: NeutronPublicInterfaceTag}
+        neutron_tenant_network_type: {get_param: NeutronNetworkType}
+        neutron_tunnel_types: {get_param: NeutronTunnelTypes}
+        neutron_password: {get_param: NeutronPassword}
+        neutron_dnsmasq_options: {get_param: NeutronDnsmasqOptions}
+        neutron_dsn:
+          list_join:
+            - ''
+            - - 'mysql://neutron:unset@'
+              - {get_param: VirtualIP}
+              - '/ovs_neutron?charset=utf8'
+        ceilometer_metering_secret: {get_param: CeilometerMeteringSecret}
+        ceilometer_password: {get_param: CeilometerPassword}
+        ceilometer_dsn:
+          list_join:
+            - ''
+            - - 'mysql://ceilometer:unset@'
+              - {get_param: VirtualIP}
+              - '/ceilometer'
+        snmpd_readonly_user_name: {get_param: SnmpdReadonlyUserName}
+        snmpd_readonly_user_password: {get_param: SnmpdReadonlyUserPassword}
+        nova_password: {get_param: NovaPassword}
+        nova_dsn:
+          list_join:
+            - ''
+            - - 'mysql://nova:unset@'
+              - {get_param: VirtualIP}
+              - '/nova'
+        rabbit_username: {get_param: RabbitUserName}
+        rabbit_password: {get_param: RabbitPassword}
+        rabbit_cookie: {get_param: RabbitCookie}
+        rabbit_client_use_ssl: {get_param: RabbitClientUseSSL}
+        rabbit_client_port: {get_param: RabbitClientPort}
+        ntp_server: {get_param: NtpServer}
+        control_virtual_interface: {get_param: ControlVirtualInterface}
+        public_virtual_interface: {get_param: PublicVirtualInterface}
+        public_virtual_ip: {get_param: PublicVirtualIP}
 
   SSLConfig:
     type: OS::Heat::StructuredConfig
index 476758b..09a3363 100644 (file)
@@ -5,4 +5,5 @@ resource_registry:
   OS::TripleO::SoftwareDeployment: OS::Heat::StructuredDeployment
   OS::TripleO::Net::SoftwareConfig: net-config-noop.yaml
   OS::TripleO::Controller: controller.yaml
+  OS::TripleO::Controller::SoftwareConfig: controller-config.yaml
   OS::TripleO::ObjectStorage: swift-storage.yaml