1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
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
|