task: make helm_home, bin, and kubectl bin configurable
Refs /salt-formulas/salt-formula-helm#2
diff --git a/_modules/helm.py b/_modules/helm.py
index 9e62154..f690b8f 100644
--- a/_modules/helm.py
+++ b/_modules/helm.py
@@ -3,8 +3,6 @@
from salt.serializers import yaml
from salt.exceptions import CommandExecutionError
-
-HELM_HOME = '/srv/helm/home'
LOG = logging.getLogger(__name__)
def ok_or_output(cmd, prefix=None):
@@ -17,21 +15,25 @@
return msg
-def _helm_cmd(*args, **tiller_kwargs):
- if tiller_kwargs.get('tiller_host'):
- tiller_args = ('--host', tiller_kwargs['tiller_host'])
- elif tiller_kwargs.get('tiller_namespace'):
- tiller_args = ('--tiller-namespace', tiller_kwargs['tiller_namespace'])
+def _helm_cmd(*args, **kwargs):
+ if kwargs.get('tiller_host'):
+ addtl_args = ('--host', kwargs['tiller_host'])
+ elif kwargs.get('tiller_namespace'):
+ addtl_args = ('--tiller-namespace', kwargs['tiller_namespace'])
else:
- tiller_args = ()
- env = {'HELM_HOME': HELM_HOME}
- if tiller_kwargs.get('kube_config'):
- env['KUBECONFIG'] = tiller_kwargs['kube_config']
- if tiller_kwargs.get('gce_service_token'):
+ addtl_args = ()
+
+ if kwargs.get('helm_home'):
+ addtl_args = addtl_args + ('--home', kwargs['helm_home'])
+
+ env = {}
+ if kwargs.get('kube_config'):
+ env['KUBECONFIG'] = kwargs['kube_config']
+ if kwargs.get('gce_service_token'):
env['GOOGLE_APPLICATION_CREDENTIALS'] = \
- tiller_kwargs['gce_service_token']
+ kwargs['gce_service_token']
return {
- 'cmd': ('helm',) + tiller_args + args,
+ 'cmd': ('helm',) + addtl_args + args,
'env': env,
}
@@ -42,7 +44,7 @@
"url": split_string[1].strip()
}
-def list_repos():
+def list_repos(**kwargs):
'''
Get the result of running `helm repo list` on the target minion, formatted
as a list of dicts with two keys:
@@ -50,7 +52,7 @@
* name: the name with which the repository is registered
* url: the url registered for the repository
'''
- cmd = _helm_cmd('repo', 'list')
+ cmd = _helm_cmd('repo', 'list', **kwargs)
result = __salt__['cmd.run_stdout'](**cmd)
if result is None:
return result
@@ -61,7 +63,7 @@
repo['name']: repo['url'] for repo in [_parse_repo(line) for line in result]
}
-def add_repo(name, url):
+def add_repo(name, url, **kwargs):
'''
Register the repository located at the supplied url with the supplied name.
Note that re-using an existing name will overwrite the repository url for
@@ -73,13 +75,13 @@
url
The url for the chart repository.
'''
- cmd = _helm_cmd('repo', 'add', name, url)
+ cmd = _helm_cmd('repo', 'add', name, url, **kwargs)
ret = __salt__['cmd.run_all'](**cmd)
if ret['retcode'] != 0:
raise CommandExecutionError(ret['stderr'])
return ret['stdout']
-def remove_repo(name):
+def remove_repo(name, **kwargs):
'''
Remove the repository from the Helm client registered with the supplied
name.
@@ -87,13 +89,13 @@
name
The name (as registered with the Helm client) for the repository to remove
'''
- cmd = _helm_cmd('repo', 'remove', name)
+ cmd = _helm_cmd('repo', 'remove', name, **kwargs)
ret = __salt__['cmd.run_all'](**cmd)
if ret['retcode'] != 0:
raise CommandExecutionError(ret['stderr'])
return ret['stdout']
-def manage_repos(present={}, absent=[], exclusive=False):
+def manage_repos(present={}, absent=[], exclusive=False, **kwargs):
'''
Manage the repositories registered with the Helm client's local cache.
@@ -147,7 +149,7 @@
`present` parameter will be registered with the Helm client. Defaults to
False.
'''
- existing_repos = list_repos()
+ existing_repos = list_repos(**kwargs)
result = {
"already_present": [],
"added": [],
@@ -169,7 +171,7 @@
result['added'].append({
'name': name,
'url': url,
- 'stdout': add_repo(name, url)
+ 'stdout': add_repo(name, url, **kwargs)
})
existing_repos = {
n: u for (n, u) in existing_repos.iteritems() if name != n
@@ -201,7 +203,10 @@
continue
try:
- result['removed'].append({ 'name': name, 'stdout': remove_repo(name) })
+ result['removed'].append({
+ 'name': name,
+ 'stdout': remove_repo(name, **kwargs)
+ })
except CommandExecutionError as e:
result['failed'].append({
"type": "removal", "name": name, "error": '%s' % e
@@ -209,33 +214,36 @@
return result
-def update_repos():
+def update_repos(**kwargs):
'''
Ensures the local helm repository cache for each repository is up to date.
Proxies the `helm repo update` command.
'''
- cmd = _helm_cmd('repo', 'update')
+ cmd = _helm_cmd('repo', 'update', **kwargs)
return __salt__['cmd.run_stdout'](**cmd)
def release_exists(name, namespace='default',
tiller_namespace='kube-system', tiller_host=None,
- kube_config=None, gce_service_token=None):
+ kube_config=None, gce_service_token=None, helm_home=None):
cmd = _helm_cmd('list', '--short', '--all', '--namespace', namespace, name,
tiller_namespace=tiller_namespace, tiller_host=tiller_host,
kube_config=kube_config,
- gce_service_token=gce_service_token)
+ gce_service_token=gce_service_token,
+ helm_home=helm_home)
return __salt__['cmd.run_stdout'](**cmd) == name
def release_create(name, chart_name, namespace='default',
version=None, values=None,
tiller_namespace='kube-system', tiller_host=None,
- kube_config=None, gce_service_token=None):
- tiller_args = {
+ kube_config=None, gce_service_token=None,
+ helm_home=None):
+ kwargs = {
'tiller_namespace': tiller_namespace,
'tiller_host': tiller_host,
'kube_config': kube_config,
'gce_service_token': gce_service_token,
+ 'helm_home': helm_home
}
args = []
if version is not None:
@@ -243,7 +251,7 @@
if values is not None:
args += ['--values', '/dev/stdin']
cmd = _helm_cmd('install', '--namespace', namespace,
- '--name', name, chart_name, *args, **tiller_args)
+ '--name', name, chart_name, *args, **kwargs)
if values is not None:
cmd['stdin'] = yaml.serialize(values, default_flow_style=False)
LOG.debug('Creating release with args: %s', cmd)
@@ -251,23 +259,25 @@
def release_delete(name, tiller_namespace='kube-system', tiller_host=None,
- kube_config=None, gce_service_token=None):
+ kube_config=None, gce_service_token=None, helm_home=None):
cmd = _helm_cmd('delete', '--purge', name,
tiller_namespace=tiller_namespace, tiller_host=tiller_host,
kube_config=kube_config,
- gce_service_token=gce_service_token)
+ gce_service_token=gce_service_token,
+ helm_home=helm_home)
return ok_or_output(cmd, 'Failed to delete release "{}"'.format(name))
def release_upgrade(name, chart_name, namespace='default',
version=None, values=None,
tiller_namespace='kube-system', tiller_host=None,
- kube_config=None, gce_service_token=None):
- tiller_args = {
+ kube_config=None, gce_service_token=None, helm_home=None):
+ kwargs = {
'tiller_namespace': tiller_namespace,
'tiller_host': tiller_host,
'kube_config': kube_config,
'gce_service_token': gce_service_token,
+ 'helm_home': helm_home
}
args = []
if version is not None:
@@ -275,7 +285,7 @@
if values is not None:
args += ['--values', '/dev/stdin']
cmd = _helm_cmd('upgrade', '--namespace', namespace,
- name, chart_name, *args, **tiller_args)
+ name, chart_name, *args, **kwargs)
if values is not None:
cmd['stdin'] = yaml.serialize(values, default_flow_style=False)
LOG.debug('Upgrading release with args: %s', cmd)
@@ -283,9 +293,10 @@
def get_values(name, tiller_namespace='kube-system', tiller_host=None,
- kube_config=None, gce_service_token=None):
+ kube_config=None, gce_service_token=None, helm_home=None):
cmd = _helm_cmd('get', 'values', '--all', name,
tiller_namespace=tiller_namespace, tiller_host=tiller_host,
kube_config=kube_config,
- gce_service_token=gce_service_token)
+ gce_service_token=gce_service_token,
+ helm_home=helm_home)
return yaml.deserialize(__salt__['cmd.run_stdout'](**cmd))