Compare commits
7 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
b7ceed787e | ||
|
|
c0bddb93d5 | ||
|
|
25beeb0819 | ||
|
|
7c3ab24bf1 | ||
|
|
b304d5978d | ||
|
|
bfc9c63952 | ||
|
|
51e14a5231 |
@@ -49,7 +49,9 @@ class RestoresTest(base.TestCaseShell):
|
||||
cs.restores.create('586cc6ce-e286-40bd-b2b5-dd32694d9944',
|
||||
'2220f8b1-975d-4621-a872-fa9afb43cb6c',
|
||||
'192.168.1.2:35357/v2.0',
|
||||
'{"username": "admin"}')
|
||||
'{}',
|
||||
'{"type": "password", "username": "admin", '
|
||||
'"password": "test"}')
|
||||
mock_request.assert_called_with(
|
||||
'POST',
|
||||
'/restores',
|
||||
@@ -57,9 +59,11 @@ class RestoresTest(base.TestCaseShell):
|
||||
'restore':
|
||||
{
|
||||
'checkpoint_id': '2220f8b1-975d-4621-a872-fa9afb43cb6c',
|
||||
'parameters': '{"username": "admin"}',
|
||||
'parameters': '{}',
|
||||
'provider_id': '586cc6ce-e286-40bd-b2b5-dd32694d9944',
|
||||
'restore_target': '192.168.1.2:35357/v2.0'
|
||||
'restore_target': '192.168.1.2:35357/v2.0',
|
||||
'restore_auth': '{"type": "password", "username": '
|
||||
'"admin", "password": "test"}'
|
||||
}}, headers={})
|
||||
|
||||
@mock.patch('karborclient.common.http.HTTPClient.json_request')
|
||||
|
||||
@@ -24,13 +24,17 @@ class Restore(base.Resource):
|
||||
class RestoreManager(base.ManagerWithFind):
|
||||
resource_class = Restore
|
||||
|
||||
def create(self, provider_id, checkpoint_id, restore_target, parameters):
|
||||
body = {'restore': {'provider_id': provider_id,
|
||||
'checkpoint_id': checkpoint_id,
|
||||
'restore_target': restore_target,
|
||||
'parameters': parameters,
|
||||
}
|
||||
}
|
||||
def create(self, provider_id, checkpoint_id, restore_target, parameters,
|
||||
restore_auth):
|
||||
body = {
|
||||
'restore': {
|
||||
'provider_id': provider_id,
|
||||
'checkpoint_id': checkpoint_id,
|
||||
'restore_target': restore_target,
|
||||
'restore_auth': restore_auth,
|
||||
'parameters': parameters,
|
||||
}
|
||||
}
|
||||
url = "/restores"
|
||||
return self._create(url, body, 'restore')
|
||||
|
||||
|
||||
@@ -114,18 +114,25 @@ def do_plan_list(cs, args):
|
||||
metavar='<id=type=name,id=type=name>',
|
||||
help='Resource in list must be a dict when creating'
|
||||
' a plan.The keys of resource are id and type.')
|
||||
@utils.arg('--parameters',
|
||||
@utils.arg('--parameters-json',
|
||||
type=str,
|
||||
dest='parameters_json',
|
||||
metavar='<parameters>',
|
||||
default=None,
|
||||
help='The parameters of a plan.')
|
||||
help='Plan parameters in json format.')
|
||||
@utils.arg('--parameters',
|
||||
action='append',
|
||||
metavar='resource_type=<type>[,resource_id=<id>,key=val,...]',
|
||||
default=[],
|
||||
help='Plan parameters, may be specified multiple times. '
|
||||
'resource_type: type of resource to apply parameters. '
|
||||
'resource_id: limit the parameters to a specific resource. '
|
||||
'Other keys and values: according to provider\'s protect schema.'
|
||||
)
|
||||
def do_plan_create(cs, args):
|
||||
"""Create a plan."""
|
||||
plan_resources = _extract_resources(args)
|
||||
if args.parameters is not None:
|
||||
plan_parameters = jsonutils.loads(args.parameters)
|
||||
else:
|
||||
plan_parameters = {}
|
||||
plan_parameters = _extract_parameters(args)
|
||||
plan = cs.plans.create(args.name, args.provider_id, plan_resources,
|
||||
plan_parameters)
|
||||
utils.print_dict(plan.to_dict())
|
||||
@@ -214,12 +221,29 @@ def _extract_resources(args):
|
||||
@utils.arg('restore_target',
|
||||
metavar='<restore_target>',
|
||||
help='Restore target.')
|
||||
@utils.arg('--parameters',
|
||||
@utils.arg('restore_username',
|
||||
metavar='<username>',
|
||||
default="",
|
||||
help='Username to restore target.')
|
||||
@utils.arg('restore_password',
|
||||
metavar='<password>',
|
||||
default="",
|
||||
help='Password to restore target.')
|
||||
@utils.arg('--parameters-json',
|
||||
type=str,
|
||||
nargs='*',
|
||||
metavar='<key=value>',
|
||||
dest='parameters_json',
|
||||
metavar='<parameters>',
|
||||
default=None,
|
||||
help='The parameters of a restore target.')
|
||||
help='Restore parameters in json format.')
|
||||
@utils.arg('--parameters',
|
||||
action='append',
|
||||
metavar='resource_type=<type>[,resource_id=<id>,key=val,...]',
|
||||
default=[],
|
||||
help='Restore parameters, may be specified multiple times. '
|
||||
'resource_type: type of resource to apply parameters. '
|
||||
'resource_id: limit the parameters to a specific resource. '
|
||||
'Other keys and values: according to provider\'s restore schema.'
|
||||
)
|
||||
def do_restore_create(cs, args):
|
||||
"""Create a restore."""
|
||||
if not uuidutils.is_uuid_like(args.provider_id):
|
||||
@@ -230,27 +254,56 @@ def do_restore_create(cs, args):
|
||||
raise exceptions.CommandError(
|
||||
"Invalid checkpoint id provided.")
|
||||
|
||||
if args.parameters is not None:
|
||||
restore_parameters = _extract_parameters(args)
|
||||
else:
|
||||
raise exceptions.CommandError(
|
||||
"parameters must be provided.")
|
||||
restore_parameters = _extract_parameters(args)
|
||||
restore_auth = {
|
||||
'type': 'password',
|
||||
'username': args.username,
|
||||
'password': args.password,
|
||||
}
|
||||
restore = cs.restores.create(args.provider_id, args.checkpoint_id,
|
||||
args.restore_target, restore_parameters)
|
||||
args.restore_target, restore_parameters,
|
||||
restore_auth)
|
||||
utils.print_dict(restore.to_dict())
|
||||
|
||||
|
||||
def _extract_parameters(args):
|
||||
parameters = {}
|
||||
for data in args.parameters:
|
||||
# unset doesn't require a val, so we have the if/else
|
||||
if '=' in data:
|
||||
(key, value) = data.split('=', 1)
|
||||
else:
|
||||
key = data
|
||||
value = None
|
||||
if all((args.parameters, args.parameters_json)):
|
||||
raise exceptions.CommandError(
|
||||
"Must provide parameters or parameters-json, not both")
|
||||
if not any((args.parameters, args.parameters_json)):
|
||||
return {}
|
||||
|
||||
if args.parameters_json:
|
||||
return jsonutils.loads(args.parameters_json)
|
||||
parameters = {}
|
||||
for resource_params in args.parameters:
|
||||
resource_type = None
|
||||
resource_id = None
|
||||
parameter = {}
|
||||
for param_kv in resource_params.split(','):
|
||||
try:
|
||||
key, value = param_kv.split('=')
|
||||
except Exception:
|
||||
raise exceptions.CommandError(
|
||||
'parameters must be in the form: key1=val1,key2=val2,...'
|
||||
)
|
||||
if key == "resource_type":
|
||||
resource_type = value
|
||||
if key == "resource_id":
|
||||
if not uuidutils.is_uuid_like(value):
|
||||
raise exceptions.CommandError('resource_id must be a uuid')
|
||||
resource_id = value
|
||||
parameters[key] = value
|
||||
if resource_type is None:
|
||||
raise exceptions.CommandError(
|
||||
'Must specify resource_type for parameters'
|
||||
)
|
||||
if resource_id is None:
|
||||
resource_key = resource_type
|
||||
else:
|
||||
resource_key = "%s#%s" % (resource_type, resource_id)
|
||||
parameters[resource_key] = parameter
|
||||
|
||||
parameters[key] = value
|
||||
return parameters
|
||||
|
||||
|
||||
|
||||
@@ -3,11 +3,11 @@
|
||||
# process, which may cause wedges in the gate later.
|
||||
pbr>=1.6 # Apache-2.0
|
||||
PrettyTable<0.8,>=0.7 # BSD
|
||||
python-keystoneclient!=1.8.0,!=2.1.0,>=1.7.0 # Apache-2.0
|
||||
python-keystoneclient!=2.1.0,>=2.0.0 # Apache-2.0
|
||||
requests>=2.10.0 # Apache-2.0
|
||||
simplejson>=2.2.0 # MIT
|
||||
Babel>=2.3.4 # BSD
|
||||
six>=1.9.0 # MIT
|
||||
oslo.utils>=3.16.0 # Apache-2.0
|
||||
oslo.log>=1.14.0 # Apache-2.0
|
||||
oslo.log>=3.11.0 # Apache-2.0
|
||||
oslo.i18n>=2.1.0 # Apache-2.0
|
||||
|
||||
Reference in New Issue
Block a user