Revision c441b6a7

b/ci/snf-ci
27 27
    RUN_BURNIN_CMD,
28 28
]
29 29

  
30
CLEAN_CONFIG_CMDS = [CREATE_SERVER_CMD, ALL_CMDS]
31

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

  
34 32
command:
......
63 61
    parser.add_option("--ssh-keys", dest="ssh_keys", default=None,
64 62
                      help="Upload/Install the public ssh keys contained"
65 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.")
66 71
    parser.add_option("--fetch-packages", dest="fetch_packages",
67 72
                      default=None,
68 73
                      help="Download the debian packages that were created"
......
98 103
    else:
99 104
        setattr(options, command, True)
100 105

  
101
    cleanup_config = command in CLEAN_CONFIG_CMDS
102 106
    synnefo_ci = SynnefoCI(config_file=options.config_file,
103
                           cleanup_config=cleanup_config,
107
                           build_id=options.build_id,
104 108
                           cloud=options.kamaki_cloud)
105 109

  
106 110
    if getattr(options, CREATE_SERVER_CMD, False):
b/ci/utils.py
111 111
class SynnefoCI(object):
112 112
    """SynnefoCI python class"""
113 113

  
114
    def __init__(self, config_file=None, cleanup_config=False, cloud=None):
114
    def __init__(self, config_file=None, build_id=None, cloud=None):
115 115
        """ Initialize SynnefoCI python class
116 116

  
117 117
        Setup logger, local_dir, config and kamaki
......
140 140
            config_file = DEFAULT_CONFIG_FILE
141 141
        if not os.path.isabs(config_file):
142 142
            config_file = os.path.join(self.ci_dir, config_file)
143

  
144 143
        self.config = ConfigParser()
145 144
        self.config.optionxform = str
146 145
        self.config.read(config_file)
146

  
147
        # Read temporary_config file
147 148
        temp_config = self.config.get('Global', 'temporary_config')
148
        if cleanup_config:
149
            try:
150
                os.remove(temp_config)
151
            except OSError:
152
                pass
149
        self.temp_config = ConfigParser()
150
        self.temp_config.optionxform = str
151
        self.temp_config.read(temp_config)
152
        if build_id is not None:
153
            self.build_id = build_id
153 154
        else:
154
            self.config.read(self.config.get('Global', 'temporary_config'))
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
155 170

  
156 171
        # Set kamaki cloud
157 172
        if cloud is not None:
......
234 249
    @_check_kamaki
235 250
    def destroy_server(self, wait=True):
236 251
        """Destroy slave server"""
237
        server_id = self.config.getint('Temporary Options', 'server_id')
252
        server_id = self.temp_config.getint(str(self.build_id), 'server_id')
238 253
        self.logger.info("Destoying server with id %s " % server_id)
239 254
        self.cyclades_client.delete_server(server_id)
240 255
        if wait:
......
369 384
        else:
370 385
            self.logger.debug("No ssh keys found")
371 386

  
372
    def write_config(self, option, value, section="Temporary Options"):
387
    def write_config(self, option, value):
373 388
        """Write changes back to config file"""
374
        try:
375
            self.config.add_section(section)
376
        except DuplicateSectionError:
377
            pass
378
        self.config.set(section, option, str(value))
389
        self.temp_config.set(str(self.build_id), option, str(value))
390
        curr_time = time.strftime("%a, %d %b %Y %X", time.localtime())
391
        self.temp_config.set(str(self.build_id), "modified", curr_time)
379 392
        temp_conf_file = self.config.get('Global', 'temporary_config')
380 393
        with open(temp_conf_file, 'wb') as tcf:
381
            self.config.write(tcf)
394
            self.temp_config.write(tcf)
382 395

  
383 396
    def setup_fabric(self):
384 397
        """Setup fabric environment"""
385 398
        self.logger.info("Setup fabric parameters..")
386
        fabric.env.user = self.config.get('Temporary Options', 'server_user')
399
        fabric.env.user = self.temp_config.get(str(self.build_id),
400
                                               'server_user')
387 401
        fabric.env.host_string = \
388
            self.config.get('Temporary Options', 'server_ip')
389
        fabric.env.port = self.config.getint('Temporary Options',
390
                                             'server_port')
391
        fabric.env.password = self.config.get('Temporary Options',
392
                                              'server_passwd')
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')
393 407
        fabric.env.connection_attempts = 10
394 408
        fabric.env.shell = "/bin/bash -c"
395 409
        fabric.env.disable_known_hosts = True

Also available in: Unified diff