Statistics
| Branch: | Tag: | Revision:

root / ci / snf-ci @ c441b6a7

History | View | Annotate | Download (4.9 kB)

1
#!/usr/bin/env python
2

    
3
# Invalid name for type module. pylint: disable-msg=C0103
4

    
5
"""
6
Continuous Integration script for Synnefo.
7
"""
8

    
9
import os
10
from utils import SynnefoCI
11
from optparse import OptionParser
12

    
13
CREATE_SERVER_CMD = "create"
14
BUILD_SYNNEFO_CMD = "build"
15
BUILD_DOCS_SYNNEFO_CMD = "docs"
16
DEPLOY_SYNNEFO_CMD = "deploy"
17
TEST_SYNNEFO_CMD = "test"
18
RUN_BURNIN_CMD = "burnin"
19
ALL_CMDS = "all"
20

    
21
AVAILABLE_COMMANDS = [
22
    CREATE_SERVER_CMD,
23
    BUILD_SYNNEFO_CMD,
24
    BUILD_DOCS_SYNNEFO_CMD,
25
    DEPLOY_SYNNEFO_CMD,
26
    TEST_SYNNEFO_CMD,
27
    RUN_BURNIN_CMD,
28
]
29

    
30
USAGE = """usage: %%prog [options] command
31

    
32
command:
33
    * %s: Create the slave server
34
    * %s: Create debian packages for Synnefo in the created server
35
    * %s: Create documentation for Synnefo in the created server
36
    * %s: Deploy Synnefo in created server
37
    * %s: Run Synnefo unittests
38
    * %s: Run snf-burnin in the deployed Synnefo
39

    
40
    * %s: Run all the available commands
41
""" % tuple([CREATE_SERVER_CMD,
42
             BUILD_SYNNEFO_CMD,
43
             BUILD_DOCS_SYNNEFO_CMD,
44
             DEPLOY_SYNNEFO_CMD,
45
             TEST_SYNNEFO_CMD,
46
             RUN_BURNIN_CMD,
47
             ALL_CMDS])
48

    
49

    
50
def main():  # Too many branches. pylint: disable-msg=R0912
51
    """Parse command line options and run the specified actions"""
52
    parser = OptionParser(usage=USAGE)
53
    parser.add_option("-c", "--conf", dest="config_file", default=None,
54
                      help="Configuration file for SynnefoCI script")
55
    parser.add_option("--cloud", dest="kamaki_cloud", default=None,
56
                      help="Use specified cloud, as is in .kamakirc")
57
    parser.add_option("-f", "--flavor", dest="flavor", default=None,
58
                      help="Name of flavor to use for the server.")
59
    parser.add_option("-i", "--image", dest="image", default=None,
60
                      help="UUID of image to use for the server.")
61
    parser.add_option("--ssh-keys", dest="ssh_keys", default=None,
62
                      help="Upload/Install the public ssh keys contained"
63
                           " in this file to the server")
64
    parser.add_option("-n", "--build-id", dest="build_id", default=None,
65
                      type="int",
66
                      help="Specify a number to use to identify this build."
67
                           " One can later use this number to retrieve"
68
                           " information (such as IPs, passwords etc) about"
69
                           " the machines created. If not given this script"
70
                           " will create a new build-id.")
71
    parser.add_option("--fetch-packages", dest="fetch_packages",
72
                      default=None,
73
                      help="Download the debian packages that were created"
74
                           " during the '%s' step in this directory" %
75
                           BUILD_SYNNEFO_CMD)
76
    parser.add_option("--fetch-docs", dest="fetch_docs",
77
                      default=None,
78
                      help="Download the documentation that was created"
79
                           " during the '%s' step in this directory" %
80
                           BUILD_DOCS_SYNNEFO_CMD)
81
    parser.add_option("--schema", dest="schema", default=None,
82
                      help="Schema for snf-deploy.")
83

    
84
    (options, args) = parser.parse_args()
85

    
86
    if len(args) != 1:
87
        msg = "ERROR: Command takes exactly one argument"
88
        parser.print_help()
89
        print
90
        print msg
91
        return
92

    
93
    command = args[0]
94
    if command == ALL_CMDS:
95
        for cmd in AVAILABLE_COMMANDS:
96
            setattr(options, cmd, True)
97
    elif command not in AVAILABLE_COMMANDS:
98
        msg = "ERROR: Unknown command: %s" % command
99
        parser.print_help()
100
        print
101
        print msg
102
        return
103
    else:
104
        setattr(options, command, True)
105

    
106
    synnefo_ci = SynnefoCI(config_file=options.config_file,
107
                           build_id=options.build_id,
108
                           cloud=options.kamaki_cloud)
109

    
110
    if getattr(options, CREATE_SERVER_CMD, False):
111
        synnefo_ci.create_server(flavor_name=options.flavor,
112
                                 image_id=options.image,
113
                                 ssh_keys=options.ssh_keys)
114
        synnefo_ci.clone_repo()
115
    if getattr(options, BUILD_SYNNEFO_CMD, False):
116
        synnefo_ci.build_synnefo()
117
        if options.fetch_packages:
118
            dest = os.path.abspath(options.fetch_packages)
119
            synnefo_ci.fetch_packages(dest=dest)
120
    if getattr(options, BUILD_DOCS_SYNNEFO_CMD, False):
121
        synnefo_ci.build_documentation()
122
        if options.fetch_docs:
123
            dest = os.path.abspath(options.fetch_docs)
124
            synnefo_ci.fetch_documentation(dest=dest)
125
    if getattr(options, DEPLOY_SYNNEFO_CMD, False):
126
        synnefo_ci.deploy_synnefo(schema=options.schema)
127
    if getattr(options, TEST_SYNNEFO_CMD, False):
128
        synnefo_ci.unit_test()
129
    if getattr(options, RUN_BURNIN_CMD, False):
130
        synnefo_ci.run_burnin()
131

    
132

    
133
if __name__ == "__main__":
134
    main()