]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
qa/suites/orch/cephadm: add rgw nfs export test
authorSage Weil <sage@newdream.net>
Thu, 15 Jul 2021 20:49:12 +0000 (16:49 -0400)
committerSage Weil <sage@newdream.net>
Mon, 26 Jul 2021 20:23:17 +0000 (16:23 -0400)
Signed-off-by: Sage Weil <sage@newdream.net>
qa/suites/orch/cephadm/smoke-roleless/2-services/nfs-ingress-rgw.yaml [new file with mode: 0644]
qa/tasks/python.py

diff --git a/qa/suites/orch/cephadm/smoke-roleless/2-services/nfs-ingress-rgw.yaml b/qa/suites/orch/cephadm/smoke-roleless/2-services/nfs-ingress-rgw.yaml
new file mode 100644 (file)
index 0000000..8e18c59
--- /dev/null
@@ -0,0 +1,89 @@
+tasks:
+- vip:
+
+# make sure cephadm notices the new IP
+- cephadm.shell:
+    host.a:
+      - ceph orch device ls --refresh
+
+# stop kernel nfs server, if running
+- vip.exec:
+    all-hosts:
+      - systemctl stop nfs-server
+
+- cephadm.shell:
+    host.a:
+      - ceph orch apply rgw foorgw --port 8800
+      - ceph nfs cluster create foo --ingress --virtual-ip {{VIP0}}/{{VIPPREFIXLEN}}
+
+- vip.exec:
+    host.a:
+      - dnf install -y python3-boto3 || apt install -y python3-boto3
+      - /home/ubuntu/cephtest/cephadm shell radosgw-admin user create --uid foouser --display-name foo > /tmp/user.json
+
+- python:
+    host.a: |
+      import boto3
+      import json
+
+      with open('/tmp/user.json', 'rt') as f:
+          info = json.loads(f.read())
+      s3 = boto3.resource(
+          's3',
+          aws_access_key_id=info['keys'][0]['access_key'],
+          aws_secret_access_key=info['keys'][0]['secret_key'],
+          endpoint_url='http://localhost:8800',
+      )
+      bucket = s3.Bucket('foobucket')
+      bucket.create()
+      bucket.put_object(Key='myobject', Body='thebody')
+
+- cephadm.shell:
+    host.a:
+      - ceph nfs export create rgw foobucket foo --pseudo-path /foobucket
+
+- cephadm.wait_for_service:
+    service: nfs.foo
+- cephadm.wait_for_service:
+    service: ingress.nfs.foo
+
+## export and mount
+
+- vip.exec:
+    host.a:
+      - mkdir /mnt/foo
+      - sleep 5
+      - mount -t nfs {{VIP0}}:/foobucket /mnt/foo
+      - find /mnt/foo -ls
+      - grep thebody /mnt/foo/myobject
+      - echo test > /mnt/foo/newobject
+      - sync
+
+- python:
+    host.a: |
+      import boto3
+      import json
+      from io import BytesIO
+
+      with open('/tmp/user.json', 'rt') as f:
+          info = json.loads(f.read())
+      s3 = boto3.resource(
+          's3',
+          aws_access_key_id=info['keys'][0]['access_key'],
+          aws_secret_access_key=info['keys'][0]['secret_key'],
+          endpoint_url='http://localhost:8800',
+      )
+      bucket = s3.Bucket('foobucket')
+      data = BytesIO()
+      bucket.download_fileobj(Fileobj=data, Key='newobject')
+      print(data.getvalue())
+      assert data.getvalue().decode() == 'test\n'
+
+- vip.exec:
+    host.a:
+      - umount /mnt/foo
+
+- cephadm.shell:
+    host.a:
+      - ceph nfs export rm foo /foobucket
+      - ceph nfs cluster rm foo
index 8dccd87a0932bc0b000018cbbe99d4cea9e5f607..4ddb14f714538fde77ed2b910cd6d247f18cdd45 100644 (file)
@@ -15,23 +15,21 @@ def task(ctx, config):
             import boto3
             c = boto3.resource(...)
 
-    or
+    The provided dict is normally indexed by role.  You can also include a 
+    'sudo: false' key to run the code without sudo.
 
       tasks:
       - python:
-          sudo: true
+          sudo: false
           host.b: |
             import boto3
             c = boto3.resource(...)
-
-    The provided dict is normally indexed by role.  However, you can also include a 
-    'sudo: true' key to run the code with sudo.
     """
     assert isinstance(config, dict), "task python got invalid config"
 
     testdir = teuthology.get_testdir(ctx)
 
-    sudo = config.pop('sudo', False)
+    sudo = config.pop('sudo', True)
 
     for role, code in config.items():
         (remote,) = ctx.cluster.only(role).remotes.keys()
@@ -41,5 +39,7 @@ def task(ctx, config):
             'TESTDIR={tdir}'.format(tdir=testdir),
             'python3',
         ]
+        if sudo:
+            args = ['sudo'] + args
         remote.run(args=args, stdin=subst_vip(ctx, code))