summaryrefslogtreecommitdiffstats
path: root/helm
diff options
context:
space:
mode:
Diffstat (limited to 'helm')
-rw-r--r--helm/plugin/tasks.py206
-rw-r--r--helm/plugin/workflows.py39
-rw-r--r--helm/setup.py5
3 files changed, 147 insertions, 103 deletions
diff --git a/helm/plugin/tasks.py b/helm/plugin/tasks.py
index 5fda295..9d03fba 100644
--- a/helm/plugin/tasks.py
+++ b/helm/plugin/tasks.py
@@ -13,7 +13,7 @@
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
-#============LICENSE_END============================================
+# ============LICENSE_END============================================
from cloudify.decorators import operation
import shutil
@@ -37,7 +37,6 @@ from cloudify import exceptions
from cloudify.exceptions import NonRecoverableError
-
def execute_command(_command):
ctx.logger.debug('_command {0}.'.format(_command))
@@ -71,71 +70,98 @@ def configure_admin_conf():
gid = grp.getgrnam('docker').gr_gid
admin_file_dest = os.path.join(os.path.expanduser('~'), 'admin.conf')
- execute_command('sudo cp {0} {1}'.format('/etc/kubernetes/admin.conf', admin_file_dest))
+ execute_command(
+ 'sudo cp {0} {1}'.format('/etc/kubernetes/admin.conf', admin_file_dest))
execute_command('sudo chown {0}:{1} {2}'.format(uid, gid, admin_file_dest))
with open(os.path.join(os.path.expanduser('~'), '.bashrc'), 'a') as outfile:
outfile.write('export KUBECONFIG=$HOME/admin.conf')
os.environ['KUBECONFIG'] = admin_file_dest
+
def get_current_helm_value(chart_name):
- tiller_host= str(ctx.node.properties['tiller-server-ip'])+':'+str(ctx.node.properties['tiller-server-port'])
- config_dir_root= str(ctx.node.properties['config-dir'])
- config_dir=config_dir_root+str(ctx.deployment.id)+'/'
+ tiller_host = str(ctx.node.properties['tiller-server-ip']) + ':' + str(
+ ctx.node.properties['tiller-server-port'])
+ config_dir_root = str(ctx.node.properties['config-dir'])
+ config_dir = config_dir_root + str(ctx.deployment.id) + '/'
if str_to_bool(ctx.node.properties['tls-enable']):
- getValueCommand=subprocess.Popen(["helm", "get","values","-a",chart_name,'--host',tiller_host,'--tls','--tls-ca-cert',config_dir+'ca.cert.pem','--tls-cert',config_dir+'helm.cert.pem','--tls-key',config_dir+'helm.key.pem'], stdout=subprocess.PIPE)
+ getValueCommand = subprocess.Popen(
+ ["helm", "get", "values", "-a", chart_name, '--host', tiller_host,
+ '--tls', '--tls-ca-cert', config_dir + 'ca.cert.pem', '--tls-cert',
+ config_dir + 'helm.cert.pem', '--tls-key',
+ config_dir + 'helm.key.pem'], stdout=subprocess.PIPE)
else:
- getValueCommand=subprocess.Popen(["helm", "get","values","-a",chart_name,'--host',tiller_host], stdout=subprocess.PIPE)
- value=getValueCommand.communicate()[0]
- valueMap= {}
+ getValueCommand = subprocess.Popen(
+ ["helm", "get", "values", "-a", chart_name, '--host', tiller_host],
+ stdout=subprocess.PIPE)
+ value = getValueCommand.communicate()[0]
+ valueMap = {}
valueMap = yaml.safe_load(value)
ctx.instance.runtime_properties['current-helm-value'] = valueMap
+
def get_helm_history(chart_name):
- tiller_host= str(ctx.node.properties['tiller-server-ip'])+':'+str(ctx.node.properties['tiller-server-port'])
- config_dir_root= str(ctx.node.properties['config-dir'])
- config_dir=config_dir_root+str(ctx.deployment.id)+'/'
+ tiller_host = str(ctx.node.properties['tiller-server-ip']) + ':' + str(
+ ctx.node.properties['tiller-server-port'])
+ config_dir_root = str(ctx.node.properties['config-dir'])
+ config_dir = config_dir_root + str(ctx.deployment.id) + '/'
if str_to_bool(ctx.node.properties['tls-enable']):
- getHistoryCommand=subprocess.Popen(["helm", "history",chart_name,'--host',tiller_host,'--tls','--tls-ca-cert',config_dir+'ca.cert.pem','--tls-cert',config_dir+'helm.cert.pem','--tls-key',config_dir+'helm.key.pem'], stdout=subprocess.PIPE)
+ getHistoryCommand = subprocess.Popen(
+ ["helm", "history", chart_name, '--host', tiller_host, '--tls',
+ '--tls-ca-cert', config_dir + 'ca.cert.pem', '--tls-cert',
+ config_dir + 'helm.cert.pem', '--tls-key',
+ config_dir + 'helm.key.pem'], stdout=subprocess.PIPE)
else:
- getHistoryCommand=subprocess.Popen(["helm", "history",chart_name,'--host',tiller_host], stdout=subprocess.PIPE)
- history=getHistoryCommand.communicate()[0]
- history_start_output = [line.strip() for line in history.split('\n') if line.strip()]
- for index in range(len(history_start_output)):
- history_start_output[index]=history_start_output[index].replace('\t',' ')
+ getHistoryCommand = subprocess.Popen(
+ ["helm", "history", chart_name, '--host', tiller_host],
+ stdout=subprocess.PIPE)
+ history = getHistoryCommand.communicate()[0]
+ history_start_output = [line.strip() for line in history.split('\n') if
+ line.strip()]
+ for index in range(len(history_start_output)):
+ history_start_output[index] = history_start_output[index].replace('\t',
+ ' ')
ctx.instance.runtime_properties['helm-history'] = history_start_output
+
def mergedict(dict1, dict2):
for key in dict2.keys():
if key not in dict1.keys():
dict1[key] = dict2[key]
else:
- if type(dict1[key]) == dict and type(dict2[key]) == dict :
+ if type(dict1[key]) == dict and type(dict2[key]) == dict:
mergedict(dict1[key], dict2[key])
else:
dict1[key] = dict2[key]
+
def tls():
if str_to_bool(ctx.node.properties['tls-enable']):
- config_dir_root= str(ctx.node.properties['config-dir'])
- config_dir=config_dir_root+str(ctx.deployment.id)+'/'
- tls_command= ' --tls --tls-ca-cert '+config_dir+'ca.cert.pem --tls-cert '+config_dir+'helm.cert.pem --tls-key '+config_dir+'helm.key.pem '
+ config_dir_root = str(ctx.node.properties['config-dir'])
+ config_dir = config_dir_root + str(ctx.deployment.id) + '/'
+ tls_command = ' --tls --tls-ca-cert ' + config_dir + 'ca.cert.pem ' \
+ '--tls-cert ' + \
+ config_dir + 'helm.cert.pem --tls-key ' + config_dir + \
+ 'helm.key.pem '
ctx.logger.debug(tls_command)
return tls_command
- else :
+ else:
return ''
+
def tiller_host():
- tiller_host= ' --host '+str(ctx.node.properties['tiller-server-ip'])+':'+str(ctx.node.properties['tiller-server-port'])+' '
+ tiller_host = ' --host ' + str(
+ ctx.node.properties['tiller-server-ip']) + ':' + str(
+ ctx.node.properties['tiller-server-port']) + ' '
ctx.logger.debug(tiller_host)
return tiller_host
def str_to_bool(s):
- s=str(s)
+ s = str(s)
if s == 'True' or s == 'true':
return True
- elif s == 'False' or s== 'false':
+ elif s == 'False' or s == 'false':
return False
else:
raise False
@@ -144,54 +170,57 @@ def str_to_bool(s):
@operation
def config(**kwargs):
# create helm value file on K8s master
- #configPath = ctx.node.properties['config-path']
+ # configPath = ctx.node.properties['config-path']
configJson = str(ctx.node.properties['config'])
configUrl = str(ctx.node.properties['config-url'])
configUrlInputFormat = str(ctx.node.properties['config-format'])
- runtime_config = str(ctx.node.properties['runtime-config']) #json
+ runtime_config = str(ctx.node.properties['runtime-config']) # json
componentName = ctx.node.properties['component-name']
- config_dir_root= str(ctx.node.properties['config-dir'])
+ config_dir_root = str(ctx.node.properties['config-dir'])
stable_repo_url = str(ctx.node.properties['stable-repo-url'])
- ctx.logger.debug("debug "+ configJson + runtime_config )
- #load input config
- config_dir=config_dir_root+str(ctx.deployment.id)
+ ctx.logger.debug("debug " + configJson + runtime_config)
+ # load input config
+ config_dir = config_dir_root + str(ctx.deployment.id)
try:
os.makedirs(config_dir)
except OSError as e:
if e.errno != errno.EEXIST:
raise
- ctx.logger.debug('tls-enable type '+str(type(str_to_bool(ctx.node.properties['tls-enable']))) )
- #create TLS cert files
+ ctx.logger.debug('tls-enable type ' + str(
+ type(str_to_bool(ctx.node.properties['tls-enable']))))
+
+ # create TLS cert files
if str_to_bool(ctx.node.properties['tls-enable']):
- ctx.logger.debug('tls enable' )
+ ctx.logger.debug('tls enable')
ca_value = ctx.node.properties['ca']
cert_value = ctx.node.properties['cert']
key_value = ctx.node.properties['key']
- ca= open(config_dir+'/ca.cert.pem',"w+")
+ ca = open(config_dir + '/ca.cert.pem', "w+")
ca.write(ca_value)
ca.close()
- cert= open(config_dir+'/helm.cert.pem',"w+")
+ cert = open(config_dir + '/helm.cert.pem', "w+")
cert.write(cert_value)
cert.close()
- key= open(config_dir+'/helm.key.pem',"w+")
+ key = open(config_dir + '/helm.key.pem', "w+")
key.write(key_value)
key.close()
else:
- ctx.logger.debug('tls disable' )
+ ctx.logger.debug('tls disable')
# create helm value.yaml file
- configPath=config_dir_root+str(ctx.deployment.id)+'/'+componentName+'.yaml'
+ configPath = config_dir_root + str(
+ ctx.deployment.id) + '/' + componentName + '.yaml'
ctx.logger.debug(configPath)
- configObj ={}
+ configObj = {}
if configJson == '' and configUrl == '':
ctx.logger.debug("Will use default HELM value")
elif configJson == '' and configUrl != '':
response = urllib2.urlopen(configUrl)
if configUrlInputFormat == 'json':
- configObj = json.load(response)
+ configObj = json.load(response)
elif configUrlInputFormat == 'yaml':
- configObj = yaml.load(response)
+ configObj = yaml.load(response)
else:
raise NonRecoverableError("Unable to get config input format.")
elif configJson != '' and configUrl == '':
@@ -204,19 +233,18 @@ def config(**kwargs):
if runtime_config == '':
ctx.logger.debug("there is no runtime config value")
else:
- runtime_config_obj= json.loads(runtime_config)
- mergedict(configObj,runtime_config_obj)
+ runtime_config_obj = json.loads(runtime_config)
+ mergedict(configObj, runtime_config_obj)
with open(configPath, 'w') as outfile:
yaml.safe_dump(configObj, outfile, default_flow_style=False)
- output = execute_command('helm init --client-only --stable-repo-url '+stable_repo_url)
- if output == False :
+ output = execute_command(
+ 'helm init --client-only --stable-repo-url ' + stable_repo_url)
+ if output == False:
raise NonRecoverableError("helm init failed")
-
-
@operation
def start(**kwargs):
# install the ONAP Helm chart
@@ -224,88 +252,100 @@ def start(**kwargs):
chartRepo = ctx.node.properties['chart-repo-url']
componentName = ctx.node.properties['component-name']
chartVersion = ctx.node.properties['chart-version']
- config_dir_root= str(ctx.node.properties['config-dir'])
- configPath=config_dir_root+str(ctx.deployment.id)+'/'+componentName+'.yaml'
+ config_dir_root = str(ctx.node.properties['config-dir'])
+ configPath = config_dir_root + str(
+ ctx.deployment.id) + '/' + componentName + '.yaml'
namespace = ctx.node.properties['namespace']
configJson = str(ctx.node.properties['config'])
configUrl = str(ctx.node.properties['config-url'])
- runtimeconfigJson = str(ctx.node.properties['runtime-config'])
-
+ runtimeconfigJson = str(ctx.node.properties['runtime-config'])
chart = chartRepo + "/" + componentName + "-" + chartVersion + ".tgz"
chartName = namespace + "-" + componentName
if configJson == '' and runtimeconfigJson == '' and configUrl == '':
- installCommand = 'helm install '+ chart + ' --name ' + chartName + ' --namespace ' + namespace+tiller_host()+tls()
+ installCommand = 'helm install ' + chart + ' --name ' + chartName + \
+ ' --namespace ' + namespace + tiller_host() + tls()
else:
- installCommand = 'helm install ' + chart + ' --name ' + chartName + ' --namespace ' + namespace + ' -f '+ configPath +tiller_host()+tls()
+ installCommand = 'helm install ' + chart + ' --name ' + chartName + \
+ ' --namespace ' + namespace + ' -f ' + configPath + \
+ tiller_host() + tls()
- output =execute_command(installCommand)
- if output == False :
- return ctx.operation.retry(message='helm install failed, re-try after 5 second ',
- retry_after=5)
+ output = execute_command(installCommand)
+ if output == False:
+ return ctx.operation.retry(
+ message='helm install failed, re-try after 5 second ',
+ retry_after=5)
get_current_helm_value(chartName)
get_helm_history(chartName)
+
@operation
def stop(**kwargs):
# delete the ONAP helm chart
- #configure_admin_conf()
+ # configure_admin_conf()
# get properties from node
namespace = ctx.node.properties['namespace']
component = ctx.node.properties['component-name']
chartName = namespace + "-" + component
- config_dir_root= str(ctx.node.properties['config-dir'])
+ config_dir_root = str(ctx.node.properties['config-dir'])
# Delete helm chart
- command = 'helm delete --purge '+ chartName+tiller_host()+tls()
- output =execute_command(command)
- config_dir=config_dir_root+str(ctx.deployment.id)
+ command = 'helm delete --purge ' + chartName + tiller_host() + tls()
+ output = execute_command(command)
+ config_dir = config_dir_root + str(ctx.deployment.id)
shutil.rmtree(config_dir)
- if output == False :
+ if output == False:
raise NonRecoverableError("helm delete failed")
+
@operation
def upgrade(**kwargs):
# upgrade the helm chart
componentName = ctx.node.properties['component-name']
- config_dir_root= str(ctx.node.properties['config-dir'])
- configPath=config_dir_root+str(ctx.deployment.id)+'/'+componentName+'.yaml'
+ config_dir_root = str(ctx.node.properties['config-dir'])
+ configPath = config_dir_root + str(
+ ctx.deployment.id) + '/' + componentName + '.yaml'
componentName = ctx.node.properties['component-name']
namespace = ctx.node.properties['namespace']
configJson = kwargs['config']
- chartRepo = kwargs['chart_repo']
+ chartRepo = kwargs['chart_repo']
chartVersion = kwargs['chart_version']
ctx.logger.debug('debug ' + str(configJson))
chartName = namespace + "-" + componentName
- chart=chartRepo + "/" + componentName + "-" + chartVersion + ".tgz"
+ chart = chartRepo + "/" + componentName + "-" + chartVersion + ".tgz"
if str(configJson) == '':
- upgradeCommand = 'helm upgrade '+ chartName + ' '+ chart+tiller_host()+tls()
+ upgradeCommand = 'helm upgrade ' + chartName + ' ' + chart + \
+ tiller_host() + tls()
else:
with open(configPath, 'w') as outfile:
yaml.safe_dump(configJson, outfile, default_flow_style=False)
- #configure_admin_conf()
- upgradeCommand = 'helm upgrade '+ chartName + ' '+ chart + ' -f ' + configPath+tiller_host()+tls()
- output=execute_command(upgradeCommand)
- if output == False :
- return ctx.operation.retry(message='helm upgrade failed, re-try after 5 second ',
- retry_after=5)
+ # configure_admin_conf()
+ upgradeCommand = 'helm upgrade ' + chartName + ' ' + chart + ' -f ' +\
+ configPath + tiller_host() + tls()
+ output = execute_command(upgradeCommand)
+ if output == False:
+ return ctx.operation.retry(
+ message='helm upgrade failed, re-try after 5 second ',
+ retry_after=5)
get_current_helm_value(chartName)
get_helm_history(chartName)
+
@operation
def rollback(**kwargs):
# rollback to some revision
componentName = ctx.node.properties['component-name']
namespace = ctx.node.properties['namespace']
revision = kwargs['revision']
- #configure_admin_conf()
+ # configure_admin_conf()
chartName = namespace + "-" + componentName
- rollbackCommand = 'helm rollback '+ chartName + ' '+ revision+tiller_host()+tls()
- output=execute_command(rollbackCommand)
- if output == False :
- return ctx.operation.retry(message='helm rollback failed, re-try after 5 second ',
- retry_after=5)
+ rollbackCommand = 'helm rollback ' + chartName + ' ' + revision + tiller_host() + tls()
+ output = execute_command(rollbackCommand)
+ if output == False:
+ return ctx.operation.retry(
+ message='helm rollback failed, re-try after 5 second ',
+ retry_after=5)
get_current_helm_value(chartName)
get_helm_history(chartName)
diff --git a/helm/plugin/workflows.py b/helm/plugin/workflows.py
index 7dc8272..a37293e 100644
--- a/helm/plugin/workflows.py
+++ b/helm/plugin/workflows.py
@@ -13,7 +13,7 @@
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
-#============LICENSE_END============================================
+# ============LICENSE_END============================================
from cloudify.decorators import workflow
from cloudify.workflows import ctx
@@ -22,8 +22,10 @@ import urllib2
import json
import yaml
+
@workflow
-def upgrade(node_instance_id,config_json,config_url,config_format,chartVersion,chartRepo,**kwargs):
+def upgrade(node_instance_id, config_json, config_url, config_format,
+ chartVersion, chartRepo, **kwargs):
node_instance = ctx.get_node_instance(node_instance_id)
if not node_instance_id:
@@ -33,29 +35,30 @@ def upgrade(node_instance_id,config_json,config_url,config_format,chartVersion,c
kwargs = {}
if config_json == '' and config_url == '':
- kwargs['config'] = config_json
+ kwargs['config'] = config_json
elif config_json == '' and config_url != '':
- response = urllib2.urlopen(config_url)
- if config_format == 'json':
- kwargs['config'] = json.load(response)
- elif config_format == 'yaml':
- kwargs['config'] = yaml.load(response)
- else:
- raise NonRecoverableError("Unable to get config input format")
+ response = urllib2.urlopen(config_url)
+ if config_format == 'json':
+ kwargs['config'] = json.load(response)
+ elif config_format == 'yaml':
+ kwargs['config'] = yaml.load(response)
+ else:
+ raise NonRecoverableError("Unable to get config input format")
elif config_json != '' and config_url == '':
- kwargs['config'] = config_json
+ kwargs['config'] = config_json
+
else:
raise NonRecoverableError("Unable to get Json config input")
- kwargs['chart_version'] = str(chartVersion)
- kwargs['chart_repo'] = str(chartRepo)
- operation_args = {'operation': 'upgrade',}
- operation_args['kwargs'] = kwargs
- node_instance.execute_operation(**operation_args)
+kwargs['chart_version'] = str(chartVersion)
+kwargs['chart_repo'] = str(chartRepo)
+operation_args = {'operation': 'upgrade', }
+operation_args['kwargs'] = kwargs
+node_instance.execute_operation(**operation_args)
@workflow
-def rollback(node_instance_id,revision,**kwargs):
+def rollback(node_instance_id, revision, **kwargs):
node_instance = ctx.get_node_instance(node_instance_id)
if not node_instance_id:
@@ -65,6 +68,6 @@ def rollback(node_instance_id,revision,**kwargs):
kwargs = {}
kwargs['revision'] = str(revision)
- operation_args = {'operation': 'rollback',}
+ operation_args = {'operation': 'rollback', }
operation_args['kwargs'] = kwargs
node_instance.execute_operation(**operation_args)
diff --git a/helm/setup.py b/helm/setup.py
index 2a60585..c15d98e 100644
--- a/helm/setup.py
+++ b/helm/setup.py
@@ -13,7 +13,7 @@
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
-#============LICENSE_END============================================
+# ============LICENSE_END============================================
from setuptools import setup
@@ -27,7 +27,8 @@ setup(
version='2.3.0',
author='Nicolas Hu(AT&T)',
author_email='jh245g@att.com',
- description='This plugin will install/uninstall/upgrade/rollback helm charts of ONAP components. ',
+ description='This plugin will install/uninstall/upgrade/rollback helm '
+ 'charts of ONAP components. ',
# This must correspond to the actual packages in the plugin.
packages=['plugin'],