heat_template_version: wallaby description: > MySQL HA clustercheck service deployment using puppet This service is used by HAProxy in a HA scenario to report whether the local galera node is synced parameters: ContainerClustercheckImage: description: image type: string tags: - role_specific ContainerClustercheckConfigImage: description: The container image to use for the clustercheck config_volume type: string tags: - role_specific EndpointMap: default: {} description: Mapping of service endpoint -> protocol. Typically set via parameter_defaults in the resource registry. type: json 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. Use parameter_merge_strategies to merge it with the defaults. 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 ClustercheckListener: default: 'socat' description: How to expose the clustercheck service over TCP type: string constraints: - allowed_values: ['socat', 'xinetd'] resources: ContainersCommon: type: ../containers-common.yaml MysqlPuppetBase: type: ../database/mysql-pacemaker-puppet.yaml properties: EndpointMap: {get_param: EndpointMap} ServiceData: {get_param: ServiceData} ServiceNetMap: {get_param: ServiceNetMap} RoleName: {get_param: RoleName} RoleParameters: {get_param: RoleParameters} RoleParametersValue: type: OS::Heat::Value properties: type: json value: map_replace: - map_replace: - ContainerClustercheckImage: ContainerClustercheckImage ContainerClustercheckConfigImage: ContainerClustercheckConfigImage - values: {get_param: [RoleParameters]} - values: ContainerClustercheckImage: {get_param: ContainerClustercheckImage} ContainerClustercheckConfigImage: {get_param: ContainerClustercheckConfigImage} conditions: socat_listener: {equals: [{get_param: ClustercheckListener}, 'socat']} outputs: role_data: description: Containerized service clustercheck using composable services. value: service_name: clustercheck config_settings: map_merge: - get_attr: [MysqlPuppetBase, role_data, config_settings] - tripleo::profile::pacemaker::clustercheck::bind_address: str_replace: template: "%{hiera('$FQDN$NETWORK')}" params: $FQDN: {if: ["socat_listener", "", "fqdn_"]} $NETWORK: {get_param: [ServiceNetMap, MysqlNetwork]} # BEGIN DOCKER SETTINGS # puppet_config: config_volume: clustercheck puppet_tags: file # set this even though file is the default step_config: "include tripleo::profile::pacemaker::clustercheck" config_image: {get_attr: [RoleParametersValue, value, ContainerClustercheckConfigImage]} kolla_config: /var/lib/kolla/config_files/clustercheck.json: command: if: - socat_listener # Note: we can't quotes multiple parameters in kolla command, hence the workaround - bash -c $* -- eval source /etc/sysconfig/clustercheck; exec socat -T"${TRIPLEO_HEALTHCHECK_TIMEOUT:-2}" "$TRIPLEO_SOCAT_BIND" system:"grep -qPe \"^\\r\$\" && /usr/bin/clustercheck" - /usr/sbin/xinetd -dontfork config_files: - source: "/var/lib/kolla/config_files/src/*" dest: "/" merge: true preserve_properties: true docker_config: step_2: clustercheck: start_order: 1 image: {get_attr: [RoleParametersValue, value, ContainerClustercheckImage]} restart: always net: host healthcheck: test: /openstack/healthcheck volumes: list_concat: - {get_attr: [ContainersCommon, volumes]} - - /var/lib/kolla/config_files/clustercheck.json:/var/lib/kolla/config_files/config.json - /var/lib/config-data/puppet-generated/clustercheck:/var/lib/kolla/config_files/src:ro - /var/lib/mysql:/var/lib/mysql environment: KOLLA_CONFIG_STRATEGY: COPY_ALWAYS host_prep_tasks: upgrade_tasks: update_tasks: # Nothing: It's not managed by pacemaker, so let tripleo_container_manage do it. external_upgrade_tasks: - when: - step|int == 1 tags: - never - system_upgrade_transfer_data - system_upgrade_stop_services block: - name: Stop clustercheck container import_role: name: tripleo_container_stop vars: tripleo_containers_to_stop: - clustercheck tripleo_delegate_to: "{{ groups['clustercheck'] | difference(groups['excluded_overcloud']) }}"