~vila/uci-engine/delete-containers

« back to all changes in this revision

Viewing changes to lander/bin/lander_service_wrapper.py

  • Committer: Francis Ginther
  • Date: 2013-12-11 22:57:57 UTC
  • mto: This revision was merged to the branch mainline in revision 62.
  • Revision ID: francis.ginther@canonical.com-20131211225757-thzvhoferx51gxy6
Initial lander app to be called by jenkins jobs.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
#!/usr/bin/env python
 
2
 
 
3
import argparse
 
4
import logging
 
5
import json
 
6
import os.path
 
7
import sys
 
8
import yaml
 
9
 
 
10
format_list = {'json', 'yaml'}
 
11
# Make up some resonable data returned from each service
 
12
data = {
 
13
    'master': {
 
14
        'autopilot': {
 
15
            'version': '1.3.1+13.10.20131003.1-0ubuntu2~fginther.1',
 
16
            'files': [
 
17
                '/path/to/changes',
 
18
                '/path/to/dsc',
 
19
                '/path/to/diff.gz']}},
 
20
    'ppa_assigner': {
 
21
        'result': 'PASSED',
 
22
        'ppa': 'ppa:team/ppa'},
 
23
    'bsbuilder': {
 
24
        'result': 'PASSED',
 
25
        'version': '1.3.1+13.10.20131003.1-0ubuntu2~fginther.1',
 
26
        'packages': [
 
27
            'autopilot-desktop',
 
28
            'autopilot-touch',
 
29
            'python-autopilot',
 
30
            'python-autopilot-test',
 
31
            'python-autopilot-trace',
 
32
            'python-autopilot-vis'],
 
33
        'ppa': 'ppa:team/ppa'},
 
34
    'image_builder': {
 
35
        'result': 'PASSED',
 
36
        'image': '/path/to/image'},
 
37
    'test_runner': {
 
38
        'result': 'PASSED',
 
39
        'artifacts': [
 
40
            '/path/to/artifact1',
 
41
            '/path/to/artifact2']},
 
42
    'publisher': {
 
43
        'result': 'PASSED',
 
44
        'image': '/path/to/image'},
 
45
}
 
46
 
 
47
logger = logging.getLogger('lander_service_wrapper')
 
48
stdout_handler = logging.StreamHandler(stream=sys.stdout)
 
49
formatter = logging.Formatter('%(levelname)s: %(message)s')
 
50
stdout_handler.setFormatter(formatter)
 
51
logger.addHandler(stdout_handler)
 
52
 
 
53
 
 
54
def parse_arguments():
 
55
    parser = argparse.ArgumentParser(
 
56
        description='Wraps the REST API calls with a progress queue monitor.')
 
57
    parser.add_argument('--service',
 
58
                        required=True,
 
59
                        help='The service name to call.')
 
60
    parser.add_argument('--input-file',
 
61
                        required=True,
 
62
                        help='File containing all of the input parameters.')
 
63
    parser.add_argument('--input-format',
 
64
                        required=False,
 
65
                        default='json',
 
66
                        help='''Format for the input parameter file
 
67
                        {}.'''.format(format_list))
 
68
    parser.add_argument('--output-file',
 
69
                        required=True,
 
70
                        help='File to store the API call results.')
 
71
    parser.add_argument('--output-format',
 
72
                        required=False,
 
73
                        default='json',
 
74
                        help='''Format for API call results
 
75
                        {}.'''.format(format_list))
 
76
    return parser.parse_args()
 
77
 
 
78
 
 
79
def main():
 
80
    args = parse_arguments()
 
81
    if args.service not in data:
 
82
        logger.error("ERROR: Unknown service: {}".format(args.service))
 
83
        sys.exit(1)
 
84
 
 
85
    if args.input_format not in format_list:
 
86
        logger.error(
 
87
            "ERROR: Unknown input format: {}".format(args.input_format))
 
88
        sys.exit(1)
 
89
 
 
90
    if args.output_format not in format_list:
 
91
        logger.error(
 
92
            "ERROR: Unknown output format: {}".format(args.output_format))
 
93
        sys.exit(1)
 
94
 
 
95
    logger.debug('Executing service wrapper: {}'.format(args.service))
 
96
    # TODO: Call the service and collect the returned data
 
97
    # For now, canned responses are used as the return data
 
98
    with open(args.output_file, 'w') as output_file:
 
99
        out_data = None
 
100
        if args.output_format == 'json':
 
101
            out_data = json.dumps(data[args.service])
 
102
        elif args.output_format == 'yaml':
 
103
            out_data = yaml.dump(data[args.service])
 
104
        logger.debug('Output data [{}]: {}'.format(args.output_format,
 
105
                                                   out_data))
 
106
        output_file.write('{}\n'.format(out_data))
 
107
    logger.debug('Exit 0')
 
108
    sys.exit(0)
 
109
 
 
110
 
 
111
if __name__ == '__main__':
 
112
    main()