Merge "database/v1.0 instance resource"
This commit is contained in:
commit
9855a7c4bd
0
openstack/database/__init__.py
Normal file
0
openstack/database/__init__.py
Normal file
21
openstack/database/database_service.py
Normal file
21
openstack/database/database_service.py
Normal file
@ -0,0 +1,21 @@
|
||||
# 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.
|
||||
|
||||
from openstack.auth import service_filter
|
||||
|
||||
|
||||
class DatabaseService(service_filter.ServiceFilter):
|
||||
"""The database service."""
|
||||
|
||||
def __init__(self):
|
||||
"""Create an database service."""
|
||||
super(DatabaseService, self).__init__(service_type='database')
|
0
openstack/database/v1/__init__.py
Normal file
0
openstack/database/v1/__init__.py
Normal file
61
openstack/database/v1/instance.py
Normal file
61
openstack/database/v1/instance.py
Normal file
@ -0,0 +1,61 @@
|
||||
# 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.
|
||||
|
||||
from openstack.database import database_service
|
||||
from openstack import resource
|
||||
from openstack import utils
|
||||
|
||||
|
||||
class Instance(resource.Resource):
|
||||
resource_key = 'instance'
|
||||
resources_key = 'instances'
|
||||
base_path = '/instances'
|
||||
service = database_service.DatabaseService()
|
||||
|
||||
# capabilities
|
||||
allow_create = True
|
||||
allow_retrieve = True
|
||||
allow_update = True
|
||||
allow_delete = True
|
||||
allow_list = True
|
||||
|
||||
# Properties
|
||||
flavor = resource.prop('flavor')
|
||||
links = resource.prop('links')
|
||||
name = resource.prop('name')
|
||||
status = resource.prop('status')
|
||||
volume = resource.prop('volume')
|
||||
|
||||
def enable_root_user(self, session):
|
||||
url = utils.urljoin(self.base_path, self.id, 'root')
|
||||
resp = session.post(url, service=self.service).body
|
||||
return resp['user']
|
||||
|
||||
def is_root_enabled(self, session):
|
||||
url = utils.urljoin(self.base_path, self.id, 'root')
|
||||
resp = session.get(url, service=self.service).body
|
||||
return resp['rootEnabled']
|
||||
|
||||
def restart(self, session):
|
||||
body = {'restart': {}}
|
||||
url = utils.urljoin(self.base_path, self.id, 'action')
|
||||
session.post(url, service=self.service, json=body)
|
||||
|
||||
def resize(self, session, flavor_reference):
|
||||
body = {'resize': {'flavorRef': flavor_reference}}
|
||||
url = utils.urljoin(self.base_path, self.id, 'action')
|
||||
session.post(url, service=self.service, json=body)
|
||||
|
||||
def resize_volume(self, session, volume_size):
|
||||
body = {'resize': {'volume': volume_size}}
|
||||
url = utils.urljoin(self.base_path, self.id, 'action')
|
||||
session.post(url, service=self.service, json=body)
|
0
openstack/tests/database/__init__.py
Normal file
0
openstack/tests/database/__init__.py
Normal file
25
openstack/tests/database/test_database_service.py
Normal file
25
openstack/tests/database/test_database_service.py
Normal file
@ -0,0 +1,25 @@
|
||||
# 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.
|
||||
|
||||
import testtools
|
||||
|
||||
from openstack.database import database_service
|
||||
|
||||
|
||||
class TestDatabaseService(testtools.TestCase):
|
||||
|
||||
def test_service(self):
|
||||
sot = database_service.DatabaseService()
|
||||
self.assertEqual('database', sot.service_type)
|
||||
self.assertEqual('public', sot.visibility)
|
||||
self.assertIsNone(sot.region)
|
||||
self.assertIsNone(sot.service_name)
|
0
openstack/tests/database/v1/__init__.py
Normal file
0
openstack/tests/database/v1/__init__.py
Normal file
120
openstack/tests/database/v1/test_instance.py
Normal file
120
openstack/tests/database/v1/test_instance.py
Normal file
@ -0,0 +1,120 @@
|
||||
# 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.
|
||||
|
||||
import mock
|
||||
import testtools
|
||||
|
||||
from openstack.database.v1 import instance
|
||||
|
||||
IDENTIFIER = 'IDENTIFIER'
|
||||
EXAMPLE = {
|
||||
'flavor': '1',
|
||||
'id': IDENTIFIER,
|
||||
'links': '3',
|
||||
'name': '4',
|
||||
'status': '5',
|
||||
'volume': '6',
|
||||
}
|
||||
|
||||
|
||||
class TestInstance(testtools.TestCase):
|
||||
|
||||
def test_basic(self):
|
||||
sot = instance.Instance()
|
||||
self.assertEqual('instance', sot.resource_key)
|
||||
self.assertEqual('instances', sot.resources_key)
|
||||
self.assertEqual('/instances', sot.base_path)
|
||||
self.assertEqual('database', sot.service.service_type)
|
||||
self.assertTrue(sot.allow_create)
|
||||
self.assertTrue(sot.allow_retrieve)
|
||||
self.assertTrue(sot.allow_update)
|
||||
self.assertTrue(sot.allow_delete)
|
||||
self.assertTrue(sot.allow_list)
|
||||
|
||||
def test_make_it(self):
|
||||
sot = instance.Instance(EXAMPLE)
|
||||
self.assertEqual(EXAMPLE['flavor'], sot.flavor)
|
||||
self.assertEqual(EXAMPLE['id'], sot.id)
|
||||
self.assertEqual(EXAMPLE['links'], sot.links)
|
||||
self.assertEqual(EXAMPLE['name'], sot.name)
|
||||
self.assertEqual(EXAMPLE['status'], sot.status)
|
||||
self.assertEqual(EXAMPLE['volume'], sot.volume)
|
||||
|
||||
def test_enable_root_user(self):
|
||||
sot = instance.Instance(EXAMPLE)
|
||||
response = mock.Mock()
|
||||
response.body = {'user': {'name': 'root', 'password': 'foo'}}
|
||||
sess = mock.Mock()
|
||||
sess.post = mock.MagicMock()
|
||||
sess.post.return_value = response
|
||||
|
||||
self.assertEqual(response.body['user'], sot.enable_root_user(sess))
|
||||
|
||||
url = ("instances/%s/root" % IDENTIFIER)
|
||||
sess.post.assert_called_with(url, service=sot.service)
|
||||
|
||||
def test_is_root_enabled(self):
|
||||
sot = instance.Instance(EXAMPLE)
|
||||
response = mock.Mock()
|
||||
response.body = {'rootEnabled': True}
|
||||
sess = mock.Mock()
|
||||
sess.get = mock.MagicMock()
|
||||
sess.get.return_value = response
|
||||
|
||||
self.assertEqual(True, sot.is_root_enabled(sess))
|
||||
|
||||
url = ("instances/%s/root" % IDENTIFIER)
|
||||
sess.get.assert_called_with(url, service=sot.service)
|
||||
|
||||
def test_action_restart(self):
|
||||
sot = instance.Instance(EXAMPLE)
|
||||
response = mock.Mock()
|
||||
response.body = ''
|
||||
sess = mock.Mock()
|
||||
sess.post = mock.MagicMock()
|
||||
sess.post.return_value = response
|
||||
|
||||
self.assertEqual(None, sot.restart(sess))
|
||||
|
||||
url = ("instances/%s/action" % IDENTIFIER)
|
||||
body = {'restart': {}}
|
||||
sess.post.assert_called_with(url, service=sot.service, json=body)
|
||||
|
||||
def test_action_resize(self):
|
||||
sot = instance.Instance(EXAMPLE)
|
||||
response = mock.Mock()
|
||||
response.body = ''
|
||||
sess = mock.Mock()
|
||||
sess.post = mock.MagicMock()
|
||||
sess.post.return_value = response
|
||||
flavor = 'http://flavor/flav'
|
||||
|
||||
self.assertEqual(None, sot.resize(sess, flavor))
|
||||
|
||||
url = ("instances/%s/action" % IDENTIFIER)
|
||||
body = {'resize': {'flavorRef': flavor}}
|
||||
sess.post.assert_called_with(url, service=sot.service, json=body)
|
||||
|
||||
def test_action_resize_volume(self):
|
||||
sot = instance.Instance(EXAMPLE)
|
||||
response = mock.Mock()
|
||||
response.body = ''
|
||||
sess = mock.Mock()
|
||||
sess.post = mock.MagicMock()
|
||||
sess.post.return_value = response
|
||||
size = 4
|
||||
|
||||
self.assertEqual(None, sot.resize_volume(sess, size))
|
||||
|
||||
url = ("instances/%s/action" % IDENTIFIER)
|
||||
body = {'resize': {'volume': size}}
|
||||
sess.post.assert_called_with(url, service=sot.service, json=body)
|
Loading…
Reference in New Issue
Block a user