def _set_replication(self, bucket_name: str, replication: bool, owner, daemon_name):
multisite = RgwMultisite()
+ # return immediately if the multisite is not configured
+ if not multisite.get_multisite_status():
+ return None
+
rgw_client = RgwClient.instance(owner, daemon_name)
zonegroup_name = RgwClient.admin_instance(daemon_name=daemon_name).get_default_zonegroup()
policy_exists = multisite.policy_group_exists(_SYNC_GROUP_ID, zonegroup_name)
if replication and not policy_exists:
multisite.create_dashboard_admin_sync_group(zonegroup_name=zonegroup_name)
+
return rgw_client.set_bucket_replication(bucket_name, replication)
- def _get_replication(self, bucket_name: str):
- rgw_client = RgwClient.admin_instance()
+ def _get_replication(self, bucket_name: str, owner, daemon_name):
+ rgw_client = RgwClient.instance(owner, daemon_name)
return rgw_client.get_bucket_replication(bucket_name)
@staticmethod
result['mfa_delete'] = versioning['MfaDelete']
result['bucket_policy'] = self._get_policy(bucket_name, daemon_name, result['owner'])
result['acl'] = self._get_acl(bucket_name, daemon_name, result['owner'])
- result['replication'] = self._get_replication(bucket_name)
+ result['replication'] = self._get_replication(bucket_name, result['owner'], daemon_name)
# Append the locking configuration.
locking = self._get_locking(result['owner'], daemon_name, bucket_name)
mfa_delete=None, mfa_token_serial=None, mfa_token_pin=None,
lock_mode=None, lock_retention_period_days=None,
lock_retention_period_years=None, tags=None, bucket_policy=None,
- canned_acl=None, daemon_name=None):
+ canned_acl=None, replication=None, daemon_name=None):
encryption_state = str_to_bool(encryption_state)
+ if replication is not None:
+ replication = str_to_bool(replication)
# When linking a non-tenant-user owned bucket to a tenanted user, we
# need to prefix bucket name with '/'. e.g. photos -> /photos
if '$' in uid and '/' not in bucket:
self._set_policy(bucket_name, bucket_policy, daemon_name, uid)
if canned_acl:
self._set_acl(bucket_name, canned_acl, uid, daemon_name)
+ if replication is not None:
+ self._set_replication(bucket_name, replication, uid, daemon_name)
return self._append_bid(result)
def delete(self, bucket, purge_objects='true', daemon_name=None):