"""
def __init__(self,
+ rgw_realm, # type: str
rgw_zone, # type: str
placement=None,
hosts=None, # type: Optional[List[str]]
rgw_frontend_port=None, # type: Optional[int]
rgw_zonegroup=None, # type: Optional[str]
rgw_zone_user=None, # type: Optional[str]
- rgw_realm=None, # type: Optional[str]
system_access_key=None, # type: Optional[str]
system_secret_key=None, # type: Optional[str]
count=None # type: Optional[int]
# default values that makes sense for Ansible. Rook has default values implemented
# in Rook itself. Thus we don't set any defaults here in this class.
- super(RGWSpec, self).__init__(name=rgw_zone, count=count,
+ super(RGWSpec, self).__init__(name=rgw_realm + '.' + rgw_zone,
+ count=count,
placement=placement)
#: List of hosts where RGWs should run. Not for Rook.
self.rgw_multisite_proto = rgw_multisite_proto
self.rgw_frontend_port = rgw_frontend_port
+ self.rgw_realm = rgw_realm
+ self.rgw_zone = rgw_zone
self.rgw_zonegroup = rgw_zonegroup
self.rgw_zone_user = rgw_zone_user
- self.rgw_realm = rgw_realm
self.system_access_key = system_access_key
self.system_secret_key = system_secret_key
@orchestrator._cli_write_command(
'orchestrator rgw add',
- 'name=zone_name,type=CephString,req=false '
+ 'name=realm_name,type=CephString '
+ 'name=zone_name,type=CephString '
'name=num,type=CephInt,req=false '
"name=hosts,type=CephString,n=N,req=false",
'Create an RGW service. A complete <rgw_spec> can be provided'\
' using <-i> to customize completelly the RGW service')
- def _rgw_add(self, zone_name, num, hosts, inbuf=None):
+ def _rgw_add(self, realm_name, zone_name, num=1, hosts=None, inbuf=None):
usage = """
Usage:
ceph orchestrator rgw add -i <json_file>
- ceph orchestrator rgw add <zone_name>
+ ceph orchestrator rgw add <realm_name> <zone_name>
"""
-
if inbuf:
try:
rgw_spec = orchestrator.RGWSpec.from_json(json.loads(inbuf))
except ValueError as e:
msg = 'Failed to read JSON input: {}'.format(str(e)) + usage
return HandleCommandResult(-errno.EINVAL, stderr=msg)
- elif zone_name:
- rgw_spec = orchestrator.RGWSpec(
- rgw_zone=zone_name,
- placement=orchestrator.PlacementSpec(nodes=hosts),
- count=num or 1)
- else:
- return HandleCommandResult(-errno.EINVAL, stderr=usage)
+ rgw_spec = orchestrator.RGWSpec(
+ rgw_realm=realm_name,
+ rgw_zone=zone_name,
+ placement=orchestrator.PlacementSpec(nodes=hosts),
+ count=num or 1)
completion = self.add_rgw(rgw_spec)
self._orchestrator_wait([completion])
@orchestrator._cli_write_command(
'orchestrator rgw update',
- "name=zone_name,type=CephString "
- "name=num,type=CephInt "
+ 'name=realm_name,type=CephString '
+ 'name=zone_name,type=CephString '
+ "name=num,type=CephInt,req=False "
"name=hosts,type=CephString,n=N,req=false",
'Update the number of RGW instances for the given zone')
- def _rgw_update(self, zone_name, num, hosts=None):
+ def _rgw_update(self, realm_name, zone_name, num, hosts=None):
spec = orchestrator.RGWSpec(
+ rgw_realm=realm_name,
rgw_zone=zone_name,
placement=orchestrator.PlacementSpec(nodes=hosts),
count=num or 1)
def add_rgw(self, spec):
if not spec.placement.nodes or len(spec.placement.nodes) < spec.count:
raise RuntimeError("must specify at least %d hosts" % spec.count)
- # ensure rgw_zone is set for these daemons
+ # ensure rgw_realm and rgw_zone is set for these daemons
ret, out, err = self.mon_command({
'prefix': 'config set',
'who': 'client.rgw.' + spec.name,
'name': 'rgw_zone',
- 'value': spec.name,
+ 'value': spec.rgw_zone,
+ })
+ ret, out, err = self.mon_command({
+ 'prefix': 'config set',
+ 'who': 'client.rgw.' + spec.rgw_realm,
+ 'name': 'rgw_realm',
+ 'value': spec.rgw_realm,
})
daemons = self._get_services('rgw')
results = []