~nskaggs/juju-ci-tools/add-essential-operations

653 by Aaron Bentley
Add assess-bootstrap.
1
#!/usr/bin/env python
2
from __future__ import print_function
3
4
from argparse import ArgumentParser
1091.4.1 by James Tunnicliffe
Merged upstream
5
import logging
653 by Aaron Bentley
Add assess-bootstrap.
6
import os.path
1211.2.6 by Aaron Bentley
Handle LoggedException in quickstart_deploy, assess_bootstrap.
7
import sys
653 by Aaron Bentley
Add assess-bootstrap.
8
1162.2.15 by Aaron Bentley
Use BootstrapManager for assess_bootstrap.
9
from deploy_stack import (
10
    BootstrapManager,
11
    tear_down,
12
    )
653 by Aaron Bentley
Add assess-bootstrap.
13
from jujupy import (
1080.1.1 by Aaron Bentley
Stop using Environment in assess_bootstrap.
14
    EnvJujuClient,
15
    SimpleEnvironment,
653 by Aaron Bentley
Add assess-bootstrap.
16
    )
1091.4.1 by James Tunnicliffe
Merged upstream
17
from utility import (
18
    configure_logging,
1211.2.6 by Aaron Bentley
Handle LoggedException in quickstart_deploy, assess_bootstrap.
19
    LoggedException,
1091.4.1 by James Tunnicliffe
Merged upstream
20
    scoped_environ,
1162.2.15 by Aaron Bentley
Use BootstrapManager for assess_bootstrap.
21
    temp_dir,
1091.4.1 by James Tunnicliffe
Merged upstream
22
)
23
24
25
log = logging.getLogger("assess_bootstrap")
26
27
1102.2.5 by Aaron Bentley
assess_bootstrap supports temp_env_name.
28
def assess_bootstrap(juju, env, debug, region, temp_env_name):
653 by Aaron Bentley
Add assess-bootstrap.
29
    with scoped_environ():
657 by Aaron Bentley
Fix assess-bootstrap.
30
        juju_bin = os.path.dirname(os.path.abspath(juju))
653 by Aaron Bentley
Add assess-bootstrap.
31
        os.environ['PATH'] = '{}:{}'.format(juju_bin, os.environ['PATH'])
1080.1.1 by Aaron Bentley
Stop using Environment in assess_bootstrap.
32
        client = EnvJujuClient.by_version(SimpleEnvironment.from_config(env),
33
                                          juju, debug)
1162.2.15 by Aaron Bentley
Use BootstrapManager for assess_bootstrap.
34
    jes_enabled = client.is_jes_enabled()
1102.2.5 by Aaron Bentley
assess_bootstrap supports temp_env_name.
35
    if temp_env_name is None:
36
        temp_env_name = client.env.environment
1162.2.15 by Aaron Bentley
Use BootstrapManager for assess_bootstrap.
37
    with temp_dir() as log_dir:
38
        bs_manager = BootstrapManager(
1162.2.24 by Aaron Bentley
Use tear_down_client for teardown.
39
            temp_env_name, client, client, region=region,
40
            permanent=jes_enabled, jes_enabled=jes_enabled, log_dir=log_dir,
41
            bootstrap_host=None, machines=[], series=None, agent_url=None,
42
            agent_stream=None, keep_env=False)
1173.2.5 by Aaron Bentley
top_context doesn't yield bootstrap_host.
43
        with bs_manager.top_context() as machines:
1173.2.4 by Aaron Bentley
bootstrap_context doesn't accept bootstrap_host.
44
            with bs_manager.bootstrap_context(machines):
1162.2.15 by Aaron Bentley
Use BootstrapManager for assess_bootstrap.
45
                tear_down(client, jes_enabled)
46
                client.bootstrap()
1173.2.3 by Aaron Bentley
runtime_context doesn't take bootstrap_host as a parameter.
47
            with bs_manager.runtime_context(machines):
1162.2.15 by Aaron Bentley
Use BootstrapManager for assess_bootstrap.
48
                client.get_status(1)
49
                log.info('Environment successfully bootstrapped.')
653 by Aaron Bentley
Add assess-bootstrap.
50
51
817.1.1 by Aaron Bentley
Put assess-bootstrap under test, add --debug flag.
52
def parse_args(argv=None):
653 by Aaron Bentley
Add assess-bootstrap.
53
    parser = ArgumentParser()
54
    parser.add_argument('juju', help="The Juju client to use.")
55
    parser.add_argument('env', help="The environment to test with.")
1102.2.5 by Aaron Bentley
assess_bootstrap supports temp_env_name.
56
    parser.add_argument('temp_env_name', nargs='?',
57
                        help="Temporary environment name to use.")
817.1.1 by Aaron Bentley
Put assess-bootstrap under test, add --debug flag.
58
    parser.add_argument('--debug', action="store_true", default=False,
59
                        help='Use --debug juju logging.')
1102.2.4 by Aaron Bentley
Support --region in assess_bootstrap.
60
    parser.add_argument('--region', help='Override environment region.')
817.1.1 by Aaron Bentley
Put assess-bootstrap under test, add --debug flag.
61
    return parser.parse_args(argv)
62
63
64
def main():
65
    args = parse_args()
1091.4.1 by James Tunnicliffe
Merged upstream
66
    configure_logging(logging.INFO)
1211.2.6 by Aaron Bentley
Handle LoggedException in quickstart_deploy, assess_bootstrap.
67
    try:
68
        assess_bootstrap(**args.__dict__)
69
    except LoggedException:
70
        sys.exit(1)
653 by Aaron Bentley
Add assess-bootstrap.
71
72
73
if __name__ == '__main__':
74
    main()