heat_template_version: pike

description: >
  OpenStack Swift Storage service configured with Puppet

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
  Debug:
    default: ''
    description: Set to True to enable debugging on all services.
    type: string
  SwiftMountCheck:
    default: false
    description: Value of mount_check in Swift account/container/object -server.conf
    type: boolean
  SwiftRawDisks:
    default: {}
    description: 'A hash of additional raw devices to use as Swift backend (eg. {sdb: {}})'
    type: json
  MonitoringSubscriptionSwiftStorage:
    default: 'overcloud-swift-storage'
    type: string

  # DEPRECATED options for compatibility with overcloud.yaml
  # This should be removed and manipulation of the ControllerServices list
  # used instead, but we need client support for that first
  ControllerEnableSwiftStorage:
    default: true
    description: Whether to enable Swift Storage on the Controller
    type: boolean

parameter_groups:
- label: deprecated
  description: Do not use deprecated params, they will be removed.
  parameters:
  - ControllerEnableSwiftStorage

resources:
  SwiftBase:
    type: ./swift-base.yaml
    properties:
      ServiceData: {get_param: ServiceData}
      ServiceNetMap: {get_param: ServiceNetMap}
      DefaultPasswords: {get_param: DefaultPasswords}
      EndpointMap: {get_param: EndpointMap}
      RoleName: {get_param: RoleName}
      RoleParameters: {get_param: RoleParameters}

conditions:
  swift_mount_check:
    or:
    - equals:
      - get_param: SwiftMountCheck
      - true
    - not:
        equals:
        - get_param: SwiftRawDisks
        - {}

outputs:
  role_data:
    description: Role data for the Swift Proxy role.
    value:
      service_name: swift_storage
      monitoring_subscription: {get_param: MonitoringSubscriptionSwiftStorage}
      config_settings:
        map_merge:
          - get_attr: [SwiftBase, role_data, config_settings]
          - swift::storage::all::mount_check: {if: [swift_mount_check, true, false]}
            tripleo::profile::base::swift::storage::enable_swift_storage: {get_param: ControllerEnableSwiftStorage}
            tripleo.swift_storage.firewall_rules:
              '123 swift storage':
                dport:
                  - 873
                  - 6000
                  - 6001
                  - 6002
            swift::storage::all::incoming_chmod: 'Du=rwx,g=rx,o=rx,Fu=rw,g=r,o=r'
            swift::storage::all::outgoing_chmod: 'Du=rwx,g=rx,o=rx,Fu=rw,g=r,o=r'
            swift::storage::all::object_pipeline:
              - healthcheck
              - recon
              - object-server
            swift::storage::all::container_pipeline:
              - healthcheck
              - container-server
            swift::storage::all::account_pipeline:
              - healthcheck
              - account-server
            swift::storage::disks::args: {get_param: SwiftRawDisks}
            swift::storage::all::storage_local_net_ip: {get_param: [ServiceNetMap, SwiftStorageNetwork]}
      step_config: |
        include ::tripleo::profile::base::swift::storage
      upgrade_tasks:
        - name: Stop swift storage services
          tags: step1
          service: name={{ item }} state=stopped
          with_items:
            - openstack-swift-account-auditor
            - openstack-swift-account-reaper
            - openstack-swift-account-replicator
            - openstack-swift-account
            - openstack-swift-container-auditor
            - openstack-swift-container-replicator
            - openstack-swift-container-updater
            - openstack-swift-container
            - openstack-swift-object-auditor
            - openstack-swift-object-expirer
            - openstack-swift-object-replicator
            - openstack-swift-object-updater
            - openstack-swift-object