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 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 test_host_groups(self): with contextlib.nested( mock.patch("mimic.engine.foreman_helper.get_remote_data", mock.MagicMock( return_value=[ { "hostgroup": { "id": "13", "name": "master" } }, { "hostgroup": { "id": "4", "name": "compute" } } ] )) ): data = foreman_helper.host_groups() print data