2012-09-28 11:48:38 +02:00
|
|
|
# -*- coding: utf-8 -*-
|
2013-12-06 10:47:41 +10:30
|
|
|
#
|
|
|
|
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
|
|
|
# not use this file except in compliance with the License. You may obtain
|
|
|
|
# a copy of the License at
|
|
|
|
#
|
|
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
|
|
#
|
|
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
|
|
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
|
|
|
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
|
|
|
# License for the specific language governing permissions and limitations
|
|
|
|
# under the License.
|
2012-09-28 11:48:38 +02:00
|
|
|
|
2015-04-03 08:52:42 +00:00
|
|
|
import base64
|
|
|
|
import os
|
|
|
|
import tempfile
|
|
|
|
|
2012-12-06 05:34:00 -08:00
|
|
|
import mock
|
2015-01-26 16:37:53 +02:00
|
|
|
from oslo_serialization import jsonutils
|
2013-06-24 10:03:19 -05:00
|
|
|
import six
|
2012-12-06 05:34:00 -08:00
|
|
|
|
2015-10-01 14:46:13 -05:00
|
|
|
from novaclient import api_versions
|
2012-04-09 20:32:37 +00:00
|
|
|
from novaclient import exceptions
|
2015-01-27 12:59:15 -08:00
|
|
|
from novaclient.tests.unit.fixture_data import client
|
|
|
|
from novaclient.tests.unit.fixture_data import floatingips
|
|
|
|
from novaclient.tests.unit.fixture_data import servers as data
|
|
|
|
from novaclient.tests.unit import utils
|
2015-12-25 11:40:22 +09:00
|
|
|
from novaclient.tests.unit.v2 import fakes
|
2015-02-03 02:32:58 +02:00
|
|
|
from novaclient.v2 import servers
|
2011-08-03 17:41:33 -04:00
|
|
|
|
|
|
|
|
2014-05-26 16:33:16 +10:00
|
|
|
class ServersTest(utils.FixturedTestCase):
|
2011-08-03 17:41:33 -04:00
|
|
|
|
2014-05-26 16:33:16 +10:00
|
|
|
client_fixture_class = client.V1
|
|
|
|
data_fixture_class = data.V1
|
2011-08-03 17:41:33 -04:00
|
|
|
|
2014-05-26 16:33:16 +10:00
|
|
|
def setUp(self):
|
|
|
|
super(ServersTest, self).setUp()
|
2014-07-10 15:14:52 +10:00
|
|
|
self.useFixture(floatingips.FloatingFixture(self.requests))
|
2011-08-03 17:41:33 -04:00
|
|
|
|
|
|
|
def test_list_servers(self):
|
2014-05-26 16:33:16 +10:00
|
|
|
sl = self.cs.servers.list()
|
2015-12-25 11:40:22 +09:00
|
|
|
self.assert_request_id(sl, fakes.FAKE_REQUEST_ID_LIST)
|
2014-05-26 16:33:16 +10:00
|
|
|
self.assert_called('GET', '/servers/detail')
|
2015-05-21 19:12:35 -05:00
|
|
|
for s in sl:
|
|
|
|
self.assertIsInstance(s, servers.Server)
|
2011-08-03 17:41:33 -04:00
|
|
|
|
2015-09-17 15:05:35 +10:00
|
|
|
def test_filter_servers_unicode(self):
|
|
|
|
sl = self.cs.servers.list(search_opts={'name': u't€sting'})
|
2015-12-25 11:40:22 +09:00
|
|
|
self.assert_request_id(sl, fakes.FAKE_REQUEST_ID_LIST)
|
2015-09-17 15:05:35 +10:00
|
|
|
self.assert_called('GET', '/servers/detail?name=t%E2%82%ACsting')
|
|
|
|
for s in sl:
|
|
|
|
self.assertIsInstance(s, servers.Server)
|
|
|
|
|
2015-08-26 14:29:42 +03:00
|
|
|
def test_list_all_servers(self):
|
|
|
|
# use marker just to identify this call in fixtures
|
|
|
|
sl = self.cs.servers.list(limit=-1, marker=1234)
|
2015-12-25 11:40:22 +09:00
|
|
|
self.assert_request_id(sl, fakes.FAKE_REQUEST_ID_LIST)
|
2015-08-26 14:29:42 +03:00
|
|
|
|
|
|
|
self.assertEqual(2, len(sl))
|
|
|
|
|
|
|
|
self.assertEqual(self.requests.request_history[-2].method, 'GET')
|
|
|
|
self.assertEqual(self.requests.request_history[-2].path_url,
|
|
|
|
'/servers/detail?marker=1234')
|
|
|
|
self.assert_called('GET', '/servers/detail?marker=5678')
|
|
|
|
|
|
|
|
for s in sl:
|
|
|
|
self.assertIsInstance(s, servers.Server)
|
|
|
|
|
2011-08-03 17:41:33 -04:00
|
|
|
def test_list_servers_undetailed(self):
|
2014-05-26 16:33:16 +10:00
|
|
|
sl = self.cs.servers.list(detailed=False)
|
2015-12-25 11:40:22 +09:00
|
|
|
self.assert_request_id(sl, fakes.FAKE_REQUEST_ID_LIST)
|
2014-05-26 16:33:16 +10:00
|
|
|
self.assert_called('GET', '/servers')
|
2015-05-21 19:12:35 -05:00
|
|
|
for s in sl:
|
|
|
|
self.assertIsInstance(s, servers.Server)
|
2011-08-03 17:41:33 -04:00
|
|
|
|
2013-08-07 21:37:28 +08:00
|
|
|
def test_list_servers_with_marker_limit(self):
|
2014-05-26 16:33:16 +10:00
|
|
|
sl = self.cs.servers.list(marker=1234, limit=2)
|
2015-12-25 11:40:22 +09:00
|
|
|
self.assert_request_id(sl, fakes.FAKE_REQUEST_ID_LIST)
|
2014-05-26 16:33:16 +10:00
|
|
|
self.assert_called('GET', '/servers/detail?limit=2&marker=1234')
|
2013-08-07 21:37:28 +08:00
|
|
|
for s in sl:
|
2014-01-15 10:42:19 +08:00
|
|
|
self.assertIsInstance(s, servers.Server)
|
2013-08-07 21:37:28 +08:00
|
|
|
|
2014-08-28 02:58:58 +00:00
|
|
|
def test_list_servers_sort_single(self):
|
|
|
|
sl = self.cs.servers.list(sort_keys=['display_name'],
|
|
|
|
sort_dirs=['asc'])
|
2015-12-25 11:40:22 +09:00
|
|
|
self.assert_request_id(sl, fakes.FAKE_REQUEST_ID_LIST)
|
2014-08-28 02:58:58 +00:00
|
|
|
self.assert_called(
|
|
|
|
'GET',
|
|
|
|
'/servers/detail?sort_dir=asc&sort_key=display_name')
|
|
|
|
for s in sl:
|
|
|
|
self.assertIsInstance(s, servers.Server)
|
|
|
|
|
|
|
|
def test_list_servers_sort_multiple(self):
|
|
|
|
sl = self.cs.servers.list(sort_keys=['display_name', 'id'],
|
|
|
|
sort_dirs=['asc', 'desc'])
|
2015-12-25 11:40:22 +09:00
|
|
|
self.assert_request_id(sl, fakes.FAKE_REQUEST_ID_LIST)
|
2014-08-28 02:58:58 +00:00
|
|
|
self.assert_called(
|
|
|
|
'GET',
|
|
|
|
('/servers/detail?sort_dir=asc&sort_dir=desc&'
|
|
|
|
'sort_key=display_name&sort_key=id'))
|
|
|
|
for s in sl:
|
|
|
|
self.assertIsInstance(s, servers.Server)
|
|
|
|
|
2011-08-03 17:41:33 -04:00
|
|
|
def test_get_server_details(self):
|
2014-05-26 16:33:16 +10:00
|
|
|
s = self.cs.servers.get(1234)
|
2015-12-25 11:40:22 +09:00
|
|
|
self.assert_request_id(s, fakes.FAKE_REQUEST_ID_LIST)
|
2014-05-26 16:33:16 +10:00
|
|
|
self.assert_called('GET', '/servers/1234')
|
2014-01-15 10:42:19 +08:00
|
|
|
self.assertIsInstance(s, servers.Server)
|
2014-08-04 10:13:54 +08:00
|
|
|
self.assertEqual(1234, s.id)
|
|
|
|
self.assertEqual('BUILD', s.status)
|
2011-08-03 17:41:33 -04:00
|
|
|
|
2013-04-10 14:09:21 -07:00
|
|
|
def test_get_server_promote_details(self):
|
2014-05-26 16:33:16 +10:00
|
|
|
s1 = self.cs.servers.list(detailed=False)[0]
|
|
|
|
s2 = self.cs.servers.list(detailed=True)[0]
|
2013-11-08 15:42:17 +08:00
|
|
|
self.assertNotEqual(s1._info, s2._info)
|
2013-04-10 14:09:21 -07:00
|
|
|
s1.get()
|
2013-09-16 17:20:54 -07:00
|
|
|
self.assertEqual(s1._info, s2._info)
|
2013-04-10 14:09:21 -07:00
|
|
|
|
2011-08-03 17:41:33 -04:00
|
|
|
def test_create_server(self):
|
2014-05-26 16:33:16 +10:00
|
|
|
s = self.cs.servers.create(
|
2011-08-03 17:41:33 -04:00
|
|
|
name="My server",
|
|
|
|
image=1,
|
|
|
|
flavor=1,
|
|
|
|
meta={'foo': 'bar'},
|
2011-09-01 16:37:30 -05:00
|
|
|
userdata="hello moto",
|
2011-09-20 00:20:52 -07:00
|
|
|
key_name="fakekey",
|
2011-08-03 17:41:33 -04:00
|
|
|
files={
|
|
|
|
'/etc/passwd': 'some data', # a file
|
2013-09-07 12:27:46 -04:00
|
|
|
'/tmp/foo.txt': six.StringIO('data'), # a stream
|
2011-08-03 17:41:33 -04:00
|
|
|
}
|
|
|
|
)
|
2015-12-25 11:40:22 +09:00
|
|
|
self.assert_request_id(s, fakes.FAKE_REQUEST_ID_LIST)
|
2014-05-26 16:33:16 +10:00
|
|
|
self.assert_called('POST', '/servers')
|
2014-01-15 10:42:19 +08:00
|
|
|
self.assertIsInstance(s, servers.Server)
|
2011-08-03 17:41:33 -04:00
|
|
|
|
2012-12-06 05:34:00 -08:00
|
|
|
def test_create_server_boot_from_volume_with_nics(self):
|
2014-05-26 16:33:16 +10:00
|
|
|
old_boot = self.cs.servers._boot
|
2012-12-06 05:34:00 -08:00
|
|
|
|
|
|
|
nics = [{'net-id': '11111111-1111-1111-1111-111111111111',
|
|
|
|
'v4-fixed-ip': '10.0.0.7'}]
|
|
|
|
bdm = {"volume_size": "1",
|
|
|
|
"volume_id": "11111111-1111-1111-1111-111111111111",
|
|
|
|
"delete_on_termination": "0",
|
|
|
|
"device_name": "vda"}
|
|
|
|
|
|
|
|
def wrapped_boot(url, key, *boot_args, **boot_kwargs):
|
|
|
|
self.assertEqual(boot_kwargs['block_device_mapping'], bdm)
|
|
|
|
self.assertEqual(boot_kwargs['nics'], nics)
|
|
|
|
return old_boot(url, key, *boot_args, **boot_kwargs)
|
|
|
|
|
2014-05-26 16:33:16 +10:00
|
|
|
@mock.patch.object(self.cs.servers, '_boot', wrapped_boot)
|
2012-12-06 05:34:00 -08:00
|
|
|
def test_create_server_from_volume():
|
2014-05-26 16:33:16 +10:00
|
|
|
s = self.cs.servers.create(
|
2012-12-06 05:34:00 -08:00
|
|
|
name="My server",
|
|
|
|
image=1,
|
|
|
|
flavor=1,
|
|
|
|
meta={'foo': 'bar'},
|
|
|
|
userdata="hello moto",
|
|
|
|
key_name="fakekey",
|
|
|
|
block_device_mapping=bdm,
|
|
|
|
nics=nics
|
|
|
|
)
|
2015-12-25 11:40:22 +09:00
|
|
|
self.assert_request_id(s, fakes.FAKE_REQUEST_ID_LIST)
|
2014-05-26 16:33:16 +10:00
|
|
|
self.assert_called('POST', '/os-volumes_boot')
|
2014-01-15 10:42:19 +08:00
|
|
|
self.assertIsInstance(s, servers.Server)
|
2012-12-06 05:34:00 -08:00
|
|
|
|
|
|
|
test_create_server_from_volume()
|
|
|
|
|
2015-06-26 17:36:39 +03:00
|
|
|
def test_create_server_boot_from_volume_bdm_v2(self):
|
|
|
|
old_boot = self.cs.servers._boot
|
|
|
|
|
|
|
|
bdm = [{"volume_size": "1",
|
|
|
|
"volume_id": "11111111-1111-1111-1111-111111111111",
|
|
|
|
"delete_on_termination": "0",
|
|
|
|
"device_name": "vda"}]
|
|
|
|
|
|
|
|
def wrapped_boot(url, key, *boot_args, **boot_kwargs):
|
|
|
|
self.assertEqual(boot_kwargs['block_device_mapping_v2'], bdm)
|
|
|
|
return old_boot(url, key, *boot_args, **boot_kwargs)
|
|
|
|
|
|
|
|
with mock.patch.object(self.cs.servers, '_boot', wrapped_boot):
|
|
|
|
s = self.cs.servers.create(
|
|
|
|
name="My server",
|
|
|
|
image=1,
|
|
|
|
flavor=1,
|
|
|
|
meta={'foo': 'bar'},
|
|
|
|
userdata="hello moto",
|
|
|
|
key_name="fakekey",
|
|
|
|
block_device_mapping_v2=bdm
|
|
|
|
)
|
2015-12-25 11:40:22 +09:00
|
|
|
self.assert_request_id(s, fakes.FAKE_REQUEST_ID_LIST)
|
2015-06-26 17:36:39 +03:00
|
|
|
self.assert_called('POST', '/os-volumes_boot')
|
|
|
|
self.assertIsInstance(s, servers.Server)
|
|
|
|
|
2014-03-09 16:19:17 +08:00
|
|
|
def test_create_server_boot_with_nics_ipv6(self):
|
2014-05-26 16:33:16 +10:00
|
|
|
old_boot = self.cs.servers._boot
|
2014-03-09 16:19:17 +08:00
|
|
|
nics = [{'net-id': '11111111-1111-1111-1111-111111111111',
|
|
|
|
'v6-fixed-ip': '2001:db9:0:1::10'}]
|
|
|
|
|
|
|
|
def wrapped_boot(url, key, *boot_args, **boot_kwargs):
|
|
|
|
self.assertEqual(boot_kwargs['nics'], nics)
|
|
|
|
return old_boot(url, key, *boot_args, **boot_kwargs)
|
|
|
|
|
2014-05-26 16:33:16 +10:00
|
|
|
with mock.patch.object(self.cs.servers, '_boot', wrapped_boot):
|
|
|
|
s = self.cs.servers.create(
|
2014-03-09 16:19:17 +08:00
|
|
|
name="My server",
|
|
|
|
image=1,
|
|
|
|
flavor=1,
|
|
|
|
meta={'foo': 'bar'},
|
|
|
|
userdata="hello moto",
|
|
|
|
key_name="fakekey",
|
|
|
|
nics=nics
|
|
|
|
)
|
2015-12-25 11:40:22 +09:00
|
|
|
self.assert_request_id(s, fakes.FAKE_REQUEST_ID_LIST)
|
2014-05-26 16:33:16 +10:00
|
|
|
self.assert_called('POST', '/servers')
|
2014-03-09 16:19:17 +08:00
|
|
|
self.assertIsInstance(s, servers.Server)
|
|
|
|
|
2015-11-24 10:46:53 +08:00
|
|
|
def test_create_server_boot_with_address(self):
|
|
|
|
old_boot = self.cs.servers._boot
|
|
|
|
access_ip_v6 = '::1'
|
|
|
|
access_ip_v4 = '10.10.10.10'
|
|
|
|
|
|
|
|
def wrapped_boot(url, key, *boot_args, **boot_kwargs):
|
|
|
|
self.assertEqual(boot_kwargs['access_ip_v6'], access_ip_v6)
|
|
|
|
self.assertEqual(boot_kwargs['access_ip_v4'], access_ip_v4)
|
|
|
|
return old_boot(url, key, *boot_args, **boot_kwargs)
|
|
|
|
|
|
|
|
with mock.patch.object(self.cs.servers, '_boot', wrapped_boot):
|
|
|
|
s = self.cs.servers.create(
|
|
|
|
name="My server",
|
|
|
|
image=1,
|
|
|
|
flavor=1,
|
|
|
|
meta={'foo': 'bar'},
|
|
|
|
userdata="hello moto",
|
|
|
|
key_name="fakekey",
|
|
|
|
access_ip_v6=access_ip_v6,
|
|
|
|
access_ip_v4=access_ip_v4
|
|
|
|
)
|
2015-12-25 11:40:22 +09:00
|
|
|
self.assert_request_id(s, fakes.FAKE_REQUEST_ID_LIST)
|
2015-11-24 10:46:53 +08:00
|
|
|
self.assert_called('POST', '/servers')
|
|
|
|
self.assertIsInstance(s, servers.Server)
|
|
|
|
|
2011-09-01 16:37:30 -05:00
|
|
|
def test_create_server_userdata_file_object(self):
|
2014-05-26 16:33:16 +10:00
|
|
|
s = self.cs.servers.create(
|
2011-09-01 16:37:30 -05:00
|
|
|
name="My server",
|
|
|
|
image=1,
|
|
|
|
flavor=1,
|
|
|
|
meta={'foo': 'bar'},
|
2013-09-07 12:27:46 -04:00
|
|
|
userdata=six.StringIO('hello moto'),
|
2011-09-01 16:37:30 -05:00
|
|
|
files={
|
|
|
|
'/etc/passwd': 'some data', # a file
|
2013-09-07 12:27:46 -04:00
|
|
|
'/tmp/foo.txt': six.StringIO('data'), # a stream
|
2011-09-01 16:37:30 -05:00
|
|
|
},
|
|
|
|
)
|
2015-12-25 11:40:22 +09:00
|
|
|
self.assert_request_id(s, fakes.FAKE_REQUEST_ID_LIST)
|
2014-05-26 16:33:16 +10:00
|
|
|
self.assert_called('POST', '/servers')
|
2014-01-15 10:42:19 +08:00
|
|
|
self.assertIsInstance(s, servers.Server)
|
2011-09-01 16:37:30 -05:00
|
|
|
|
2012-09-28 11:48:38 +02:00
|
|
|
def test_create_server_userdata_unicode(self):
|
2014-05-26 16:33:16 +10:00
|
|
|
s = self.cs.servers.create(
|
2012-09-28 11:48:38 +02:00
|
|
|
name="My server",
|
|
|
|
image=1,
|
|
|
|
flavor=1,
|
|
|
|
meta={'foo': 'bar'},
|
2013-06-24 10:03:19 -05:00
|
|
|
userdata=six.u('こんにちは'),
|
2012-09-28 11:48:38 +02:00
|
|
|
key_name="fakekey",
|
|
|
|
files={
|
|
|
|
'/etc/passwd': 'some data', # a file
|
2013-09-07 12:27:46 -04:00
|
|
|
'/tmp/foo.txt': six.StringIO('data'), # a stream
|
2012-09-28 11:48:38 +02:00
|
|
|
},
|
|
|
|
)
|
2015-12-25 11:40:22 +09:00
|
|
|
self.assert_request_id(s, fakes.FAKE_REQUEST_ID_LIST)
|
2014-05-26 16:33:16 +10:00
|
|
|
self.assert_called('POST', '/servers')
|
2014-01-15 10:42:19 +08:00
|
|
|
self.assertIsInstance(s, servers.Server)
|
2012-09-28 11:48:38 +02:00
|
|
|
|
|
|
|
def test_create_server_userdata_utf8(self):
|
2014-05-26 16:33:16 +10:00
|
|
|
s = self.cs.servers.create(
|
2012-09-28 11:48:38 +02:00
|
|
|
name="My server",
|
|
|
|
image=1,
|
|
|
|
flavor=1,
|
|
|
|
meta={'foo': 'bar'},
|
|
|
|
userdata='こんにちは',
|
|
|
|
key_name="fakekey",
|
|
|
|
files={
|
|
|
|
'/etc/passwd': 'some data', # a file
|
2013-09-07 12:27:46 -04:00
|
|
|
'/tmp/foo.txt': six.StringIO('data'), # a stream
|
2012-09-28 11:48:38 +02:00
|
|
|
},
|
|
|
|
)
|
2015-12-25 11:40:22 +09:00
|
|
|
self.assert_request_id(s, fakes.FAKE_REQUEST_ID_LIST)
|
2014-05-26 16:33:16 +10:00
|
|
|
self.assert_called('POST', '/servers')
|
2014-01-15 10:42:19 +08:00
|
|
|
self.assertIsInstance(s, servers.Server)
|
2012-09-28 11:48:38 +02:00
|
|
|
|
2015-05-17 14:05:25 -07:00
|
|
|
def test_create_server_admin_pass(self):
|
|
|
|
test_password = "test-pass"
|
|
|
|
test_key = "fakekey"
|
|
|
|
s = self.cs.servers.create(
|
|
|
|
name="My server",
|
|
|
|
image=1,
|
|
|
|
flavor=1,
|
|
|
|
admin_pass=test_password,
|
|
|
|
key_name=test_key
|
|
|
|
)
|
2015-12-25 11:40:22 +09:00
|
|
|
self.assert_request_id(s, fakes.FAKE_REQUEST_ID_LIST)
|
2015-05-17 14:05:25 -07:00
|
|
|
self.assert_called('POST', '/servers')
|
|
|
|
self.assertIsInstance(s, servers.Server)
|
|
|
|
body = jsonutils.loads(self.requests.last_request.body)
|
|
|
|
self.assertEqual(test_password, body['server']['adminPass'])
|
|
|
|
|
2015-04-03 08:52:42 +00:00
|
|
|
def test_create_server_userdata_bin(self):
|
|
|
|
with tempfile.TemporaryFile(mode='wb+') as bin_file:
|
|
|
|
original_data = os.urandom(1024)
|
|
|
|
bin_file.write(original_data)
|
|
|
|
bin_file.flush()
|
|
|
|
bin_file.seek(0)
|
|
|
|
s = self.cs.servers.create(
|
|
|
|
name="My server",
|
|
|
|
image=1,
|
|
|
|
flavor=1,
|
|
|
|
meta={'foo': 'bar'},
|
|
|
|
userdata=bin_file,
|
|
|
|
key_name="fakekey",
|
|
|
|
files={
|
|
|
|
'/etc/passwd': 'some data', # a file
|
|
|
|
'/tmp/foo.txt': six.StringIO('data'), # a stream
|
|
|
|
},
|
|
|
|
)
|
2015-12-25 11:40:22 +09:00
|
|
|
self.assert_request_id(s, fakes.FAKE_REQUEST_ID_LIST)
|
2015-04-03 08:52:42 +00:00
|
|
|
self.assert_called('POST', '/servers')
|
|
|
|
self.assertIsInstance(s, servers.Server)
|
|
|
|
# verify userdata matches original
|
|
|
|
body = jsonutils.loads(self.requests.last_request.body)
|
|
|
|
transferred_data = body['server']['user_data']
|
|
|
|
transferred_data = base64.b64decode(transferred_data)
|
|
|
|
self.assertEqual(original_data, transferred_data)
|
|
|
|
|
2013-07-31 15:53:26 -05:00
|
|
|
def _create_disk_config(self, disk_config):
|
2014-05-26 16:33:16 +10:00
|
|
|
s = self.cs.servers.create(
|
2013-07-31 15:53:26 -05:00
|
|
|
name="My server",
|
|
|
|
image=1,
|
|
|
|
flavor=1,
|
|
|
|
disk_config=disk_config
|
|
|
|
)
|
2015-12-25 11:40:22 +09:00
|
|
|
self.assert_request_id(s, fakes.FAKE_REQUEST_ID_LIST)
|
2014-05-26 16:33:16 +10:00
|
|
|
self.assert_called('POST', '/servers')
|
2014-01-15 10:42:19 +08:00
|
|
|
self.assertIsInstance(s, servers.Server)
|
2013-07-31 15:53:26 -05:00
|
|
|
|
|
|
|
# verify disk config param was used in the request:
|
2014-07-10 15:14:52 +10:00
|
|
|
body = jsonutils.loads(self.requests.last_request.body)
|
2013-07-31 15:53:26 -05:00
|
|
|
server = body['server']
|
2015-03-03 15:34:01 +03:00
|
|
|
self.assertIn('OS-DCF:diskConfig', server)
|
2013-07-31 15:53:26 -05:00
|
|
|
self.assertEqual(disk_config, server['OS-DCF:diskConfig'])
|
|
|
|
|
|
|
|
def test_create_server_disk_config_auto(self):
|
|
|
|
self._create_disk_config('AUTO')
|
|
|
|
|
|
|
|
def test_create_server_disk_config_manual(self):
|
|
|
|
self._create_disk_config('MANUAL')
|
|
|
|
|
2011-08-03 17:41:33 -04:00
|
|
|
def test_update_server(self):
|
2014-05-26 16:33:16 +10:00
|
|
|
s = self.cs.servers.get(1234)
|
2011-08-03 17:41:33 -04:00
|
|
|
|
|
|
|
# Update via instance
|
|
|
|
s.update(name='hi')
|
2015-12-25 11:40:22 +09:00
|
|
|
self.assert_request_id(s, fakes.FAKE_REQUEST_ID_LIST)
|
2014-05-26 16:33:16 +10:00
|
|
|
self.assert_called('PUT', '/servers/1234')
|
2011-08-03 17:41:33 -04:00
|
|
|
s.update(name='hi')
|
2015-12-25 11:40:22 +09:00
|
|
|
self.assert_request_id(s, fakes.FAKE_REQUEST_ID_LIST)
|
2014-05-26 16:33:16 +10:00
|
|
|
self.assert_called('PUT', '/servers/1234')
|
2011-08-03 17:41:33 -04:00
|
|
|
|
|
|
|
# Silly, but not an error
|
|
|
|
s.update()
|
|
|
|
|
|
|
|
# Update via manager
|
2014-05-26 16:33:16 +10:00
|
|
|
self.cs.servers.update(s, name='hi')
|
2015-12-25 11:40:22 +09:00
|
|
|
self.assert_request_id(s, fakes.FAKE_REQUEST_ID_LIST)
|
2014-05-26 16:33:16 +10:00
|
|
|
self.assert_called('PUT', '/servers/1234')
|
2011-08-03 17:41:33 -04:00
|
|
|
|
|
|
|
def test_delete_server(self):
|
2014-05-26 16:33:16 +10:00
|
|
|
s = self.cs.servers.get(1234)
|
2015-12-25 11:40:22 +09:00
|
|
|
ret = s.delete()
|
|
|
|
self.assert_request_id(ret, fakes.FAKE_REQUEST_ID_LIST)
|
2014-05-26 16:33:16 +10:00
|
|
|
self.assert_called('DELETE', '/servers/1234')
|
2015-12-25 11:40:22 +09:00
|
|
|
ret = self.cs.servers.delete(1234)
|
|
|
|
self.assert_request_id(ret, fakes.FAKE_REQUEST_ID_LIST)
|
2014-05-26 16:33:16 +10:00
|
|
|
self.assert_called('DELETE', '/servers/1234')
|
2015-12-25 11:40:22 +09:00
|
|
|
ret = self.cs.servers.delete(s)
|
|
|
|
self.assert_request_id(ret, fakes.FAKE_REQUEST_ID_LIST)
|
2014-05-26 16:33:16 +10:00
|
|
|
self.assert_called('DELETE', '/servers/1234')
|
2011-08-03 17:41:33 -04:00
|
|
|
|
2011-09-01 11:40:16 -04:00
|
|
|
def test_delete_server_meta(self):
|
2015-12-25 11:40:22 +09:00
|
|
|
ret = self.cs.servers.delete_meta(1234, ['test_key'])
|
|
|
|
self.assert_request_id(ret, fakes.FAKE_REQUEST_ID_LIST)
|
2014-05-26 16:33:16 +10:00
|
|
|
self.assert_called('DELETE', '/servers/1234/metadata/test_key')
|
2011-09-01 11:40:16 -04:00
|
|
|
|
|
|
|
def test_set_server_meta(self):
|
2015-12-25 11:40:22 +09:00
|
|
|
m = self.cs.servers.set_meta(1234, {'test_key': 'test_value'})
|
|
|
|
self.assert_request_id(m, fakes.FAKE_REQUEST_ID_LIST)
|
2014-05-26 16:33:16 +10:00
|
|
|
self.assert_called('POST', '/servers/1234/metadata',
|
|
|
|
{'metadata': {'test_key': 'test_value'}})
|
2011-09-01 11:40:16 -04:00
|
|
|
|
2013-12-06 04:27:49 -08:00
|
|
|
def test_set_server_meta_item(self):
|
2015-12-25 11:40:22 +09:00
|
|
|
m = self.cs.servers.set_meta_item(1234, 'test_key', 'test_value')
|
|
|
|
self.assert_request_id(m, fakes.FAKE_REQUEST_ID_LIST)
|
2014-05-26 16:33:16 +10:00
|
|
|
self.assert_called('PUT', '/servers/1234/metadata/test_key',
|
|
|
|
{'meta': {'test_key': 'test_value'}})
|
2013-12-06 04:27:49 -08:00
|
|
|
|
2011-08-03 17:41:33 -04:00
|
|
|
def test_find(self):
|
2014-05-26 16:33:16 +10:00
|
|
|
server = self.cs.servers.find(name='sample-server')
|
2015-12-25 11:40:22 +09:00
|
|
|
self.assert_request_id(server, fakes.FAKE_REQUEST_ID_LIST)
|
2014-05-26 16:33:16 +10:00
|
|
|
self.assert_called('GET', '/servers/1234')
|
2014-08-04 10:13:54 +08:00
|
|
|
self.assertEqual('sample-server', server.name)
|
2011-08-03 17:41:33 -04:00
|
|
|
|
2014-05-26 16:33:16 +10:00
|
|
|
self.assertRaises(exceptions.NoUniqueMatch, self.cs.servers.find,
|
2012-04-09 20:32:37 +00:00
|
|
|
flavor={"id": 1, "name": "256 MB Server"})
|
|
|
|
|
2014-05-26 16:33:16 +10:00
|
|
|
sl = self.cs.servers.findall(flavor={"id": 1, "name": "256 MB Server"})
|
2015-12-25 11:40:22 +09:00
|
|
|
self.assert_request_id(sl, fakes.FAKE_REQUEST_ID_LIST)
|
2014-08-04 10:13:54 +08:00
|
|
|
self.assertEqual([1234, 5678, 9012], [s.id for s in sl])
|
2011-08-03 17:41:33 -04:00
|
|
|
|
|
|
|
def test_reboot_server(self):
|
2014-05-26 16:33:16 +10:00
|
|
|
s = self.cs.servers.get(1234)
|
2015-12-25 11:40:22 +09:00
|
|
|
ret = s.reboot()
|
|
|
|
self.assert_request_id(ret, fakes.FAKE_REQUEST_ID_LIST)
|
2014-05-26 16:33:16 +10:00
|
|
|
self.assert_called('POST', '/servers/1234/action')
|
2015-12-25 11:40:22 +09:00
|
|
|
ret = self.cs.servers.reboot(s, reboot_type='HARD')
|
|
|
|
self.assert_request_id(ret, fakes.FAKE_REQUEST_ID_LIST)
|
2014-05-26 16:33:16 +10:00
|
|
|
self.assert_called('POST', '/servers/1234/action')
|
2011-08-03 17:41:33 -04:00
|
|
|
|
|
|
|
def test_rebuild_server(self):
|
2014-05-26 16:33:16 +10:00
|
|
|
s = self.cs.servers.get(1234)
|
2015-12-25 11:40:22 +09:00
|
|
|
ret = s.rebuild(image=1)
|
|
|
|
self.assert_request_id(ret, fakes.FAKE_REQUEST_ID_LIST)
|
2014-05-26 16:33:16 +10:00
|
|
|
self.assert_called('POST', '/servers/1234/action')
|
2015-12-25 11:40:22 +09:00
|
|
|
ret = self.cs.servers.rebuild(s, image=1)
|
|
|
|
self.assert_request_id(ret, fakes.FAKE_REQUEST_ID_LIST)
|
2014-05-26 16:33:16 +10:00
|
|
|
self.assert_called('POST', '/servers/1234/action')
|
2015-12-25 11:40:22 +09:00
|
|
|
ret = s.rebuild(image=1, password='5678')
|
|
|
|
self.assert_request_id(ret, fakes.FAKE_REQUEST_ID_LIST)
|
2014-05-26 16:33:16 +10:00
|
|
|
self.assert_called('POST', '/servers/1234/action')
|
2015-12-25 11:40:22 +09:00
|
|
|
ret = self.cs.servers.rebuild(s, image=1, password='5678')
|
|
|
|
self.assert_request_id(ret, fakes.FAKE_REQUEST_ID_LIST)
|
2014-05-26 16:33:16 +10:00
|
|
|
self.assert_called('POST', '/servers/1234/action')
|
2011-08-03 17:41:33 -04:00
|
|
|
|
2013-07-31 15:53:26 -05:00
|
|
|
def _rebuild_resize_disk_config(self, disk_config, operation="rebuild"):
|
2014-05-26 16:33:16 +10:00
|
|
|
s = self.cs.servers.get(1234)
|
2013-07-31 15:53:26 -05:00
|
|
|
|
|
|
|
if operation == "rebuild":
|
2015-12-25 11:40:22 +09:00
|
|
|
ret = s.rebuild(image=1, disk_config=disk_config)
|
2013-07-31 15:53:26 -05:00
|
|
|
elif operation == "resize":
|
2015-12-25 11:40:22 +09:00
|
|
|
ret = s.resize(flavor=1, disk_config=disk_config)
|
|
|
|
self.assert_request_id(ret, fakes.FAKE_REQUEST_ID_LIST)
|
2014-05-26 16:33:16 +10:00
|
|
|
self.assert_called('POST', '/servers/1234/action')
|
2013-07-31 15:53:26 -05:00
|
|
|
|
|
|
|
# verify disk config param was used in the request:
|
2014-07-10 15:14:52 +10:00
|
|
|
body = jsonutils.loads(self.requests.last_request.body)
|
2013-07-31 15:53:26 -05:00
|
|
|
|
|
|
|
d = body[operation]
|
2015-03-03 15:34:01 +03:00
|
|
|
self.assertIn('OS-DCF:diskConfig', d)
|
2013-07-31 15:53:26 -05:00
|
|
|
self.assertEqual(disk_config, d['OS-DCF:diskConfig'])
|
|
|
|
|
|
|
|
def test_rebuild_server_disk_config_auto(self):
|
|
|
|
self._rebuild_resize_disk_config('AUTO')
|
|
|
|
|
|
|
|
def test_rebuild_server_disk_config_manual(self):
|
|
|
|
self._rebuild_resize_disk_config('MANUAL')
|
|
|
|
|
2013-12-02 17:10:15 +02:00
|
|
|
def test_rebuild_server_preserve_ephemeral(self):
|
2014-05-26 16:33:16 +10:00
|
|
|
s = self.cs.servers.get(1234)
|
2015-12-25 11:40:22 +09:00
|
|
|
ret = s.rebuild(image=1, preserve_ephemeral=True)
|
|
|
|
self.assert_request_id(ret, fakes.FAKE_REQUEST_ID_LIST)
|
2014-05-26 16:33:16 +10:00
|
|
|
self.assert_called('POST', '/servers/1234/action')
|
2014-07-10 15:14:52 +10:00
|
|
|
body = jsonutils.loads(self.requests.last_request.body)
|
2013-12-02 17:10:15 +02:00
|
|
|
d = body['rebuild']
|
|
|
|
self.assertIn('preserve_ephemeral', d)
|
2015-03-03 15:34:01 +03:00
|
|
|
self.assertTrue(d['preserve_ephemeral'])
|
2013-12-02 17:10:15 +02:00
|
|
|
|
2014-06-26 03:01:29 +08:00
|
|
|
def test_rebuild_server_name_meta_files(self):
|
|
|
|
files = {'/etc/passwd': 'some data'}
|
|
|
|
s = self.cs.servers.get(1234)
|
2015-12-25 11:40:22 +09:00
|
|
|
ret = s.rebuild(image=1, name='new', meta={'foo': 'bar'}, files=files)
|
|
|
|
self.assert_request_id(ret, fakes.FAKE_REQUEST_ID_LIST)
|
2014-07-10 15:14:52 +10:00
|
|
|
body = jsonutils.loads(self.requests.last_request.body)
|
2014-06-26 03:01:29 +08:00
|
|
|
d = body['rebuild']
|
|
|
|
self.assertEqual('new', d['name'])
|
|
|
|
self.assertEqual({'foo': 'bar'}, d['metadata'])
|
|
|
|
self.assertEqual('/etc/passwd',
|
|
|
|
d['personality'][0]['path'])
|
|
|
|
|
2011-08-03 17:41:33 -04:00
|
|
|
def test_resize_server(self):
|
2014-05-26 16:33:16 +10:00
|
|
|
s = self.cs.servers.get(1234)
|
2015-12-25 11:40:22 +09:00
|
|
|
ret = s.resize(flavor=1)
|
|
|
|
self.assert_request_id(ret, fakes.FAKE_REQUEST_ID_LIST)
|
2014-05-26 16:33:16 +10:00
|
|
|
self.assert_called('POST', '/servers/1234/action')
|
|
|
|
self.cs.servers.resize(s, flavor=1)
|
|
|
|
self.assert_called('POST', '/servers/1234/action')
|
2011-08-03 17:41:33 -04:00
|
|
|
|
2013-07-31 15:53:26 -05:00
|
|
|
def test_resize_server_disk_config_auto(self):
|
|
|
|
self._rebuild_resize_disk_config('AUTO', 'resize')
|
|
|
|
|
|
|
|
def test_resize_server_disk_config_manual(self):
|
|
|
|
self._rebuild_resize_disk_config('MANUAL', 'resize')
|
|
|
|
|
2011-08-03 17:41:33 -04:00
|
|
|
def test_confirm_resized_server(self):
|
2014-05-26 16:33:16 +10:00
|
|
|
s = self.cs.servers.get(1234)
|
2015-12-25 11:40:22 +09:00
|
|
|
ret = s.confirm_resize()
|
|
|
|
self.assert_request_id(ret, fakes.FAKE_REQUEST_ID_LIST)
|
2014-05-26 16:33:16 +10:00
|
|
|
self.assert_called('POST', '/servers/1234/action')
|
|
|
|
self.cs.servers.confirm_resize(s)
|
|
|
|
self.assert_called('POST', '/servers/1234/action')
|
2011-08-03 17:41:33 -04:00
|
|
|
|
|
|
|
def test_revert_resized_server(self):
|
2014-05-26 16:33:16 +10:00
|
|
|
s = self.cs.servers.get(1234)
|
2015-12-25 11:40:22 +09:00
|
|
|
ret = s.revert_resize()
|
|
|
|
self.assert_request_id(ret, fakes.FAKE_REQUEST_ID_LIST)
|
2014-05-26 16:33:16 +10:00
|
|
|
self.assert_called('POST', '/servers/1234/action')
|
2015-12-25 11:40:22 +09:00
|
|
|
ret = self.cs.servers.revert_resize(s)
|
|
|
|
self.assert_request_id(ret, fakes.FAKE_REQUEST_ID_LIST)
|
2014-05-26 16:33:16 +10:00
|
|
|
self.assert_called('POST', '/servers/1234/action')
|
2011-08-04 17:07:22 -04:00
|
|
|
|
|
|
|
def test_migrate_server(self):
|
2014-05-26 16:33:16 +10:00
|
|
|
s = self.cs.servers.get(1234)
|
2015-12-25 11:40:22 +09:00
|
|
|
ret = s.migrate()
|
|
|
|
self.assert_request_id(ret, fakes.FAKE_REQUEST_ID_LIST)
|
2014-05-26 16:33:16 +10:00
|
|
|
self.assert_called('POST', '/servers/1234/action')
|
2015-12-25 11:40:22 +09:00
|
|
|
ret = self.cs.servers.migrate(s)
|
|
|
|
self.assert_request_id(ret, fakes.FAKE_REQUEST_ID_LIST)
|
2014-05-26 16:33:16 +10:00
|
|
|
self.assert_called('POST', '/servers/1234/action')
|
2011-08-04 17:07:22 -04:00
|
|
|
|
|
|
|
def test_add_fixed_ip(self):
|
2014-05-26 16:33:16 +10:00
|
|
|
s = self.cs.servers.get(1234)
|
2015-12-25 11:40:22 +09:00
|
|
|
fip = s.add_fixed_ip(1)
|
|
|
|
self.assert_request_id(fip, fakes.FAKE_REQUEST_ID_LIST)
|
2014-05-26 16:33:16 +10:00
|
|
|
self.assert_called('POST', '/servers/1234/action')
|
2015-12-25 11:40:22 +09:00
|
|
|
fip = self.cs.servers.add_fixed_ip(s, 1)
|
|
|
|
self.assert_request_id(fip, fakes.FAKE_REQUEST_ID_LIST)
|
2014-05-26 16:33:16 +10:00
|
|
|
self.assert_called('POST', '/servers/1234/action')
|
2011-08-04 17:07:22 -04:00
|
|
|
|
|
|
|
def test_remove_fixed_ip(self):
|
2014-05-26 16:33:16 +10:00
|
|
|
s = self.cs.servers.get(1234)
|
2015-12-25 11:40:22 +09:00
|
|
|
ret = s.remove_fixed_ip('10.0.0.1')
|
|
|
|
self.assert_request_id(ret, fakes.FAKE_REQUEST_ID_LIST)
|
2014-05-26 16:33:16 +10:00
|
|
|
self.assert_called('POST', '/servers/1234/action')
|
2015-12-25 11:40:22 +09:00
|
|
|
ret = self.cs.servers.remove_fixed_ip(s, '10.0.0.1')
|
|
|
|
self.assert_request_id(ret, fakes.FAKE_REQUEST_ID_LIST)
|
2014-05-26 16:33:16 +10:00
|
|
|
self.assert_called('POST', '/servers/1234/action')
|
2011-08-18 12:04:55 -05:00
|
|
|
|
2011-08-24 22:51:53 -07:00
|
|
|
def test_add_floating_ip(self):
|
2014-05-26 16:33:16 +10:00
|
|
|
s = self.cs.servers.get(1234)
|
2015-12-25 11:40:22 +09:00
|
|
|
fip = s.add_floating_ip('11.0.0.1')
|
|
|
|
self.assert_request_id(fip, fakes.FAKE_REQUEST_ID_LIST)
|
2014-05-26 16:33:16 +10:00
|
|
|
self.assert_called('POST', '/servers/1234/action')
|
2015-12-25 11:40:22 +09:00
|
|
|
fip = self.cs.servers.add_floating_ip(s, '11.0.0.1')
|
|
|
|
self.assert_request_id(fip, fakes.FAKE_REQUEST_ID_LIST)
|
2014-05-26 16:33:16 +10:00
|
|
|
self.assert_called('POST', '/servers/1234/action')
|
|
|
|
f = self.cs.floating_ips.list()[0]
|
2015-12-25 11:40:22 +09:00
|
|
|
fip = self.cs.servers.add_floating_ip(s, f)
|
|
|
|
self.assert_request_id(fip, fakes.FAKE_REQUEST_ID_LIST)
|
2014-05-26 16:33:16 +10:00
|
|
|
self.assert_called('POST', '/servers/1234/action')
|
2015-12-25 11:40:22 +09:00
|
|
|
fip = s.add_floating_ip(f)
|
|
|
|
self.assert_request_id(fip, fakes.FAKE_REQUEST_ID_LIST)
|
2014-05-26 16:33:16 +10:00
|
|
|
self.assert_called('POST', '/servers/1234/action')
|
2013-05-17 12:39:46 +01:00
|
|
|
|
|
|
|
def test_add_floating_ip_to_fixed(self):
|
2014-05-26 16:33:16 +10:00
|
|
|
s = self.cs.servers.get(1234)
|
2015-12-25 11:40:22 +09:00
|
|
|
fip = s.add_floating_ip('11.0.0.1', fixed_address='12.0.0.1')
|
|
|
|
self.assert_request_id(fip, fakes.FAKE_REQUEST_ID_LIST)
|
2014-05-26 16:33:16 +10:00
|
|
|
self.assert_called('POST', '/servers/1234/action')
|
2015-12-25 11:40:22 +09:00
|
|
|
fip = self.cs.servers.add_floating_ip(s, '11.0.0.1',
|
|
|
|
fixed_address='12.0.0.1')
|
|
|
|
self.assert_request_id(fip, fakes.FAKE_REQUEST_ID_LIST)
|
2014-05-26 16:33:16 +10:00
|
|
|
self.assert_called('POST', '/servers/1234/action')
|
|
|
|
f = self.cs.floating_ips.list()[0]
|
2015-12-25 11:40:22 +09:00
|
|
|
fip = self.cs.servers.add_floating_ip(s, f)
|
|
|
|
self.assert_request_id(fip, fakes.FAKE_REQUEST_ID_LIST)
|
2014-05-26 16:33:16 +10:00
|
|
|
self.assert_called('POST', '/servers/1234/action')
|
2015-12-25 11:40:22 +09:00
|
|
|
fip = s.add_floating_ip(f)
|
|
|
|
self.assert_request_id(fip, fakes.FAKE_REQUEST_ID_LIST)
|
2014-05-26 16:33:16 +10:00
|
|
|
self.assert_called('POST', '/servers/1234/action')
|
2011-08-24 22:51:53 -07:00
|
|
|
|
|
|
|
def test_remove_floating_ip(self):
|
2014-05-26 16:33:16 +10:00
|
|
|
s = self.cs.servers.get(1234)
|
2015-12-25 11:40:22 +09:00
|
|
|
ret = s.remove_floating_ip('11.0.0.1')
|
|
|
|
self.assert_request_id(ret, fakes.FAKE_REQUEST_ID_LIST)
|
2014-05-26 16:33:16 +10:00
|
|
|
self.assert_called('POST', '/servers/1234/action')
|
2015-12-25 11:40:22 +09:00
|
|
|
ret = self.cs.servers.remove_floating_ip(s, '11.0.0.1')
|
|
|
|
self.assert_request_id(ret, fakes.FAKE_REQUEST_ID_LIST)
|
2014-05-26 16:33:16 +10:00
|
|
|
self.assert_called('POST', '/servers/1234/action')
|
|
|
|
f = self.cs.floating_ips.list()[0]
|
2015-12-25 11:40:22 +09:00
|
|
|
ret = self.cs.servers.remove_floating_ip(s, f)
|
|
|
|
self.assert_request_id(ret, fakes.FAKE_REQUEST_ID_LIST)
|
2014-05-26 16:33:16 +10:00
|
|
|
self.assert_called('POST', '/servers/1234/action')
|
2015-12-25 11:40:22 +09:00
|
|
|
ret = s.remove_floating_ip(f)
|
|
|
|
self.assert_request_id(ret, fakes.FAKE_REQUEST_ID_LIST)
|
2014-05-26 16:33:16 +10:00
|
|
|
self.assert_called('POST', '/servers/1234/action')
|
2011-08-24 22:51:53 -07:00
|
|
|
|
2012-06-01 01:39:20 +00:00
|
|
|
def test_stop(self):
|
2014-05-26 16:33:16 +10:00
|
|
|
s = self.cs.servers.get(1234)
|
2016-02-05 16:59:21 +08:00
|
|
|
ret = s.stop()
|
2015-12-25 11:40:22 +09:00
|
|
|
self.assert_request_id(ret, fakes.FAKE_REQUEST_ID_LIST)
|
2014-05-26 16:33:16 +10:00
|
|
|
self.assert_called('POST', '/servers/1234/action')
|
2016-02-05 16:59:21 +08:00
|
|
|
ret = self.cs.servers.stop(s)
|
2015-12-25 11:40:22 +09:00
|
|
|
self.assert_request_id(ret, fakes.FAKE_REQUEST_ID_LIST)
|
2014-05-26 16:33:16 +10:00
|
|
|
self.assert_called('POST', '/servers/1234/action')
|
2012-06-01 01:39:20 +00:00
|
|
|
|
2013-06-28 19:30:10 +08:00
|
|
|
def test_force_delete(self):
|
2014-05-26 16:33:16 +10:00
|
|
|
s = self.cs.servers.get(1234)
|
2016-02-05 16:59:21 +08:00
|
|
|
ret = s.force_delete()
|
2015-12-25 11:40:22 +09:00
|
|
|
self.assert_request_id(ret, fakes.FAKE_REQUEST_ID_LIST)
|
2014-05-26 16:33:16 +10:00
|
|
|
self.assert_called('POST', '/servers/1234/action')
|
2016-02-05 16:59:21 +08:00
|
|
|
ret = self.cs.servers.force_delete(s)
|
2015-12-25 11:40:22 +09:00
|
|
|
self.assert_request_id(ret, fakes.FAKE_REQUEST_ID_LIST)
|
2014-05-26 16:33:16 +10:00
|
|
|
self.assert_called('POST', '/servers/1234/action')
|
2013-06-28 19:30:10 +08:00
|
|
|
|
|
|
|
def test_restore(self):
|
2014-05-26 16:33:16 +10:00
|
|
|
s = self.cs.servers.get(1234)
|
2016-02-05 16:59:21 +08:00
|
|
|
ret = s.restore()
|
2015-12-25 11:40:22 +09:00
|
|
|
self.assert_request_id(ret, fakes.FAKE_REQUEST_ID_LIST)
|
2014-05-26 16:33:16 +10:00
|
|
|
self.assert_called('POST', '/servers/1234/action')
|
2016-02-05 16:59:21 +08:00
|
|
|
ret = self.cs.servers.restore(s)
|
2015-12-25 11:40:22 +09:00
|
|
|
self.assert_request_id(ret, fakes.FAKE_REQUEST_ID_LIST)
|
2014-05-26 16:33:16 +10:00
|
|
|
self.assert_called('POST', '/servers/1234/action')
|
2013-06-28 19:30:10 +08:00
|
|
|
|
2012-06-01 01:39:20 +00:00
|
|
|
def test_start(self):
|
2014-05-26 16:33:16 +10:00
|
|
|
s = self.cs.servers.get(1234)
|
2015-12-25 11:40:22 +09:00
|
|
|
ret = s.start()
|
|
|
|
self.assert_request_id(ret, fakes.FAKE_REQUEST_ID_LIST)
|
2014-05-26 16:33:16 +10:00
|
|
|
self.assert_called('POST', '/servers/1234/action')
|
2015-12-25 11:40:22 +09:00
|
|
|
ret = self.cs.servers.start(s)
|
|
|
|
self.assert_request_id(ret, fakes.FAKE_REQUEST_ID_LIST)
|
2014-05-26 16:33:16 +10:00
|
|
|
self.assert_called('POST', '/servers/1234/action')
|
2012-06-01 01:39:20 +00:00
|
|
|
|
2011-08-18 12:04:55 -05:00
|
|
|
def test_rescue(self):
|
2014-05-26 16:33:16 +10:00
|
|
|
s = self.cs.servers.get(1234)
|
2016-02-05 16:59:21 +08:00
|
|
|
ret = s.rescue()
|
2015-12-25 11:40:22 +09:00
|
|
|
self.assert_request_id(ret, fakes.FAKE_REQUEST_ID_LIST)
|
2014-05-26 16:33:16 +10:00
|
|
|
self.assert_called('POST', '/servers/1234/action')
|
2016-02-05 16:59:21 +08:00
|
|
|
ret = self.cs.servers.rescue(s)
|
2015-12-25 11:40:22 +09:00
|
|
|
self.assert_request_id(ret, fakes.FAKE_REQUEST_ID_LIST)
|
2014-05-26 16:33:16 +10:00
|
|
|
self.assert_called('POST', '/servers/1234/action')
|
2011-08-18 12:04:55 -05:00
|
|
|
|
2014-10-18 06:38:06 -05:00
|
|
|
def test_rescue_password(self):
|
|
|
|
s = self.cs.servers.get(1234)
|
2016-02-05 16:59:21 +08:00
|
|
|
ret = s.rescue(password='asdf')
|
2015-12-25 11:40:22 +09:00
|
|
|
self.assert_request_id(ret, fakes.FAKE_REQUEST_ID_LIST)
|
2014-10-18 06:38:06 -05:00
|
|
|
self.assert_called('POST', '/servers/1234/action',
|
|
|
|
{'rescue': {'adminPass': 'asdf'}})
|
2016-02-05 16:59:21 +08:00
|
|
|
ret = self.cs.servers.rescue(s, password='asdf')
|
2015-12-25 11:40:22 +09:00
|
|
|
self.assert_request_id(ret, fakes.FAKE_REQUEST_ID_LIST)
|
2014-10-18 06:38:06 -05:00
|
|
|
self.assert_called('POST', '/servers/1234/action',
|
|
|
|
{'rescue': {'adminPass': 'asdf'}})
|
|
|
|
|
|
|
|
def test_rescue_image(self):
|
|
|
|
s = self.cs.servers.get(1234)
|
2016-02-05 16:59:21 +08:00
|
|
|
ret = s.rescue(image=1)
|
2015-12-25 11:40:22 +09:00
|
|
|
self.assert_request_id(ret, fakes.FAKE_REQUEST_ID_LIST)
|
2014-10-18 06:38:06 -05:00
|
|
|
self.assert_called('POST', '/servers/1234/action',
|
|
|
|
{'rescue': {'rescue_image_ref': 1}})
|
2016-02-05 16:59:21 +08:00
|
|
|
ret = self.cs.servers.rescue(s, image=1)
|
2015-12-25 11:40:22 +09:00
|
|
|
self.assert_request_id(ret, fakes.FAKE_REQUEST_ID_LIST)
|
2014-10-18 06:38:06 -05:00
|
|
|
self.assert_called('POST', '/servers/1234/action',
|
|
|
|
{'rescue': {'rescue_image_ref': 1}})
|
|
|
|
|
2011-08-18 12:04:55 -05:00
|
|
|
def test_unrescue(self):
|
2014-05-26 16:33:16 +10:00
|
|
|
s = self.cs.servers.get(1234)
|
2015-12-25 11:40:22 +09:00
|
|
|
ret = s.unrescue()
|
|
|
|
self.assert_request_id(ret, fakes.FAKE_REQUEST_ID_LIST)
|
2014-05-26 16:33:16 +10:00
|
|
|
self.assert_called('POST', '/servers/1234/action')
|
2015-12-25 11:40:22 +09:00
|
|
|
ret = self.cs.servers.unrescue(s)
|
|
|
|
self.assert_request_id(ret, fakes.FAKE_REQUEST_ID_LIST)
|
2014-05-26 16:33:16 +10:00
|
|
|
self.assert_called('POST', '/servers/1234/action')
|
2011-10-25 16:55:33 -07:00
|
|
|
|
2012-03-13 23:18:41 -07:00
|
|
|
def test_lock(self):
|
2014-05-26 16:33:16 +10:00
|
|
|
s = self.cs.servers.get(1234)
|
2015-12-25 11:40:22 +09:00
|
|
|
ret = s.lock()
|
|
|
|
self.assert_request_id(ret, fakes.FAKE_REQUEST_ID_LIST)
|
2014-05-26 16:33:16 +10:00
|
|
|
self.assert_called('POST', '/servers/1234/action')
|
2015-12-25 11:40:22 +09:00
|
|
|
ret = self.cs.servers.lock(s)
|
|
|
|
self.assert_request_id(ret, fakes.FAKE_REQUEST_ID_LIST)
|
2014-05-26 16:33:16 +10:00
|
|
|
self.assert_called('POST', '/servers/1234/action')
|
2012-03-13 23:18:41 -07:00
|
|
|
|
|
|
|
def test_unlock(self):
|
2014-05-26 16:33:16 +10:00
|
|
|
s = self.cs.servers.get(1234)
|
2015-12-25 11:40:22 +09:00
|
|
|
ret = s.unlock()
|
|
|
|
self.assert_request_id(ret, fakes.FAKE_REQUEST_ID_LIST)
|
2014-05-26 16:33:16 +10:00
|
|
|
self.assert_called('POST', '/servers/1234/action')
|
2015-12-25 11:40:22 +09:00
|
|
|
ret = self.cs.servers.unlock(s)
|
|
|
|
self.assert_request_id(ret, fakes.FAKE_REQUEST_ID_LIST)
|
2014-05-26 16:33:16 +10:00
|
|
|
self.assert_called('POST', '/servers/1234/action')
|
2012-03-13 23:18:41 -07:00
|
|
|
|
2012-10-15 14:33:52 +08:00
|
|
|
def test_backup(self):
|
2014-05-26 16:33:16 +10:00
|
|
|
s = self.cs.servers.get(1234)
|
2015-12-25 11:40:22 +09:00
|
|
|
sb = s.backup('back1', 'daily', 1)
|
|
|
|
self.assert_request_id(sb, fakes.FAKE_REQUEST_ID_LIST)
|
2014-05-26 16:33:16 +10:00
|
|
|
self.assert_called('POST', '/servers/1234/action')
|
2015-12-25 11:40:22 +09:00
|
|
|
sb = self.cs.servers.backup(s, 'back1', 'daily', 2)
|
|
|
|
self.assert_request_id(sb, fakes.FAKE_REQUEST_ID_LIST)
|
2014-05-26 16:33:16 +10:00
|
|
|
self.assert_called('POST', '/servers/1234/action')
|
2012-10-15 14:33:52 +08:00
|
|
|
|
2011-10-25 16:55:33 -07:00
|
|
|
def test_get_console_output_without_length(self):
|
2011-12-28 15:12:28 -08:00
|
|
|
success = 'foo'
|
2014-05-26 16:33:16 +10:00
|
|
|
s = self.cs.servers.get(1234)
|
2015-12-25 11:40:22 +09:00
|
|
|
co = s.get_console_output()
|
|
|
|
self.assert_request_id(co, fakes.FAKE_REQUEST_ID_LIST)
|
2014-08-04 10:13:54 +08:00
|
|
|
self.assertEqual(success, s.get_console_output())
|
2014-05-26 16:33:16 +10:00
|
|
|
self.assert_called('POST', '/servers/1234/action')
|
2011-10-25 16:55:33 -07:00
|
|
|
|
2015-12-25 11:40:22 +09:00
|
|
|
co = self.cs.servers.get_console_output(s)
|
|
|
|
self.assert_request_id(co, fakes.FAKE_REQUEST_ID_LIST)
|
2014-08-04 10:13:54 +08:00
|
|
|
self.assertEqual(success, self.cs.servers.get_console_output(s))
|
2014-05-26 16:33:16 +10:00
|
|
|
self.assert_called('POST', '/servers/1234/action')
|
2011-10-25 16:55:33 -07:00
|
|
|
|
|
|
|
def test_get_console_output_with_length(self):
|
2011-12-28 15:12:28 -08:00
|
|
|
success = 'foo'
|
|
|
|
|
2014-05-26 16:33:16 +10:00
|
|
|
s = self.cs.servers.get(1234)
|
2015-12-25 11:40:22 +09:00
|
|
|
co = s.get_console_output(length=50)
|
|
|
|
self.assert_request_id(co, fakes.FAKE_REQUEST_ID_LIST)
|
2014-08-04 10:13:54 +08:00
|
|
|
self.assertEqual(success, s.get_console_output(length=50))
|
2014-05-26 16:33:16 +10:00
|
|
|
self.assert_called('POST', '/servers/1234/action')
|
2011-10-25 16:55:33 -07:00
|
|
|
|
2015-12-25 11:40:22 +09:00
|
|
|
co = self.cs.servers.get_console_output(s, length=50)
|
|
|
|
self.assert_request_id(co, fakes.FAKE_REQUEST_ID_LIST)
|
2014-08-04 10:13:54 +08:00
|
|
|
self.assertEqual(success,
|
|
|
|
self.cs.servers.get_console_output(s, length=50))
|
2014-05-26 16:33:16 +10:00
|
|
|
self.assert_called('POST', '/servers/1234/action')
|
2011-12-30 17:40:02 +01:00
|
|
|
|
2013-11-19 15:33:14 +01:00
|
|
|
# Testing password methods with the following password and key
|
|
|
|
#
|
|
|
|
# Clear password: FooBar123
|
|
|
|
#
|
2015-01-27 12:59:15 -08:00
|
|
|
# RSA Private Key: novaclient/tests/unit/idfake.pem
|
2013-11-19 15:33:14 +01:00
|
|
|
#
|
|
|
|
# Encrypted password
|
|
|
|
# OIuEuQttO8Rk93BcKlwHQsziDAnkAm/V6V8VPToA8ZeUaUBWwS0gwo2K6Y61Z96r
|
|
|
|
# qG447iRz0uTEEYq3RAYJk1mh3mMIRVl27t8MtIecR5ggVVbz1S9AwXJQypDKl0ho
|
|
|
|
# QFvhCBcMWPohyGewDJOhDbtuN1IoFI9G55ZvFwCm5y7m7B2aVcoLeIsJZE4PLsIw
|
|
|
|
# /y5a6Z3/AoJZYGG7IH5WN88UROU3B9JZGFB2qtPLQTOvDMZLUhoPRIJeHiVSlo1N
|
|
|
|
# tI2/++UsXVg3ow6ItqCJGgdNuGG5JB+bslDHWPxROpesEIHdczk46HCpHQN8f1sk
|
|
|
|
# Hi/fmZZNQQqj1Ijq0caOIw==
|
|
|
|
|
2013-01-11 14:30:41 -08:00
|
|
|
def test_get_password(self):
|
2014-05-26 16:33:16 +10:00
|
|
|
s = self.cs.servers.get(1234)
|
2015-12-25 11:40:22 +09:00
|
|
|
password = s.get_password('novaclient/tests/unit/idfake.pem')
|
|
|
|
self.assert_request_id(password, fakes.FAKE_REQUEST_ID_LIST)
|
|
|
|
self.assertEqual(b'FooBar123', password)
|
2014-05-26 16:33:16 +10:00
|
|
|
self.assert_called('GET', '/servers/1234/os-server-password')
|
2013-11-19 15:33:14 +01:00
|
|
|
|
|
|
|
def test_get_password_without_key(self):
|
2014-05-26 16:33:16 +10:00
|
|
|
s = self.cs.servers.get(1234)
|
2015-12-25 11:40:22 +09:00
|
|
|
password = s.get_password()
|
|
|
|
self.assert_request_id(password, fakes.FAKE_REQUEST_ID_LIST)
|
2014-08-04 10:13:54 +08:00
|
|
|
self.assertEqual(
|
2013-11-19 15:33:14 +01:00
|
|
|
'OIuEuQttO8Rk93BcKlwHQsziDAnkAm/V6V8VPToA8ZeUaUBWwS0gwo2K6Y61Z96r'
|
|
|
|
'qG447iRz0uTEEYq3RAYJk1mh3mMIRVl27t8MtIecR5ggVVbz1S9AwXJQypDKl0ho'
|
|
|
|
'QFvhCBcMWPohyGewDJOhDbtuN1IoFI9G55ZvFwCm5y7m7B2aVcoLeIsJZE4PLsIw'
|
|
|
|
'/y5a6Z3/AoJZYGG7IH5WN88UROU3B9JZGFB2qtPLQTOvDMZLUhoPRIJeHiVSlo1N'
|
|
|
|
'tI2/++UsXVg3ow6ItqCJGgdNuGG5JB+bslDHWPxROpesEIHdczk46HCpHQN8f1sk'
|
2015-12-25 11:40:22 +09:00
|
|
|
'Hi/fmZZNQQqj1Ijq0caOIw==', password)
|
2014-05-26 16:33:16 +10:00
|
|
|
self.assert_called('GET', '/servers/1234/os-server-password')
|
2013-01-11 14:30:41 -08:00
|
|
|
|
|
|
|
def test_clear_password(self):
|
2014-05-26 16:33:16 +10:00
|
|
|
s = self.cs.servers.get(1234)
|
2015-12-25 11:40:22 +09:00
|
|
|
ret = s.clear_password()
|
|
|
|
self.assert_request_id(ret, fakes.FAKE_REQUEST_ID_LIST)
|
2014-05-26 16:33:16 +10:00
|
|
|
self.assert_called('DELETE', '/servers/1234/os-server-password')
|
2013-01-11 14:30:41 -08:00
|
|
|
|
2011-12-30 17:40:02 +01:00
|
|
|
def test_get_server_diagnostics(self):
|
2014-05-26 16:33:16 +10:00
|
|
|
s = self.cs.servers.get(1234)
|
2016-02-05 16:59:21 +08:00
|
|
|
diagnostics = s.diagnostics()
|
2015-12-25 11:40:22 +09:00
|
|
|
self.assert_request_id(diagnostics, fakes.FAKE_REQUEST_ID_LIST)
|
2015-03-03 15:34:01 +03:00
|
|
|
self.assertIsNotNone(diagnostics)
|
2014-05-26 16:33:16 +10:00
|
|
|
self.assert_called('GET', '/servers/1234/diagnostics')
|
2011-12-30 17:40:02 +01:00
|
|
|
|
2016-02-05 16:59:21 +08:00
|
|
|
diagnostics_from_manager = self.cs.servers.diagnostics(1234)
|
2015-12-25 11:40:22 +09:00
|
|
|
self.assert_request_id(diagnostics_from_manager,
|
|
|
|
fakes.FAKE_REQUEST_ID_LIST)
|
2015-03-03 15:34:01 +03:00
|
|
|
self.assertIsNotNone(diagnostics_from_manager)
|
2014-05-26 16:33:16 +10:00
|
|
|
self.assert_called('GET', '/servers/1234/diagnostics')
|
2011-12-30 17:40:02 +01:00
|
|
|
|
2016-02-05 16:59:21 +08:00
|
|
|
self.assertEqual(diagnostics[1], diagnostics_from_manager[1])
|
2011-12-29 00:35:29 +00:00
|
|
|
|
|
|
|
def test_get_vnc_console(self):
|
2014-05-26 16:33:16 +10:00
|
|
|
s = self.cs.servers.get(1234)
|
2015-12-25 11:40:22 +09:00
|
|
|
vc = s.get_vnc_console('fake')
|
|
|
|
self.assert_request_id(vc, fakes.FAKE_REQUEST_ID_LIST)
|
2014-05-26 16:33:16 +10:00
|
|
|
self.assert_called('POST', '/servers/1234/action')
|
2011-12-29 00:35:29 +00:00
|
|
|
|
2015-12-25 11:40:22 +09:00
|
|
|
vc = self.cs.servers.get_vnc_console(s, 'fake')
|
|
|
|
self.assert_request_id(vc, fakes.FAKE_REQUEST_ID_LIST)
|
2014-05-26 16:33:16 +10:00
|
|
|
self.assert_called('POST', '/servers/1234/action')
|
2012-01-19 22:55:13 -08:00
|
|
|
|
2013-01-02 18:37:25 +00:00
|
|
|
def test_get_spice_console(self):
|
2014-05-26 16:33:16 +10:00
|
|
|
s = self.cs.servers.get(1234)
|
2015-12-25 11:40:22 +09:00
|
|
|
sc = s.get_spice_console('fake')
|
|
|
|
self.assert_request_id(sc, fakes.FAKE_REQUEST_ID_LIST)
|
2014-05-26 16:33:16 +10:00
|
|
|
self.assert_called('POST', '/servers/1234/action')
|
2013-01-02 18:37:25 +00:00
|
|
|
|
2015-12-25 11:40:22 +09:00
|
|
|
sc = self.cs.servers.get_spice_console(s, 'fake')
|
|
|
|
self.assert_request_id(sc, fakes.FAKE_REQUEST_ID_LIST)
|
2014-05-26 16:33:16 +10:00
|
|
|
self.assert_called('POST', '/servers/1234/action')
|
2013-01-02 18:37:25 +00:00
|
|
|
|
2014-09-09 08:55:25 +00:00
|
|
|
def test_get_serial_console(self):
|
|
|
|
s = self.cs.servers.get(1234)
|
2015-12-25 11:40:22 +09:00
|
|
|
sc = s.get_serial_console('fake')
|
|
|
|
self.assert_request_id(sc, fakes.FAKE_REQUEST_ID_LIST)
|
2014-09-09 08:55:25 +00:00
|
|
|
self.assert_called('POST', '/servers/1234/action')
|
|
|
|
|
2015-12-25 11:40:22 +09:00
|
|
|
sc = self.cs.servers.get_serial_console(s, 'fake')
|
|
|
|
self.assert_request_id(sc, fakes.FAKE_REQUEST_ID_LIST)
|
2014-09-09 08:55:25 +00:00
|
|
|
self.assert_called('POST', '/servers/1234/action')
|
|
|
|
|
2013-08-29 12:25:57 +03:00
|
|
|
def test_get_rdp_console(self):
|
2014-05-26 16:33:16 +10:00
|
|
|
s = self.cs.servers.get(1234)
|
2015-12-25 11:40:22 +09:00
|
|
|
rc = s.get_rdp_console('fake')
|
|
|
|
self.assert_request_id(rc, fakes.FAKE_REQUEST_ID_LIST)
|
2014-05-26 16:33:16 +10:00
|
|
|
self.assert_called('POST', '/servers/1234/action')
|
2013-08-29 12:25:57 +03:00
|
|
|
|
2015-12-25 11:40:22 +09:00
|
|
|
rc = self.cs.servers.get_rdp_console(s, 'fake')
|
|
|
|
self.assert_request_id(rc, fakes.FAKE_REQUEST_ID_LIST)
|
2014-05-26 16:33:16 +10:00
|
|
|
self.assert_called('POST', '/servers/1234/action')
|
2013-08-29 12:25:57 +03:00
|
|
|
|
2012-01-19 22:55:13 -08:00
|
|
|
def test_create_image(self):
|
2014-05-26 16:33:16 +10:00
|
|
|
s = self.cs.servers.get(1234)
|
2015-12-25 11:40:22 +09:00
|
|
|
im = s.create_image('123')
|
|
|
|
self.assert_request_id(im, fakes.FAKE_REQUEST_ID_LIST)
|
2014-05-26 16:33:16 +10:00
|
|
|
self.assert_called('POST', '/servers/1234/action')
|
2015-12-25 11:40:22 +09:00
|
|
|
im = s.create_image('123', {})
|
|
|
|
self.assert_request_id(im, fakes.FAKE_REQUEST_ID_LIST)
|
2014-05-26 16:33:16 +10:00
|
|
|
self.assert_called('POST', '/servers/1234/action')
|
2015-12-25 11:40:22 +09:00
|
|
|
im = self.cs.servers.create_image(s, '123')
|
|
|
|
self.assert_request_id(im, fakes.FAKE_REQUEST_ID_LIST)
|
|
|
|
self.assert_called('POST', '/servers/1234/action')
|
|
|
|
im = self.cs.servers.create_image(s, '123', {})
|
|
|
|
self.assert_request_id(im, fakes.FAKE_REQUEST_ID_LIST)
|
2014-05-26 16:33:16 +10:00
|
|
|
self.assert_called('POST', '/servers/1234/action')
|
2012-02-01 17:27:45 +09:00
|
|
|
|
|
|
|
def test_live_migrate_server(self):
|
2014-05-26 16:33:16 +10:00
|
|
|
s = self.cs.servers.get(1234)
|
2015-12-25 11:40:22 +09:00
|
|
|
ret = s.live_migrate(host='hostname', block_migration=False,
|
|
|
|
disk_over_commit=False)
|
|
|
|
self.assert_request_id(ret, fakes.FAKE_REQUEST_ID_LIST)
|
2016-02-27 09:59:01 +08:00
|
|
|
self.assert_called('POST', '/servers/1234/action',
|
|
|
|
{'os-migrateLive': {'host': 'hostname',
|
|
|
|
'block_migration': False,
|
|
|
|
'disk_over_commit': False}})
|
2015-12-25 11:40:22 +09:00
|
|
|
ret = self.cs.servers.live_migrate(s, host='hostname',
|
|
|
|
block_migration=False,
|
|
|
|
disk_over_commit=False)
|
|
|
|
self.assert_request_id(ret, fakes.FAKE_REQUEST_ID_LIST)
|
2016-02-27 09:59:01 +08:00
|
|
|
self.assert_called('POST', '/servers/1234/action',
|
|
|
|
{'os-migrateLive': {'host': 'hostname',
|
|
|
|
'block_migration': False,
|
|
|
|
'disk_over_commit': False}})
|
|
|
|
|
|
|
|
def test_live_migrate_server_block_migration_none(self):
|
|
|
|
s = self.cs.servers.get(1234)
|
|
|
|
ret = s.live_migrate(host='hostname', block_migration=None,
|
|
|
|
disk_over_commit=None)
|
|
|
|
self.assert_request_id(ret, fakes.FAKE_REQUEST_ID_LIST)
|
|
|
|
self.assert_called('POST', '/servers/1234/action',
|
|
|
|
{'os-migrateLive': {'host': 'hostname',
|
|
|
|
'block_migration': False,
|
|
|
|
'disk_over_commit': False}})
|
2012-06-20 15:22:17 -05:00
|
|
|
|
|
|
|
def test_reset_state(self):
|
2014-05-26 16:33:16 +10:00
|
|
|
s = self.cs.servers.get(1234)
|
2015-12-25 11:40:22 +09:00
|
|
|
ret = s.reset_state('newstate')
|
|
|
|
self.assert_request_id(ret, fakes.FAKE_REQUEST_ID_LIST)
|
2014-05-26 16:33:16 +10:00
|
|
|
self.assert_called('POST', '/servers/1234/action')
|
2015-12-25 11:40:22 +09:00
|
|
|
ret = self.cs.servers.reset_state(s, 'newstate')
|
|
|
|
self.assert_request_id(ret, fakes.FAKE_REQUEST_ID_LIST)
|
2014-05-26 16:33:16 +10:00
|
|
|
self.assert_called('POST', '/servers/1234/action')
|
2012-07-08 13:28:12 +08:00
|
|
|
|
2013-02-20 08:12:44 -06:00
|
|
|
def test_reset_network(self):
|
2014-05-26 16:33:16 +10:00
|
|
|
s = self.cs.servers.get(1234)
|
2015-12-25 11:40:22 +09:00
|
|
|
ret = s.reset_network()
|
|
|
|
self.assert_request_id(ret, fakes.FAKE_REQUEST_ID_LIST)
|
2014-05-26 16:33:16 +10:00
|
|
|
self.assert_called('POST', '/servers/1234/action')
|
2015-12-25 11:40:22 +09:00
|
|
|
ret = self.cs.servers.reset_network(s)
|
|
|
|
self.assert_request_id(ret, fakes.FAKE_REQUEST_ID_LIST)
|
2014-05-26 16:33:16 +10:00
|
|
|
self.assert_called('POST', '/servers/1234/action')
|
2013-02-20 08:12:44 -06:00
|
|
|
|
2012-07-08 13:28:12 +08:00
|
|
|
def test_add_security_group(self):
|
2014-05-26 16:33:16 +10:00
|
|
|
s = self.cs.servers.get(1234)
|
2015-12-25 11:40:22 +09:00
|
|
|
sg = s.add_security_group('newsg')
|
|
|
|
self.assert_request_id(sg, fakes.FAKE_REQUEST_ID_LIST)
|
2014-05-26 16:33:16 +10:00
|
|
|
self.assert_called('POST', '/servers/1234/action')
|
2015-12-25 11:40:22 +09:00
|
|
|
sg = self.cs.servers.add_security_group(s, 'newsg')
|
|
|
|
self.assert_request_id(sg, fakes.FAKE_REQUEST_ID_LIST)
|
2014-05-26 16:33:16 +10:00
|
|
|
self.assert_called('POST', '/servers/1234/action')
|
2012-07-08 13:28:12 +08:00
|
|
|
|
|
|
|
def test_remove_security_group(self):
|
2014-05-26 16:33:16 +10:00
|
|
|
s = self.cs.servers.get(1234)
|
2015-12-25 11:40:22 +09:00
|
|
|
ret = s.remove_security_group('oldsg')
|
|
|
|
self.assert_request_id(ret, fakes.FAKE_REQUEST_ID_LIST)
|
2014-05-26 16:33:16 +10:00
|
|
|
self.assert_called('POST', '/servers/1234/action')
|
2015-12-25 11:40:22 +09:00
|
|
|
ret = self.cs.servers.remove_security_group(s, 'oldsg')
|
|
|
|
self.assert_request_id(ret, fakes.FAKE_REQUEST_ID_LIST)
|
2014-05-26 16:33:16 +10:00
|
|
|
self.assert_called('POST', '/servers/1234/action')
|
2013-01-07 18:46:59 +02:00
|
|
|
|
2013-08-05 14:11:58 +05:30
|
|
|
def test_list_security_group(self):
|
2014-05-26 16:33:16 +10:00
|
|
|
s = self.cs.servers.get(1234)
|
2015-12-25 11:40:22 +09:00
|
|
|
sgs = s.list_security_group()
|
|
|
|
self.assert_request_id(sgs, fakes.FAKE_REQUEST_ID_LIST)
|
2014-05-26 16:33:16 +10:00
|
|
|
self.assert_called('GET', '/servers/1234/os-security-groups')
|
2013-08-05 14:11:58 +05:30
|
|
|
|
2013-01-07 18:46:59 +02:00
|
|
|
def test_evacuate(self):
|
2014-05-26 16:33:16 +10:00
|
|
|
s = self.cs.servers.get(1234)
|
2016-02-05 16:59:21 +08:00
|
|
|
ret = s.evacuate('fake_target_host', 'True')
|
2015-12-25 11:40:22 +09:00
|
|
|
self.assert_request_id(ret, fakes.FAKE_REQUEST_ID_LIST)
|
2014-05-26 16:33:16 +10:00
|
|
|
self.assert_called('POST', '/servers/1234/action')
|
2016-02-05 16:59:21 +08:00
|
|
|
ret = self.cs.servers.evacuate(s, 'fake_target_host',
|
|
|
|
'False', 'NewAdminPassword')
|
2015-12-25 11:40:22 +09:00
|
|
|
self.assert_request_id(ret, fakes.FAKE_REQUEST_ID_LIST)
|
2014-05-26 16:33:16 +10:00
|
|
|
self.assert_called('POST', '/servers/1234/action')
|
2013-02-18 10:16:36 -05:00
|
|
|
|
|
|
|
def test_interface_list(self):
|
2014-05-26 16:33:16 +10:00
|
|
|
s = self.cs.servers.get(1234)
|
2015-12-25 11:40:22 +09:00
|
|
|
il = s.interface_list()
|
|
|
|
self.assert_request_id(il, fakes.FAKE_REQUEST_ID_LIST)
|
2014-05-26 16:33:16 +10:00
|
|
|
self.assert_called('GET', '/servers/1234/os-interface')
|
2013-02-18 10:16:36 -05:00
|
|
|
|
2014-03-24 15:29:01 +08:00
|
|
|
def test_interface_list_result_string_representable(self):
|
|
|
|
"""Test for bugs.launchpad.net/python-novaclient/+bug/1280453."""
|
|
|
|
# According to https://github.com/openstack/nova/blob/master/
|
|
|
|
# nova/api/openstack/compute/contrib/attach_interfaces.py#L33,
|
|
|
|
# the attach_interface extension get method will return a json
|
|
|
|
# object partly like this:
|
|
|
|
interface_list = [{
|
|
|
|
'net_id': 'd7745cf5-63f9-4883-b0ae-983f061e4f23',
|
|
|
|
'port_id': 'f35079da-36d5-4513-8ec1-0298d703f70e',
|
|
|
|
'mac_addr': 'fa:16:3e:4c:37:c8',
|
|
|
|
'port_state': 'ACTIVE',
|
2014-09-24 22:30:16 +03:00
|
|
|
'fixed_ips': [
|
|
|
|
{
|
|
|
|
'subnet_id': 'f1ad93ad-2967-46ba-b403-e8cbbe65f7fa',
|
|
|
|
'ip_address': '10.2.0.96'
|
2014-03-24 15:29:01 +08:00
|
|
|
}]
|
2014-09-24 22:30:16 +03:00
|
|
|
}]
|
2014-03-24 15:29:01 +08:00
|
|
|
# If server is not string representable, it will raise an exception,
|
|
|
|
# because attribute named 'name' cannot be found.
|
|
|
|
# Parameter 'loaded' must be True or it will try to get attribute
|
|
|
|
# 'id' then fails (lazy load detail), this is exactly same as
|
|
|
|
# novaclient.base.Manager._list()
|
|
|
|
s = servers.Server(servers.ServerManager, interface_list[0],
|
|
|
|
loaded=True)
|
|
|
|
# Trigger the __repr__ magic method
|
|
|
|
self.assertEqual('<Server: unknown-name>', '%r' % s)
|
|
|
|
|
2013-02-18 10:16:36 -05:00
|
|
|
def test_interface_attach(self):
|
2014-05-26 16:33:16 +10:00
|
|
|
s = self.cs.servers.get(1234)
|
2015-12-25 11:40:22 +09:00
|
|
|
ret = s.interface_attach(None, None, None)
|
|
|
|
self.assert_request_id(ret, fakes.FAKE_REQUEST_ID_LIST)
|
2014-05-26 16:33:16 +10:00
|
|
|
self.assert_called('POST', '/servers/1234/os-interface')
|
2013-02-18 10:16:36 -05:00
|
|
|
|
|
|
|
def test_interface_detach(self):
|
2014-05-26 16:33:16 +10:00
|
|
|
s = self.cs.servers.get(1234)
|
2015-12-25 11:40:22 +09:00
|
|
|
ret = s.interface_detach('port-id')
|
|
|
|
self.assert_request_id(ret, fakes.FAKE_REQUEST_ID_LIST)
|
2014-05-26 16:33:16 +10:00
|
|
|
self.assert_called('DELETE', '/servers/1234/os-interface/port-id')
|
2015-10-01 14:46:13 -05:00
|
|
|
|
2016-02-10 16:05:48 +02:00
|
|
|
def test_create_server_with_description(self):
|
|
|
|
self.assertRaises(exceptions.UnsupportedAttribute,
|
|
|
|
self.cs.servers.create,
|
|
|
|
name="My server",
|
|
|
|
description="descr",
|
|
|
|
image=1,
|
|
|
|
flavor=1,
|
|
|
|
meta={'foo': 'bar'},
|
|
|
|
userdata="hello moto",
|
|
|
|
key_name="fakekey"
|
|
|
|
)
|
|
|
|
|
2015-10-01 14:46:13 -05:00
|
|
|
|
|
|
|
class ServersV26Test(ServersTest):
|
|
|
|
def setUp(self):
|
|
|
|
super(ServersV26Test, self).setUp()
|
|
|
|
self.cs.api_version = api_versions.APIVersion("2.6")
|
|
|
|
|
|
|
|
def test_get_vnc_console(self):
|
|
|
|
s = self.cs.servers.get(1234)
|
2015-12-25 11:40:22 +09:00
|
|
|
vc = s.get_vnc_console('fake')
|
|
|
|
self.assert_request_id(vc, fakes.FAKE_REQUEST_ID_LIST)
|
2015-10-01 14:46:13 -05:00
|
|
|
self.assert_called('POST', '/servers/1234/remote-consoles')
|
|
|
|
|
2015-12-25 11:40:22 +09:00
|
|
|
vc = self.cs.servers.get_vnc_console(s, 'fake')
|
|
|
|
self.assert_request_id(vc, fakes.FAKE_REQUEST_ID_LIST)
|
2015-10-01 14:46:13 -05:00
|
|
|
self.assert_called('POST', '/servers/1234/remote-consoles')
|
|
|
|
|
|
|
|
def test_get_spice_console(self):
|
|
|
|
s = self.cs.servers.get(1234)
|
2015-12-25 11:40:22 +09:00
|
|
|
sc = s.get_spice_console('fake')
|
|
|
|
self.assert_request_id(sc, fakes.FAKE_REQUEST_ID_LIST)
|
2015-10-01 14:46:13 -05:00
|
|
|
self.assert_called('POST', '/servers/1234/remote-consoles')
|
|
|
|
|
2015-12-25 11:40:22 +09:00
|
|
|
sc = self.cs.servers.get_spice_console(s, 'fake')
|
|
|
|
self.assert_request_id(sc, fakes.FAKE_REQUEST_ID_LIST)
|
2015-10-01 14:46:13 -05:00
|
|
|
self.assert_called('POST', '/servers/1234/remote-consoles')
|
|
|
|
|
|
|
|
def test_get_serial_console(self):
|
|
|
|
s = self.cs.servers.get(1234)
|
2015-12-25 11:40:22 +09:00
|
|
|
sc = s.get_serial_console('fake')
|
|
|
|
self.assert_request_id(sc, fakes.FAKE_REQUEST_ID_LIST)
|
2015-10-01 14:46:13 -05:00
|
|
|
self.assert_called('POST', '/servers/1234/remote-consoles')
|
|
|
|
|
2015-12-25 11:40:22 +09:00
|
|
|
sc = self.cs.servers.get_serial_console(s, 'fake')
|
|
|
|
self.assert_request_id(sc, fakes.FAKE_REQUEST_ID_LIST)
|
2015-10-01 14:46:13 -05:00
|
|
|
self.assert_called('POST', '/servers/1234/remote-consoles')
|
|
|
|
|
|
|
|
def test_get_rdp_console(self):
|
|
|
|
s = self.cs.servers.get(1234)
|
2015-12-25 11:40:22 +09:00
|
|
|
rc = s.get_rdp_console('fake')
|
|
|
|
self.assert_request_id(rc, fakes.FAKE_REQUEST_ID_LIST)
|
2015-10-01 14:46:13 -05:00
|
|
|
self.assert_called('POST', '/servers/1234/remote-consoles')
|
|
|
|
|
2015-12-25 11:40:22 +09:00
|
|
|
rc = self.cs.servers.get_rdp_console(s, 'fake')
|
|
|
|
self.assert_request_id(rc, fakes.FAKE_REQUEST_ID_LIST)
|
2015-10-01 14:46:13 -05:00
|
|
|
self.assert_called('POST', '/servers/1234/remote-consoles')
|
2015-11-30 17:07:35 +02:00
|
|
|
|
|
|
|
|
|
|
|
class ServersV28Test(ServersV26Test):
|
|
|
|
def setUp(self):
|
|
|
|
super(ServersV28Test, self).setUp()
|
|
|
|
self.cs.api_version = api_versions.APIVersion("2.8")
|
|
|
|
|
|
|
|
def test_get_mks_console(self):
|
|
|
|
s = self.cs.servers.get(1234)
|
2015-12-25 11:40:22 +09:00
|
|
|
mksc = s.get_mks_console()
|
|
|
|
self.assert_request_id(mksc, fakes.FAKE_REQUEST_ID_LIST)
|
2015-11-30 17:07:35 +02:00
|
|
|
self.assert_called('POST', '/servers/1234/remote-consoles')
|
|
|
|
|
2015-12-25 11:40:22 +09:00
|
|
|
mksc = self.cs.servers.get_mks_console(s)
|
|
|
|
self.assert_request_id(mksc, fakes.FAKE_REQUEST_ID_LIST)
|
2015-11-30 17:07:35 +02:00
|
|
|
self.assert_called('POST', '/servers/1234/remote-consoles')
|
2015-12-18 16:42:23 +01:00
|
|
|
|
|
|
|
|
|
|
|
class ServersV214Test(ServersV28Test):
|
|
|
|
def setUp(self):
|
|
|
|
super(ServersV214Test, self).setUp()
|
|
|
|
self.cs.api_version = api_versions.APIVersion("2.14")
|
|
|
|
|
|
|
|
def test_evacuate(self):
|
|
|
|
s = self.cs.servers.get(1234)
|
|
|
|
s.evacuate('fake_target_host')
|
|
|
|
self.assert_called('POST', '/servers/1234/action')
|
|
|
|
self.cs.servers.evacuate(s, 'fake_target_host',
|
|
|
|
password='NewAdminPassword')
|
|
|
|
self.assert_called('POST', '/servers/1234/action')
|
2016-01-25 14:07:27 +02:00
|
|
|
|
|
|
|
|
|
|
|
class ServersV217Test(ServersV214Test):
|
|
|
|
def setUp(self):
|
|
|
|
super(ServersV217Test, self).setUp()
|
|
|
|
self.cs.api_version = api_versions.APIVersion("2.17")
|
|
|
|
|
|
|
|
def test_trigger_crash_dump(self):
|
|
|
|
s = self.cs.servers.get(1234)
|
|
|
|
s.trigger_crash_dump()
|
|
|
|
self.assert_called('POST', '/servers/1234/action')
|
|
|
|
self.cs.servers.trigger_crash_dump(s)
|
|
|
|
self.assert_called('POST', '/servers/1234/action')
|
2016-02-10 16:05:48 +02:00
|
|
|
|
|
|
|
|
|
|
|
class ServersV219Test(ServersV217Test):
|
|
|
|
def setUp(self):
|
|
|
|
super(ServersV219Test, self).setUp()
|
|
|
|
self.cs.api_version = api_versions.APIVersion("2.19")
|
|
|
|
|
|
|
|
def test_create_server_with_description(self):
|
|
|
|
self.cs.servers.create(
|
|
|
|
name="My server",
|
|
|
|
description="descr",
|
|
|
|
image=1,
|
|
|
|
flavor=1,
|
|
|
|
meta={'foo': 'bar'},
|
|
|
|
userdata="hello moto",
|
|
|
|
key_name="fakekey"
|
|
|
|
)
|
|
|
|
self.assert_called('POST', '/servers')
|
|
|
|
|
|
|
|
def test_update_server_with_description(self):
|
|
|
|
s = self.cs.servers.get(1234)
|
|
|
|
|
|
|
|
s.update(description='hi')
|
|
|
|
s.update(name='hi', description='hi')
|
|
|
|
self.assert_called('PUT', '/servers/1234')
|
|
|
|
|
|
|
|
def test_rebuild_with_description(self):
|
|
|
|
s = self.cs.servers.get(1234)
|
|
|
|
|
|
|
|
ret = s.rebuild(image="1", description="descr")
|
|
|
|
self.assert_request_id(ret, fakes.FAKE_REQUEST_ID_LIST)
|
|
|
|
self.assert_called('POST', '/servers/1234/action')
|
2016-02-27 09:59:01 +08:00
|
|
|
|
|
|
|
|
|
|
|
class ServersV225Test(ServersV219Test):
|
|
|
|
def setUp(self):
|
|
|
|
super(ServersV219Test, self).setUp()
|
|
|
|
self.cs.api_version = api_versions.APIVersion("2.25")
|
|
|
|
|
|
|
|
def test_live_migrate_server(self):
|
|
|
|
s = self.cs.servers.get(1234)
|
|
|
|
ret = s.live_migrate(host='hostname', block_migration='auto')
|
|
|
|
self.assert_request_id(ret, fakes.FAKE_REQUEST_ID_LIST)
|
|
|
|
self.assert_called('POST', '/servers/1234/action',
|
|
|
|
{'os-migrateLive': {'host': 'hostname',
|
|
|
|
'block_migration': 'auto'}})
|
|
|
|
ret = self.cs.servers.live_migrate(s, host='hostname',
|
|
|
|
block_migration='auto')
|
|
|
|
self.assert_request_id(ret, fakes.FAKE_REQUEST_ID_LIST)
|
|
|
|
self.assert_called('POST', '/servers/1234/action',
|
|
|
|
{'os-migrateLive': {'host': 'hostname',
|
|
|
|
'block_migration': 'auto'}})
|
|
|
|
|
|
|
|
def test_live_migrate_server_block_migration_true(self):
|
|
|
|
s = self.cs.servers.get(1234)
|
|
|
|
ret = s.live_migrate(host='hostname', block_migration=True)
|
|
|
|
self.assert_request_id(ret, fakes.FAKE_REQUEST_ID_LIST)
|
|
|
|
self.assert_called('POST', '/servers/1234/action',
|
|
|
|
{'os-migrateLive': {'host': 'hostname',
|
|
|
|
'block_migration': True}})
|
|
|
|
|
|
|
|
ret = self.cs.servers.live_migrate(s, host='hostname',
|
|
|
|
block_migration=True)
|
|
|
|
self.assert_request_id(ret, fakes.FAKE_REQUEST_ID_LIST)
|
|
|
|
self.assert_called('POST', '/servers/1234/action',
|
|
|
|
{'os-migrateLive': {'host': 'hostname',
|
|
|
|
'block_migration': True}})
|
|
|
|
|
|
|
|
def test_live_migrate_server_block_migration_none(self):
|
|
|
|
s = self.cs.servers.get(1234)
|
|
|
|
ret = s.live_migrate(host='hostname', block_migration=None)
|
|
|
|
self.assert_request_id(ret, fakes.FAKE_REQUEST_ID_LIST)
|
|
|
|
self.assert_called('POST', '/servers/1234/action',
|
|
|
|
{'os-migrateLive': {'host': 'hostname',
|
|
|
|
'block_migration': 'auto'}})
|
|
|
|
|
|
|
|
ret = self.cs.servers.live_migrate(s, host='hostname',
|
|
|
|
block_migration='auto')
|
|
|
|
self.assert_request_id(ret, fakes.FAKE_REQUEST_ID_LIST)
|
|
|
|
self.assert_called('POST', '/servers/1234/action',
|
|
|
|
{'os-migrateLive': {'host': 'hostname',
|
|
|
|
'block_migration': 'auto'}})
|
|
|
|
|
|
|
|
def test_live_migrate_server_with_disk_over_commit(self):
|
|
|
|
s = self.cs.servers.get(1234)
|
|
|
|
self.assertRaises(ValueError, s.live_migrate, 'hostname',
|
|
|
|
'auto', 'True')
|