Statistics
| Branch: | Tag: | Revision:

root / ci / snf-ci @ ac7b865d

History | View | Annotate | Download (7.1 kB)

1 e53bbf1c Christos Stavrakakis
#!/usr/bin/env python
2 e53bbf1c Christos Stavrakakis
3 e2a0abb8 Ilias Tsitsimpis
# Invalid name for type module. pylint: disable-msg=C0103
4 e2a0abb8 Ilias Tsitsimpis
5 e53bbf1c Christos Stavrakakis
"""
6 e2a0abb8 Ilias Tsitsimpis
Continuous Integration script for Synnefo.
7 e53bbf1c Christos Stavrakakis
"""
8 e2a0abb8 Ilias Tsitsimpis
9 e2dc37b2 Christos Stavrakakis
import os
10 106659f1 Ilias Tsitsimpis
import utils
11 e53bbf1c Christos Stavrakakis
from optparse import OptionParser
12 e53bbf1c Christos Stavrakakis
13 e53bbf1c Christos Stavrakakis
CREATE_SERVER_CMD = "create"
14 bec0786b Ilias Tsitsimpis
DELETE_SERVER_CMD = "delete"
15 e53bbf1c Christos Stavrakakis
BUILD_SYNNEFO_CMD = "build"
16 88e6558b Christos Stavrakakis
BUILD_DOCS_SYNNEFO_CMD = "docs"
17 e53bbf1c Christos Stavrakakis
DEPLOY_SYNNEFO_CMD = "deploy"
18 e53bbf1c Christos Stavrakakis
TEST_SYNNEFO_CMD = "test"
19 e53bbf1c Christos Stavrakakis
RUN_BURNIN_CMD = "burnin"
20 cf99ca80 Ilias Tsitsimpis
CREATE_X2GO_FILE = "x2goplugin"
21 2eb2f223 Ilias Tsitsimpis
SHELL_CONNECT = "shell"
22 e53bbf1c Christos Stavrakakis
ALL_CMDS = "all"
23 e53bbf1c Christos Stavrakakis
24 cf99ca80 Ilias Tsitsimpis
COMMANDS_IN_ALL_MODE = [
25 e53bbf1c Christos Stavrakakis
    CREATE_SERVER_CMD,
26 e53bbf1c Christos Stavrakakis
    BUILD_SYNNEFO_CMD,
27 88e6558b Christos Stavrakakis
    BUILD_DOCS_SYNNEFO_CMD,
28 e53bbf1c Christos Stavrakakis
    DEPLOY_SYNNEFO_CMD,
29 e53bbf1c Christos Stavrakakis
    TEST_SYNNEFO_CMD,
30 e53bbf1c Christos Stavrakakis
    RUN_BURNIN_CMD,
31 e53bbf1c Christos Stavrakakis
]
32 e53bbf1c Christos Stavrakakis
33 cf99ca80 Ilias Tsitsimpis
AVAILABLE_COMMANDS = [
34 cf99ca80 Ilias Tsitsimpis
    CREATE_X2GO_FILE,
35 bec0786b Ilias Tsitsimpis
    DELETE_SERVER_CMD,
36 2eb2f223 Ilias Tsitsimpis
    SHELL_CONNECT,
37 cf99ca80 Ilias Tsitsimpis
] + COMMANDS_IN_ALL_MODE
38 cf99ca80 Ilias Tsitsimpis
39 4e680fed Christos Stavrakakis
USAGE = """usage: %%prog [options] command[,command...]
40 e53bbf1c Christos Stavrakakis
41 e53bbf1c Christos Stavrakakis
command:
42 ec8bc030 Christos Stavrakakis
    * %s: Create the slave server
43 464e58e9 Christos Stavrakakis
    * %s: Create debian packages for Synnefo in the created server
44 88e6558b Christos Stavrakakis
    * %s: Create documentation for Synnefo in the created server
45 e53bbf1c Christos Stavrakakis
    * %s: Deploy Synnefo in created server
46 e53bbf1c Christos Stavrakakis
    * %s: Run Synnefo unittests
47 e53bbf1c Christos Stavrakakis
    * %s: Run snf-burnin in the deployed Synnefo
48 cf99ca80 Ilias Tsitsimpis
    * %s: Create x2go plugin file
49 bec0786b Ilias Tsitsimpis
    * %s: Delete the slave server
50 2eb2f223 Ilias Tsitsimpis
    * %s: Connect to the server using ssh
51 e53bbf1c Christos Stavrakakis
52 e53bbf1c Christos Stavrakakis
    * %s: Run all the available commands
53 e53bbf1c Christos Stavrakakis
""" % tuple([CREATE_SERVER_CMD,
54 e53bbf1c Christos Stavrakakis
             BUILD_SYNNEFO_CMD,
55 88e6558b Christos Stavrakakis
             BUILD_DOCS_SYNNEFO_CMD,
56 e53bbf1c Christos Stavrakakis
             DEPLOY_SYNNEFO_CMD,
57 e53bbf1c Christos Stavrakakis
             TEST_SYNNEFO_CMD,
58 e53bbf1c Christos Stavrakakis
             RUN_BURNIN_CMD,
59 cf99ca80 Ilias Tsitsimpis
             CREATE_X2GO_FILE,
60 bec0786b Ilias Tsitsimpis
             DELETE_SERVER_CMD,
61 2eb2f223 Ilias Tsitsimpis
             SHELL_CONNECT,
62 e53bbf1c Christos Stavrakakis
             ALL_CMDS])
63 e53bbf1c Christos Stavrakakis
64 e53bbf1c Christos Stavrakakis
65 2eb2f223 Ilias Tsitsimpis
def main():  # pylint: disable=too-many-statements, too-many-branches
66 e2a0abb8 Ilias Tsitsimpis
    """Parse command line options and run the specified actions"""
67 e53bbf1c Christos Stavrakakis
    parser = OptionParser(usage=USAGE)
68 2178b2a8 Ilias Tsitsimpis
    parser.add_option("-c", "--conf", dest="config_file", default=None,
69 e2a0abb8 Ilias Tsitsimpis
                      help="Configuration file for SynnefoCI script")
70 2178b2a8 Ilias Tsitsimpis
    parser.add_option("--cloud", dest="kamaki_cloud", default=None,
71 e2a0abb8 Ilias Tsitsimpis
                      help="Use specified cloud, as is in .kamakirc")
72 e53bbf1c Christos Stavrakakis
    parser.add_option("-f", "--flavor", dest="flavor", default=None,
73 358a19bc Ilias Tsitsimpis
                      help="Flavor to use for the server."
74 358a19bc Ilias Tsitsimpis
                           " Supports both search by name (reg expression)"
75 358a19bc Ilias Tsitsimpis
                           " with \"name:flavor name\" or by id with"
76 358a19bc Ilias Tsitsimpis
                           " \"id:flavor id\".")
77 e53bbf1c Christos Stavrakakis
    parser.add_option("-i", "--image", dest="image", default=None,
78 358a19bc Ilias Tsitsimpis
                      help="Image to use for the server."
79 358a19bc Ilias Tsitsimpis
                           " Supports both search by name (reg expression)"
80 358a19bc Ilias Tsitsimpis
                           " with \"name:image name\" or by id with"
81 358a19bc Ilias Tsitsimpis
                           " \"id:image id\".")
82 6868804a Ilias Tsitsimpis
    parser.add_option("--ssh-keys", dest="ssh_keys", default=None,
83 6868804a Ilias Tsitsimpis
                      help="Upload/Install the public ssh keys contained"
84 6868804a Ilias Tsitsimpis
                           " in this file to the server")
85 2945e7ed Christos Stavrakakis
    parser.add_option("--name", dest="server_name", default=None,
86 2eb2f223 Ilias Tsitsimpis
                      help="")
87 79144a72 Ilias Tsitsimpis
    parser.add_option("-n", "--build-id", dest="build_id", default=None,
88 79144a72 Ilias Tsitsimpis
                      type="int",
89 79144a72 Ilias Tsitsimpis
                      help="Specify a number to use to identify this build."
90 79144a72 Ilias Tsitsimpis
                           " One can later use this number to retrieve"
91 79144a72 Ilias Tsitsimpis
                           " information (such as IPs, passwords etc) about"
92 79144a72 Ilias Tsitsimpis
                           " the machines created. If not given this script"
93 79144a72 Ilias Tsitsimpis
                           " will create a new build-id.")
94 464e58e9 Christos Stavrakakis
    parser.add_option("--fetch-packages", dest="fetch_packages",
95 e2dc37b2 Christos Stavrakakis
                      default=None,
96 464e58e9 Christos Stavrakakis
                      help="Download the debian packages that were created"
97 106659f1 Ilias Tsitsimpis
                           " during the '%s' step in this directory." %
98 e2dc37b2 Christos Stavrakakis
                           BUILD_SYNNEFO_CMD)
99 88e6558b Christos Stavrakakis
    parser.add_option("--fetch-docs", dest="fetch_docs",
100 88e6558b Christos Stavrakakis
                      default=None,
101 88e6558b Christos Stavrakakis
                      help="Download the documentation that was created"
102 106659f1 Ilias Tsitsimpis
                           " during the '%s' step in this directory." %
103 88e6558b Christos Stavrakakis
                           BUILD_DOCS_SYNNEFO_CMD)
104 ec8bc030 Christos Stavrakakis
    parser.add_option("--schema", dest="schema", default=None,
105 ec8bc030 Christos Stavrakakis
                      help="Schema for snf-deploy.")
106 5323404f Ilias Tsitsimpis
    parser.add_option("--local-repo", dest="local_repo", default=False,
107 5323404f Ilias Tsitsimpis
                      action="store_true",
108 5323404f Ilias Tsitsimpis
                      help="Instead of cloning from the official Synnefo"
109 5323404f Ilias Tsitsimpis
                           " repo, copy and use the local one.")
110 cf99ca80 Ilias Tsitsimpis
    parser.add_option("--x2go-output", dest="x2go_output", default=None,
111 cf99ca80 Ilias Tsitsimpis
                      help="File where to save the x2go plugin html page.")
112 106659f1 Ilias Tsitsimpis
    parser.add_option("--no-colors", dest="use_colors",
113 106659f1 Ilias Tsitsimpis
                      default=True, action="store_false",
114 106659f1 Ilias Tsitsimpis
                      help="Don't use colorful output messages.")
115 e53bbf1c Christos Stavrakakis
116 e53bbf1c Christos Stavrakakis
    (options, args) = parser.parse_args()
117 e53bbf1c Christos Stavrakakis
118 106659f1 Ilias Tsitsimpis
    # ----------------------------------
119 106659f1 Ilias Tsitsimpis
    # Check arguments
120 e53bbf1c Christos Stavrakakis
    if len(args) != 1:
121 e53bbf1c Christos Stavrakakis
        msg = "ERROR: Command takes exactly one argument"
122 e53bbf1c Christos Stavrakakis
        parser.print_help()
123 e53bbf1c Christos Stavrakakis
        print
124 e53bbf1c Christos Stavrakakis
        print msg
125 e53bbf1c Christos Stavrakakis
        return
126 e53bbf1c Christos Stavrakakis
127 4e680fed Christos Stavrakakis
    commands = args[0]
128 4e680fed Christos Stavrakakis
    if commands == ALL_CMDS:
129 cf99ca80 Ilias Tsitsimpis
        for cmd in COMMANDS_IN_ALL_MODE:
130 e53bbf1c Christos Stavrakakis
            setattr(options, cmd, True)
131 4e680fed Christos Stavrakakis
132 e53bbf1c Christos Stavrakakis
    else:
133 4e680fed Christos Stavrakakis
        commands = commands.split(",")
134 4e680fed Christos Stavrakakis
        for command in commands:
135 4e680fed Christos Stavrakakis
            if command not in AVAILABLE_COMMANDS:
136 4e680fed Christos Stavrakakis
                msg = "ERROR: Unknown command: %s" % command
137 4e680fed Christos Stavrakakis
                parser.print_help()
138 4e680fed Christos Stavrakakis
                print
139 4e680fed Christos Stavrakakis
                print msg
140 4e680fed Christos Stavrakakis
                return
141 4e680fed Christos Stavrakakis
            else:
142 4e680fed Christos Stavrakakis
                setattr(options, command, True)
143 e53bbf1c Christos Stavrakakis
144 106659f1 Ilias Tsitsimpis
    # ----------------------------------
145 106659f1 Ilias Tsitsimpis
    # Initialize SynnefoCi
146 106659f1 Ilias Tsitsimpis
    utils.USE_COLORS = options.use_colors
147 106659f1 Ilias Tsitsimpis
    synnefo_ci = utils.SynnefoCI(config_file=options.config_file,
148 106659f1 Ilias Tsitsimpis
                                 build_id=options.build_id,
149 106659f1 Ilias Tsitsimpis
                                 cloud=options.kamaki_cloud)
150 e53bbf1c Christos Stavrakakis
151 106659f1 Ilias Tsitsimpis
    # ----------------------------------
152 106659f1 Ilias Tsitsimpis
    # Run commands
153 e53bbf1c Christos Stavrakakis
    if getattr(options, CREATE_SERVER_CMD, False):
154 358a19bc Ilias Tsitsimpis
        synnefo_ci.create_server(flavor=options.flavor,
155 358a19bc Ilias Tsitsimpis
                                 image=options.image,
156 2945e7ed Christos Stavrakakis
                                 ssh_keys=options.ssh_keys,
157 2945e7ed Christos Stavrakakis
                                 server_name=options.server_name)
158 5323404f Ilias Tsitsimpis
        synnefo_ci.clone_repo(local_repo=options.local_repo)
159 e53bbf1c Christos Stavrakakis
    if getattr(options, BUILD_SYNNEFO_CMD, False):
160 99d39120 Ilias Tsitsimpis
        synnefo_ci.build_packages()
161 88e6558b Christos Stavrakakis
        if options.fetch_packages:
162 88e6558b Christos Stavrakakis
            dest = os.path.abspath(options.fetch_packages)
163 88e6558b Christos Stavrakakis
            synnefo_ci.fetch_packages(dest=dest)
164 88e6558b Christos Stavrakakis
    if getattr(options, BUILD_DOCS_SYNNEFO_CMD, False):
165 88e6558b Christos Stavrakakis
        synnefo_ci.build_documentation()
166 88e6558b Christos Stavrakakis
        if options.fetch_docs:
167 88e6558b Christos Stavrakakis
            dest = os.path.abspath(options.fetch_docs)
168 88e6558b Christos Stavrakakis
            synnefo_ci.fetch_documentation(dest=dest)
169 e53bbf1c Christos Stavrakakis
    if getattr(options, DEPLOY_SYNNEFO_CMD, False):
170 ec8bc030 Christos Stavrakakis
        synnefo_ci.deploy_synnefo(schema=options.schema)
171 e53bbf1c Christos Stavrakakis
    if getattr(options, TEST_SYNNEFO_CMD, False):
172 e53bbf1c Christos Stavrakakis
        synnefo_ci.unit_test()
173 e53bbf1c Christos Stavrakakis
    if getattr(options, RUN_BURNIN_CMD, False):
174 e53bbf1c Christos Stavrakakis
        synnefo_ci.run_burnin()
175 cf99ca80 Ilias Tsitsimpis
    if getattr(options, CREATE_X2GO_FILE, False):
176 cf99ca80 Ilias Tsitsimpis
        synnefo_ci.x2go_plugin(options.x2go_output)
177 bec0786b Ilias Tsitsimpis
    if getattr(options, DELETE_SERVER_CMD, False):
178 bec0786b Ilias Tsitsimpis
        synnefo_ci.destroy_server()
179 2eb2f223 Ilias Tsitsimpis
    if getattr(options, SHELL_CONNECT, False):
180 2eb2f223 Ilias Tsitsimpis
        synnefo_ci.shell_connect()
181 e53bbf1c Christos Stavrakakis
182 e53bbf1c Christos Stavrakakis
183 e53bbf1c Christos Stavrakakis
if __name__ == "__main__":
184 e53bbf1c Christos Stavrakakis
    main()