heat_template_version: rocky description: > HAProxy deployment with TLS enabled, powered by certmonger parameters: ServiceData: default: {} description: Dictionary packing service data type: json ServiceNetMap: default: {} description: Mapping of service_name -> network name. Typically set via parameter_defaults in the resource registry. This mapping overrides those in ServiceNetMapDefaults. type: json DefaultPasswords: default: {} type: json RoleName: default: '' description: Role name on which the service is applied type: string RoleParameters: default: {} description: Parameters specific to the role type: json EndpointMap: default: {} description: Mapping of service endpoint -> protocol. Typically set via parameter_defaults in the resource registry. type: json HAProxyInternalTLSCertsDirectory: default: '/etc/pki/tls/certs/haproxy' type: string HAProxyInternalTLSKeysDirectory: default: '/etc/pki/tls/private/haproxy' type: string CertificateKeySize: type: string default: '2048' description: Specifies the private key size used when creating the certificate. HAProxyCertificateKeySize: type: string default: '' description: Override the private key size used when creating the certificate for this service conditions: key_size_override_unset: {equals: [{get_param: HAProxyCertificateKeySize}, '']} resources: HAProxyNetworks: type: OS::Heat::Value properties: value: # NOTE(jaosorior) Get unique network names to create # certificates for those. We skip the tenant network since # we don't need a certificate for that, and the external # network will be handled in another template. - ctlplane {%- for network in networks if network.vip|default(false) %} {%- if network.name_lower != 'external' and network.name_lower != 'tenant' %} - {{network.name_lower}} {%- endif %} {%- endfor %} outputs: role_data: description: Role data for the HAProxy internal TLS via certmonger role. value: service_name: haproxy_internal_tls_certmonger config_settings: generate_service_certificates: true tripleo::haproxy::use_internal_certificates: true tripleo::certmonger::haproxy_dirs::certificate_dir: get_param: HAProxyInternalTLSCertsDirectory tripleo::certmonger::haproxy_dirs::key_dir: get_param: HAProxyInternalTLSKeysDirectory certificates_specs: map_merge: repeat: template: haproxy-NETWORK: service_pem: list_join: - '' - - {get_param: HAProxyInternalTLSCertsDirectory} - '/overcloud-haproxy-NETWORK.pem' service_certificate: list_join: - '' - - {get_param: HAProxyInternalTLSCertsDirectory} - '/overcloud-haproxy-NETWORK.crt' service_key: list_join: - '' - - {get_param: HAProxyInternalTLSKeysDirectory} - '/overcloud-haproxy-NETWORK.key' hostname: "%{hiera('fqdn_NETWORK')}" dnsnames: - "%{hiera('cloud_name_NETWORK')}" - "%{hiera('fqdn_NETWORK')}" principal: "haproxy/%{hiera('fqdn_NETWORK')}" postsave_cmd: "/usr/bin/certmonger-haproxy-refresh.sh reload NETWORK" key_size: if: - key_size_override_unset - {get_param: CertificateKeySize} - {get_param: HAProxyCertificateKeySize} for_each: NETWORK: {get_attr: [HAProxyNetworks, value]} metadata_settings: repeat: template: - service: haproxy network: $NETWORK type: vip - service: haproxy network: $NETWORK type: node for_each: $NETWORK: {get_attr: [HAProxyNetworks, value]}