예제 #1
0
    def add_object(self, cmdb_object, template_data):
        # get variables from object
        hostname = self.format_hostname(str(self._export_vars.get("hostname", ExportVariable("hostname", "default")).get_value(cmdb_object, template_data)))
        ip = self.format_ip(str(self._export_vars.get("ip", ExportVariable("ip", "")).get_value(cmdb_object, template_data)))

        # ignore CmdbObject,
        if ip == "" or hostname == "":
            self.set_msg('Ignore CmdbObject ID:%s. IP and/or hostname is invalid' % cmdb_object.object_information['object_id'])

        # check if a DNS record exist for object
        if hostname in self.__existing_records.keys():
            # check if entry has changed
            if self.__existing_records[hostname]["data"] != ip:
                if hostname not in self.__created_records.keys():
                    # recreate entry
                    self.delete_a_records(self.__domain_name, hostname)
                    self.add_a_record(self.__domain_name, hostname, ip)

            # delete entry from exitsing records array
            del self.__existing_records[hostname]
        else:
            # if not create a new one
            if hostname not in self.__created_records.keys():
                self.add_a_record(self.__domain_name, hostname, ip)

        # save to created records
        self.__created_records[hostname] = ip
예제 #2
0
    def add_object(self, cmdb_object, template_data):
        # get hostname for ansible inventory
        hostname = self._export_vars.get("hostname",
                                         ExportVariable("hostname",
                                                        "default")).get_value(
                                                            cmdb_object,
                                                            template_data)

        if hostname:
            self.host_list.append(hostname)

        # walk through all variables to get groups and hostvars
        groups = []
        hostvars = {}

        for v_name in self.__variables:
            # check if it is a "group_" variable
            matches = re.search(r'group_(.*)$', v_name)
            if matches:
                group_name = matches.group(1)
                group_value = self._export_vars.get(
                    v_name,
                    ExportVariable(v_name,
                                   "")).get_value(cmdb_object, template_data)
                # check if the value is true
                if group_name != 'all' and group_value in ['true', 'True']:
                    # write to ansible group store
                    groups.append(group_name)

            # check if it is a "hostvar_" variable
            matches = re.search(r'hostvar_(.*)$', v_name)
            if matches:
                host_var_name = matches.group(1)
                host_var_value = self._export_vars.get(
                    v_name,
                    ExportVariable(v_name,
                                   "")).get_value(cmdb_object, template_data)
                hostvars.update({host_var_name: host_var_value})

        # put all hosts into ansible group all
        groups.append('all')

        # write hostvars to ansible hostvars store
        self.ansible_hostvars.update({hostname: hostvars})

        # update ansible groups
        for group in groups:
            if group not in self.ansible_groups:
                self.ansible_groups[group] = {}
                self.ansible_groups[group]['hosts'] = []
            self.ansible_groups[group]['hosts'].append(hostname)
예제 #3
0
 def add_object(self, cmdb_object, template_data):
     row = {}
     row["object_id"] = str(cmdb_object.object_information['object_id'])
     row["variables"] = {}
     for key in self._export_vars:
         row["variables"][key] = str(self._export_vars.get(key, ExportVariable(key, "")).get_value(cmdb_object, template_data))
     self.__rows.append(row)
예제 #4
0
 def add_object(self, cmdb_object, template_data):
     row = {}
     for key in self.__variables:
         if key not in self.header:
             self.header.append(key)
         row.update({key: str(self._export_vars.get(key, ExportVariable(key, "")).get_value(cmdb_object, template_data))})
     self.rows.append(row)
예제 #5
0
 def add_object(self, cmdb_object, template_data):
     # add data for insert statement
     for table in self.__tables:
         varname = "table_" + table
         self.__table_data[table].append(
             str(
                 self._export_vars.get(varname, ExportVariable(
                     varname, "")).get_value(cmdb_object, template_data)))
예제 #6
0
    def add_object(self, cmdb_object, template_data):
        # init error handling
        warning = False

        # get node variables
        node_foreignid = cmdb_object.object_information['object_id']
        node_label = self._export_vars.get("nodelabel", ExportVariable("nodelabel", "undefined")).get_value(cmdb_object, template_data)
        node_location = self._export_vars.get("location", ExportVariable("location", "default")).get_value(cmdb_object, template_data)

        # get interface information
        interfaces_in = []
        interfaces_in.append(self._export_vars.get("ip", ExportVariable("ip", "127.0.0.1")).get_value(cmdb_object, template_data))
        interfaces_in.extend(self._export_vars.get("furtherIps", ExportVariable("furtherIps", "[]")).get_value(cmdb_object, template_data).split(";"))
        # validate interfaces
        interfaces = []
        for interface in interfaces_in:
            if self.__check_ip(interface):
                interfaces.append(interface)
            else:
                warning = True
        interfaces = list(set(interfaces))

        # get category information
        categories = []
        for export_var in self._export_vars:
            if export_var.startswith("category_"):
                categories.append(self._export_vars.get(export_var).get_value(cmdb_object, template_data))

        # get asset information
        assets = {}
        for export_var in self._export_vars:
            if export_var.startswith("asset_"):
                asset_name = export_var.replace("asset_", "", 1)
                asset_value = self.__check_asset(asset_name, self._export_vars.get(export_var).get_value(cmdb_object, template_data))
                if asset_value:
                    assets[asset_name] = asset_value

        # create node XML structure
        # XML: node
        node_xml_attr = {}
        node_xml_attr["foreign-id"] = str(node_foreignid)
        node_xml_attr["node-label"] = str(node_label)
        if node_location != "default":
            node_xml_attr["location"] = str(node_location)
        node_xml = ET.Element("node", node_xml_attr)
        # XML: interface
        for interface in interfaces:
            interface_xml_attr = {}
            interface_xml_attr["ip-addr"] = str(interface)
            interface_xml = ET.SubElement(node_xml, "interface", interface_xml_attr)
            for service in self.__services:
                service_xml_attr = {}
                service_xml_attr["service-name"] = str(service)
                ET.SubElement(interface_xml, "monitored-service", service_xml_attr)
        # XML: categories
        for category in categories:
            if category:
                cat_xml_attr = {}
                cat_xml_attr["name"] = str(category)
                ET.SubElement(node_xml, "category", cat_xml_attr)
        # XML: assets
        for asset in assets:
            asset_xml_attr = {}
            asset_xml_attr["name"] = asset
            asset_xml_attr["value"] = assets[asset]
            ET.SubElement(node_xml, "asset", asset_xml_attr)
        # XML: append structure
        self.__xml.append(node_xml)

        # update SNMP config if option is set
        if self.__snmp_export:
            snmp_ip = str(self._export_vars.get("ip", ExportVariable("ip", "127.0.0.1")).get_value(cmdb_object, template_data))
            snmp_community = str(self._export_vars.get("snmp_community", ExportVariable("snmp_community", "public")).get_value(cmdb_object, template_data))
            snmp_version = str(self._export_vars.get("snmp_version", ExportVariable("snmp_version", "v2c")).get_value(cmdb_object, template_data))
            self.__onms_update_snmpconf_v12(snmp_ip, snmp_community, snmp_version)

        # update error counter
        self.__obj_successful.append(cmdb_object.object_information['object_id'])
        if warning:
            self.__obj_warning.append(cmdb_object.object_information['object_id'])