Changed fuel2 utility to support network template as file

Example of CLI call:

fuel2 network-template upload --file /tmp/test-file 1

Change-Id: I3b2a6b4bdb47e4135a9e808b47335ca73e004f44
Closes-Bug: #1483761
This commit is contained in:
Ilya Sviridov 2015-08-13 19:17:35 -07:00
parent 4dffff9660
commit fc7b63aa69
5 changed files with 33 additions and 16 deletions

View File

@ -35,25 +35,34 @@ class NetworkTemplateMixin(object):
help='Directory with network data'
)
@staticmethod
def add_file_argument(parser):
parser.add_argument(
'-f', '--file',
type=str,
help='Yaml file containing network template'
)
class NetworkTemplateUpload(NetworkTemplateMixin, base.BaseCommand):
"""To upload network configuration for specified environment:
fuel2 network-template upload --dir path/to/directory 1
fuel2 network-template upload --file path/to/file_name.yaml 1
"""
def get_parser(self, prog_name):
parser = super(NetworkTemplateUpload, self).get_parser(prog_name)
self.add_dir_argument(parser)
self.add_env_argument(parser)
self.add_file_argument(parser)
return parser
def take_action(self, parsed_args):
file_path = self.client.upload_network_template(
parsed_args.env, parsed_args.dir)
msg = "Network template {0} has been uploaded.".format(file_path)
parsed_args.env, parsed_args.file)
msg = "Network template {0} has been uploaded.\n".format(file_path)
self.app.stdout.write(msg)
@ -94,5 +103,5 @@ class NetworkTemplateDelete(NetworkTemplateMixin, base.BaseCommand):
self.client.delete_network_template(parsed_args.env)
msg = ("Network template for environment id={0}"
" has been deleted.".format(parsed_args.env))
" has been deleted.\n".format(parsed_args.env))
self.app.stdout.write(msg)

View File

@ -201,10 +201,17 @@ class Environment(BaseObject):
def read_network_template_data(self, directory=os.curdir,
serializer=None):
"""Used by 'fuel' command line utility."""
network_template_file_path = self.get_network_template_data_path(
directory)
return (serializer or self.serializer).read_from_file(
network_template_file_path)
return self.read_network_template_data_from_file(
network_template_file_path, serializer)
def read_network_template_data_from_file(self, file_path=None,
serializer=None):
"""Used by 'fuel2' command line utility."""
return (serializer or self.serializer).\
read_from_file(file_path)
@property
def status(self):

View File

@ -61,7 +61,8 @@ class TestHandlers(base.BaseTestCase):
cases = [
("env --create --name=TestEnv --release=1 --mode=multinode",
"400 Client Error: Bad Request (Cannot deploy in multinode "
"mode in current release. Need to be one of: ha_compact")
"mode in current release. Need to be one of: ha_compact)"
)
]
for cmd, err in cases:
self.check_for_stderr(cmd, err, check_errors=False)

View File

@ -28,13 +28,13 @@ class TestNetworkTemplateCommand(test_engine.BaseCLITest):
self.m_client.upload_network_template.assert_called_once_with(
1, None)
def test_network_template_upload_w_dir(self):
args = 'network-template upload --dir /tmp/test-dir 1'
def test_network_template_upload_w_file(self):
args = 'network-template upload --file /tmp/test-file 1'
self.exec_command(args)
self.m_get_client.assert_called_once_with('environment', mock.ANY)
self.m_client.upload_network_template.assert_called_once_with(
1, '/tmp/test-dir')
1, '/tmp/test-file')
def test_network_template_download(self):
download_mock = self.m_client.download_network_template

View File

@ -92,14 +92,14 @@ class EnvironmentClient(base_v1.BaseV1Client):
env = self._entity_wrapper(obj_id=environment_id)
return env.spawn_vms()
def upload_network_template(self, environment_id, directory=None):
def upload_network_template(self, environment_id,
file_path=None):
env = self._entity_wrapper(environment_id)
network_template_data = env.read_network_template_data(
directory=directory)
network_template_data = env.read_network_template_data_from_file(
file_path=file_path)
env.set_network_template_data(network_template_data)
file_path = env.serializer.prepare_path(
env.get_network_template_data_path(directory=directory))
file_path = env.serializer.prepare_path(file_path)
return file_path
def download_network_template(self, environment_id, directory=None):