Merge "Basic support for deploying Ironic in overcloud"
This commit is contained in:
@@ -28,6 +28,9 @@ parameter_defaults:
|
||||
HeatCfnInternal: {protocol: 'http', port: '8000', host: 'IP_ADDRESS'}
|
||||
HeatCfnPublic: {protocol: 'https', port: '13005', host: 'CLOUDNAME'}
|
||||
HorizonPublic: {protocol: 'https', port: '443', host: 'CLOUDNAME'}
|
||||
IronicAdmin: {protocol: 'http', port: '6385', host: 'IP_ADDRESS'}
|
||||
IronicInternal: {protocol: 'http', port: '6385', host: 'IP_ADDRESS'}
|
||||
IronicPublic: {protocol: 'https', port: '13385', host: 'CLOUDNAME'}
|
||||
KeystoneAdmin: {protocol: 'http', port: '35357', host: 'IP_ADDRESS'}
|
||||
KeystoneInternal: {protocol: 'http', port: '5000', host: 'IP_ADDRESS'}
|
||||
KeystonePublic: {protocol: 'https', port: '13000', host: 'CLOUDNAME'}
|
||||
|
||||
@@ -192,3 +192,18 @@ Sahara:
|
||||
uri_suffixes:
|
||||
'': /v1.1/%(tenant_id)s
|
||||
port: 8386
|
||||
|
||||
Ironic:
|
||||
Internal:
|
||||
vip_param: IronicApi
|
||||
uri_suffixes:
|
||||
'': /v1
|
||||
Public:
|
||||
vip_param: Public
|
||||
uri_suffixes:
|
||||
'': /v1
|
||||
Admin:
|
||||
vip_param: IronicApi
|
||||
uri_suffixes:
|
||||
'': /v1
|
||||
port: 6385
|
||||
|
||||
@@ -15,6 +15,7 @@ parameters:
|
||||
GlanceRegistryVirtualIP: {type: string, default: ''}
|
||||
GnocchiApiVirtualIP: {type: string, default: ''}
|
||||
HeatApiVirtualIP: {type: string, default: ''}
|
||||
IronicApiVirtualIP: {type: string, default: ''}
|
||||
KeystoneAdminApiVirtualIP: {type: string, default: ''}
|
||||
KeystonePublicApiVirtualIP: {type: string, default: ''}
|
||||
MysqlVirtualIP: {type: string, default: ''}
|
||||
@@ -49,6 +50,9 @@ parameters:
|
||||
HeatCfnInternal: {protocol: http, port: '8000', host: IP_ADDRESS}
|
||||
HeatCfnPublic: {protocol: http, port: '8000', host: IP_ADDRESS}
|
||||
HorizonPublic: {protocol: http, port: '80', host: IP_ADDRESS}
|
||||
IronicAdmin: {protocol: http, port: '6385', host: IP_ADDRESS}
|
||||
IronicInternal: {protocol: http, port: '6385', host: IP_ADDRESS}
|
||||
IronicPublic: {protocol: http, port: '6385', host: IP_ADDRESS}
|
||||
KeystoneAdmin: {protocol: http, port: '35357', host: IP_ADDRESS}
|
||||
KeystoneInternal: {protocol: http, port: '5000', host: IP_ADDRESS}
|
||||
KeystonePublic: {protocol: http, port: '5000', host: IP_ADDRESS}
|
||||
@@ -1076,6 +1080,123 @@ outputs:
|
||||
IP_ADDRESS: {get_param: PublicVirtualIP}
|
||||
- ':'
|
||||
- get_param: [EndpointMap, HorizonPublic, port]
|
||||
IronicAdmin:
|
||||
host:
|
||||
str_replace:
|
||||
template:
|
||||
get_param: [EndpointMap, IronicAdmin, host]
|
||||
params:
|
||||
CLOUDNAME: {get_param: CloudName}
|
||||
IP_ADDRESS: {get_param: IronicApiVirtualIP}
|
||||
port:
|
||||
get_param: [EndpointMap, IronicAdmin, port]
|
||||
protocol:
|
||||
get_param: [EndpointMap, IronicAdmin, protocol]
|
||||
uri:
|
||||
list_join:
|
||||
- ''
|
||||
- - get_param: [EndpointMap, IronicAdmin, protocol]
|
||||
- ://
|
||||
- str_replace:
|
||||
template:
|
||||
get_param: [EndpointMap, IronicAdmin, host]
|
||||
params:
|
||||
CLOUDNAME: {get_param: CloudName}
|
||||
IP_ADDRESS: {get_param: IronicApiVirtualIP}
|
||||
- ':'
|
||||
- get_param: [EndpointMap, IronicAdmin, port]
|
||||
- /v1
|
||||
uri_no_suffix:
|
||||
list_join:
|
||||
- ''
|
||||
- - get_param: [EndpointMap, IronicAdmin, protocol]
|
||||
- ://
|
||||
- str_replace:
|
||||
template:
|
||||
get_param: [EndpointMap, IronicAdmin, host]
|
||||
params:
|
||||
CLOUDNAME: {get_param: CloudName}
|
||||
IP_ADDRESS: {get_param: IronicApiVirtualIP}
|
||||
- ':'
|
||||
- get_param: [EndpointMap, IronicAdmin, port]
|
||||
IronicInternal:
|
||||
host:
|
||||
str_replace:
|
||||
template:
|
||||
get_param: [EndpointMap, IronicInternal, host]
|
||||
params:
|
||||
CLOUDNAME: {get_param: CloudName}
|
||||
IP_ADDRESS: {get_param: IronicApiVirtualIP}
|
||||
port:
|
||||
get_param: [EndpointMap, IronicInternal, port]
|
||||
protocol:
|
||||
get_param: [EndpointMap, IronicInternal, protocol]
|
||||
uri:
|
||||
list_join:
|
||||
- ''
|
||||
- - get_param: [EndpointMap, IronicInternal, protocol]
|
||||
- ://
|
||||
- str_replace:
|
||||
template:
|
||||
get_param: [EndpointMap, IronicInternal, host]
|
||||
params:
|
||||
CLOUDNAME: {get_param: CloudName}
|
||||
IP_ADDRESS: {get_param: IronicApiVirtualIP}
|
||||
- ':'
|
||||
- get_param: [EndpointMap, IronicInternal, port]
|
||||
- /v1
|
||||
uri_no_suffix:
|
||||
list_join:
|
||||
- ''
|
||||
- - get_param: [EndpointMap, IronicInternal, protocol]
|
||||
- ://
|
||||
- str_replace:
|
||||
template:
|
||||
get_param: [EndpointMap, IronicInternal, host]
|
||||
params:
|
||||
CLOUDNAME: {get_param: CloudName}
|
||||
IP_ADDRESS: {get_param: IronicApiVirtualIP}
|
||||
- ':'
|
||||
- get_param: [EndpointMap, IronicInternal, port]
|
||||
IronicPublic:
|
||||
host:
|
||||
str_replace:
|
||||
template:
|
||||
get_param: [EndpointMap, IronicPublic, host]
|
||||
params:
|
||||
CLOUDNAME: {get_param: CloudName}
|
||||
IP_ADDRESS: {get_param: PublicVirtualIP}
|
||||
port:
|
||||
get_param: [EndpointMap, IronicPublic, port]
|
||||
protocol:
|
||||
get_param: [EndpointMap, IronicPublic, protocol]
|
||||
uri:
|
||||
list_join:
|
||||
- ''
|
||||
- - get_param: [EndpointMap, IronicPublic, protocol]
|
||||
- ://
|
||||
- str_replace:
|
||||
template:
|
||||
get_param: [EndpointMap, IronicPublic, host]
|
||||
params:
|
||||
CLOUDNAME: {get_param: CloudName}
|
||||
IP_ADDRESS: {get_param: PublicVirtualIP}
|
||||
- ':'
|
||||
- get_param: [EndpointMap, IronicPublic, port]
|
||||
- /v1
|
||||
uri_no_suffix:
|
||||
list_join:
|
||||
- ''
|
||||
- - get_param: [EndpointMap, IronicPublic, protocol]
|
||||
- ://
|
||||
- str_replace:
|
||||
template:
|
||||
get_param: [EndpointMap, IronicPublic, host]
|
||||
params:
|
||||
CLOUDNAME: {get_param: CloudName}
|
||||
IP_ADDRESS: {get_param: PublicVirtualIP}
|
||||
- ':'
|
||||
- get_param: [EndpointMap, IronicPublic, port]
|
||||
KeystoneAdmin:
|
||||
host:
|
||||
str_replace:
|
||||
|
||||
@@ -134,6 +134,8 @@ resource_registry:
|
||||
OS::TripleO::Services::HeatApiCfn: puppet/services/heat-api-cfn.yaml
|
||||
OS::TripleO::Services::HeatApiCloudwatch: puppet/services/heat-api-cloudwatch.yaml
|
||||
OS::TripleO::Services::HeatEngine: puppet/services/heat-engine.yaml
|
||||
OS::TripleO::Services::IronicApi: puppet/services/ironic-api.yaml
|
||||
OS::TripleO::Services::IronicConductor: puppet/services/ironic-conductor.yaml
|
||||
OS::TripleO::Services::NeutronDhcpAgent: puppet/services/neutron-dhcp.yaml
|
||||
OS::TripleO::Services::NeutronL3Agent: puppet/services/neutron-l3.yaml
|
||||
OS::TripleO::Services::NeutronMetadataAgent: puppet/services/neutron-metadata.yaml
|
||||
|
||||
@@ -507,6 +507,7 @@ parameters:
|
||||
CinderIscsiNetwork: storage
|
||||
GlanceApiNetwork: storage
|
||||
GlanceRegistryNetwork: internal_api
|
||||
IronicApiNetwork: internal_api
|
||||
KeystoneAdminApiNetwork: ctlplane # allows undercloud to config endpoints
|
||||
KeystonePublicApiNetwork: internal_api
|
||||
NeutronApiNetwork: internal_api
|
||||
@@ -784,6 +785,7 @@ resources:
|
||||
GlanceRegistryVirtualIP: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, GlanceRegistryNetwork]}]}
|
||||
GnocchiApiVirtualIP: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, GnocchiApiNetwork]}]}
|
||||
HeatApiVirtualIP: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, HeatApiNetwork]}]}
|
||||
IronicApiVirtualIP: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, IronicApiNetwork]}]}
|
||||
KeystoneAdminApiVirtualIP: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, KeystoneAdminApiNetwork]}]}
|
||||
KeystonePublicApiVirtualIP: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, KeystonePublicApiNetwork]}]}
|
||||
MysqlVirtualIP: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, MysqlNetwork]}]}
|
||||
@@ -1109,6 +1111,7 @@ resources:
|
||||
keystone_public_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, KeystonePublicApiNetwork]}]}
|
||||
keystone_admin_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, KeystoneAdminApiNetwork]}]}
|
||||
sahara_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, SaharaApiNetwork]}]}
|
||||
ironic_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, IronicApiNetwork]}]}
|
||||
DeployIdentifier: {get_param: DeployIdentifier}
|
||||
UpdateIdentifier: {get_param: UpdateIdentifier}
|
||||
|
||||
@@ -1232,6 +1235,7 @@ resources:
|
||||
public_virtual_ip: {get_attr: [VipMap, net_ip_map, external]}
|
||||
internal_api_virtual_ip: {get_attr: [VipMap, net_ip_map, internal_api]}
|
||||
sahara_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, SaharaApiNetwork]}]}
|
||||
ironic_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, IronicApiNetwork]}]}
|
||||
storage_virtual_ip: {get_attr: [VipMap, net_ip_map, storage]}
|
||||
storage_mgmt_virtual_ip: {get_attr: [VipMap, net_ip_map, storage_mgmt]}
|
||||
|
||||
@@ -1505,6 +1509,9 @@ outputs:
|
||||
HeatInternalVip:
|
||||
description: VIP for Heat API internal endpoint
|
||||
value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, HeatApiNetwork]}]}
|
||||
IronicInternalVip:
|
||||
description: VIP for Ironic API internal endpoint
|
||||
value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, IronicApiNetwork]}]}
|
||||
KeystoneInternalVip:
|
||||
description: VIP for Keystone API internal endpoint
|
||||
value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, KeystonePublicApiNetwork]}]}
|
||||
|
||||
@@ -56,6 +56,8 @@ parameters:
|
||||
type: comma_delimited_list
|
||||
sahara_api_node_ips:
|
||||
type: comma_delimited_list
|
||||
ironic_api_node_ips:
|
||||
type: comma_delimited_list
|
||||
|
||||
DeployIdentifier:
|
||||
type: string
|
||||
@@ -294,6 +296,14 @@ resources:
|
||||
list_join:
|
||||
- "','"
|
||||
- {get_param: sahara_api_node_ips}
|
||||
ironic_api_node_ips:
|
||||
str_replace:
|
||||
template: "['SERVERS_LIST']"
|
||||
params:
|
||||
SERVERS_LIST:
|
||||
list_join:
|
||||
- "','"
|
||||
- {get_param: ironic_api_node_ips}
|
||||
|
||||
# NOTE(gfidente): interpolation with %{} in the
|
||||
# hieradata file can't be used as it returns string
|
||||
@@ -306,6 +316,7 @@ resources:
|
||||
nova::rabbit_hosts: *rabbit_nodes_array
|
||||
keystone::rabbit_hosts: *rabbit_nodes_array
|
||||
sahara::rabbit_hosts: *rabbit_nodes_array
|
||||
ironic::rabbit_hosts: *rabbit_nodes_array
|
||||
|
||||
deploy_identifier: {get_param: DeployIdentifier}
|
||||
update_identifier: {get_param: UpdateIdentifier}
|
||||
|
||||
@@ -737,6 +737,7 @@ resources:
|
||||
ceph_cluster_network: {get_attr: [NetIpMap, net_ip_subnet_map, {get_param: [ServiceNetMap, CephClusterNetwork]}]}
|
||||
ceph_public_network: {get_attr: [NetIpMap, net_ip_subnet_map, {get_param: [ServiceNetMap, CephPublicNetwork]}]}
|
||||
ceph_public_ip: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, CephPublicNetwork]}]}
|
||||
ironic_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, IronicApiNetwork]}]}
|
||||
|
||||
# Map heat metadata into hiera datafiles
|
||||
ControllerConfig:
|
||||
|
||||
@@ -53,6 +53,14 @@ heat::db::mysql::allowed_hosts:
|
||||
- '%'
|
||||
- "%{hiera('mysql_bind_host')}"
|
||||
|
||||
# Ironic
|
||||
ironic::db::mysql::user: ironic
|
||||
ironic::db::mysql::host: "%{hiera('mysql_virtual_ip')}"
|
||||
ironic::db::mysql::dbname: ironic
|
||||
ironic::db::mysql::allowed_hosts:
|
||||
- '%'
|
||||
- "%{hiera('mysql_bind_host')}"
|
||||
|
||||
# Ceilometer
|
||||
ceilometer::db::mysql::user: ceilometer
|
||||
ceilometer::db::mysql::host: "%{hiera('mysql_virtual_ip')}"
|
||||
|
||||
43
puppet/services/ironic-api.yaml
Normal file
43
puppet/services/ironic-api.yaml
Normal file
@@ -0,0 +1,43 @@
|
||||
heat_template_version: 2016-04-08
|
||||
|
||||
description: >
|
||||
OpenStack Ironic API configured with Puppet
|
||||
|
||||
parameters:
|
||||
EndpointMap:
|
||||
default: {}
|
||||
description: Mapping of service endpoint -> protocol. Typically set
|
||||
via parameter_defaults in the resource registry.
|
||||
type: json
|
||||
IronicPassword:
|
||||
description: The password for the Ironic service and db account, used by the Ironic services
|
||||
type: string
|
||||
hidden: true
|
||||
|
||||
resources:
|
||||
IronicBase:
|
||||
type: ./ironic-base.yaml
|
||||
properties:
|
||||
EndpointMap: {get_param: EndpointMap}
|
||||
|
||||
outputs:
|
||||
role_data:
|
||||
description: Role data for the Ironic API role.
|
||||
value:
|
||||
config_settings:
|
||||
map_merge:
|
||||
- get_attr: [IronicBase, role_data, config_settings]
|
||||
# NOTE(dtantsur): the my_ip parameter is heavily overloaded in
|
||||
# ironic. It's used as a default value for e.g. TFTP server IP,
|
||||
# glance and neutron endpoints, virtual console IP. We override
|
||||
# the TFTP server IP in ironic-conductor.yaml as it should not be
|
||||
# the VIP, but rather a real IP of the controller.
|
||||
- ironic::my_ip: {get_param: [EndpointMap, MysqlInternal, host]}
|
||||
ironic::api::admin_password: {get_param: IronicPassword}
|
||||
ironic::keystone::auth::public_url: {get_param: [EndpointMap, IronicPublic, uri]}
|
||||
ironic::keystone::auth::internal_url: {get_param: [EndpointMap, IronicInternal, uri]}
|
||||
ironic::keystone::auth::admin_url: {get_param: [EndpointMap, IronicAdmin, uri]}
|
||||
ironic::keystone::auth::password: {get_param: IronicPassword }
|
||||
|
||||
step_config: |
|
||||
include ::tripleo::profile::base::ironic::api
|
||||
64
puppet/services/ironic-base.yaml
Normal file
64
puppet/services/ironic-base.yaml
Normal file
@@ -0,0 +1,64 @@
|
||||
heat_template_version: 2016-04-08
|
||||
|
||||
description: >
|
||||
OpenStack Ironic services configured with Puppet
|
||||
|
||||
parameters:
|
||||
EndpointMap:
|
||||
default: {}
|
||||
description: Mapping of service endpoint -> protocol. Typically set
|
||||
via parameter_defaults in the resource registry.
|
||||
type: json
|
||||
Debug:
|
||||
default: ''
|
||||
description: Set to True to enable debugging on all services.
|
||||
type: string
|
||||
IronicPassword:
|
||||
description: The password for the Ironic service and db account, used by the Ironic services
|
||||
type: string
|
||||
hidden: true
|
||||
RabbitUserName:
|
||||
default: guest
|
||||
description: The username for RabbitMQ
|
||||
type: string
|
||||
RabbitPassword:
|
||||
description: The password for RabbitMQ
|
||||
type: string
|
||||
hidden: true
|
||||
RabbitClientPort:
|
||||
default: 5672
|
||||
description: Set rabbit subscriber port, change this if using SSL
|
||||
type: number
|
||||
RabbitClientUseSSL:
|
||||
default: false
|
||||
description: >
|
||||
Rabbit client subscriber parameter to specify
|
||||
an SSL connection to the RabbitMQ host.
|
||||
type: string
|
||||
|
||||
outputs:
|
||||
role_data:
|
||||
description: Role data for the Ironic role.
|
||||
value:
|
||||
config_settings:
|
||||
ironic_dsn: &ironic_dsn
|
||||
list_join:
|
||||
- ''
|
||||
- - {get_param: [EndpointMap, MysqlInternal, protocol]}
|
||||
- '://ironic:'
|
||||
- {get_param: IronicPassword}
|
||||
- '@'
|
||||
- {get_param: [EndpointMap, MysqlInternal, host]}
|
||||
- '/ironic'
|
||||
ironic::admin_tenant_name: 'service'
|
||||
ironic::database_connection: *ironic_dsn
|
||||
ironic::debug: {get_param: Debug}
|
||||
ironic::rabbit_userid: {get_param: RabbitUserName}
|
||||
ironic::rabbit_password: {get_param: RabbitPassword}
|
||||
ironic::rabbit_port: {get_param: RabbitClientPort}
|
||||
ironic::rabbit_use_ssl: {get_param: RabbitClientUseSSL}
|
||||
ironic::db::mysql::password: {get_param: IronicPassword}
|
||||
ironic::keystone::auth::tenant: 'service'
|
||||
|
||||
step_config: |
|
||||
include ::tripleo::profile::base::ironic
|
||||
36
puppet/services/ironic-conductor.yaml
Normal file
36
puppet/services/ironic-conductor.yaml
Normal file
@@ -0,0 +1,36 @@
|
||||
heat_template_version: 2016-04-08
|
||||
|
||||
description: >
|
||||
OpenStack Ironic conductor configured with Puppet
|
||||
|
||||
parameters:
|
||||
EndpointMap:
|
||||
default: {}
|
||||
description: Mapping of service endpoint -> protocol. Typically set
|
||||
via parameter_defaults in the resource registry.
|
||||
type: json
|
||||
IronicEnabledDrivers:
|
||||
default: ['pxe_ipmitool', 'agent_ipmitool']
|
||||
description: Enabled Ironic drivers
|
||||
type: comma_delimited_list
|
||||
|
||||
resources:
|
||||
IronicBase:
|
||||
type: ./ironic-base.yaml
|
||||
properties:
|
||||
EndpointMap: {get_param: EndpointMap}
|
||||
|
||||
outputs:
|
||||
role_data:
|
||||
description: Role data for the Ironic conductor role.
|
||||
value:
|
||||
config_settings:
|
||||
map_merge:
|
||||
- get_attr: [IronicBase, role_data, config_settings]
|
||||
- ironic::enabled_drivers: {get_param: IronicEnabledDrivers}
|
||||
# Prevent tftp_server from defaulting to my_ip setting, which is
|
||||
# controller VIP, not a real IP.
|
||||
ironic::drivers::pxe::tftp_server: {get_input: ironic_api_network}
|
||||
|
||||
step_config: |
|
||||
include ::tripleo::profile::base::ironic::conductor
|
||||
@@ -37,6 +37,7 @@ resources:
|
||||
internal_api_virtual_ip: {get_input: internal_api_virtual_ip}
|
||||
storage_virtual_ip: {get_input: storage_virtual_ip}
|
||||
storage_mgmt_virtual_ip: {get_input: storage_mgmt_virtual_ip}
|
||||
ironic_api_vip: {get_input: ironic_api_vip}
|
||||
# public_virtual_ip and controller_virtual_ip are needed in
|
||||
# both HAproxy & keepalived.
|
||||
tripleo::haproxy::public_virtual_ip: {get_input: public_virtual_ip}
|
||||
|
||||
Reference in New Issue
Block a user