diff --git a/zunclient/osc/v1/containers.py b/zunclient/osc/v1/containers.py index e4ed5895..313bc9cb 100644 --- a/zunclient/osc/v1/containers.py +++ b/zunclient/osc/v1/containers.py @@ -163,6 +163,11 @@ class CreateContainer(command.ShowOne): type=int, default=None, help='The disk size in GiB for per container.') + parser.add_argument( + '--availability-zone', + metavar='', + default=None, + help='The availability zone of the container.') return parser def take_action(self, parsed_args): @@ -193,6 +198,7 @@ class CreateContainer(command.ShowOne): opts['runtime'] = parsed_args.runtime opts['hostname'] = parsed_args.hostname opts['disk'] = parsed_args.disk + opts['availability_zone'] = parsed_args.availability_zone opts = zun_utils.remove_null_parms(**opts) container = client.containers.create(**opts) @@ -723,6 +729,11 @@ class RunContainer(command.ShowOne): type=int, default=None, help='The disk size in GiB for per container.') + parser.add_argument( + '--availability-zone', + metavar='', + default=None, + help='The availability zone of the container.') return parser def take_action(self, parsed_args): @@ -753,6 +764,7 @@ class RunContainer(command.ShowOne): opts['runtime'] = parsed_args.runtime opts['hostname'] = parsed_args.hostname opts['disk'] = parsed_args.disk + opts['availability_zone'] = parsed_args.availability_zone opts = zun_utils.remove_null_parms(**opts) container = client.containers.run(**opts) diff --git a/zunclient/tests/unit/v1/test_containers_shell.py b/zunclient/tests/unit/v1/test_containers_shell.py index 96bbbc4d..0f8af85c 100644 --- a/zunclient/tests/unit/v1/test_containers_shell.py +++ b/zunclient/tests/unit/v1/test_containers_shell.py @@ -191,6 +191,14 @@ class ShellTest(shell_test_base.TestCommandLineArgument): mock_run.assert_called_with( **_get_container_args(image='x', runtime='runc')) + @mock.patch('zunclient.v1.containers_shell._show_container') + @mock.patch('zunclient.v1.containers.ContainerManager.run') + def test_zun_container_run_success_with_availability_zone( + self, mock_run, mock_show_container): + mock_run.return_value = 'container' + self._test_arg_success('run --availability-zone nova x') + mock_show_container.assert_called_once_with('container') + @mock.patch('zunclient.v1.containers_shell._show_container') @mock.patch('zunclient.v1.containers.ContainerManager.run') def test_zun_container_run_with_mount( diff --git a/zunclient/v1/containers.py b/zunclient/v1/containers.py index a506ea9a..edb0d58f 100644 --- a/zunclient/v1/containers.py +++ b/zunclient/v1/containers.py @@ -23,7 +23,8 @@ CREATION_ATTRIBUTES = ['name', 'image', 'command', 'cpu', 'memory', 'environment', 'workdir', 'labels', 'image_pull_policy', 'restart_policy', 'interactive', 'image_driver', 'security_groups', 'hints', 'nets', 'auto_remove', - 'runtime', 'hostname', 'mounts', 'disk'] + 'runtime', 'hostname', 'mounts', 'disk', + 'availability_zone'] class Container(base.Resource): diff --git a/zunclient/v1/containers_shell.py b/zunclient/v1/containers_shell.py index fc8069bd..f1197360 100644 --- a/zunclient/v1/containers_shell.py +++ b/zunclient/v1/containers_shell.py @@ -129,6 +129,10 @@ def _show_container(container): type=int, default=None, help='The disk size in GiB for per container.') +@utils.arg('--availability-zone', + metavar='', + default=None, + help='The availability zone of the container.') def do_create(cs, args): """Create a container.""" opts = {} @@ -148,6 +152,7 @@ def do_create(cs, args): opts['runtime'] = args.runtime opts['hostname'] = args.hostname opts['disk'] = args.disk + opts['availability_zone'] = args.availability_zone if args.security_group: opts['security_groups'] = args.security_group @@ -550,6 +555,10 @@ def do_kill(cs, args): type=int, default=None, help='The disk size in GiB for per container.') +@utils.arg('--availability-zone', + metavar='', + default=None, + help='The availability zone of the container.') def do_run(cs, args): """Run a command in a new container.""" opts = {} @@ -569,6 +578,7 @@ def do_run(cs, args): opts['runtime'] = args.runtime opts['hostname'] = args.hostname opts['disk'] = args.disk + opts['availability_zone'] = args.availability_zone if args.security_group: opts['security_groups'] = args.security_group