heat_template_version: rocky

description: >
  PTP service deployment using puppet, this YAML file
  creates the interface between the HOT template and
  the puppet manifest that actually installs and
  configure PTP.

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
  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::profile::base::time::ptp::ptp4l_interface: PtpInterface
              tripleo::profile::base::time::ptp::ptp4l_conf_slaveOnly: PtpSlaveMode
              tripleo::profile::base::time::ptp::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
      config_settings: {get_attr: [RoleParametersValue, value]}
      step_config: |
        include ::tripleo::profile::base::time::ptp
      upgrade_tasks:
        - name: Check if NTP is deployed
          command: systemctl is-enabled ntpd
          tags: common
          ignore_errors: True
          register: ntp_enabled
        - name: Validation
          shell: /usr/bin/systemctl show 'ntpd' --property ActiveState | grep '\bactive\b'
          tags: validation
          when:
            - step|int == 0
            - ntp_enabled.rc == 0
        - name: Stop NTP service
          service: name=ntpd state=stopped
          when:
            - step|int == 2
            - ntp_enabled.rc == 0
        - name: Disable NTP service
          service: name=ntpd state=stopped
          ignore_errors: True
          when:
            - step|int == 2
            - ntp_enabled.rc == 0
