def build_host_data(mac, local, ip, build=True): hosts_num = foreman_helper.hosts() or {} if not ip: ipaddr = foreman_helper.unused_ip(mac) else: ipaddr = ip if len(hosts_num) == 0: hostname = "master" else: hostname = "us" + str(len(hosts_num) + 1) host_info = { 'name': hostname, 'ip': ipaddr, 'mac': mac, 'build': build } hg = foreman_helper.host_groups() role = "master" if local == "no": hostgroup_id = judgement.judge_hostgroup() else: hostgroup_id = hg['local'] for ro in hg: if hg[ro] == hostgroup_id: role = ro drivers = _load_drivers() host_info['hostgroup_id'] = hostgroup_id for driver in drivers: if role in driver.role: driver.action(len(hosts_num) + 1, host_info['name'], ip=ipaddr, role=hostgroup_id) LOG.info("Server To Post: %s" % host_info) return jsonutils.loads(foreman_helper.create_host(host_info))
def judge_hostgroup(): hosts_nu = len(foreman_helper.hosts()) hosts_nu += 1 (upper, sequence) = _upper_bound(hosts_nu) while len(sequence) != 0: node = sequence.pop(0) if upper[node] == "max": return foreman_helper.host_groups()[node] if hosts_nu - upper[node] > 0: hosts_nu -= upper[node] else: return foreman_helper.host_groups()[node]
def action(self, count, hostname, **kwargs): # get action informations ip = kwargs['ip'] post_role = kwargs['role'] hosts = foreman_helper.hosts() LOG.info("get information ip: %s, role: %s, hosts: %s" % (ip, post_role, hosts)) # init parameters result = "" selected_lookup = [] LOG.info("increase ip list change: %s" % ip) # get value of lookup_keys and lookup_key_ids for host in hosts: hn = host['host']['name'] lv = self.dbapi.find_lookup_value_by_id_match( "fqdn=%s" % hn, self.key) if len(lv) > 0: selected_lookup.append(lv[0].id) result = lv[0].value if self.assistant_key: lv2 = self.dbapi.find_lookup_value_by_id_match( "fqdn=%s" % hn, self.assistant_key) if len(lv2) > 0: selected_lookup.append(lv2[0].id) result = lv2[0].value LOG.info("now selected_lookup_values are: %s, result are: %s" % (selected_lookup, result)) # fromat judgeing format_types = {"ipaddr": ip, "hostname": hostname} for format_type in format_types: if format_type in self.format: form = self.format.replace(format_type, format_types[format_type]) LOG.info("using form: %s" % form) if result == "": result += "%s" % form else: result += ",%s" % form # append new ip format to old lookup_values for selected_lu in selected_lookup: LOG.info( "update values to selected_lookup_value: %s, result: %s" % (selected_lu, result)) lookup_values = { "value": str(result), } self.dbapi.update_lookup_value(selected_lu, lookup_values) # create a new lookup_values if post_role == 2: result_key = self.assistant_key else: result_key = self.key lookup_values = { "match": "fqdn=%s.ustack.in" % hostname, "value": str(result), "lookup_key_id": result_key } LOG.info("add new lookup_values: %s" % lookup_values) self.dbapi.create_lookup_value(lookup_values)
def test_hosts(self): foreman_helper.hosts()