Newer
Older
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
#!/usr/bin/env python3
# coding=utf-8
"""clone gocd template using API.
tested against
- go-server 19.7
- using gocd v4 api
see https://api.gocd.org/19.7.0/#get-template-config
"""
import logging
import argparse
import sys
import json
import requests
logger = logging.getLogger(__name__)
def main():
parser = argparse.ArgumentParser(description='\
clone gocd template using gocd API')
parser.add_argument('-g', '--go-server-url', required=True,
help='go server url, usually ends with /go/')
parser.add_argument('-u', '--user', required=True, help='API user')
parser.add_argument('-p', '--password', required=True, help='API password')
parser.add_argument('-v', '--verbose', help='show debug log')
parser.add_argument('source_template')
parser.add_argument('target_template')
args = parser.parse_args()
logging.basicConfig(
format='%(asctime)s %(name)s %(levelname)-8s %(message)s',
level=logging.DEBUG if args.verbose else logging.INFO)
auth = (args.user, args.password)
go_server_url = args.go_server_url
if not go_server_url.endswith("/"):
go_server_url += "/"
r = requests.get(
'%sapi/admin/templates/%s' % (go_server_url, args.source_template),
auth=auth,
headers={"Accept": "application/vnd.go.cd.v4+json"})
if r.status_code != 200:
logger.error("get source_template %s failed: %s %s",
args.source_template, r.status_code, r.content)
sys.exit(1)
source_template_obj = r.json()
target_template_obj = {
"name": args.target_template,
"stages": source_template_obj['stages'],
}
body = json.dumps(target_template_obj, indent=4)
logger.debug("new template: %s", body)
r = requests.post(go_server_url + 'api/admin/templates',
body,
auth=auth,
headers={"Accept": "application/vnd.go.cd.v4+json",
"Content-Type": "application/json",
"X-GoCD-Confirm": 'true'})
if r.status_code != 200:
logger.error("create target_template %s failed: %s %s",
args.target_template, r.status_code, r.content)
sys.exit(1)
logger.info("template %s created", args.target_template)
if __name__ == '__main__':
main()