Logic for handle vmware settings on nailgun

Vmware settings API support

Implements: blueprint vmware-ui-settings
Change-Id: If7ad968abc09c5f370d3ee52d5b14e6d48778fd2
This commit is contained in:
Andriy Popovych
2015-03-04 09:54:12 +02:00
parent 3ebfa9c14a
commit 5301c6f3de
4 changed files with 225 additions and 0 deletions

View File

@@ -32,6 +32,7 @@ from fuelclient.cli.actions.notifications import NotifyAction
from fuelclient.cli.actions.release import ReleaseAction
from fuelclient.cli.actions.role import RoleAction
from fuelclient.cli.actions.settings import SettingsAction
from fuelclient.cli.actions.settings import VmwareSettingsAction
from fuelclient.cli.actions.snapshot import SnapshotAction
from fuelclient.cli.actions.task import TaskAction
from fuelclient.cli.actions.user import UserAction
@@ -48,6 +49,7 @@ actions_tuple = (
StopAction,
ResetAction,
SettingsAction,
VmwareSettingsAction,
NetworkAction,
TaskAction,
SnapshotAction,

View File

@@ -83,3 +83,53 @@ class SettingsAction(Action):
" downloaded to {1}"
.format(env.id, settings_file_path)
)
class VmwareSettingsAction(SettingsAction):
"""Show or modify environment vmware settings
"""
action_name = "vmware-settings"
def upload(self, params):
"""To upload vmware settings for some environment from some directory:
fuel --env 1 vmware-settings --upload --dir path/to/directory
"""
env = Environment(params.env)
vmware_settings_data = env.read_vmware_settings_data(
directory=params.dir,
serializer=self.serializer
)
env.set_vmware_settings_data(vmware_settings_data)
print("Vmware settings configuration uploaded.")
def default(self, params):
"""To download default vmware settings for some environment
in some directory:
fuel --env 1 vmware-settings --default --dir path/to/directory
"""
env = Environment(params.env)
vmware_default_data = env.get_default_vmware_settings_data()
settings_file_path = env.write_vmware_settings_data(
vmware_default_data,
directory=params.dir,
serializer=self.serializer)
print(
"Default vmware settings configuration downloaded to {0}."
.format(settings_file_path)
)
def download(self, params):
"""To download vmware settings for some environment in this directory:
fuel --env 1 vmware-settings --download
"""
env = Environment(params.env)
settings_data = env.get_vmware_settings_data()
settings_file_path = env.write_vmware_settings_data(
settings_data,
directory=params.dir,
serializer=self.serializer)
print(
"Vmware settings configuration for environment with id={0}"
" downloaded to {1}"
.format(env.id, settings_file_path)
)

View File

@@ -132,6 +132,12 @@ class Environment(BaseObject):
"settings_{0}".format(self.id)
)
def get_vmware_settings_data_path(self, directory=os.curdir):
return os.path.join(
os.path.abspath(directory),
"vmware_settings_{0}".format(self.id)
)
def write_network_data(self, network_data, directory=os.curdir,
serializer=None):
return (serializer or self.serializer).write_to_file(
@@ -146,6 +152,13 @@ class Environment(BaseObject):
settings_data
)
def write_vmware_settings_data(self, settings_data, directory=os.curdir,
serializer=None):
return (serializer or self.serializer).write_to_file(
self.get_vmware_settings_data_path(directory),
settings_data
)
def read_network_data(self, directory=os.curdir,
serializer=None):
network_file_path = self.get_network_data_path(directory)
@@ -157,6 +170,10 @@ class Environment(BaseObject):
return (serializer or self.serializer).read_from_file(
settings_file_path)
def read_vmware_settings_data(self, directory=os.curdir, serializer=None):
return (serializer or self.serializer).read_from_file(
self.get_vmware_settings_data_path(directory))
@property
def status(self):
return self.get_fresh_data()['status']
@@ -169,6 +186,14 @@ class Environment(BaseObject):
def default_settings_url(self):
return self.settings_url + "/defaults"
@property
def vmware_settings_url(self):
return "clusters/{0}/vmware_attributes".format(self.id)
@property
def default_vmware_settings_url(self):
return self.vmware_settings_url + "/defaults"
@property
def network_url(self):
return "clusters/{id}/network_configuration/{net_provider}".format(
@@ -188,6 +213,12 @@ class Environment(BaseObject):
def get_default_settings_data(self):
return self.connection.get_request(self.default_settings_url)
def get_vmware_settings_data(self):
return self.connection.get_request(self.vmware_settings_url)
def get_default_vmware_settings_data(self):
return self.connection.get_request(self.default_vmware_settings_url)
def set_network_data(self, data):
return self.connection.put_request(
self.network_url, data)
@@ -196,6 +227,10 @@ class Environment(BaseObject):
return self.connection.put_request(
self.settings_url, data)
def set_vmware_settings_data(self, data):
return self.connection.put_request(
self.vmware_settings_url, data)
def verify_network(self):
return self.connection.put_request(
self.network_verification_url, self.get_network_data())

View File

@@ -0,0 +1,138 @@
# -*- coding: utf-8 -*-
#
# Copyright 2015 Mirantis, Inc.
#
# 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 json
from mock import Mock
from mock import mock_open
from mock import patch
from fuelclient.tests import base
YAML_SETTINGS_DATA = """editable:
access:
user:
value: test_user
"""
JSON_SETTINGS_DATA = {
'editable': {
'access': {
'user': {
'value': 'test_user'
}
}
}
}
class BaseSettings(base.UnitTestCase):
def check_upload_action(self, mrequests, test_command, test_url):
m = mock_open(read_data=YAML_SETTINGS_DATA)
with patch('__builtin__.open', m, create=True):
self.execute_wo_auth(test_command)
request = mrequests.put.call_args_list[0]
url = request[0][0]
data = request[1]['data']
m().read.assert_called_once_with()
self.assertEqual(mrequests.put.call_count, 1)
self.assertIn(test_url, url)
self.assertDictEqual(json.loads(data), JSON_SETTINGS_DATA)
def check_default_action(self, mrequests, test_command, test_url):
m = mock_open()
mresponse = Mock(status_code=200)
mresponse.json.return_value = JSON_SETTINGS_DATA
mrequests.get.return_value = mresponse
with patch('__builtin__.open', m, create=True):
self.execute_wo_auth(test_command)
request = mrequests.get.call_args_list[0]
url = request[0][0]
m().write.assert_called_once_with(YAML_SETTINGS_DATA)
self.assertEqual(mrequests.get.call_count, 1)
self.assertIn(test_url, url)
def check_download_action(self, mrequests, test_command, test_url):
m = mock_open()
mresponse = Mock(status_code=200)
mresponse.json.return_value = JSON_SETTINGS_DATA
mrequests.get.return_value = mresponse
with patch('__builtin__.open', m, create=True):
self.execute_wo_auth(test_command)
request = mrequests.get.call_args_list[0]
url = request[0][0]
m().write.assert_called_once_with(YAML_SETTINGS_DATA)
self.assertEqual(mrequests.get.call_count, 1)
self.assertIn(test_url, url)
@patch('fuelclient.client.requests')
class TestSettings(BaseSettings):
def test_upload_action(self, mrequests):
self.check_upload_action(
mrequests=mrequests,
test_command=[
'fuel', 'settings', '--env', '1', '--upload'],
test_url='/api/v1/clusters/1/attributes')
def test_default_action(self, mrequests):
self.check_default_action(
mrequests=mrequests,
test_command=[
'fuel', 'settings', '--env', '1', '--default'],
test_url='/api/v1/clusters/1/attributes/default')
def test_download_action(self, mrequests):
self.check_download_action(
mrequests=mrequests,
test_command=[
'fuel', 'settings', '--env', '1', '--download'],
test_url='/api/v1/clusters/1/attributes')
@patch('fuelclient.client.requests')
class TestVmwareSettings(BaseSettings):
def test_upload_action(self, mrequests):
self.check_upload_action(
mrequests=mrequests,
test_command=[
'fuel', 'vmware-settings', '--env', '1', '--upload'],
test_url='/api/v1/clusters/1/vmware_attributes')
def test_default_action(self, mrequests):
self.check_default_action(
mrequests=mrequests,
test_command=[
'fuel', 'vmware-settings', '--env', '1', '--default'],
test_url='/api/v1/clusters/1/vmware_attributes/default')
def test_download_action(self, mrequests):
self.check_download_action(
mrequests=mrequests,
test_command=[
'fuel', 'vmware-settings', '--env', '1', '--download'],
test_url='/api/v1/clusters/1/vmware_attributes')