#!/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 dependencies for this script: apt install -y python3 python3-requests """ 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()