Logic for handle vmware settings on nailgun
Vmware settings API support Implements: blueprint vmware-ui-settings Change-Id: If7ad968abc09c5f370d3ee52d5b14e6d48778fd2
This commit is contained in:
@@ -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,
|
||||
|
||||
@@ -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)
|
||||
)
|
||||
|
||||
@@ -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())
|
||||
|
||||
138
fuelclient/tests/test_settings.py
Normal file
138
fuelclient/tests/test_settings.py
Normal 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')
|
||||
Reference in New Issue
Block a user