Beispiel #1
0
def updateCentreonHosts(poller):
    print("[ ] Checking if Centreon is up-to-date...")
    checkRudderCentreonHostGroup()
    centreon_hosts = Host()
    rudder_nodes = json.load(open(jsonTmp))

    for rn in rudder_nodes:
        if not any(h['name'] == rn['rudder_id']
                   for h in centreon_hosts.list()['result']):
            print("[ ] Unregistered Rudder node found (id " + rn['rudder_id'] +
                  "). Adding it to Centreon...")
            centreon_hosts.add(
                rn['rudder_id'],
                "Rudder " + rn['node_type'] + " node " + rn['hostname'],
                rn['ip_address'], '', poller, '')
            checkIfNodeInRudderGroup(rn['rudder_id'], centreon_hosts)
    for ch in centreon_hosts.list()['result']:
        if any(g['name'] == 'rudder-nodes'
               for g in centreon_hosts.gethostgroup(ch['name'])
               ['result']) and not any(ch['name'] == rn['rudder_id']
                                       for rn in rudder_nodes):
            print(
                "[ ] Host " + ch['name'] +
                " not listed in Rudder but appearing in rudder-nodes Centreon host group. Deleting host..."
            )
            centreon_hosts.delete(ch['name'])
            print("[+] Done")
    print("[+] Done")
Beispiel #2
0
def addHostOnRudderHook(rudderID, poller):
    data = getRequestToRudderAPI("/nodes/" + rudderID)
    node = dictifyNode(data['data']['nodes'][0])
    centreon_hosts = Host()
    if not any(h['name'] == node['rudder_id']
               for h in centreon_hosts.list()['result']):
        centreon_hosts.add(
            node['rudder_id'],
            "Rudder " + node['node_type'] + " node " + node['hostname'],
            node['ip_address'], '', poller, '')
    checkIfNodeInRudderGroup(node['rudder_id'], centreon_hosts)
Beispiel #3
0
    def test_host_setparent(self, host_load_data):
        host = host_load_data
        with open(resource_dir / 'test_host_parent.json') as parent:
            parents = Host(json.load(parent))

        data = dict()
        data['action'] = 'delparent'
        data['object'] = 'HOST'
        data['values'] = ["mail-uranus-frontend", "mail-neptune-frontend"]

        with patch('requests.post') as patched_post:
            host.deleteparent(parents)
            patched_post.assert_called_with(self.clapi_url,
                                            headers=self.headers,
                                            data=json.dumps(data),
                                            verify=True)
Beispiel #4
0
def applyRudderMonitoringConfigurations(conf):
    centreon_hosts = Host()
    register = configparser.ConfigParser()
    register.read(registerFile)

    for dir in next(os.walk('/var/rudder/shared-files/root/files'))[1]:
        try:
            confcsv = csv.reader(
                open('/var/rudder/shared-files/root/files/' + dir +
                     '/rudder_monitoring.csv'))
        except:
            print(
                '[!] Node ' + dir +
                ' has no rudder monitoring config file, considering it empty...'
            )
            confcsv = []

        if not any(h['name'] == dir for h in centreon_hosts.list()['result']):
            print('[!] Node ' + dir +
                  ' is not registered in Centreon, skipping...')
            continue

        print('[ ] Applying conf to node ' + dir + '...')
        csvTmpList = []
        csvMacroKeyList = []
        for r in confcsv:
            if (r[0] == 'template'):
                csvTmpList.append(r[1])
                if not any(t['name'] == r[1]
                           for t in centreon_hosts.gettemplate(dir)['result']):
                    try:
                        centreon_hosts.addtemplate(dir, r[1])
                        centreon_hosts.applytemplate(dir)
                        registerTemplate(dir, r[1], register)
                    except HTTPError:
                        print('[!] Centreon API error, check if template ' +
                              r[1] + ' exists')
                else:
                    print('[ ] Template ' + r[1] +
                          ' already applied to node ' + dir)
                    registerTemplate(dir, r[1], register)
            elif (r[0] == 'param'):
                csvMacroKeyList.append(r[1])
                centreon_hosts.setmacro(dir, r[1], ''.join(r[2:]))
                registerMacro(dir, r[1], ''.join(r[2:]), register)
            else:
                print('[!] Incorrect config parameter type ' + r[0] +
                      ', skipping...')

        for t in centreon_hosts.gettemplate(dir)['result']:
            if not any(t['name'] == n
                       for n in csvTmpList) and templateWasRegistered(
                           dir, t['name'], register):
                unregisterTemplate(dir, t['name'], register)
                centreon_hosts.deletetemplate(dir, t['name'])

        for mk in centreon_hosts.getmacro(dir)['result']:
            if not any(mk['macro name'] == n
                       for n in csvMacroKeyList) and macroWasRegistered(
                           dir, mk['macro name'], register):
                unregisterMacro(dir, mk['macro name'], register)
                centreon_hosts.deletemacro(dir, mk['macro name'])

        #This ensures we get no duplicates in register in case we have to re-add an already registered
        #register[dir]['templates'] = ','.join(list(set(register[dir]['templates'].split(','))))

    register.write(open(registerFile, 'w'))
    print('[ ] Reloading Centreon poller config, restarting poller...')
    Webservice.getInstance().restart_poller(conf['CENTREON']['centreonPoller'])
    print('[+] Done')
Beispiel #5
0
def delHostOnRudderHook(rudderID):
    centreon_hosts = Host()
    if any(h['name'] == rudderID for h in centreon_hosts.list()['result']):
        centreon_hosts.disable(rudderID)
        centreon_hosts.delete(rudderID)
 def host_load_data(self):
     with open(resource_dir / 'test_host_obj.json') as hdata:
         return Host(json.load(hdata))