~sseman/juju-ci-tools/model-change-watcher-py3-2

997.2.2 by Aaron Bentley
convert test-win-client to python.
1
#!/usr/bin/env python
997.2.1 by Aaron Bentley
Convert the majority of test-win-client to Python.
2
from argparse import ArgumentParser
3
import os
1142.1.1 by Aaron Bentley
Enable parallel streams for assess_win_client.
4
import re
997.2.1 by Aaron Bentley
Convert the majority of test-win-client to Python.
5
import subprocess
6
from textwrap import dedent
1142.1.1 by Aaron Bentley
Enable parallel streams for assess_win_client.
7
from utility import s3_cmd
997.2.1 by Aaron Bentley
Convert the majority of test-win-client to Python.
8
import yaml
9
997.2.2 by Aaron Bentley
convert test-win-client to python.
10
1142.1.1 by Aaron Bentley
Enable parallel streams for assess_win_client.
11
def win_test(script_dir, address, juju_home, revision_build):
997.2.1 by Aaron Bentley
Convert the majority of test-win-client to Python.
12
    host = 'Administrator@{}'.format(address)
13
    private_key = os.path.join(juju_home, 'staging-juju-rsa')
1142.1.1 by Aaron Bentley
Enable parallel streams for assess_win_client.
14
    revision_build_url = (
15
        's3://juju-qa-data/juju-ci/products/version-{}'.format(revision_build))
16
    win_client_url = '{}/build-win-client/'.format(revision_build_url)
17
    output = s3_cmd(['ls', '-r', win_client_url])
18
    urls = sorted(l.split()[3] for l in output.splitlines())
19
    installer = [u for u in urls if re.search('juju-setup-.*\.exe', u)][-1]
20
    s3_cmd(['sync', installer, '.'])
21
    install_file = installer.split('/')[-1]
997.2.1 by Aaron Bentley
Convert the majority of test-win-client to Python.
22
    with open('run-file', 'w') as run_file:
23
        run_file.write(dedent("""
24
            ci/$1 /verysilent
25
            juju version
1044.1.1 by Aaron Bentley
Use the deploy_job script everywhere, fix windows weirdness.
26
            juju destroy-environment --force -y win-client-deploy
27
            mkdir logs
1142.1.1 by Aaron Bentley
Enable parallel streams for assess_win_client.
28
            python ci\\\\deploy_job.py parallel-win-client \
1044.1.1 by Aaron Bentley
Use the deploy_job script everywhere, fix windows weirdness.
29
                'c:\\Program Files (x86)\\Juju\\juju.exe' \
1142.1.1 by Aaron Bentley
Enable parallel streams for assess_win_client.
30
                logs win-client-deploy --series trusty \
31
                --agent-stream revision-build-{revision_build}
32
            """.format(revision_build=revision_build)))
997.2.1 by Aaron Bentley
Convert the majority of test-win-client to Python.
33
34
    ci = [os.path.join(script_dir, f) for f in [
1515.2.1 by Martin Packman
Move fake_juju_client and related code into a new top level fakejuju file
35
        'deploy_stack.py', 'deploy_job.py', 'fakejuju.py', 'jujupy.py',
36
        'jujuconfig.py', 'remote.py', 'substrate.py', 'utility.py',
37
        'get_ami.py', 'chaos.py', 'timeout.py', 'jujucharm.py',
1758 by Curtis Hovey
add gce to list of modules needed for imports.
38
        'winazurearm.py', 'gce.py',
997.2.1 by Aaron Bentley
Convert the majority of test-win-client to Python.
39
        ]]
40
    ci.extend([install_file, 'run-file'])
41
    with open('foo.yaml', 'w') as config:
42
        yaml.dump({
43
            'install': {'ci': ci},
44
            'command': ['ci/run-file', install_file],
45
            }, config)
997.2.4 by Aaron Bentley
Use verbose workspace mode.
46
    subprocess.check_call(['workspace-run', '-v', 'foo.yaml', host, '-i',
997.2.1 by Aaron Bentley
Convert the majority of test-win-client to Python.
47
                           private_key])
48
49
997.2.2 by Aaron Bentley
convert test-win-client to python.
50
def main():
51
    parser = ArgumentParser()
52
    parser.add_argument('address',
53
                        help='The IP or DNS address the windows test machine.')
1142.1.1 by Aaron Bentley
Enable parallel streams for assess_win_client.
54
    parser.add_argument('revision_build',
55
                        help='Revision-build to test.')
997.2.2 by Aaron Bentley
convert test-win-client to python.
56
    parser.add_argument(
57
        '--juju-home', default=os.environ.get('JUJU_HOME'),
58
        help='The location of cloud-city and staging-juju-rsa.')
59
    script_dir = os.path.dirname(__file__)
60
    win_test(script_dir=script_dir, **parser.parse_args().__dict__)
61
62
63
if __name__ == '__main__':
64
    main()