From f567ba6dea9ef6147ba9214606f9a4d434e99eb1 Mon Sep 17 00:00:00 2001 From: Dan Prince Date: Tue, 28 Oct 2014 18:00:40 -0400 Subject: [PATCH] Controller: Split out software config 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 | 240 +++++++++++++++++++++++++ controller.yaml | 365 +++++++++++---------------------------- overcloud-resource-registry.yaml | 1 + 3 files changed, 344 insertions(+), 262 deletions(-) create mode 100644 controller-config.yaml diff --git a/controller-config.yaml b/controller-config.yaml new file mode 100644 index 00000000..fad8879f --- /dev/null +++ b/controller-config.yaml @@ -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} diff --git a/controller.yaml b/controller.yaml index 9b3745dc..739b683c 100644 --- a/controller.yaml +++ b/controller.yaml @@ -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 diff --git a/overcloud-resource-registry.yaml b/overcloud-resource-registry.yaml index 476758b0..09a3363b 100644 --- a/overcloud-resource-registry.yaml +++ b/overcloud-resource-registry.yaml @@ -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 -- 2.16.6