~juju-qa/juju-ci-tools/trunk

715.1.1 by Aaron Bentley
Add write_industrial_test_metadata.py
1
#!/usr/bin/env python
2
from argparse import ArgumentParser
3
import json
4
1836.4.5 by Aaron Bentley
Reduce jujupy imports.
5
from jujupy.client import (
1699.1.3 by Aaron Bentley
Update describe_substrate to take env rather than raw config.
6
    describe_substrate,
1850.1.8 by Aaron Bentley
Rename EnvJujuClient to ModelClient, provide a backwards-compatibility alias.
7
    ModelClient,
716.1.4 by Aaron Bentley
Include environment info in metadata.
8
    SimpleEnvironment,
9
    )
715.1.1 by Aaron Bentley
Add write_industrial_test_metadata.py
10
11
12
def parse_args(args=None):
13
    """Parse commandline arguments into a Namespace."""
14
    parser = ArgumentParser()
715.1.2 by Aaron Bentley
Updates from review.
15
    parser.add_argument('buildvars',
16
                        help="Path to the new client's buildvars.json.")
716.1.4 by Aaron Bentley
Include environment info in metadata.
17
    parser.add_argument('env', help='The name of the environment.')
715.1.2 by Aaron Bentley
Updates from review.
18
    parser.add_argument('output', help='Path of the file to write.')
715.1.1 by Aaron Bentley
Add write_industrial_test_metadata.py
19
    return parser.parse_args(args)
20
21
716.1.4 by Aaron Bentley
Include environment info in metadata.
22
def make_metadata(buildvars_path, env_name):
715.1.1 by Aaron Bentley
Add write_industrial_test_metadata.py
23
    """Return metadata about the clients as json-compatible objects.
24
25
    :param buildbars_path: Path to the buildvars.json file for the new client.
716.1.4 by Aaron Bentley
Include environment info in metadata.
26
    :param env_name: Name of the environment being used.
715.1.1 by Aaron Bentley
Add write_industrial_test_metadata.py
27
    """
1850.1.8 by Aaron Bentley
Rename EnvJujuClient to ModelClient, provide a backwards-compatibility alias.
28
    old_version = ModelClient.get_version()
716.1.4 by Aaron Bentley
Include environment info in metadata.
29
    env = SimpleEnvironment.from_config(env_name)
715.1.1 by Aaron Bentley
Add write_industrial_test_metadata.py
30
    with open(buildvars_path) as buildvars_file:
31
        buildvars = json.load(buildvars_file)
32
    metadata = {
33
        'old_client': {
34
            'type': 'release',
35
            'version': old_version
36
            },
37
        'new_client': {
38
            'type': 'build',
39
            'buildvars': buildvars,
40
            },
716.1.4 by Aaron Bentley
Include environment info in metadata.
41
        'environment': {
42
            'name': env_name,
1699.1.3 by Aaron Bentley
Update describe_substrate to take env rather than raw config.
43
            'substrate': describe_substrate(env)
716.1.4 by Aaron Bentley
Include environment info in metadata.
44
            },
715.1.1 by Aaron Bentley
Add write_industrial_test_metadata.py
45
        }
46
    return metadata
47
48
49
def main(argv=None):
50
    """Generate the date and write it to disk."""
51
    args = parse_args(argv)
716.1.4 by Aaron Bentley
Include environment info in metadata.
52
    metadata = make_metadata(args.buildvars, args.env)
715.1.1 by Aaron Bentley
Add write_industrial_test_metadata.py
53
    with open(args.output, 'w') as output_file:
54
        json.dump(metadata, output_file, indent=2, sort_keys=True)
55
        output_file.write('\n')
56
57
58
if __name__ == '__main__':
59
    main()