]> git.apps.os.sepia.ceph.com Git - ceph-ansible.git/commitdiff
library: add realm pull to radosgw_realm module
authorDimitri Savineau <dsavinea@redhat.com>
Mon, 25 Jan 2021 23:06:03 +0000 (18:06 -0500)
committerGuillaume Abrioux <gabrioux@redhat.com>
Fri, 12 Mar 2021 17:21:37 +0000 (18:21 +0100)
This adds the realm pull operation to the current radosgw_realm module.
The pull operation requires the url, access/secret key variables.

Signed-off-by: Dimitri Savineau <dsavinea@redhat.com>
library/radosgw_realm.py
roles/ceph-rgw/tasks/multisite/secondary.yml
tests/library/test_radosgw_realm.py

index 3150d180385eb37d6d9e0c1c0fb9e4c5aba873a9..077e5109244957f95ca29371f897e5693f4c3a19 100644 (file)
@@ -61,6 +61,18 @@ options:
             - set the default flag on the realm.
         required: false
         default: false
+    url:
+        description:
+            - URL to the master RADOS Gateway zone.
+        required: false
+    access_key:
+        description:
+            - S3 access key of the master RADOS Gateway zone.
+        required: false
+    secret_key:
+        description:
+            - S3 secret key of the master RADOS Gateway zone.
+        required: false
 
 author:
     - Dimitri Savineau <dsavinea@redhat.com>
@@ -205,6 +217,24 @@ def remove_realm(module, container_image=None):
     return cmd
 
 
+def pull_realm(module, container_image=None):
+    '''
+    Pull a realm
+    '''
+
+    cluster = module.params.get('cluster')
+    name = module.params.get('name')
+    url = module.params.get('url')
+    access_key = module.params.get('access_key')
+    secret_key = module.params.get('secret_key')
+
+    args = ['pull', '--rgw-realm=' + name, '--url=' + url, '--access-key=' + access_key, '--secret=' + secret_key]
+
+    cmd = generate_radosgw_cmd(cluster=cluster, args=args, container_image=container_image)
+
+    return cmd
+
+
 def exit_module(module, out, rc, cmd, err, startd, changed=False):
     endd = datetime.datetime.now()
     delta = endd - startd
@@ -226,13 +256,17 @@ def run_module():
     module_args = dict(
         cluster=dict(type='str', required=False, default='ceph'),
         name=dict(type='str', required=True),
-        state=dict(type='str', required=False, choices=['present', 'absent', 'info'], default='present'),
+        state=dict(type='str', required=False, choices=['present', 'absent', 'info', 'pull'], default='present'),
         default=dict(type='bool', required=False, default=False),
+        url=dict(type='str', required=False),
+        access_key=dict(type='str', required=False),
+        secret_key=dict(type='str', required=False),
     )
 
     module = AnsibleModule(
         argument_spec=module_args,
         supports_check_mode=True,
+        required_if=[['state', 'pull', ['url', 'access_key', 'secret_key']]],
     )
 
     # Gather module parameters in variables
@@ -274,6 +308,9 @@ def run_module():
     elif state == "info":
         rc, cmd, out, err = exec_commands(module, get_realm(module, container_image=container_image))
 
+    elif state == "pull":
+        rc, cmd, out, err = exec_commands(module, pull_realm(module, container_image=container_image))
+
     exit_module(module=module, out=out, rc=rc, cmd=cmd, err=err, startd=startd, changed=changed)
 
 
index 128ff6cac2c687b45469e18f5e16094a983d83ab..b1b759fc02d8db2e7577c49abe0048d77bdb5550 100644 (file)
   when: not item.rgw_zonemaster | default(rgw_zonemaster) | bool
 
 - name: fetch the realm(s)
-  command: "{{ container_exec_cmd }} radosgw-admin realm pull --cluster={{ cluster }} --rgw-realm={{ item.realm }} --url={{ item.endpoint }} --access-key={{ item.system_access_key }} --secret={{ item.system_secret_key }}"
+  radosgw_realm:
+    name: "{{ item.realm }}"
+    cluster: "{{ cluster }}"
+    url: "{{ item.endpoint }}"
+    access_key: "{{ item.system_access_key }}"
+    secret_key: "{{ item.system_secret_key }}"
+    state: pull
   delegate_to: "{{ groups[mon_group_name][0] }}"
   run_once: true
   loop: "{{ secondary_realms }}"
   when: secondary_realms is defined
+  environment:
+    CEPH_CONTAINER_IMAGE: "{{ ceph_docker_registry + '/' + ceph_docker_image + ':' + ceph_docker_image_tag if containerized_deployment | bool else None }}"
+    CEPH_CONTAINER_BINARY: "{{ container_binary }}"
 
 - name: get the period(s)
   command: "{{ container_exec_cmd }} radosgw-admin period get --cluster={{ cluster }} --rgw-realm={{ item.realm }}"
index 4a4e51214123b0aef3947d1af00e9e0bb404d82e..a1a7707ca297fa4599d6f7d6e2b4e5dd930d248d 100644 (file)
@@ -25,6 +25,9 @@ fake_realm = 'foo'
 fake_params = {'cluster': fake_cluster,
                'name': fake_realm,
                'default': True}
+fake_url = 'http://192.168.42.100:8080'
+fake_access_key = '8XQHmFxixz7LCM2AdM2p'
+fake_secret_key = 'XC8IhEPJprL6SrpaJDmolVs7jbOvoe2E3AaWKGRx'
 
 
 class TestRadosgwRealmModule(object):
@@ -103,3 +106,19 @@ class TestRadosgwRealmModule(object):
         ]
 
         assert radosgw_realm.remove_realm(fake_module) == expected_cmd
+
+    def test_pull_realm(self):
+        fake_module = MagicMock()
+        fake_params.update({'url': fake_url, 'access_key': fake_access_key, 'secret_key': fake_secret_key})
+        fake_module.params = fake_params
+        expected_cmd = [
+            fake_binary,
+            '--cluster', fake_cluster,
+            'realm', 'pull',
+            '--rgw-realm=' + fake_realm,
+            '--url=' + fake_url,
+            '--access-key=' + fake_access_key,
+            '--secret=' + fake_secret_key
+        ]
+
+        assert radosgw_realm.pull_realm(fake_module) == expected_cmd