summaryrefslogtreecommitdiff
path: root/icktool
diff options
context:
space:
mode:
authorLars Wirzenius <liw@liw.fi>2018-04-20 10:11:59 +0300
committerLars Wirzenius <liw@liw.fi>2018-04-20 10:11:59 +0300
commit0d0952cff08d2e034032b5b94eccb1502d5f0165 (patch)
treebb36ff6369d28dfa822f0ad020952dfa5f395503 /icktool
parent18420ae2812c7efa6c0aaaa66a93896db7d9d6d7 (diff)
downloadick2-0d0952cff08d2e034032b5b94eccb1502d5f0165.tar.gz
Change: rename icktool2 to icktool, update NEWS
Diffstat (limited to 'icktool')
-rwxr-xr-xicktool136
1 files changed, 10 insertions, 126 deletions
diff --git a/icktool b/icktool
index 7890f7f..20140ee 100755
--- a/icktool
+++ b/icktool
@@ -18,10 +18,13 @@
import configparser
import json
import logging
-import os
import sys
+import time
+import apifw
import cliapp
+import Crypto.PublicKey.RSA
+import requests
import yaml
import ick2
@@ -83,7 +86,6 @@ class Icktool(cliapp.Application):
['secrets'],
'use URL as the controller base URL',
metavar='URL',
- default=os.path.expanduser('~/.config/icktool/credentials.conf'),
)
self.settings.boolean(
@@ -125,16 +127,6 @@ class Icktool(cliapp.Application):
version = api.get_version()
self._prettyson(version)
- def cmd_trigger(self, args):
- project_name = args[0]
- pipeline_name = args[1]
-
- token = self._new_token()
- api = self._new_api()
- api.set_token(token)
- result = api.trigger(project_name, pipeline_name)
- self._prettyson(result)
-
def cmd_make_it_so(self, argv):
obj = self._read_object()
@@ -142,22 +134,15 @@ class Icktool(cliapp.Application):
api = self._new_api()
api.set_token(token)
- self._create_resources(
- api, '/projects', 'project', obj.get('projects', []))
- self._create_resources(
- api, '/pipelines', 'pipeline', obj.get('pipelines', []))
+ self._create_resources(api, '/projects', obj.get('projects', []))
+ self._create_resources(api, '/pipelines', obj.get('pipelines', []))
def _read_object(self):
return yaml.load(sys.stdin)
- def _create_resources(self, api, path, field, objs):
+ def _create_resources(self, api, path, objs):
for obj in objs:
- try:
- api.create(path, obj)
- except ick2.HttpError:
- if field in obj:
- obj_path = '{}/{}'.format(path, obj[field])
- api.update(obj_path, obj)
+ api.create(path, obj)
def cmd_show(self, args):
token = self._new_token()
@@ -173,76 +158,6 @@ class Icktool(cliapp.Application):
objs = api.show('/' + kind)
self._prettyson(objs)
- def cmd_status(self, args):
- token = self._new_token()
- api = self._new_api()
- api.set_token(token)
-
- rows = []
- projects = api.show('/projects')['projects']
- projects = sorted(projects, key=lambda p: p.get('project'))
-
- builds = api.show('/builds')['builds']
-
- for project in projects:
- pipeline_names = sorted(project['pipelines'])
- for pipeline_name in pipeline_names:
- build = self._get_latest_build(
- project['project'], pipeline_name, builds)
-
- if build is None:
- build = {
- 'build_id': 'never',
- 'log': 'none',
- 'status': 'n/a',
- }
-
- status = api.get_build_status(
- project['project'], pipeline_name)
-
- row = {
- 'project': project['project'],
- 'pipeline': pipeline_name,
- 'build_id': build['build_id'],
- 'status': status['status'],
- 'build_status': build['status'],
- 'log': build['log'],
- }
- rows.append(row)
- self._pretty_table(
- rows, ['project', 'pipeline', 'status', 'build_status', 'log'])
-
- def _get_latest_build(self, project_name, pipeline_name, builds):
- wanted = [
- b for b in builds
- if b['project'] == project_name and b['pipeline'] == pipeline_name
- ]
- if wanted:
- return wanted[-1]
- return None
-
- def cmd_show_latest_log(self, args):
- token = self._new_token()
- api = self._new_api()
- api.set_token(token)
-
- project_name = args[0]
- builds = api.show('/builds')['builds']
- project_builds = [b for b in builds if b['project'] == project_name]
- if project_builds:
- b = project_builds[-1]
- log = api.get_log(b['build_id'])
- self.output.write(log.decode('UTF-8'))
-
- def cmd_show_log(self, args):
- token = self._new_token()
- api = self._new_api()
- api.set_token(token)
-
- build_id = args[0]
- log = api.get_log(build_id)
- self.output.write(log.decode('UTF-8'))
-
def _new_api(self):
api = ick2.ControllerClient()
api.set_verify_tls(self.settings['verify-tls'])
@@ -251,9 +166,6 @@ class Icktool(cliapp.Application):
def _new_auth(self):
url = self.settings['auth-url']
- if not url:
- api = self._new_api()
- url = api.get_auth_url()
client_id, client_secret = self._get_client_creds(url)
ac = ick2.AuthClient()
@@ -265,8 +177,8 @@ class Icktool(cliapp.Application):
if self.settings['token']:
return self.settings['token']
ac = self._new_auth()
- wanted_scopes = ' '.join(self.settings['scope'])
- return ac.get_token(wanted_scopes)
+ scopes = ' '.join(self.settings['scope'])
+ return ac.get_token(scopes)
def _get_client_creds(self, url):
cp = configparser.ConfigParser()
@@ -279,34 +191,6 @@ class Icktool(cliapp.Application):
json.dump(obj, self.output, indent=4, sort_keys=True)
self.output.write('\n')
- def _pretty_table(self, rows, columns):
- headings = {
- column: column
- for column in columns
- }
-
- widths = {
- column: 0
- for column in columns
- }
-
- for row in [headings] + rows:
- for column in columns:
- widths[column] = max(widths[column], len(str(row[column])))
-
- underlines = {
- column: '-' * widths[column]
- for column in columns
- }
-
- for row in [headings, underlines] + rows:
- self.output.write(
- '{}\n'.format(self._pretty_row(widths, row, columns)))
-
- def _pretty_row(self, widths, row, columns):
- parts = ['%*s' % (widths[c], row[c]) for c in columns]
- return ' | '.join(parts)
-
class Command: