673
673
raise subprocess.CalledProcessError(retcode, full_args)
675
def get_juju_output(self, command, args, used_feature_flags,
676
juju_home, model=None, timeout=None, user_name=None):
675
def get_juju_output(self, command, args, used_feature_flags, juju_home,
676
model=None, timeout=None, user_name=None,
677
678
args = self.full_args(command, args, model, timeout)
678
679
env = self.shell_environ(used_feature_flags, juju_home)
1154
1159
model = self._cmd_model(kwargs.get('include_e', True),
1155
1160
kwargs.get('controller', False))
1156
timeout = kwargs.get('timeout')
1162
(k, kwargs[k]) for k in kwargs if k in ['timeout', 'merge_stderr'])
1157
1163
return self._backend.get_juju_output(
1158
1164
command, args, self.used_feature_flags, self.env.juju_home,
1159
model, timeout, user_name=self.env.user_name)
1165
model, user_name=self.env.user_name, **pass_kwargs)
1161
1167
def show_status(self):
1162
1168
"""Print the status to output."""
1835
1843
output = self.get_juju_output('add-user', *args, include_e=False)
1836
1844
return self._get_register_command(output)
1846
# Future ACL feature.
1847
# def add_user(self, username, models=None, permissions='login'):
1848
# """Adds provided user and return register command arguments.
1850
# :return: Registration token provided by the add-user command.
1852
# output = self.get_juju_output('add-user', include_e=False)
1853
# self.grant(username, permissions, models)
1854
# return self._get_register_command(output)
1838
1856
def revoke(self, username, models=None, permissions='read'):
1839
1857
if models is None:
1840
1858
models = self.env.environment
1842
args = (username, models, '--acl', permissions)
1860
args = (username, permissions, models)
1844
1862
self.controller_juju('revoke', args)
1926
1948
return user_client
1928
1950
def grant(self, user_name, permission, model=None):
1951
"""Grant the user with model or controller permission."""
1952
if permission in self.controller_permissions:
1953
self.juju('grant', (user_name, permission),
1955
elif permission in self.model_permissions:
1957
model = self.model_name
1958
self.juju('grant', (user_name, permission, model),
1963
def list_clouds(self, format='json'):
1964
"""List all the available clouds."""
1965
return self.get_juju_output('list-clouds', '--format',
1966
format, include_e=False)
1968
def show_controller(self, format='json'):
1969
"""Show controller's status."""
1970
return self.get_juju_output('show-controller', '--format',
1971
format, include_e=False)
1973
def ssh_keys(self, full=False):
1974
"""Give the ssh keys registered for the current model."""
1977
args.append('--full')
1978
return self.get_juju_output('ssh-keys', *args)
1980
def add_ssh_key(self, *keys):
1981
"""Add one or more ssh keys to the current model."""
1982
return self.get_juju_output('add-ssh-key', *keys, merge_stderr=True)
1984
def remove_ssh_key(self, *keys):
1985
"""Remove one or more ssh keys from the current model."""
1986
return self.get_juju_output('remove-ssh-key', *keys, merge_stderr=True)
1988
def import_ssh_key(self, *keys):
1989
"""Import ssh keys from one or more identities to the current model."""
1990
return self.get_juju_output('import-ssh-key', *keys, merge_stderr=True)
1993
class EnvJujuClient2B9(EnvJujuClient):
1995
def update_user_name(self):
1998
def create_cloned_environment(
1999
self, cloned_juju_home, controller_name, user_name=None):
2000
"""Create a cloned environment.
2002
`user_name` is unused in this version of beta.
2004
user_client = self.clone(env=self.env.clone())
2005
user_client.env.juju_home = cloned_juju_home
2006
# New user names the controller.
2007
user_client.env.controller = Controller(controller_name)
2010
def get_model_uuid(self):
2011
name = self.env.environment
2012
output_yaml = self.get_juju_output('show-model', '--format', 'yaml')
2013
output = yaml.safe_load(output_yaml)
2014
return output[name]['model-uuid']
2016
def grant(self, user_name, permission, model=None):
1929
2017
"""Grant the user with a model."""
1930
2018
if model is None:
1931
2019
model = self.model_name
1932
2020
self.juju('grant', (user_name, model, '--acl', permission),
1933
2021
include_e=False)
1936
class EnvJujuClient2B9(EnvJujuClient):
1937
def update_user_name(self):
1940
def create_cloned_environment(
1941
self, cloned_juju_home, controller_name, user_name=None):
1942
"""Create a cloned environment.
1944
`user_name` is unused in this version of beta.
1947
user_client = self.clone(env=self.env.clone())
1948
user_client.env.juju_home = cloned_juju_home
1949
# New user names the controller.
1950
user_client.env.controller = Controller(controller_name)
2023
def revoke(self, username, models=None, permissions='read'):
2025
models = self.env.environment
2027
args = (username, models, '--acl', permissions)
2029
self.controller_juju('revoke', args)
1954
2032
class EnvJujuClient2B8(EnvJujuClient2B9):
2407
2493
(name, provider,
2408
2494
'size={}'.format(size)))
2496
def ssh_keys(self, full=False):
2497
"""Give the ssh keys registered for the current model."""
2500
args.append('--full')
2501
return self.get_juju_output('authorized-keys', 'list', *args)
2503
def add_ssh_key(self, *keys):
2504
"""Add one or more ssh keys to the current model."""
2505
return self.get_juju_output('authorized-keys', 'add', *keys,
2508
def remove_ssh_key(self, *keys):
2509
"""Remove one or more ssh keys from the current model."""
2510
return self.get_juju_output('authorized-keys', 'delete', *keys,
2513
def import_ssh_key(self, *keys):
2514
"""Import ssh keys from one or more identities to the current model."""
2515
return self.get_juju_output('authorized-keys', 'import', *keys,
2411
2519
class EnvJujuClient22(EnvJujuClient1X):