Containerized Swift Services.
authorIan Main <imain@redhat.com>
Thu, 26 Jan 2017 02:02:16 +0000 (21:02 -0500)
committerIan Main <imain@redhat.com>
Wed, 22 Feb 2017 18:29:19 +0000 (18:29 +0000)
Running swift in containers. Oh yeah.

Co-Authored-by: Dan Prince <dprince@redhat.com>
Change-Id: I2d96514fb7aa51dffe8fe293bc950e0e99df5e94

docker/services/swift-proxy.yaml [new file with mode: 0644]
docker/services/swift-ringbuilder.yaml [new file with mode: 0644]
docker/services/swift-storage.yaml [new file with mode: 0644]

diff --git a/docker/services/swift-proxy.yaml b/docker/services/swift-proxy.yaml
new file mode 100644 (file)
index 0000000..0955331
--- /dev/null
@@ -0,0 +1,76 @@
+heat_template_version: ocata
+
+description: >
+  OpenStack containerized swift proxy service
+
+parameters:
+  DockerNamespace:
+    description: namespace
+    default: 'tripleoupstream'
+    type: string
+  DockerSwiftProxyImage:
+    description: image
+    default: 'centos-binary-swift-proxy-server:latest'
+    type: string
+  EndpointMap:
+    default: {}
+    description: Mapping of service endpoint -> protocol. Typically set
+                 via parameter_defaults in the resource registry.
+    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
+
+resources:
+
+  SwiftProxyBase:
+    type: ../../puppet/services/swift-proxy.yaml
+    properties:
+      EndpointMap: {get_param: EndpointMap}
+      ServiceNetMap: {get_param: ServiceNetMap}
+      DefaultPasswords: {get_param: DefaultPasswords}
+
+outputs:
+  role_data:
+    description: Role data for the swift proxy.
+    value:
+      service_name: {get_attr: [SwiftProxyBase, role_data, service_name]}
+      config_settings: {get_attr: [SwiftProxyBase, role_data, config_settings]}
+      step_config: {get_attr: [SwiftProxyBase, role_data, step_config]}
+      service_config_settings: {get_attr: [SwiftProxyBase, role_data, service_config_settings]}
+      # BEGIN DOCKER SETTINGS
+      docker_image: &swift_proxy_image
+        list_join:
+          - '/'
+          - [ {get_param: DockerNamespace}, {get_param: DockerSwiftProxyImage} ]
+      puppet_tags: swift_proxy_config
+      config_volume: swift
+      config_image: *swift_proxy_image
+      kolla_config:
+        /var/lib/kolla/config_files/swift_proxy.json:
+          command: /usr/bin/swift-proxy-server /etc/swift/proxy-server.conf
+      docker_config:
+        step_4:
+          swift_proxy:
+            image: *swift_proxy_image
+            net: host
+            user: swift
+            restart: always
+            # I'm mounting /etc/swift as rw.  Are the rings written to at all during runtime?
+            volumes:
+              - /var/lib/kolla/config_files/swift_proxy.json:/var/lib/kolla/config_files/config.json:ro
+              - /var/lib/config-data/swift:/var/lib/kolla/config_files/src:ro
+              - /var/lib/config-data/swift/etc/swift:/etc/swift:rw
+              - /etc/hosts:/etc/hosts:ro
+              - /etc/localtime:/etc/localtime:ro
+              - /run:/run
+              - swift-srv:/srv
+              - /dev:/dev
+            environment:
+              - KOLLA_CONFIG_STRATEGY=COPY_ALWAYS
diff --git a/docker/services/swift-ringbuilder.yaml b/docker/services/swift-ringbuilder.yaml
new file mode 100644 (file)
index 0000000..de91e7c
--- /dev/null
@@ -0,0 +1,80 @@
+heat_template_version: ocata
+
+description: >
+  OpenStack Swift Ringbuilder
+
+parameters:
+  DockerNamespace:
+    description: namespace
+    default: 'tripleoupstream'
+    type: string
+  DockerSwiftProxyImage:
+    description: image
+    default: 'centos-binary-swift-proxy-server:latest'
+    type: string
+  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
+  EndpointMap:
+    default: {}
+    description: Mapping of service endpoint -> protocol. Typically set
+                 via parameter_defaults in the resource registry.
+    type: json
+  SwiftMinPartHours:
+    type: number
+    default: 1
+    description: The minimum time (in hours) before a partition in a ring can be moved following a rebalance.
+  SwiftPartPower:
+    default: 10
+    description: Partition Power to use when building Swift rings
+    type: number
+  SwiftRingBuild:
+    default: true
+    description: Whether to manage Swift rings or not
+    type: boolean
+  SwiftReplicas:
+    type: number
+    default: 3
+    description: How many replicas to use in the swift rings.
+  SwiftRawDisks:
+    default: {}
+    description: 'A hash of additional raw devices to use as Swift backend (eg. {sdb: {}})'
+    type: json
+  SwiftUseLocalDir:
+    default: true
+    description: 'Use a local directory for Swift storage services when building rings'
+    type: boolean
+
+resources:
+
+  SwiftRingbuilderBase:
+    type: ../../puppet/services/swift-ringbuilder.yaml
+    properties:
+      EndpointMap: {get_param: EndpointMap}
+      ServiceNetMap: {get_param: ServiceNetMap}
+      DefaultPasswords: {get_param: DefaultPasswords}
+
+outputs:
+  role_data:
+    description: Role data for Swift Ringbuilder configuration in containers.
+    value:
+      service_name: {get_attr: [SwiftRingbuilderBase, role_data, service_name]}
+      config_settings: {get_attr: [SwiftRingbuilderBase, role_data, config_settings]}
+      step_config: {get_attr: [SwiftRingbuilderBase, role_data, step_config]}
+      service_config_settings: {get_attr: [SwiftRingbuilderBase, role_data, service_config_settings]}
+      puppet_tags: exec,ring_object_device,swift::ringbuilder::create,tripleo::profile::base::swift::add_devices,swift::ringbuilder::rebalance
+      # BEGIN DOCKER SETTINGS
+      docker_image: &docker_image
+        list_join:
+          - '/'
+          - [ {get_param: DockerNamespace}, {get_param: DockerSwiftProxyImage} ]
+      config_volume: 'swift'
+      config_image: *docker_image
+      kolla_config: {}
+      docker_config: {}
diff --git a/docker/services/swift-storage.yaml b/docker/services/swift-storage.yaml
new file mode 100644 (file)
index 0000000..5b2ec6e
--- /dev/null
@@ -0,0 +1,343 @@
+heat_template_version: ocata
+
+description: >
+  OpenStack containerized Swift Storage services.
+
+parameters:
+  DockerNamespace:
+    description: namespace
+    default: 'tripleoupstream'
+    type: string
+  DockerSwiftProxyImage:
+    description: image
+    default: 'centos-binary-swift-proxy-server:latest'
+    type: string
+  DockerSwiftAccountImage:
+    description: image
+    default: 'centos-binary-swift-account:latest'
+    type: string
+  DockerSwiftContainerImage:
+    description: image
+    default: 'centos-binary-swift-container:latest'
+    type: string
+  DockerSwiftObjectImage:
+    description: image
+    default: 'centos-binary-swift-object:latest'
+    type: string
+  EndpointMap:
+    default: {}
+    description: Mapping of service endpoint -> protocol. Typically set
+                 via parameter_defaults in the resource registry.
+    type: json
+  DefaultPasswords:
+    default: {}
+    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
+
+resources:
+
+  SwiftStorageBase:
+    type: ../../puppet/services/swift-storage.yaml
+    properties:
+      EndpointMap: {get_param: EndpointMap}
+      ServiceNetMap: {get_param: ServiceNetMap}
+      DefaultPasswords: {get_param: DefaultPasswords}
+
+outputs:
+  role_data:
+    description: Role data for the swift storage services.
+    value:
+      service_name: {get_attr: [SwiftStorageBase, role_data, service_name]}
+      config_settings: {get_attr: [SwiftStorageBase, role_data, config_settings]}
+      step_config: {get_attr: [SwiftStorageBase, role_data, step_config]}
+      service_config_settings: {get_attr: [SwiftStorageBase, role_data, service_config_settings]}
+      # BEGIN DOCKER SETTINGS
+      docker_image: &swift_proxy_image
+        list_join:
+          - '/'
+          - [ {get_param: DockerNamespace}, {get_param: DockerSwiftProxyImage} ]
+      puppet_tags: swift_config,swift_container_config,swift_container_sync_realms_config,swift_account_config,swift_object_config,swift_object_expirer_config
+      config_volume: swift
+      config_image: *swift_proxy_image
+      kolla_config:
+        /var/lib/kolla/config_files/swift_account_auditor.json:
+          command: /usr/bin/swift-account-auditor /etc/swift/account-server.conf
+        /var/lib/kolla/config_files/swift_account_reaper.json:
+          command: /usr/bin/swift-account-reaper /etc/swift/account-server.conf
+        /var/lib/kolla/config_files/swift_account_replicator.json:
+          command: /usr/bin/swift-account-replicator /etc/swift/account-server.conf
+        /var/lib/kolla/config_files/swift_account_server.json:
+          command: /usr/bin/swift-account-server /etc/swift/account-server.conf
+        /var/lib/kolla/config_files/swift_container_auditor.json:
+          command: /usr/bin/swift-container-auditor /etc/swift/container-server.conf
+        /var/lib/kolla/config_files/swift_container_replicator.json:
+          command: /usr/bin/swift-container-replicator /etc/swift/container-server.conf
+        /var/lib/kolla/config_files/swift_container_updater.json:
+          command: /usr/bin/swift-container-updater /etc/swift/container-server.conf
+        /var/lib/kolla/config_files/swift_container_server.json:
+          command: /usr/bin/swift-container-server /etc/swift/container-server.conf
+        /var/lib/kolla/config_files/swift_object_auditor.json:
+          command: /usr/bin/swift-object-auditor /etc/swift/object-server.conf
+        /var/lib/kolla/config_files/swift_object_expirer.json:
+          command: /usr/bin/swift-object-expirer /etc/swift/object-expirer.conf
+        /var/lib/kolla/config_files/swift_object_replicator.json:
+          command: /usr/bin/swift-object-replicator /etc/swift/object-server.conf
+        /var/lib/kolla/config_files/swift_object_updater.json:
+          command: /usr/bin/swift-object-updater /etc/swift/object-server.conf
+        /var/lib/kolla/config_files/swift_object_server.json:
+          command: /usr/bin/swift-object-server /etc/swift/object-server.conf
+      docker_config:
+        step_3:
+          # The puppet config sets this up but we don't have a way to mount the named
+          # volume during the configuration stage.  We just need to create this
+          # directory and make sure it's owned by swift.
+          swift_setup_srv:
+            image:
+              list_join:
+                - '/'
+                - [ {get_param: DockerNamespace}, {get_param: DockerSwiftAccountImage} ]
+            user: root
+            command: ['/bin/bash', '-c', 'mkdir /srv/node && chown swift:swift /srv/node']
+            volumes:
+              - swift-srv:/srv
+        step_4:
+          swift_account_auditor:
+            image:
+              list_join:
+                - '/'
+                - [ {get_param: DockerNamespace}, {get_param: DockerSwiftAccountImage} ]
+            net: host
+            user: swift
+            restart: always
+            volumes:
+              - /var/lib/kolla/config_files/swift_account_auditor.json:/var/lib/kolla/config_files/config.json:ro
+              - /var/lib/config-data/swift/:/var/lib/kolla/config_files/src:ro
+              - /var/lib/config-data/swift/etc/swift:/etc/swift:rw
+              - /etc/hosts:/etc/hosts:ro
+              - /etc/localtime:/etc/localtime:ro
+              - /run:/run
+              - swift-srv:/srv
+              - /dev:/dev
+            environment: &kolla_env
+              - KOLLA_CONFIG_STRATEGY=COPY_ALWAYS
+          swift_account_reaper:
+            image:
+              list_join:
+                - '/'
+                - [ {get_param: DockerNamespace}, {get_param: DockerSwiftAccountImage} ]
+            net: host
+            user: swift
+            restart: always
+            volumes:
+              - /var/lib/kolla/config_files/swift_account_reaper.json:/var/lib/kolla/config_files/config.json:ro
+              - /var/lib/config-data/swift/:/var/lib/kolla/config_files/src:ro
+              - /var/lib/config-data/swift/etc/swift:/etc/swift:rw
+              - /etc/hosts:/etc/hosts:ro
+              - /etc/localtime:/etc/localtime:ro
+              - /run:/run
+              - swift-srv:/srv
+              - /dev:/dev
+            environment: *kolla_env
+          swift_account_replicator:
+            image:
+              list_join:
+                - '/'
+                - [ {get_param: DockerNamespace}, {get_param: DockerSwiftAccountImage} ]
+            net: host
+            user: swift
+            restart: always
+            volumes:
+              - /var/lib/kolla/config_files/swift_account_replicator.json:/var/lib/kolla/config_files/config.json:ro
+              - /var/lib/config-data/swift/:/var/lib/kolla/config_files/src:ro
+              - /var/lib/config-data/swift/etc/swift:/etc/swift:rw
+              - /etc/hosts:/etc/hosts:ro
+              - /etc/localtime:/etc/localtime:ro
+              - /run:/run
+              - swift-srv:/srv
+              - /dev:/dev
+            environment: *kolla_env
+          swift_account_server:
+            image:
+              list_join:
+                - '/'
+                - [ {get_param: DockerNamespace}, {get_param: DockerSwiftAccountImage} ]
+            net: host
+            user: swift
+            restart: always
+            volumes:
+              - /var/lib/kolla/config_files/swift_account_server.json:/var/lib/kolla/config_files/config.json:ro
+              - /var/lib/config-data/swift/:/var/lib/kolla/config_files/src:ro
+              - /var/lib/config-data/swift/etc/swift:/etc/swift:rw
+              - /etc/hosts:/etc/hosts:ro
+              - /etc/localtime:/etc/localtime:ro
+              - /run:/run
+              - swift-srv:/srv
+              - /dev:/dev
+            environment: *kolla_env
+          swift_container_auditor:
+            image:
+              list_join:
+                - '/'
+                - [ {get_param: DockerNamespace}, {get_param: DockerSwiftContainerImage} ]
+            net: host
+            user: swift
+            restart: always
+            volumes:
+              - /var/lib/kolla/config_files/swift_container_auditor.json:/var/lib/kolla/config_files/config.json:ro
+              - /var/lib/config-data/swift/:/var/lib/kolla/config_files/src:ro
+              - /var/lib/config-data/swift/etc/swift:/etc/swift:rw
+              - /etc/hosts:/etc/hosts:ro
+              - /etc/localtime:/etc/localtime:ro
+              - /run:/run
+              - swift-srv:/srv
+              - /dev:/dev
+            environment: *kolla_env
+          swift_container_replicator:
+            image:
+              list_join:
+                - '/'
+                - [ {get_param: DockerNamespace}, {get_param: DockerSwiftContainerImage} ]
+            net: host
+            user: swift
+            restart: always
+            volumes:
+              - /var/lib/kolla/config_files/swift_container_replicator.json:/var/lib/kolla/config_files/config.json:ro
+              - /var/lib/config-data/swift/:/var/lib/kolla/config_files/src:ro
+              - /var/lib/config-data/swift/etc/swift:/etc/swift:rw
+              - /etc/hosts:/etc/hosts:ro
+              - /etc/localtime:/etc/localtime:ro
+              - /run:/run
+              - swift-srv:/srv
+              - /dev:/dev
+            environment: *kolla_env
+          swift_container_updater:
+            image:
+              list_join:
+                - '/'
+                - [ {get_param: DockerNamespace}, {get_param: DockerSwiftContainerImage} ]
+            net: host
+            user: swift
+            restart: always
+            volumes:
+              - /var/lib/kolla/config_files/swift_container_updater.json:/var/lib/kolla/config_files/config.json:ro
+              - /var/lib/config-data/swift/:/var/lib/kolla/config_files/src:ro
+              - /var/lib/config-data/swift/etc/swift:/etc/swift:rw
+              - /etc/hosts:/etc/hosts:ro
+              - /etc/localtime:/etc/localtime:ro
+              - /run:/run
+              - swift-srv:/srv
+              - /dev:/dev
+            environment: *kolla_env
+          swift_container_server:
+            image:
+              list_join:
+                - '/'
+                - [ {get_param: DockerNamespace}, {get_param: DockerSwiftContainerImage} ]
+            net: host
+            user: swift
+            restart: always
+            volumes:
+              - /var/lib/kolla/config_files/swift_container_server.json:/var/lib/kolla/config_files/config.json:ro
+              - /var/lib/config-data/swift/:/var/lib/kolla/config_files/src:ro
+              - /var/lib/config-data/swift/etc/swift:/etc/swift:rw
+              - /etc/hosts:/etc/hosts:ro
+              - /etc/localtime:/etc/localtime:ro
+              - /run:/run
+              - swift-srv:/srv
+              - /dev:/dev
+            environment: *kolla_env
+          swift_object_auditor:
+            image:
+              list_join:
+                - '/'
+                - [ {get_param: DockerNamespace}, {get_param: DockerSwiftObjectImage} ]
+            net: host
+            user: swift
+            restart: always
+            volumes:
+              - /var/lib/kolla/config_files/swift_object_auditor.json:/var/lib/kolla/config_files/config.json:ro
+              - /var/lib/config-data/swift/:/var/lib/kolla/config_files/src:ro
+              - /var/lib/config-data/swift/etc/swift:/etc/swift:rw
+              - /etc/hosts:/etc/hosts:ro
+              - /etc/localtime:/etc/localtime:ro
+              - /run:/run
+              - swift-srv:/srv
+              - /dev:/dev
+            environment: *kolla_env
+          swift_object_expirer:
+            image:
+              list_join:
+                - '/'
+                - [ {get_param: DockerNamespace}, {get_param: DockerSwiftProxyImage} ]
+            net: host
+            user: swift
+            restart: always
+            volumes:
+              - /var/lib/kolla/config_files/swift_object_expirer.json:/var/lib/kolla/config_files/config.json:ro
+              - /var/lib/config-data/swift/:/var/lib/kolla/config_files/src:ro
+              - /var/lib/config-data/swift/etc/swift:/etc/swift:rw
+              - /etc/hosts:/etc/hosts:ro
+              - /etc/localtime:/etc/localtime:ro
+              - /run:/run
+              - swift-srv:/srv
+              - /dev:/dev
+            environment: *kolla_env
+          swift_object_replicator:
+            image:
+              list_join:
+                - '/'
+                - [ {get_param: DockerNamespace}, {get_param: DockerSwiftObjectImage} ]
+            net: host
+            user: swift
+            restart: always
+            volumes:
+              - /var/lib/kolla/config_files/swift_object_replicator.json:/var/lib/kolla/config_files/config.json:ro
+              - /var/lib/config-data/swift/:/var/lib/kolla/config_files/src:ro
+              - /var/lib/config-data/swift/etc/swift:/etc/swift:rw
+              - /etc/hosts:/etc/hosts:ro
+              - /etc/localtime:/etc/localtime:ro
+              - /run:/run
+              - swift-srv:/srv
+              - /dev:/dev
+            environment: *kolla_env
+          swift_object_updater:
+            image:
+              list_join:
+                - '/'
+                - [ {get_param: DockerNamespace}, {get_param: DockerSwiftObjectImage} ]
+            net: host
+            user: swift
+            restart: always
+            volumes:
+              - /var/lib/kolla/config_files/swift_object_updater.json:/var/lib/kolla/config_files/config.json:ro
+              - /var/lib/config-data/swift/:/var/lib/kolla/config_files/src:ro
+              - /var/lib/config-data/swift/etc/swift:/etc/swift:rw
+              - /etc/hosts:/etc/hosts:ro
+              - /etc/localtime:/etc/localtime:ro
+              - /run:/run
+              - swift-srv:/srv
+              - /dev:/dev
+            environment: *kolla_env
+          swift_object_server:
+            image:
+              list_join:
+                - '/'
+                - [ {get_param: DockerNamespace}, {get_param: DockerSwiftObjectImage} ]
+            net: host
+            user: swift
+            restart: always
+            volumes:
+              - /var/lib/kolla/config_files/swift_object_server.json:/var/lib/kolla/config_files/config.json:ro
+              - /var/lib/config-data/swift/:/var/lib/kolla/config_files/src:ro
+              - /var/lib/config-data/swift/etc/swift:/etc/swift:rw
+              - /etc/hosts:/etc/hosts:ro
+              - /etc/localtime:/etc/localtime:ro
+              - /run:/run
+              - swift-srv:/srv
+              - /dev:/dev
+            environment: *kolla_env