diff options
author | Brian Coca <bcoca@users.noreply.github.com> | 2019-08-13 19:47:40 -0400 |
---|---|---|
committer | Jordan Borean <jborean93@gmail.com> | 2019-08-14 09:47:40 +1000 |
commit | a8d01cf2a24505c8c9620d9a10771c591208b922 (patch) | |
tree | e5b1cd3805240369599ebd7a899378ada4204f33 /lib/ansible/galaxy | |
parent | 3f784caed1aa63d2a5a3e9df20c4606372910c19 (diff) | |
download | ansible-a8d01cf2a24505c8c9620d9a10771c591208b922.tar.gz |
Made galaxy token file location configurable (#59387)
* Made galaxy token file location configurable
also made file handling 'unicode safe'
* only create a token on demand
* convert into decorator in case other funcs need
Diffstat (limited to 'lib/ansible/galaxy')
-rw-r--r-- | lib/ansible/galaxy/api.py | 15 | ||||
-rw-r--r-- | lib/ansible/galaxy/token.py | 31 |
2 files changed, 33 insertions, 13 deletions
diff --git a/lib/ansible/galaxy/api.py b/lib/ansible/galaxy/api.py index d029821735..5845ba6b45 100644 --- a/lib/ansible/galaxy/api.py +++ b/lib/ansible/galaxy/api.py @@ -24,6 +24,8 @@ __metaclass__ = type import json +from functools import wraps + from ansible import context import ansible.constants as C from ansible.errors import AnsibleError @@ -38,6 +40,16 @@ from ansible.utils.display import Display display = Display() +def requires_token(func): + ''' wrapper to laziliy initialize token file ''' + @wraps(func) + def wrapped(self, *args, **kwargs): + if self.token is None: + self.token = GalaxyToken() + return func(self, *args, **kwargs) + return wrapped + + def g_connect(method): ''' wrapper to lazily initialize connection info to galaxy ''' def wrapped(self, *args, **kwargs): @@ -62,7 +74,7 @@ class GalaxyAPI(object): def __init__(self, galaxy): self.galaxy = galaxy - self.token = GalaxyToken() + self.token = None self._api_server = C.GALAXY_SERVER self._validate_certs = not context.CLIARGS['ignore_certs'] self.baseurl = None @@ -75,6 +87,7 @@ class GalaxyAPI(object): if context.CLIARGS['api_server'] != C.GALAXY_SERVER: self._api_server = context.CLIARGS['api_server'] + @requires_token def __auth_header(self): token = self.token.get() if token is None: diff --git a/lib/ansible/galaxy/token.py b/lib/ansible/galaxy/token.py index 4af7511b4c..6c235ed652 100644 --- a/lib/ansible/galaxy/token.py +++ b/lib/ansible/galaxy/token.py @@ -26,30 +26,37 @@ from stat import S_IRUSR, S_IWUSR import yaml +from ansible import constants as C +from ansible.module_utils._text import to_bytes, to_text from ansible.utils.display import Display display = Display() class GalaxyToken(object): - ''' Class to storing and retrieving token in ~/.ansible_galaxy ''' + ''' Class to storing and retrieving local galaxy token ''' def __init__(self): - self.file = os.path.expanduser("~") + '/.ansible_galaxy' + self.b_file = to_bytes(C.GALAXY_TOKEN_PATH) self.config = yaml.safe_load(self.__open_config_for_read()) if not self.config: self.config = {} def __open_config_for_read(self): - if os.path.isfile(self.file): - display.vvv('Opened %s' % self.file) - return open(self.file, 'r') - # config.yml not found, create and chomd u+rw - f = open(self.file, 'w') - f.close() - os.chmod(self.file, S_IRUSR | S_IWUSR) # owner has +rw - display.vvv('Created %s' % self.file) - return open(self.file, 'r') + + f = None + action = 'Opened' + if not os.path.isfile(self.b_file): + # token file not found, create and chomd u+rw + f = open(self.b_file, 'w') + f.close() + os.chmod(self.b_file, S_IRUSR | S_IWUSR) # owner has +rw + action = 'Created' + + f = open(self.b_file, 'r') + display.vvv('%s %s' % (action, to_text(self.b_file))) + + return f def set(self, token): self.config['token'] = token @@ -59,5 +66,5 @@ class GalaxyToken(object): return self.config.get('token', None) def save(self): - with open(self.file, 'w') as f: + with open(self.b_file, 'w') as f: yaml.safe_dump(self.config, f, default_flow_style=False) |