heat_template_version: rocky

description: >
  Composable Timezone service

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
  TimeZone:
    default: 'UTC'
    description: The timezone to be set on the overcloud.
    type: string
  PtpInterface:
    default: nic1
    description: PTP interface name.
    type: string
    tags:
      - role_specific
  PtpSlaveMode:
    default: 1
    description: Configure PTP clock in slave mode.
    type: number
    tags:
      - role_specific
  PtpMessageTransport:
    default: UDPv4
    description: Configure PTP message transport protocol.
    type: string
    tags:
      - role_specific

resources:
  RoleParametersValue:
    type: OS::Heat::Value
    properties:
      type: json
      value:
        map_replace:
          - map_replace:
            - tripleo_ptp4l_interface: PtpInterface
              tripleo_ptp4l_conf_slaveOnly: PtpSlaveMode
              tripleo_ptp4l_conf_network_transport: PtpMessageTransport
            - values: {get_param: [RoleParameters]}
          - values:
              PtpInterface: {get_param: PtpInterface}
              PtpSlaveMode: {get_param: PtpSlaveMode}
              PtpMessageTransport: {get_param: PtpMessageTransport}

outputs:
  role_data:
    description: Role ptp using commposable services.
    value:
      service_name: ptp
      firewall_rules:
        '151 ptp':
          proto: udp
          dport:
            - 319
            - 320
      host_prep_tasks:
        - name: Set interface fact
          set_fact:
            tripleo_ptp_interface: {get_attr: [RoleParametersValue, value, tripleo_ptp4l_interface]}

        - name: Run ptp role
          include_role:
            name: tripleo-ptp
          vars:
            tripleo_timezone: {get_param: TimeZone}
            tripleo_ptp_slave_mode: {get_attr: [RoleParametersValue, value, tripleo_ptp4l_conf_slaveOnly]}
            tripleo_ptp_interfaces: ["{{ tripleo_ptp_interface }}"]
            tripleo_ptp_transport: {get_attr: [RoleParametersValue, value, tripleo_ptp4l_conf_network_transport]}
      upgrade_tasks:
        - name: Validation
          shell: |-
            set -o pipefail
            if systemctl is-enabled ntpd; then
              /usr/bin/systemctl show 'ntpd' --property ActiveState | grep '\bactive\b'
            fi
          tags:
            - validation
          when:
            - (step | int) == 0

        - name: Run ntp stop
          include_role:
            name: tripleo-ptp
            tasks_from: tripleo_ntp_stop.yml
          when:
            - (step | int) == 2
