Revision ef695867 ci/utils.py
b/ci/utils.py | ||
---|---|---|
149 | 149 |
self.temp_config = ConfigParser() |
150 | 150 |
self.temp_config.optionxform = str |
151 | 151 |
self.temp_config.read(temp_config) |
152 |
if build_id is not None: |
|
153 |
self.build_id = build_id |
|
154 |
else: |
|
155 |
# Find a uniq build_id to use |
|
156 |
ids = self.temp_config.sections() |
|
157 |
if ids: |
|
158 |
max_id = int(max(self.temp_config.sections(), key=int)) |
|
159 |
self.build_id = max_id + 1 |
|
160 |
else: |
|
161 |
self.build_id = 1 |
|
162 |
self.logger.info("Will use %s as build id" % _green(self.build_id)) |
|
163 |
# If build_id doesn't exist create a new one |
|
164 |
try: |
|
165 |
self.temp_config.add_section(str(self.build_id)) |
|
166 |
creation_time = time.strftime("%a, %d %b %Y %X", time.localtime()) |
|
167 |
self.write_config("created", creation_time) |
|
168 |
except DuplicateSectionError: |
|
169 |
pass |
|
152 |
self.build_id = build_id |
|
153 |
self.logger.info("Will use \"%s\" as build id" % _green(self.build_id)) |
|
170 | 154 |
|
171 | 155 |
# Set kamaki cloud |
172 | 156 |
if cloud is not None: |
... | ... | |
249 | 233 |
@_check_kamaki |
250 | 234 |
def destroy_server(self, wait=True): |
251 | 235 |
"""Destroy slave server""" |
252 |
server_id = self.temp_config.getint(str(self.build_id), 'server_id')
|
|
236 |
server_id = int(self.read_temp_config('server_id'))
|
|
253 | 237 |
self.logger.info("Destoying server with id %s " % server_id) |
254 | 238 |
self.cyclades_client.delete_server(server_id) |
255 | 239 |
if wait: |
... | ... | |
259 | 243 |
def create_server(self, image_id=None, flavor_name=None, ssh_keys=None): |
260 | 244 |
"""Create slave server""" |
261 | 245 |
self.logger.info("Create a new server..") |
246 |
|
|
247 |
# Find a build_id to use |
|
248 |
if self.build_id is None: |
|
249 |
# If build_id is given use this, else .. |
|
250 |
# Find a uniq build_id to use |
|
251 |
ids = self.temp_config.sections() |
|
252 |
if ids: |
|
253 |
max_id = int(max(self.temp_config.sections(), key=int)) |
|
254 |
self.build_id = max_id + 1 |
|
255 |
else: |
|
256 |
self.build_id = 1 |
|
257 |
self.logger.debug("New build id \"%s\" was created" |
|
258 |
% _green(self.build_id)) |
|
259 |
|
|
260 |
# Find an image to use |
|
262 | 261 |
if image_id is None: |
263 | 262 |
image = self._find_image() |
264 | 263 |
self.logger.debug("Will use image \"%s\"" % _green(image['name'])) |
265 | 264 |
image_id = image["id"] |
266 | 265 |
self.logger.debug("Image has id %s" % _green(image_id)) |
266 |
# Find a flavor to use |
|
267 | 267 |
flavor_id = self._find_flavor(flavor_name) |
268 | 268 |
server = self.cyclades_client.create_server( |
269 | 269 |
self.config.get('Deployment', 'server_name'), |
270 | 270 |
flavor_id, |
271 | 271 |
image_id) |
272 | 272 |
server_id = server['id'] |
273 |
self.write_config('server_id', server_id) |
|
273 |
self.write_temp_config('server_id', server_id)
|
|
274 | 274 |
self.logger.debug("Server got id %s" % _green(server_id)) |
275 | 275 |
server_user = server['metadata']['users'] |
276 |
self.write_config('server_user', server_user) |
|
276 |
self.write_temp_config('server_user', server_user)
|
|
277 | 277 |
self.logger.debug("Server's admin user is %s" % _green(server_user)) |
278 | 278 |
server_passwd = server['adminPass'] |
279 |
self.write_config('server_passwd', server_passwd) |
|
279 |
self.write_temp_config('server_passwd', server_passwd)
|
|
280 | 280 |
|
281 | 281 |
server = self._wait_transition(server_id, "BUILD", "ACTIVE") |
282 | 282 |
self._get_server_ip_and_port(server) |
... | ... | |
347 | 347 |
server_port = 10000 + tmp1 * 256 + tmp2 |
348 | 348 |
else: |
349 | 349 |
server_port = 22 |
350 |
self.write_config('server_ip', server_ip) |
|
350 |
self.write_temp_config('server_ip', server_ip)
|
|
351 | 351 |
self.logger.debug("Server's IPv4 is %s" % _green(server_ip)) |
352 |
self.write_config('server_port', server_port) |
|
352 |
self.write_temp_config('server_port', server_port)
|
|
353 | 353 |
self.logger.debug("Server's ssh port is %s" % _green(server_port)) |
354 | 354 |
self.logger.debug("Access server using \"ssh -p %s %s@%s\"" % |
355 | 355 |
(server_port, server['metadata']['users'], server_ip)) |
... | ... | |
384 | 384 |
else: |
385 | 385 |
self.logger.debug("No ssh keys found") |
386 | 386 |
|
387 |
def write_config(self, option, value): |
|
387 |
def write_temp_config(self, option, value):
|
|
388 | 388 |
"""Write changes back to config file""" |
389 |
# If build_id section doesn't exist create a new one |
|
390 |
try: |
|
391 |
self.temp_config.add_section(str(self.build_id)) |
|
392 |
creation_time = time.strftime("%a, %d %b %Y %X", time.localtime()) |
|
393 |
self.write_temp_config("created", creation_time) |
|
394 |
except DuplicateSectionError: |
|
395 |
pass |
|
389 | 396 |
self.temp_config.set(str(self.build_id), option, str(value)) |
390 | 397 |
curr_time = time.strftime("%a, %d %b %Y %X", time.localtime()) |
391 | 398 |
self.temp_config.set(str(self.build_id), "modified", curr_time) |
... | ... | |
393 | 400 |
with open(temp_conf_file, 'wb') as tcf: |
394 | 401 |
self.temp_config.write(tcf) |
395 | 402 |
|
403 |
def read_temp_config(self, option): |
|
404 |
"""Read from temporary_config file""" |
|
405 |
# If build_id is None use the latest one |
|
406 |
if self.build_id is None: |
|
407 |
ids = self.temp_config.sections() |
|
408 |
if ids: |
|
409 |
self.build_id = int(ids[-1]) |
|
410 |
else: |
|
411 |
self.logger.error("No sections in temporary config file") |
|
412 |
sys.exit(1) |
|
413 |
self.logger.debug("Will use \"%s\" as build id" |
|
414 |
% _green(self.build_id)) |
|
415 |
# Read specified option |
|
416 |
return self.temp_config.get(str(self.build_id), option) |
|
417 |
|
|
396 | 418 |
def setup_fabric(self): |
397 | 419 |
"""Setup fabric environment""" |
398 | 420 |
self.logger.info("Setup fabric parameters..") |
399 |
fabric.env.user = self.temp_config.get(str(self.build_id), |
|
400 |
'server_user') |
|
401 |
fabric.env.host_string = \ |
|
402 |
self.temp_config.get(str(self.build_id), 'server_ip') |
|
403 |
fabric.env.port = self.temp_config.getint(str(self.build_id), |
|
404 |
'server_port') |
|
405 |
fabric.env.password = self.temp_config.get(str(self.build_id), |
|
406 |
'server_passwd') |
|
421 |
fabric.env.user = self.read_temp_config('server_user') |
|
422 |
fabric.env.host_string = self.read_temp_config('server_ip') |
|
423 |
fabric.env.port = int(self.read_temp_config('server_port')) |
|
424 |
fabric.env.password = self.read_temp_config('server_passwd') |
|
407 | 425 |
fabric.env.connection_attempts = 10 |
408 | 426 |
fabric.env.shell = "/bin/bash -c" |
409 | 427 |
fabric.env.disable_known_hosts = True |
Also available in: Unified diff