Ejemplo n.º 1
0
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))
Ejemplo n.º 2
0
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]
Ejemplo n.º 3
0
    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)
Ejemplo n.º 4
0
 def test_hosts(self):
     foreman_helper.hosts()