Separate config_volume for ringbuilder
authorJames Slagle <jslagle@redhat.com>
Tue, 15 Aug 2017 19:59:08 +0000 (15:59 -0400)
committerEmilien Macchi <emilien@redhat.com>
Sat, 2 Sep 2017 15:55:27 +0000 (15:55 +0000)
Use a separate config_volume for swift_ringbuilder puppet_config tasks.
This is necessary so that the swift_ringbuilder and swift-storage
services don't both rsync files to the same bind mounted directory.

The rsync command from docker-puppet.py uses --delete-after, so when
they both use the same config_volume, they can end up deleting the files
generated by the other (depending on the order of execution).

Even though a separate config_volume is used, the rings must still end up
in /etc/swift for the swift services containers.  An additional
container init task is used to copy the ring files into
/var/lib/config-data/puppet-generated/swift/etc/swift so that they will
be present when the actual swift services containers are started.

Change-Id: I05821e76191f64212704ca8e3b7428cda6b3a4b7
Closes-Bug: #1710952
(cherry picked from commit cba00abb7517efa6a8d9b8fb954563204323ffed)

docker/services/swift-ringbuilder.yaml
tools/yaml-validate.py

index e4e2c7d..2a44f70 100644 (file)
@@ -7,6 +7,10 @@ parameters:
   DockerSwiftConfigImage:
     description: The container image to use for the swift config_volume
     type: string
+  DockerSwiftRingbuilderConfigImage:
+    description: Fake parameter to bypass config_volume yaml validation
+    type: string
+    default: ''
   ServiceData:
     default: {}
     description: Dictionary packing service data
@@ -92,9 +96,22 @@ outputs:
       service_config_settings: {get_attr: [SwiftRingbuilderBase, role_data, service_config_settings]}
       # BEGIN DOCKER SETTINGS
       puppet_config:
-        config_volume: 'swift'
+        config_volume: 'swift_ringbuilder'
         puppet_tags: exec,fetch_swift_ring_tarball,extract_swift_ring_tarball,ring_object_device,swift::ringbuilder::create,tripleo::profile::base::swift::add_devices,swift::ringbuilder::rebalance,create_swift_ring_tarball,upload_swift_ring_tarball
         step_config: *step_config
-        config_image: {get_param: DockerSwiftConfigImage}
+        config_image: &swift_ringbuilder_image {get_param: DockerSwiftConfigImage}
       kolla_config: {}
-      docker_config: {}
+      docker_config:
+        step_3:
+          swift_copy_rings:
+            image: *swift_ringbuilder_image
+            user: root
+            detach: false
+            command:
+              # Use bash to run the cp command so that wildcards can be used
+              - '/bin/bash'
+              - '-c'
+              - 'cp -v -a -t /etc/swift /swift_ringbuilder/etc/swift/*.gz /swift_ringbuilder/etc/swift/*.builder /swift_ringbuilder/etc/swift/backups'
+            volumes:
+              - /var/lib/config-data/puppet-generated/swift/etc/swift:/etc/swift:rw
+              - /var/lib/config-data/swift_ringbuilder:/swift_ringbuilder:ro
index a096d69..682cb8d 100755 (executable)
@@ -105,7 +105,7 @@ PARAMETER_DEFINITION_EXCLUSIONS = {'ManagementNetCidr': ['default'],
                                    'ControllerExtraConfig': ['description'],
                                    'NovaComputeExtraConfig': ['description'],
                                    'controllerExtraConfig': ['description'],
-                                   'DockerSwiftConfigImage': ['default'],
+                                   'DockerSwiftConfigImage': ['default']
                                    }
 
 PREFERRED_CAMEL_CASE = {