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 | |
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 | |
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() |