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 --cluster-id foo --pseudo-path /foouser --user-id foouser - 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}}:/foouser /mnt/foo - test -d /mnt/foo/foobucket - find /mnt/foo -ls - grep thebody /mnt/foo/foobucket/myobject - echo test > /mnt/foo/foobucket/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 /foouser - ceph nfs cluster rm foo