~andrewjbeach/juju-ci-tools/make-local-patcher

« back to all changes in this revision

Viewing changes to assess_jes_deploy.py

  • Committer: Curtis Hovey
  • Date: 2014-08-12 20:35:41 UTC
  • mto: This revision was merged to the branch mainline in revision 623.
  • Revision ID: curtis@canonical.com-20140812203541-ebdge5usoltynmk1
Strip the /tools dir from from the tools-metadata-url because s3 will return a 404
for a dir.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
#!/usr/bin/env python
2
 
 
3
 
from argparse import ArgumentParser
4
 
from contextlib import contextmanager
5
 
import logging
6
 
import sys
7
 
from tempfile import NamedTemporaryFile
8
 
import os
9
 
 
10
 
import yaml
11
 
 
12
 
from deploy_stack import (
13
 
    boot_context,
14
 
    check_token,
15
 
    configure_logging,
16
 
    deploy_dummy_stack,
17
 
    dump_env_logs,
18
 
    get_random_string,
19
 
    safe_print_status,
20
 
    )
21
 
from jujupy import (
22
 
    EnvJujuClient,
23
 
    make_safe_config,
24
 
    SimpleEnvironment,
25
 
    )
26
 
from utility import (
27
 
    add_basic_testing_arguments,
28
 
    ensure_dir,
29
 
    print_now,
30
 
)
31
 
 
32
 
 
33
 
def make_hosted_env_client(client, suffix):
34
 
    env_name = '{}-{}'.format(client.env.environment, suffix)
35
 
    hosted_environment = SimpleEnvironment(env_name, dict(client.env.config),
36
 
                                           client.env.juju_home)
37
 
    hosted_env_client = client.clone(hosted_environment)
38
 
    return hosted_env_client
39
 
 
40
 
 
41
 
def test_jes_deploy(client, charm_series, log_dir, base_env):
42
 
    """Deploy the dummy stack in two hosted environments."""
43
 
    # deploy into system env
44
 
    deploy_dummy_stack(client, charm_series)
45
 
 
46
 
    # deploy into hosted envs
47
 
    with hosted_environment(client, log_dir, 'env1') as env1_client:
48
 
        deploy_dummy_stack(env1_client, charm_series)
49
 
        with hosted_environment(client, log_dir, 'env2') as env2_client:
50
 
            deploy_dummy_stack(env2_client, charm_series)
51
 
            # check all the services can talk
52
 
            check_services(client)
53
 
            check_services(env1_client)
54
 
            check_services(env2_client)
55
 
 
56
 
 
57
 
@contextmanager
58
 
def jes_setup(args):
59
 
    """
60
 
    Sets up the juju client and its environment.
61
 
 
62
 
    Returns return client, charm_prefix and base_env.
63
 
    """
64
 
    base_env = args.env
65
 
    configure_logging(args.verbose)
66
 
    # TODO(gz): Logic from deploy_stack, and precise is a bad default series?
67
 
    series = args.series
68
 
    if series is None:
69
 
        series = 'precise'
70
 
    charm_series = series
71
 
    client = EnvJujuClient.by_version(
72
 
        SimpleEnvironment.from_config(base_env), args.juju_bin, args.debug,
73
 
    )
74
 
    if not client.is_jes_enabled():
75
 
        client.enable_jes()
76
 
    with boot_context(
77
 
            args.temp_env_name,
78
 
            client,
79
 
            args.bootstrap_host,
80
 
            args.machine,
81
 
            args.series,
82
 
            args.agent_url,
83
 
            args.agent_stream,
84
 
            args.logs, args.keep_env,
85
 
            upload_tools=False,
86
 
            region=args.region,
87
 
            ):
88
 
        yield client, charm_series, base_env
89
 
 
90
 
 
91
 
def env_token(env_name):
92
 
    return env_name + get_random_string()
93
 
 
94
 
 
95
 
@contextmanager
96
 
def hosted_environment(system_client, log_dir, suffix):
97
 
    client = make_hosted_env_client(system_client, suffix)
98
 
    try:
99
 
        with NamedTemporaryFile() as config_file:
100
 
            config = make_safe_config(client)
101
 
            yaml.dump(config, config_file)
102
 
            config_file.flush()
103
 
            client.create_environment(system_client, config_file.name)
104
 
        yield client
105
 
    except:
106
 
        logging.exception(
107
 
            'Exception while environment "{}" active'.format(
108
 
                client.env.environment))
109
 
        sys.exit(1)
110
 
    finally:
111
 
        safe_print_status(client)
112
 
        hosted_log_dir = os.path.join(log_dir, suffix)
113
 
        ensure_dir(hosted_log_dir)
114
 
        dump_env_logs(client, None, hosted_log_dir)
115
 
        client.destroy_model()
116
 
 
117
 
 
118
 
def check_services(client):
119
 
    token = env_token(client.env.environment)
120
 
    client.set_config('dummy-source', {'token':  token})
121
 
    print_now("checking services in " + client.env.environment)
122
 
    check_token(client, token)
123
 
 
124
 
 
125
 
def main():
126
 
    parser = ArgumentParser()
127
 
    add_basic_testing_arguments(parser, using_jes=True)
128
 
    args = parser.parse_args()
129
 
    with jes_setup(args) as (client, charm_series, base_env):
130
 
        test_jes_deploy(client, charm_series, args.logs, base_env)
131
 
 
132
 
 
133
 
if __name__ == '__main__':
134
 
    main()