Merge "Correct the action name for admin_actions API v3"
This commit is contained in:
commit
d960e71772
@ -38,11 +38,11 @@
|
|||||||
"compute_extension:v3:os-admin-actions:resume": "rule:admin_or_owner",
|
"compute_extension:v3:os-admin-actions:resume": "rule:admin_or_owner",
|
||||||
"compute_extension:v3:os-admin-actions:lock": "rule:admin_api",
|
"compute_extension:v3:os-admin-actions:lock": "rule:admin_api",
|
||||||
"compute_extension:v3:os-admin-actions:unlock": "rule:admin_api",
|
"compute_extension:v3:os-admin-actions:unlock": "rule:admin_api",
|
||||||
"compute_extension:v3:os-admin-actions:resetNetwork": "rule:admin_api",
|
"compute_extension:v3:os-admin-actions:reset_network": "rule:admin_api",
|
||||||
"compute_extension:v3:os-admin-actions:injectNetworkInfo": "rule:admin_api",
|
"compute_extension:v3:os-admin-actions:inject_network_info": "rule:admin_api",
|
||||||
"compute_extension:v3:os-admin-actions:createBackup": "rule:admin_or_owner",
|
"compute_extension:v3:os-admin-actions:create_backup": "rule:admin_or_owner",
|
||||||
"compute_extension:v3:os-admin-actions:migrateLive": "rule:admin_api",
|
"compute_extension:v3:os-admin-actions:migrate_live": "rule:admin_api",
|
||||||
"compute_extension:v3:os-admin-actions:resetState": "rule:admin_api",
|
"compute_extension:v3:os-admin-actions:reset_state": "rule:admin_api",
|
||||||
"compute_extension:v3:os-admin-actions:migrate": "rule:admin_api",
|
"compute_extension:v3:os-admin-actions:migrate": "rule:admin_api",
|
||||||
"compute_extension:aggregates": "rule:admin_api",
|
"compute_extension:aggregates": "rule:admin_api",
|
||||||
"compute_extension:v3:os-aggregates": "rule:admin_api",
|
"compute_extension:v3:os-aggregates": "rule:admin_api",
|
||||||
|
@ -127,11 +127,11 @@ class AdminActionsController(wsgi.Controller):
|
|||||||
raise exc.HTTPBadRequest()
|
raise exc.HTTPBadRequest()
|
||||||
return webob.Response(status_int=202)
|
return webob.Response(status_int=202)
|
||||||
|
|
||||||
@wsgi.action('resetNetwork')
|
@wsgi.action('reset_network')
|
||||||
def _reset_network(self, req, id, body):
|
def _reset_network(self, req, id, body):
|
||||||
"""Permit admins to reset networking on a server."""
|
"""Permit admins to reset networking on a server."""
|
||||||
context = req.environ['nova.context']
|
context = req.environ['nova.context']
|
||||||
authorize(context, 'resetNetwork')
|
authorize(context, 'reset_network')
|
||||||
try:
|
try:
|
||||||
instance = self.compute_api.get(context, id)
|
instance = self.compute_api.get(context, id)
|
||||||
self.compute_api.reset_network(context, instance)
|
self.compute_api.reset_network(context, instance)
|
||||||
@ -141,11 +141,11 @@ class AdminActionsController(wsgi.Controller):
|
|||||||
raise exc.HTTPUnprocessableEntity()
|
raise exc.HTTPUnprocessableEntity()
|
||||||
return webob.Response(status_int=202)
|
return webob.Response(status_int=202)
|
||||||
|
|
||||||
@wsgi.action('injectNetworkInfo')
|
@wsgi.action('inject_network_info')
|
||||||
def _inject_network_info(self, req, id, body):
|
def _inject_network_info(self, req, id, body):
|
||||||
"""Permit admins to inject network info into a server."""
|
"""Permit admins to inject network info into a server."""
|
||||||
context = req.environ['nova.context']
|
context = req.environ['nova.context']
|
||||||
authorize(context, 'injectNetworkInfo')
|
authorize(context, 'inject_network_info')
|
||||||
try:
|
try:
|
||||||
instance = self.compute_api.get(context, id)
|
instance = self.compute_api.get(context, id)
|
||||||
self.compute_api.inject_network_info(context, instance)
|
self.compute_api.inject_network_info(context, instance)
|
||||||
@ -189,7 +189,7 @@ class AdminActionsController(wsgi.Controller):
|
|||||||
raise exc.HTTPUnprocessableEntity()
|
raise exc.HTTPUnprocessableEntity()
|
||||||
return webob.Response(status_int=202)
|
return webob.Response(status_int=202)
|
||||||
|
|
||||||
@wsgi.action('createBackup')
|
@wsgi.action('create_backup')
|
||||||
def _create_backup(self, req, id, body):
|
def _create_backup(self, req, id, body):
|
||||||
"""Backup a server instance.
|
"""Backup a server instance.
|
||||||
|
|
||||||
@ -202,10 +202,10 @@ class AdminActionsController(wsgi.Controller):
|
|||||||
|
|
||||||
"""
|
"""
|
||||||
context = req.environ["nova.context"]
|
context = req.environ["nova.context"]
|
||||||
authorize(context, 'createBackup')
|
authorize(context, 'create_backup')
|
||||||
|
|
||||||
try:
|
try:
|
||||||
entity = body["createBackup"]
|
entity = body["create_backup"]
|
||||||
except (KeyError, TypeError):
|
except (KeyError, TypeError):
|
||||||
raise exc.HTTPBadRequest(_("Malformed request body"))
|
raise exc.HTTPBadRequest(_("Malformed request body"))
|
||||||
|
|
||||||
@ -215,20 +215,20 @@ class AdminActionsController(wsgi.Controller):
|
|||||||
rotation = entity["rotation"]
|
rotation = entity["rotation"]
|
||||||
|
|
||||||
except KeyError as missing_key:
|
except KeyError as missing_key:
|
||||||
msg = _("createBackup entity requires %s attribute") % missing_key
|
msg = _("create_backup entity requires %s attribute") % missing_key
|
||||||
raise exc.HTTPBadRequest(explanation=msg)
|
raise exc.HTTPBadRequest(explanation=msg)
|
||||||
|
|
||||||
except TypeError:
|
except TypeError:
|
||||||
msg = _("Malformed createBackup entity")
|
msg = _("Malformed create_backup entity")
|
||||||
raise exc.HTTPBadRequest(explanation=msg)
|
raise exc.HTTPBadRequest(explanation=msg)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
rotation = int(rotation)
|
rotation = int(rotation)
|
||||||
except ValueError:
|
except ValueError:
|
||||||
msg = _("createBackup attribute 'rotation' must be an integer")
|
msg = _("create_backup attribute 'rotation' must be an integer")
|
||||||
raise exc.HTTPBadRequest(explanation=msg)
|
raise exc.HTTPBadRequest(explanation=msg)
|
||||||
if rotation < 0:
|
if rotation < 0:
|
||||||
msg = _("createBackup attribute 'rotation' must be greater "
|
msg = _("create_backup attribute 'rotation' must be greater "
|
||||||
"than or equal to zero")
|
"than or equal to zero")
|
||||||
raise exc.HTTPBadRequest(explanation=msg)
|
raise exc.HTTPBadRequest(explanation=msg)
|
||||||
|
|
||||||
@ -251,7 +251,7 @@ class AdminActionsController(wsgi.Controller):
|
|||||||
backup_type, rotation, extra_properties=props)
|
backup_type, rotation, extra_properties=props)
|
||||||
except exception.InstanceInvalidState as state_error:
|
except exception.InstanceInvalidState as state_error:
|
||||||
common.raise_http_conflict_for_instance_invalid_state(state_error,
|
common.raise_http_conflict_for_instance_invalid_state(state_error,
|
||||||
'createBackup')
|
'create_backup')
|
||||||
|
|
||||||
resp = webob.Response(status_int=202)
|
resp = webob.Response(status_int=202)
|
||||||
|
|
||||||
@ -263,16 +263,16 @@ class AdminActionsController(wsgi.Controller):
|
|||||||
|
|
||||||
return resp
|
return resp
|
||||||
|
|
||||||
@wsgi.action('os-migrateLive')
|
@wsgi.action('migrate_live')
|
||||||
def _migrate_live(self, req, id, body):
|
def _migrate_live(self, req, id, body):
|
||||||
"""Permit admins to (live) migrate a server to a new host."""
|
"""Permit admins to (live) migrate a server to a new host."""
|
||||||
context = req.environ["nova.context"]
|
context = req.environ["nova.context"]
|
||||||
authorize(context, 'migrateLive')
|
authorize(context, 'migrate_live')
|
||||||
|
|
||||||
try:
|
try:
|
||||||
block_migration = body["os-migrateLive"]["block_migration"]
|
block_migration = body["migrate_live"]["block_migration"]
|
||||||
disk_over_commit = body["os-migrateLive"]["disk_over_commit"]
|
disk_over_commit = body["migrate_live"]["disk_over_commit"]
|
||||||
host = body["os-migrateLive"]["host"]
|
host = body["migrate_live"]["host"]
|
||||||
except (TypeError, KeyError):
|
except (TypeError, KeyError):
|
||||||
msg = _("host, block_migration and disk_over_commit must "
|
msg = _("host, block_migration and disk_over_commit must "
|
||||||
"be specified for live migration.")
|
"be specified for live migration.")
|
||||||
@ -300,15 +300,15 @@ class AdminActionsController(wsgi.Controller):
|
|||||||
|
|
||||||
return webob.Response(status_int=202)
|
return webob.Response(status_int=202)
|
||||||
|
|
||||||
@wsgi.action('os-resetState')
|
@wsgi.action('reset_state')
|
||||||
def _reset_state(self, req, id, body):
|
def _reset_state(self, req, id, body):
|
||||||
"""Permit admins to reset the state of a server."""
|
"""Permit admins to reset the state of a server."""
|
||||||
context = req.environ["nova.context"]
|
context = req.environ["nova.context"]
|
||||||
authorize(context, 'resetState')
|
authorize(context, 'reset_state')
|
||||||
|
|
||||||
# Identify the desired state from the body
|
# Identify the desired state from the body
|
||||||
try:
|
try:
|
||||||
state = state_map[body["os-resetState"]["state"]]
|
state = state_map[body["reset_state"]["state"]]
|
||||||
except (TypeError, KeyError):
|
except (TypeError, KeyError):
|
||||||
msg = _("Desired state must be specified. Valid states "
|
msg = _("Desired state must be specified. Valid states "
|
||||||
"are: %s") % ', '.join(sorted(state_map.keys()))
|
"are: %s") % ', '.join(sorted(state_map.keys()))
|
||||||
@ -321,7 +321,7 @@ class AdminActionsController(wsgi.Controller):
|
|||||||
raise exc.HTTPNotFound(_("Server not found"))
|
raise exc.HTTPNotFound(_("Server not found"))
|
||||||
except Exception:
|
except Exception:
|
||||||
readable = traceback.format_exc()
|
readable = traceback.format_exc()
|
||||||
LOG.exception(_("Compute.api::resetState %s"), readable)
|
LOG.exception(_("Compute.api::reset_state %s"), readable)
|
||||||
raise exc.HTTPUnprocessableEntity()
|
raise exc.HTTPUnprocessableEntity()
|
||||||
return webob.Response(status_int=202)
|
return webob.Response(status_int=202)
|
||||||
|
|
||||||
@ -330,7 +330,7 @@ class AdminActions(extensions.V3APIExtensionBase):
|
|||||||
"""Enable admin-only server actions
|
"""Enable admin-only server actions
|
||||||
|
|
||||||
Actions include: pause, unpause, suspend, resume, migrate,
|
Actions include: pause, unpause, suspend, resume, migrate,
|
||||||
resetNetwork, injectNetworkInfo, lock, unlock, createBackup
|
reset_network, inject_network_info, lock, unlock, create_backup
|
||||||
"""
|
"""
|
||||||
|
|
||||||
name = "AdminActions"
|
name = "AdminActions"
|
||||||
|
@ -76,7 +76,7 @@ def fake_compute_api_get(self, context, instance_uuid, want_objects=False):
|
|||||||
class AdminActionsTest(test.TestCase):
|
class AdminActionsTest(test.TestCase):
|
||||||
|
|
||||||
_actions = ('pause', 'unpause', 'suspend', 'resume', 'migrate',
|
_actions = ('pause', 'unpause', 'suspend', 'resume', 'migrate',
|
||||||
'resetNetwork', 'injectNetworkInfo', 'lock', 'unlock')
|
'reset_network', 'inject_network_info', 'lock', 'unlock')
|
||||||
|
|
||||||
_methods = ('pause', 'unpause', 'suspend', 'resume', 'resize',
|
_methods = ('pause', 'unpause', 'suspend', 'resume', 'resize',
|
||||||
'reset_network', 'inject_network_info', 'lock', 'unlock')
|
'reset_network', 'inject_network_info', 'lock', 'unlock')
|
||||||
@ -134,7 +134,7 @@ class AdminActionsTest(test.TestCase):
|
|||||||
req = webob.Request.blank('/v3/servers/%s/action' % self.UUID)
|
req = webob.Request.blank('/v3/servers/%s/action' % self.UUID)
|
||||||
req.method = 'POST'
|
req.method = 'POST'
|
||||||
req.body = jsonutils.dumps({
|
req.body = jsonutils.dumps({
|
||||||
'os-migrateLive': {
|
'migrate_live': {
|
||||||
'host': 'hostname',
|
'host': 'hostname',
|
||||||
'block_migration': False,
|
'block_migration': False,
|
||||||
'disk_over_commit': False,
|
'disk_over_commit': False,
|
||||||
@ -169,7 +169,7 @@ class AdminActionsTest(test.TestCase):
|
|||||||
req = webob.Request.blank('/v3/servers/%s/action' % self.UUID)
|
req = webob.Request.blank('/v3/servers/%s/action' % self.UUID)
|
||||||
req.method = 'POST'
|
req.method = 'POST'
|
||||||
req.body = jsonutils.dumps({
|
req.body = jsonutils.dumps({
|
||||||
'os-migrateLive': {
|
'migrate_live': {
|
||||||
'dummy': 'hostname',
|
'dummy': 'hostname',
|
||||||
'block_migration': False,
|
'block_migration': False,
|
||||||
'disk_over_commit': False,
|
'disk_over_commit': False,
|
||||||
@ -189,7 +189,7 @@ class AdminActionsTest(test.TestCase):
|
|||||||
req = webob.Request.blank('/v3/servers/%s/action' % self.UUID)
|
req = webob.Request.blank('/v3/servers/%s/action' % self.UUID)
|
||||||
req.method = 'POST'
|
req.method = 'POST'
|
||||||
req.body = jsonutils.dumps({
|
req.body = jsonutils.dumps({
|
||||||
'os-migrateLive': {
|
'migrate_live': {
|
||||||
'host': 'hostname',
|
'host': 'hostname',
|
||||||
'block_migration': False,
|
'block_migration': False,
|
||||||
'disk_over_commit': False,
|
'disk_over_commit': False,
|
||||||
@ -227,7 +227,7 @@ class AdminActionsTest(test.TestCase):
|
|||||||
req = webob.Request.blank('/v3/servers/%s/action' % self.UUID)
|
req = webob.Request.blank('/v3/servers/%s/action' % self.UUID)
|
||||||
req.method = 'POST'
|
req.method = 'POST'
|
||||||
req.body = jsonutils.dumps({
|
req.body = jsonutils.dumps({
|
||||||
'os-migrateLive': {
|
'migrate_live': {
|
||||||
'host': 'hostname',
|
'host': 'hostname',
|
||||||
'block_migration': False,
|
'block_migration': False,
|
||||||
'disk_over_commit': False,
|
'disk_over_commit': False,
|
||||||
@ -265,7 +265,7 @@ class AdminActionsTest(test.TestCase):
|
|||||||
req = webob.Request.blank('/v3/servers/%s/action' % self.UUID)
|
req = webob.Request.blank('/v3/servers/%s/action' % self.UUID)
|
||||||
req.method = 'POST'
|
req.method = 'POST'
|
||||||
req.body = jsonutils.dumps({
|
req.body = jsonutils.dumps({
|
||||||
'os-migrateLive': {
|
'migrate_live': {
|
||||||
'host': 'hostname',
|
'host': 'hostname',
|
||||||
'block_migration': False,
|
'block_migration': False,
|
||||||
'disk_over_commit': False,
|
'disk_over_commit': False,
|
||||||
@ -303,7 +303,7 @@ class AdminActionsTest(test.TestCase):
|
|||||||
req = webob.Request.blank('/v3/servers/%s/action' % self.UUID)
|
req = webob.Request.blank('/v3/servers/%s/action' % self.UUID)
|
||||||
req.method = 'POST'
|
req.method = 'POST'
|
||||||
req.body = jsonutils.dumps({
|
req.body = jsonutils.dumps({
|
||||||
'os-migrateLive': {
|
'migrate_live': {
|
||||||
'host': 'hostname',
|
'host': 'hostname',
|
||||||
'block_migration': False,
|
'block_migration': False,
|
||||||
'disk_over_commit': False,
|
'disk_over_commit': False,
|
||||||
@ -353,7 +353,7 @@ class CreateBackupTests(test.TestCase):
|
|||||||
|
|
||||||
def test_create_backup_with_metadata(self):
|
def test_create_backup_with_metadata(self):
|
||||||
body = {
|
body = {
|
||||||
'createBackup': {
|
'create_backup': {
|
||||||
'name': 'Backup 1',
|
'name': 'Backup 1',
|
||||||
'backup_type': 'daily',
|
'backup_type': 'daily',
|
||||||
'rotation': 1,
|
'rotation': 1,
|
||||||
@ -369,7 +369,7 @@ class CreateBackupTests(test.TestCase):
|
|||||||
|
|
||||||
def test_create_backup_with_too_much_metadata(self):
|
def test_create_backup_with_too_much_metadata(self):
|
||||||
body = {
|
body = {
|
||||||
'createBackup': {
|
'create_backup': {
|
||||||
'name': 'Backup 1',
|
'name': 'Backup 1',
|
||||||
'backup_type': 'daily',
|
'backup_type': 'daily',
|
||||||
'rotation': 1,
|
'rotation': 1,
|
||||||
@ -377,7 +377,7 @@ class CreateBackupTests(test.TestCase):
|
|||||||
},
|
},
|
||||||
}
|
}
|
||||||
for num in range(CONF.quota_metadata_items + 1):
|
for num in range(CONF.quota_metadata_items + 1):
|
||||||
body['createBackup']['metadata']['foo%i' % num] = "bar"
|
body['create_backup']['metadata']['foo%i' % num] = "bar"
|
||||||
|
|
||||||
request = self._get_request(body)
|
request = self._get_request(body)
|
||||||
response = request.get_response(self.app)
|
response = request.get_response(self.app)
|
||||||
@ -386,7 +386,7 @@ class CreateBackupTests(test.TestCase):
|
|||||||
def test_create_backup_no_name(self):
|
def test_create_backup_no_name(self):
|
||||||
# Name is required for backups.
|
# Name is required for backups.
|
||||||
body = {
|
body = {
|
||||||
'createBackup': {
|
'create_backup': {
|
||||||
'backup_type': 'daily',
|
'backup_type': 'daily',
|
||||||
'rotation': 1,
|
'rotation': 1,
|
||||||
},
|
},
|
||||||
@ -399,7 +399,7 @@ class CreateBackupTests(test.TestCase):
|
|||||||
def test_create_backup_no_rotation(self):
|
def test_create_backup_no_rotation(self):
|
||||||
# Rotation is required for backup requests.
|
# Rotation is required for backup requests.
|
||||||
body = {
|
body = {
|
||||||
'createBackup': {
|
'create_backup': {
|
||||||
'name': 'Backup 1',
|
'name': 'Backup 1',
|
||||||
'backup_type': 'daily',
|
'backup_type': 'daily',
|
||||||
},
|
},
|
||||||
@ -414,7 +414,7 @@ class CreateBackupTests(test.TestCase):
|
|||||||
for backup requests
|
for backup requests
|
||||||
"""
|
"""
|
||||||
body = {
|
body = {
|
||||||
'createBackup': {
|
'create_backup': {
|
||||||
'name': 'Backup 1',
|
'name': 'Backup 1',
|
||||||
'backup_type': 'daily',
|
'backup_type': 'daily',
|
||||||
'rotation': -1,
|
'rotation': -1,
|
||||||
@ -428,7 +428,7 @@ class CreateBackupTests(test.TestCase):
|
|||||||
def test_create_backup_no_backup_type(self):
|
def test_create_backup_no_backup_type(self):
|
||||||
# Backup Type (daily or weekly) is required for backup requests.
|
# Backup Type (daily or weekly) is required for backup requests.
|
||||||
body = {
|
body = {
|
||||||
'createBackup': {
|
'create_backup': {
|
||||||
'name': 'Backup 1',
|
'name': 'Backup 1',
|
||||||
'rotation': 1,
|
'rotation': 1,
|
||||||
},
|
},
|
||||||
@ -439,7 +439,7 @@ class CreateBackupTests(test.TestCase):
|
|||||||
self.assertEqual(response.status_int, 400)
|
self.assertEqual(response.status_int, 400)
|
||||||
|
|
||||||
def test_create_backup_bad_entity(self):
|
def test_create_backup_bad_entity(self):
|
||||||
body = {'createBackup': 'go'}
|
body = {'create_backup': 'go'}
|
||||||
|
|
||||||
request = self._get_request(body)
|
request = self._get_request(body)
|
||||||
response = request.get_response(self.app)
|
response = request.get_response(self.app)
|
||||||
@ -448,7 +448,7 @@ class CreateBackupTests(test.TestCase):
|
|||||||
def test_create_backup_rotation_is_zero(self):
|
def test_create_backup_rotation_is_zero(self):
|
||||||
# The happy path for creating backups if rotation is zero.
|
# The happy path for creating backups if rotation is zero.
|
||||||
body = {
|
body = {
|
||||||
'createBackup': {
|
'create_backup': {
|
||||||
'name': 'Backup 1',
|
'name': 'Backup 1',
|
||||||
'backup_type': 'daily',
|
'backup_type': 'daily',
|
||||||
'rotation': 0,
|
'rotation': 0,
|
||||||
@ -464,7 +464,7 @@ class CreateBackupTests(test.TestCase):
|
|||||||
def test_create_backup_rotation_is_positive(self):
|
def test_create_backup_rotation_is_positive(self):
|
||||||
# The happy path for creating backups if rotation is positive.
|
# The happy path for creating backups if rotation is positive.
|
||||||
body = {
|
body = {
|
||||||
'createBackup': {
|
'create_backup': {
|
||||||
'name': 'Backup 1',
|
'name': 'Backup 1',
|
||||||
'backup_type': 'daily',
|
'backup_type': 'daily',
|
||||||
'rotation': 1,
|
'rotation': 1,
|
||||||
@ -479,7 +479,7 @@ class CreateBackupTests(test.TestCase):
|
|||||||
|
|
||||||
def test_create_backup_raises_conflict_on_invalid_state(self):
|
def test_create_backup_raises_conflict_on_invalid_state(self):
|
||||||
body = {
|
body = {
|
||||||
'createBackup': {
|
'create_backup': {
|
||||||
'name': 'Backup 1',
|
'name': 'Backup 1',
|
||||||
'backup_type': 'daily',
|
'backup_type': 'daily',
|
||||||
'rotation': 1,
|
'rotation': 1,
|
||||||
@ -521,23 +521,23 @@ class ResetStateTests(test.TestCase):
|
|||||||
self.assertRaises(webob.exc.HTTPBadRequest,
|
self.assertRaises(webob.exc.HTTPBadRequest,
|
||||||
self.admin_api._reset_state,
|
self.admin_api._reset_state,
|
||||||
self.request, 'inst_id',
|
self.request, 'inst_id',
|
||||||
{"os-resetState": None})
|
{"reset_state": None})
|
||||||
|
|
||||||
def test_bad_state(self):
|
def test_bad_state(self):
|
||||||
self.assertRaises(webob.exc.HTTPBadRequest,
|
self.assertRaises(webob.exc.HTTPBadRequest,
|
||||||
self.admin_api._reset_state,
|
self.admin_api._reset_state,
|
||||||
self.request, 'inst_id',
|
self.request, 'inst_id',
|
||||||
{"os-resetState": {"state": "spam"}})
|
{"reset_state": {"state": "spam"}})
|
||||||
|
|
||||||
def test_no_instance(self):
|
def test_no_instance(self):
|
||||||
self.exists = False
|
self.exists = False
|
||||||
self.assertRaises(webob.exc.HTTPNotFound,
|
self.assertRaises(webob.exc.HTTPNotFound,
|
||||||
self.admin_api._reset_state,
|
self.admin_api._reset_state,
|
||||||
self.request, 'inst_id',
|
self.request, 'inst_id',
|
||||||
{"os-resetState": {"state": "active"}})
|
{"reset_state": {"state": "active"}})
|
||||||
|
|
||||||
def test_reset_active(self):
|
def test_reset_active(self):
|
||||||
body = {"os-resetState": {"state": "active"}}
|
body = {"reset_state": {"state": "active"}}
|
||||||
result = self.admin_api._reset_state(self.request, 'inst_id', body)
|
result = self.admin_api._reset_state(self.request, 'inst_id', body)
|
||||||
|
|
||||||
self.assertEqual(result.status_int, 202)
|
self.assertEqual(result.status_int, 202)
|
||||||
@ -545,7 +545,7 @@ class ResetStateTests(test.TestCase):
|
|||||||
task_state=None))
|
task_state=None))
|
||||||
|
|
||||||
def test_reset_error(self):
|
def test_reset_error(self):
|
||||||
body = {"os-resetState": {"state": "error"}}
|
body = {"reset_state": {"state": "error"}}
|
||||||
result = self.admin_api._reset_state(self.request, 'inst_id', body)
|
result = self.admin_api._reset_state(self.request, 'inst_id', body)
|
||||||
|
|
||||||
self.assertEqual(result.status_int, 202)
|
self.assertEqual(result.status_int, 202)
|
||||||
|
@ -116,11 +116,11 @@ policy_data = """
|
|||||||
"compute_extension:v3:os-admin-actions:resume": "",
|
"compute_extension:v3:os-admin-actions:resume": "",
|
||||||
"compute_extension:v3:os-admin-actions:lock": "",
|
"compute_extension:v3:os-admin-actions:lock": "",
|
||||||
"compute_extension:v3:os-admin-actions:unlock": "",
|
"compute_extension:v3:os-admin-actions:unlock": "",
|
||||||
"compute_extension:v3:os-admin-actions:resetNetwork": "",
|
"compute_extension:v3:os-admin-actions:reset_network": "",
|
||||||
"compute_extension:v3:os-admin-actions:injectNetworkInfo": "",
|
"compute_extension:v3:os-admin-actions:inject_network_info": "",
|
||||||
"compute_extension:v3:os-admin-actions:createBackup": "",
|
"compute_extension:v3:os-admin-actions:create_backup": "",
|
||||||
"compute_extension:v3:os-admin-actions:migrateLive": "",
|
"compute_extension:v3:os-admin-actions:migrate_live": "",
|
||||||
"compute_extension:v3:os-admin-actions:resetState": "",
|
"compute_extension:v3:os-admin-actions:reset_state": "",
|
||||||
"compute_extension:v3:os-admin-actions:migrate": "",
|
"compute_extension:v3:os-admin-actions:migrate": "",
|
||||||
"compute_extension:aggregates": "",
|
"compute_extension:aggregates": "",
|
||||||
"compute_extension:v3:os-aggregates": "",
|
"compute_extension:v3:os-aggregates": "",
|
||||||
|
Loading…
x
Reference in New Issue
Block a user