summaryrefslogtreecommitdiffstats
path: root/clover/spinnaker/lib/halyard_base.py
diff options
context:
space:
mode:
Diffstat (limited to 'clover/spinnaker/lib/halyard_base.py')
-rwxr-xr-xclover/spinnaker/lib/halyard_base.py157
1 files changed, 157 insertions, 0 deletions
diff --git a/clover/spinnaker/lib/halyard_base.py b/clover/spinnaker/lib/halyard_base.py
new file mode 100755
index 0000000..7245d6a
--- /dev/null
+++ b/clover/spinnaker/lib/halyard_base.py
@@ -0,0 +1,157 @@
+#!/bin/python
+
+
+import requests
+import json
+import time
+
+base_url="http://spin-halyard.spinnaker:8064/v1"
+namespace= 'spinnaker'
+headers = {'content-type': 'application/json; charset=UTF-8'}
+debug = False
+
+def get(url):
+ result = requests.get(url)
+ return result.json()
+
+def post(url, data = None, headers = None):
+ result = requests.post(url, data=data, headers=headers)
+ return result.json()
+
+def put(url, data = None, headers = None):
+ result = requests.put(url, data=data, headers=headers)
+ return result.json()
+
+def delete(url):
+ result = requests.delete(url)
+ return result.json()
+
+def print_dict_info(dict_info, debug = False):
+ if dict_info == None:
+ return None
+
+ if debug == True:
+ for v,k in dict_info.items():
+ print('{v}:{k}'.format(v = v, k = k))
+ else:
+ print dict_info.get('name')
+ print dict_info.get('state')
+
+def is_account_exist(provider, accountname):
+ exist_accounts = list_accounts(provider)
+ if accountname in exist_accounts:
+ print "account exists"
+ return True
+ print "account doesn't exist"
+ return False
+
+def get_task_info(uuid):
+ if uuid == None:
+ return None
+ url = base_url + "/tasks/" + uuid + "/"
+ result = get(url)
+ return result
+
+def wait_task_successful(uuid):
+ flag = ""
+ while True:
+ resp = get_task_info(uuid)
+ state = resp.get('state')
+ if flag != state:
+ print_dict_info(resp, debug)
+ flag = state
+ if state == "SUCCEEDED":
+ return "SUCCEEDED", resp
+ if state == "FAILED":
+ return "FAILED", resp
+ if resp.get('timedOut'):
+ return "TimeOut", resp
+
+def get_current_deployment():
+ '''get the current deployment and check the state'''
+
+ url = base_url + "/config/currentDeployment"
+ result = get(url)
+ uuid = result.get('uuid')
+ task_info = get_task_info(uuid)
+ print_dict_info(task_info, debug)
+
+ return task_info
+
+def apply_deploy():
+ """
+ after using api to config halyard, it need ruan apply deploy.
+ """
+ prep_url = base_url + "/config/deployments/default/prep/?validate=true"
+ deploy_url = base_url + "/config/deployments/default/deploy/?validate=false"
+ data='""'
+ result = post(prep_url, data=data, headers=headers)
+ uuid = result.get('uuid')
+ result, task_info = wait_task_successful(uuid)
+ if result != "SUCCEEDED":
+ return result
+ result = post(deploy_url, data=data, headers=headers)
+ uuid = result.get('uuid')
+ result, task_info = wait_task_successful(uuid)
+ return result
+
+def list_accounts(provider):
+ """
+ According to the provider, list all accounts
+ """
+ url = base_url + "/config/deployments/default/providers/" + \
+ provider + "/?validate=true"
+ resp = get(url)
+ uuid = resp.get('uuid')
+ result, task_info = wait_task_successful(uuid)
+ if result != "SUCCEEDED":
+ print "Get account failed"
+ return None
+ accounts = task_info.get('response').get('responseBody').get('accounts')
+ account_list = []
+ for account in accounts:
+ account_name = account.get('name')
+ account_list.append(account_name)
+ return account_list
+
+def enable_provider(provider, data='true'):
+ """
+ if needs to add a provider, it is necessary to enable the provider
+ """
+ url = base_url + "/config/deployments/default/providers/" + \
+ provider + "/enabled/?validate=true"
+ resp = put(url,data=data,headers=headers)
+ uuid = resp.get('uuid')
+ result, task_info = wait_task_successful(uuid)
+ return result
+
+def add_account(provider, data):
+ url = base_url + "/config/deployments/default/providers/" + \
+ provider + "/accounts/?validate=true"
+
+ enable_provider(provider)
+
+ resp = post(url, data=json.dumps(data), headers=headers)
+ uuid = resp.get('uuid')
+ result, task_info = wait_task_successful(uuid)
+ if result != "SUCCEEDED":
+ print "Add account failed"
+ return result
+ apply_result = apply_deploy()
+ if apply_result == "SUCCEEDED":
+ print "Deployment successful"
+ else:
+ print "Deployment failed"
+ return apply_result
+
+def delete_account(provider, accountname):
+ if not is_account_exist(provider, accountname):
+ return "FAILED"
+ url = base_url + "/config/deployments/default/providers/" + \
+ provider + "/accounts/account/" + accountname + "/?validate=true"
+ resp = delete(url)
+ uuid = resp.get('uuid')
+ result, task_info = wait_task_successful(uuid)
+
+ return result
+