コード例 #1
0
ファイル: ssh_onstor.py プロジェクト: smagowr/ralph
def scan_address(ip_address, **kwargs):
    if kwargs.get('http_family') not in ('sscccc', ):
        raise NoMatchError("It's not an ONStor.")
    if 'nx-os' in kwargs.get('snmp_name', '').lower():
        raise NoMatchError("Incompatible Nexus found.")
    user = SETTINGS.get('user')
    password = SETTINGS.get('password')
    messages = []
    result = get_base_result_template('ssh_onstor', messages)
    if not user or not password:
        result['status'] = 'error'
        messages.append(
            'Not configured. Set SSH_ONSTOR_USER and SSH_ONSTOR_PASSWORD in '
            'your configuration file.', )
    else:
        try:
            device_info = _ssh_onstor(ip_address, user, password)
        except ConnectionError as e:
            result['status'] = 'error'
            messages.append(unicode(e))
        else:
            result.update({
                'status': 'success',
                'device': device_info,
            })
    return result
コード例 #2
0
ファイル: ipmi.py プロジェクト: alberto-g/ralph
def scan_address(ip_address, **kwargs):
    http_family = kwargs.get('http_family', '')
    if http_family not in (
        'Sun', 'Thomas-Krenn', 'Oracle-ILOM-Web-Server', 'IBM System X',
    ):
        raise NoMatchError('It is not compatible device for this plugin.')
    user = SETTINGS.get('user')
    password = SETTINGS.get('password')
    messages = []
    result = get_base_result_template('ipmi', messages)
    if not user or not password:
        result['status'] = 'error'
        messages.append('Not configured.')
    else:
        ipmitool = IPMITool(ip_address, user, password)
        try:
            device_info = _ipmi(ipmitool)
        except (AuthError, Error) as e:
            result['status'] = 'error'
            messages.append(unicode(e))
        else:
            result.update({
                'status': 'success',
                'device': device_info,
            })
    return result
コード例 #3
0
ファイル: ssh_onstor.py プロジェクト: 4i60r/ralph
def scan_address(ip_address, **kwargs):
    if kwargs.get('http_family') not in ('sscccc',):
        raise NoMatchError("It's not an ONStor.")
    if 'nx-os' in (kwargs.get('snmp_name', '') or '').lower():
        raise NoMatchError("Incompatible Nexus found.")
    user = SETTINGS.get('user')
    password = SETTINGS.get('password')
    messages = []
    result = get_base_result_template('ssh_onstor', messages)
    if not user or not password:
        result['status'] = 'error'
        messages.append(
            'Not configured. Set SSH_ONSTOR_USER and SSH_ONSTOR_PASSWORD in '
            'your configuration file.',
        )
    else:
        try:
            device_info = _ssh_onstor(ip_address, user, password)
        except ConnectionError as e:
            result['status'] = 'error'
            messages.append(unicode(e))
        else:
            result.update({
                'status': 'success',
                'device': device_info,
            })
    return result
コード例 #4
0
ファイル: ssh_juniper.py プロジェクト: deejay1/ralph
def scan_address(ip_address, **kwargs):
    snmp_name = kwargs.get("snmp_name", "") or ""
    http_family = kwargs.get("http_family", "") or ""
    if (snmp_name and "juniper" not in snmp_name.lower()) and (
        http_family and http_family.strip().lower() not in ("juniper",)
    ):
        raise NoMatchError("It is not Juniper.")
    user = SETTINGS.get("user")
    password = SETTINGS.get("password")
    messages = []
    result = get_base_result_template("ssh_juniper", messages)
    if not user or not password:
        result["status"] = "error"
        messages.append("Not configured. Set SSH_SSG_USER and SSH_SSG_PASSWORD in your " "configuration file.")
    else:
        try:
            ssh = _connect_ssh(ip_address, user, password)
        except ConnectionError as e:
            result["status"] = "error"
            messages.append(unicode(e))
        else:
            try:
                device_info = _ssh_juniper(ssh, ip_address)
            finally:
                ssh.close()
            result.update({"status": "success", "device": device_info})
    return result
コード例 #5
0
ファイル: ssh_proxmox.py プロジェクト: lmzopq/ralph
def scan_address(ip_address, **kwargs):
    if 'nx-os' in (kwargs.get('snmp_name') or '').lower():
        raise NoMatchError('Incompatible Nexus found.')
    if kwargs.get('http_family') not in ('Proxmox', ):
        raise NoMatchError('It is not Proxmox.')
    user = SETTINGS.get('user')
    password = SETTINGS.get('password')
    messages = []
    result = get_base_result_template('ssh_proxmox', messages)
    if not user or not password:
        result['status'] = 'error'
        messages.append(
            'Not configured. Set SSH_USER and SSH_PASSWORD in your '
            'configuration file.', )
    else:
        try:
            device_info = _ssh_proxmox(ip_address, user, password)
        except (ConnectionError, NoMatchError) as e:
            result['status'] = 'error'
            messages.append(unicode(e))
        else:
            result.update({
                'status': 'success',
                'device': device_info,
            })
    return result
コード例 #6
0
def scan_address(ip_address, **kwargs):
    snmp_name = (kwargs.get('snmp_name', '') or '')
    http_family = (kwargs.get('http_family', '') or '')
    if ((snmp_name and 'juniper' not in snmp_name.lower()) and
        (http_family and http_family.strip().lower() not in ('juniper', ))):
        raise NoMatchError('It is not Juniper.')
    user = SETTINGS.get('user')
    password = SETTINGS.get('password')
    messages = []
    result = get_base_result_template('ssh_juniper', messages)
    if not user or not password:
        result['status'] = 'error'
        messages.append(
            'Not configured. Set SSH_SSG_USER and SSH_SSG_PASSWORD in your '
            'configuration file.', )
    else:
        try:
            ssh = _connect_ssh(ip_address, user, password)
        except ConnectionError as e:
            result['status'] = 'error'
            messages.append(unicode(e))
        else:
            try:
                device_info = _ssh_juniper(ssh, ip_address)
            finally:
                ssh.close()
            result.update({
                'status': 'success',
                'device': device_info,
            })
    return result
コード例 #7
0
ファイル: snmp_macs.py プロジェクト: wmatyskiewicz/ralph
def scan_address(ip_address, **kwargs):
    snmp_name = kwargs.get('snmp_name', '')
    snmp_version = kwargs.get('snmp_version', '2c') or '2c'
    if snmp_version == '3':
        snmp_community = SETTINGS['snmp_v3_auth']
    else:
        snmp_community = str(kwargs['snmp_community'])
    messages = []
    result = get_base_result_template('snmp_macs', messages)
    try:
        device_info = _snmp_mac(
            ip_address,
            snmp_name,
            snmp_community,
            snmp_version,
            messages,
        )
    except Error as e:
        messages.append(unicode(e))
        result.update(status="error")
    else:
        result.update({
            'status': 'success',
            'device': device_info,
        })
    return result
コード例 #8
0
ファイル: ipmi.py プロジェクト: lmzopq/ralph
def scan_address(ip_address, **kwargs):
    http_family = kwargs.get('http_family', '')
    if http_family not in (
            'Sun',
            'Thomas-Krenn',
            'Oracle-ILOM-Web-Server',
            'IBM System X',
    ):
        raise NoMatchError('It is not compatible device for this plugin.')
    user = SETTINGS.get('user')
    password = SETTINGS.get('password')
    messages = []
    result = get_base_result_template('ipmi', messages)
    if not user or not password:
        result['status'] = 'error'
        messages.append('Not configured.')
    else:
        ipmitool = IPMITool(ip_address, user, password)
        try:
            device_info = _ipmi(ipmitool)
        except (AuthError, Error) as e:
            result['status'] = 'error'
            messages.append(unicode(e))
        else:
            result.update({
                'status': 'success',
                'device': device_info,
            })
    return result
コード例 #9
0
ファイル: ssh_juniper.py プロジェクト: ReJeCtAll/ralph
def scan_address(ip_address, **kwargs):
    http_family = (kwargs.get('http_family', '') or '')
    if http_family and http_family.strip().lower() not in ('juniper',):
        raise NoMatchError('It is not Juniper.')
    user = SETTINGS.get('user')
    password = SETTINGS.get('password')
    messages = []
    result = get_base_result_template('ssh_juniper', messages)
    if not user or not password:
        result['status'] = 'error'
        messages.append(
            'Not configured. Set SSH_SSG_USER and SSH_SSG_PASSWORD in your '
            'configuration file.',
        )
    else:
        try:
            ssh = _connect_ssh(ip_address, user, password)
        except ConnectionError as e:
            result['status'] = 'error'
            messages.append(unicode(e))
        else:
            try:
                device_info = _ssh_juniper(ssh, ip_address)
            finally:
                ssh.close()
            result.update({
                'status': 'success',
                'device': device_info,
            })
    return result
コード例 #10
0
ファイル: vmware.py プロジェクト: pydubreucq/ralph
def scan_address(ip_address, **kwargs):
    http_family = (kwargs.get("http_family", "") or "").strip().lower()
    snmp_name = (kwargs.get("snmp_name", "") or "").strip().lower()
    if all(("esx" not in http_family, "esx" not in snmp_name, "vmware" not in snmp_name)):
        raise NoMatchError("It is not VMWare.")
    user = SETTINGS.get("user")
    password = SETTINGS.get("password")
    messages = []
    result = get_base_result_template("vmware", messages)
    if not user or not password:
        result["status"] = "error"
        messages.append("Not configured. Set VMWARE_USER and VMWARE_PASSWORD in your " "configuration file.")
    else:
        try:
            server_conn = _connect(ip_address, user, password)
        except VIApiException as e:
            result["status"] = "error"
            messages.append(unicode(e))
        else:
            try:
                if "vcenter" in server_conn.get_server_type().lower():
                    raise NoMatchError(
                        "It is `VMware vCenter Server`. To save real "
                        "hypervisor - VM connecion you should scan only "
                        "VMware ESXi servers."
                    )
                device_info = _vmware(server_conn, ip_address, messages)
            finally:
                server_conn.disconnect()
            result.update({"status": "success", "device": device_info})
    return result
コード例 #11
0
def scan_address(ip_address, **kwargs):
    snmp_name = kwargs.get('snmp_name', '')
    snmp_version = kwargs.get('snmp_version', '2c') or '2c'
    if snmp_version == '3':
        snmp_community = SETTINGS['snmp_v3_auth']
    else:
        snmp_community = str(kwargs['snmp_community'])
    messages = []
    result = get_base_result_template('snmp_macs', messages)
    try:
        device_info = _snmp_mac(
            ip_address,
            snmp_name,
            snmp_community,
            snmp_version,
            messages,
        )
    except Error as e:
        messages.append(unicode(e))
        result.update(status="error")
    else:
        result.update({
            'status': 'success',
            'device': device_info,
        })
    return result
コード例 #12
0
ファイル: idrac.py プロジェクト: deejay1/ralph
def scan_address(ip_address, **kwargs):
    http_family = (kwargs.get('http_family', '') or '').strip()
    if http_family and http_family.lower() not in ('dell', 'embedthis-http'):
        raise NoMatchError('It is not Dell.')
    user = SETTINGS.get('user')
    password = SETTINGS.get('password')
    messages = []
    result = get_base_result_template('idrac', messages)
    if not user or not password:
        result.update(status='error')
        messages.append('Not configured.')
    else:
        idrac_manager = IDRAC(ip_address, user, password)
        try:
            device_info = idrac_device_info(idrac_manager)
        except Error as e:
            result.update(status='error')
            messages.append(unicode(e))
        else:
            device_info['management_ip_addresses'] = [ip_address]
            result.update({
                'status': 'success',
                'device': device_info,
            })
    return result
コード例 #13
0
def scan_address(ip_address, **kwargs):
    http_family = (kwargs.get('http_family', '') or '').strip()
    if http_family and http_family.lower() not in ('dell', 'embedthis-http'):
        raise NoMatchError('It is not Dell.')
    user = SETTINGS.get('user')
    password = SETTINGS.get('password')
    messages = []
    result = get_base_result_template('idrac', messages)
    if not user or not password:
        result.update(status='error')
        messages.append('Not configured.')
    else:
        idrac_manager = IDRAC(ip_address, user, password)
        try:
            device_info = idrac_device_info(idrac_manager)
        except Error as e:
            result.update(status='error')
            messages.append(unicode(e))
        else:
            device_info['management_ip_addresses'] = [ip_address]
            result.update({
                'status': 'success',
                'device': device_info,
            })
    return result
コード例 #14
0
ファイル: ssh_proxmox.py プロジェクト: 4i60r/ralph
def scan_address(ip_address, **kwargs):
    if 'nx-os' in (kwargs.get('snmp_name') or '').lower():
        raise NoMatchError('Incompatible Nexus found.')
    if kwargs.get('http_family') not in ('Proxmox', 'Proxmox1'):
        raise NoMatchError('It is not Proxmox 1.')
    user = SETTINGS.get('user')
    password = SETTINGS.get('password')
    messages = []
    result = get_base_result_template('ssh_proxmox', messages)
    if not user or not password:
        result['status'] = 'error'
        messages.append(
            'Not configured. Set SSH_USER and SSH_PASSWORD in your '
            'configuration file.',
        )
    else:
        try:
            device_info = _ssh_proxmox(ip_address, user, password)
        except (ConnectionError, NoMatchError) as e:
            result['status'] = 'error'
            messages.append(unicode(e))
        else:
            result.update({
                'status': 'success',
                'device': device_info,
            })
    return result
コード例 #15
0
def scan_address(ip_address, **kwargs):
    if 'nx-os' in (kwargs.get('snmp_name', '') or '').lower():
        raise NoMatchError('Incompatible Nexus found.')
    kwargs['guessmodel'] = gvendor, gmodel = guessmodel.guessmodel(**kwargs)
    if gvendor != 'Cisco' or gmodel not in ('', ):
        raise NoMatchError('It is not Cisco.')
    ssh = _connect_ssh(ip_address)
    try:
        lines = ssh.asa_command(
            "show version | grep (^Hardware|Boot microcode|^Serial|address is)"
        )
    finally:
        ssh.close()
    pairs = parse.pairs(lines=[line.strip() for line in lines])
    sn = pairs.get('Serial Number', None)
    model, ram, cpu = pairs['Hardware'].split(',')
    boot_firmware = pairs['Boot microcode']
    macs = []
    for i in xrange(99):
        try:
            junk, label, mac = pairs['%d' % i].split(':')
        except KeyError:
            break
        mac = mac.split(',', 1)[0]
        mac = mac.replace('address is', '')
        mac = mac.replace('.', '').upper().strip()
        label = label.strip()
        if mac.replace(':', '').upper()[:6] not in MAC_PREFIX_BLACKLIST:
            macs.append(mac)
    ram_size = re.search('[0-9]+', ram).group()
    cpu_match = re.search('[0-9]+ MHz', cpu)
    cpu_speed = cpu_match.group()[:-4]
    cpu_model = cpu[:cpu_match.start()][4:].strip()
    result = get_base_result_template('ssh_cisco_asa')
    result.update({
        'status': 'success',
        'device': {
            'model_name':
            'Cisco ' + model,
            'type':
            str(DeviceType.firewall),
            'mac_adresses':
            macs,
            'boot_firmware':
            boot_firmware,
            'management_ip_addresses': [ip_address],
            'memory': [{
                'size': int(ram_size),
            }],
            'processors': [{
                'model_name': cpu_model,
                'speed': int(cpu_speed),
                'family': cpu_model,
            }],
        },
    })
    if sn not in SERIAL_BLACKLIST:
        result['device']['serial_number'] = sn
    return result
コード例 #16
0
ファイル: ssh_cisco_asa.py プロジェクト: 4i60r/ralph
def scan_address(ip_address, **kwargs):
    if 'nx-os' in (kwargs.get('snmp_name', '') or '').lower():
        raise NoMatchError('Incompatible Nexus found.')
    kwargs['guessmodel'] = gvendor, gmodel = guessmodel.guessmodel(**kwargs)
    if gvendor != 'Cisco' or gmodel not in ('',):
        raise NoMatchError('It is not Cisco.')
    if not SSH_USER or not SSH_PASS:
        raise NotConfiguredError(
            "SSH not configured in plugin {}.".format(__name__),
        )
    ssh = _connect_ssh(ip_address, SSH_USER, SSH_PASS)
    try:
        lines = ssh.asa_command(
            "show version | grep (^Hardware|Boot microcode|^Serial|address is)"
        )
    finally:
        ssh.close()
    pairs = parse.pairs(lines=[line.strip() for line in lines])
    sn = pairs.get('Serial Number', None)
    model, ram, cpu = pairs['Hardware'].split(',')
    boot_firmware = pairs['Boot microcode']
    macs = []
    for i in xrange(99):
        try:
            junk, label, mac = pairs['%d' % i].split(':')
        except KeyError:
            break
        mac = mac.split(',', 1)[0]
        mac = mac.replace('address is', '')
        mac = mac.replace('.', '').upper().strip()
        label = label.strip()
        if mac.replace(':', '').upper()[:6] not in MAC_PREFIX_BLACKLIST:
            macs.append(mac)
    ram_size = re.search('[0-9]+', ram).group()
    cpu_match = re.search('[0-9]+ MHz', cpu)
    cpu_speed = cpu_match.group()[:-4]
    cpu_model = cpu[:cpu_match.start()][4:].strip()
    result = get_base_result_template('ssh_cisco_asa')
    result.update({
        'status': 'success',
        'device': {
            'model_name': 'Cisco ' + model,
            'type': str(DeviceType.firewall),
            'mac_addresses': macs,
            'boot_firmware': boot_firmware,
            'management_ip_addresses': [ip_address],
            'memory': [{
                'size': int(ram_size),
            }],
            'processors': [{
                'model_name': cpu_model,
                'speed': int(cpu_speed),
                'family': cpu_model,
            }],
        },
    })
    if sn not in SERIAL_BLACKLIST:
        result['device']['serial_number'] = sn
    return result
コード例 #17
0
ファイル: ssh_cisco_catalyst.py プロジェクト: lmzopq/ralph
def scan_address(ip_address, **kwargs):
    if 'nx-os' in (kwargs.get('snmp_name', '') or '').lower():
        raise NoMatchError('Incompatible Nexus found.')
    if kwargs.get('http_family') not in ('Unspecified', 'Cisco'):
        raise NoMatchError('It is not Cisco.')
    ssh = _connect_ssh(ip_address)
    hostname = network.hostname(ip_address)
    try:
        ssh.cisco_command('terminal length 500')
        mac = '\n'.join(
            ssh.cisco_command(
                "show version | include Base ethernet MAC Address", ))
        raw = '\n'.join(ssh.cisco_command("show inventory"))
        subswitches = get_subswitches(ssh.cisco_command("show version"),
                                      hostname, ip_address)
    finally:
        ssh.close()
    matches = re.match('Base ethernet MAC Address\s+:\s*([0-9aA-Z:]+)', mac)
    if matches.groups():
        mac = matches.groups()[0]
    inventory = list(cisco_inventory(raw))
    dev_inv, parts = inventory[0], inventory[1:]
    sn = dev_inv['sn']
    result = get_base_result_template('ssh_cisco_catalyst')

    if subswitches:
        # virtual switch doesn't have own unique id, reuse first from stack
        sn += '-virtual'
        model_name = 'Virtual Cisco Catalyst %s' % dev_inv['pid']
        model_type = DeviceType.switch_stack
    else:
        model_name = 'Cisco Catalyst %s' % dev_inv['pid']
        model_type = DeviceType.switch
    result.update({
        'status': 'success',
        'device': {
            'hostname':
            hostname if hostname else ip_address,
            'model_name':
            model_name,
            'type':
            model_type.raw,
            'management_ip_addresses': [ip_address],
            'parts': [{
                'serial_number': part['sn'],
                'name': part['name'],
                'label': part['descr'],
            } for part in parts],
        },
    })
    if sn not in SERIAL_BLACKLIST:
        result['device']['serial_number'] = sn
    if subswitches:
        result['device']['subdevices'] = subswitches
    else:
        result['device']['mac_addresses'] = [mac]
    return result
コード例 #18
0
def scan_address(ip_address, **kwargs):
    messages = []
    result = get_base_result_template('ssh_ibm_bladecenter', messages)
    device = _blade_scan(ip_address)
    if not device:
        raise DeviceError("Malformed bladecenter device: %s" % ip_address)
    result['device'] = device
    result['status'] = 'success'
    return result
コード例 #19
0
ファイル: software.py プロジェクト: 4i60r/ralph
def scan_address(ip_address, **kwargs):
    http_family = kwargs.get('http_family', '') or ''
    messages = []
    result = get_base_result_template('software', messages)
    result['status'] = 'success'
    software = _detect_software(ip_address, http_family)
    if software:
        result['installed_software'] = software
    return result
コード例 #20
0
ファイル: software.py プロジェクト: srikanth4372/sample
def scan_address(ip_address, **kwargs):
    http_family = kwargs.get('http_family', '') or ''
    messages = []
    result = get_base_result_template('software', messages)
    result['status'] = 'success'
    software = _detect_software(ip_address, http_family)
    if software:
        result['installed_software'] = software
    return result
コード例 #21
0
ファイル: ssh_ganeti.py プロジェクト: pydubreucq/ralph
def scan_address(ip_address, **kwargs):
    snmp_name = kwargs.get("snmp_name", "") or ""
    if "nx-os" in snmp_name.lower():
        raise NoMatchError("Incompatible nexus found")
    device = run_ssh_ganeti(ip_address)
    ret = {"status": "success", "device": device}
    tpl = get_base_result_template("ssh_ganeti")
    tpl.update(ret)
    return tpl
コード例 #22
0
ファイル: ssh_cisco_catalyst.py プロジェクト: ReJeCtAll/ralph
def scan_address(ip_address, **kwargs):
    if 'nx-os' in (kwargs.get('snmp_name', '') or '').lower():
        raise NoMatchError('Incompatible Nexus found.')
    if kwargs.get('http_family') not in ('Unspecified', 'Cisco'):
        raise NoMatchError('It is not Cisco.')
    ssh = _connect_ssh(ip_address)
    hostname = network.hostname(ip_address)
    try:
        ssh.cisco_command('terminal length 500')
        mac = '\n'.join(ssh.cisco_command(
            "show version | include Base ethernet MAC Address",
        ))
        raw = '\n'.join(ssh.cisco_command("show inventory"))
        subswitches = get_subswitches(
            ssh.cisco_command("show version"), hostname, ip_address
        )
    finally:
        ssh.close()
    matches = re.match(
        'Base ethernet MAC Address\s+:\s*([0-9aA-Z:]+)', mac)
    if matches.groups():
        mac = matches.groups()[0]
    inventory = list(cisco_inventory(raw))
    dev_inv, parts = inventory[0], inventory[1:]
    sn = dev_inv['sn']
    result = get_base_result_template('ssh_cisco_catalyst')

    if subswitches:
        # virtual switch doesn't have own unique id, reuse first from stack
        sn += '-virtual'
        model_name = 'Virtual Cisco Catalyst %s' % dev_inv['pid']
        model_type = DeviceType.switch_stack
    else:
        model_name = 'Cisco Catalyst %s' % dev_inv['pid']
        model_type = DeviceType.switch
    result.update({
        'status': 'success',
        'device': {
            'hostname': hostname if hostname else ip_address,
            'model_name': model_name,
            'type': model_type.raw,
            'management_ip_addresses': [ip_address],
            'parts': [{
                'serial_number': part['sn'],
                'name': part['name'],
                'label': part['descr'],
            } for part in parts],
        },
    })
    if sn not in SERIAL_BLACKLIST:
        result['device']['serial_number'] = sn
    if subswitches:
        result['device']['subdevices'] = subswitches
    else:
        result['device']['mac_addresses'] = [MACAddressField.normalize(mac)]
    return result
コード例 #23
0
ファイル: ssh_ganeti.py プロジェクト: smagowr/ralph
def scan_address(ip_address, **kwargs):
    if 'nx-os' in kwargs.get('snmp_name', '').lower():
        raise NoMatchError("Incompatible nexus found")
    device = run_ssh_ganeti(ip_address)
    ret = {
        'status': 'success',
        'device': device,
    }
    tpl = get_base_result_template('ssh_ganeti')
    tpl.update(ret)
    return tpl
コード例 #24
0
ファイル: ssh_ganeti.py プロジェクト: andrzej-jankowski/ralph
def scan_address(ip_address, **kwargs):
    if 'nx-os' in kwargs.get('snmp_name', '').lower():
        raise NoMatchError("Incompatible nexus found")
    device = run_ssh_ganeti(ip_address)
    ret = {
        'status': 'success',
        'device': device,
    }
    tpl = get_base_result_template('ssh_ganeti')
    tpl.update(ret)
    return tpl
コード例 #25
0
ファイル: hp_oa.py プロジェクト: andrzej-jankowski/ralph
def scan_address(ip_address, **kwargs):
    messages = []
    result = get_base_result_template('hp_oa', messages)
    try:
        device_info = _hp_oa(ip_address)
    except (IncompatibleAnswerError, UncompleteAnswerError) as e:
        messages.append(unicode(e))
        result['status'] = 'error'
    else:
        result['status'] = 'success'
        result['device'] = device_info
    return result
コード例 #26
0
ファイル: hp_oa.py プロジェクト: smagowr/ralph
def scan_address(ip_address, **kwargs):
    messages = []
    result = get_base_result_template('hp_oa', messages)
    try:
        device_info = _hp_oa(ip_address)
    except (IncompatibleAnswerError, UncompleteAnswerError) as e:
        messages.append(unicode(e))
        result['status'] = 'error'
    else:
        result['status'] = 'success'
        result['device'] = device_info
    return result
コード例 #27
0
ファイル: dns_hostname.py プロジェクト: srikanth4372/sample
def scan_address(address, **kwargs):
    messages = []
    data = get_base_result_template('dns_hostname', messages)
    hostname = network.hostname(address)
    if hostname:
        data['device'] = {
            'hostname': hostname,
        }
        data['status'] = 'success'
    else:
        data['status'] = 'error'
    return data
コード例 #28
0
def scan_address(ip_address, **kwargs):
    ssh = _connect_ssh(ip_address)
    try:
        lines = ssh.asa_command(
            "show version | grep (^Hardware|Boot microcode|^Serial|address is)"
        )
        raw_inventory = '\n'.join(ssh.asa_command("show inventory"))
    finally:
        ssh.close()

    pairs = parse.pairs(lines=[line.strip() for line in lines])
    sn = pairs.get('Serial Number', None)
    model, ram, cpu = pairs['Hardware'].split(',')
    boot_firmware = pairs['Boot microcode']

    ethernets = []
    macs = []
    for i in xrange(99):
        try:
            junk, label, mac = pairs['%d' % i].split(':')
        except KeyError:
            break
        mac = mac.split(',', 1)[0]
        mac = mac.replace('address is', '')
        mac = mac.replace('.', '').upper().strip()
        label = label.strip()
        macs.append(mac)
    ram_size = re.search('[0-9]+', ram).group()
    cpu_match = re.search('[0-9]+ MHz', cpu)
    cpu_speed = cpu_match.group()[:-4]
    cpu_model = cpu[:cpu_match.start()][4:].strip()
    ret = {
        'status': 'success',
        'device': {
            'model_name': 'Cisco ' + model,
            'type': str(DeviceType.firewall),
            'serial_number': sn,
            'mac_adresses': macs,
            'boot_firmware': boot_firmware,
            'management_ip_addresses': [ip_address],
            'memory': [{
                'size': int(ram_size),
            }],
            'processors': [{
                'model_name': cpu_model,
                'speed': int(cpu_speed),
            }],
        },
    }
    tpl = get_base_result_template('ssh_cisco_asa')
    tpl.update(ret)
    return tpl
コード例 #29
0
def scan_address(ip_address, **kwargs):
    ssh = _connect_ssh(ip_address)
    try:
        lines = ssh.asa_command(
            "show version | grep (^Hardware|Boot microcode|^Serial|address is)"
        )
        raw_inventory = '\n'.join(ssh.asa_command("show inventory"))
    finally:
        ssh.close()

    pairs = parse.pairs(lines=[line.strip() for line in lines])
    sn = pairs.get('Serial Number', None)
    model, ram, cpu = pairs['Hardware'].split(',')
    boot_firmware = pairs['Boot microcode']

    ethernets = []
    macs = []
    for i in xrange(99):
        try:
            junk, label, mac = pairs['%d' % i].split(':')
        except KeyError:
            break
        mac = mac.split(',', 1)[0]
        mac = mac.replace('address is', '')
        mac = mac.replace('.', '').upper().strip()
        label = label.strip()
        macs.append(mac)
    ram_size = re.search('[0-9]+', ram).group()
    cpu_match = re.search('[0-9]+ MHz', cpu)
    cpu_speed = cpu_match.group()[:-4]
    cpu_model = cpu[:cpu_match.start()][4:].strip()
    ret = {
        'status': 'success',
        'device': {
            'model_name': 'Cisco ' + model,
            'type': str(DeviceType.firewall),
            'serial_number': sn,
            'mac_adresses': macs,
            'boot_firmware': boot_firmware,
            'management_ip_addresses': [ip_address],
            'memory': [{
                'size': int(ram_size),
            }],
            'processors': [{
                'model_name': cpu_model,
                'speed': int(cpu_speed),
            }],
        },
    }
    tpl = get_base_result_template('ssh_cisco_asa')
    tpl.update(ret)
    return tpl
コード例 #30
0
ファイル: ssh_hp_msa.py プロジェクト: pydubreucq/ralph
def scan_address(ip_address, **kwargs):
    if kwargs.get("http_family") not in ("WindRiver-WebServer",):
        raise NoMatchError("It's not a HP MSA Storage.")
    if "nx-os" in (kwargs.get("snmp_name", "") or "").lower():
        raise NoMatchError("Incompatible Nexus found.")
    user = SETTINGS.get("user")
    password = SETTINGS.get("password")
    messages = []
    result = get_base_result_template("ssh_hp_msa", messages)
    if not user or not password:
        raise NotConfiguredError("Not configured. Set SSH_MSA_USER and SSH_MSA_PASSWORD in " "your configuration file.")
    result.update({"status": "success", "device": _ssh_hp_msa(ip_address, user, password)})
    return result
コード例 #31
0
ファイル: ssh_cisco_catalyst.py プロジェクト: smagowr/ralph
def scan_address(ip_address, **kwargs):
    status = 'success'
    ssh = _connect_ssh(ip_address)
    try:
        mac = '\n'.join(
            ssh.cisco_command(
                "show version | include Base ethernet MAC Address", ))
        raw = '\n'.join(ssh.cisco_command("show inventory"))
    finally:
        ssh.close()

    mac = mac.strip()
    if mac.startswith("Base ethernet MAC Address") and ':' in mac:
        mac = mac.split(':', 1)[1].strip().replace(":", "")
    else:
        ethernets = None
    inventory = list(cisco_inventory(raw))
    serials = [inv['sn'] for inv in inventory]
    dev_inv = inventory[0]
    model_name = 'Cisco Catalyst %s' % dev_inv['pid']
    sn = dev_inv['sn']
    model_type = DeviceType.switch
    device = {
        'hostname': network.hostname(ip_address),
        'model_name': model_name,
        'type': str(model_type),
        'serial_number': sn,
        'mac_adresses': [
            mac,
        ],
        'management_ip_addresses': [
            ip_address,
        ],
    }
    parts = inventory[1:]
    device['parts'] = []
    for p in parts:
        part = {
            'serial_number': p['sn'],
            'name': p['name'],
            'label': p['descr'],
        }
        device['parts'].append(part)
    ret = {
        'status': status,
        'device': device,
    }
    tpl = get_base_result_template('ssh_cisco_catalyst')
    tpl.update(ret)
    return tpl
コード例 #32
0
def scan_address(ip_address, **kwargs):
    if 'nx-os' in kwargs.get('snmp_name', '').lower():
        raise NoMatchError("Incompatible Nexus found.")
    if 'StorageWorks' not in kwargs.get('snmp_name'):
        raise NoMatchError("No match")
    if not network.check_tcp_port(ip_address, 22):
        raise ConnectionError("Port 22 closed.")
    device = _run_ssh_p2000(ip_address)
    ret = {
        'status': 'success',
        'device': device,
    }
    tpl = get_base_result_template('ssh_hp_p2000')
    tpl.update(ret)
    return json.loads(json.dumps(tpl))  # to ensure its picklable
コード例 #33
0
ファイル: ssh_xen.py プロジェクト: andrzej-jankowski/ralph
def scan_address(ip, **kwargs):
    if XEN_USER is None:
        raise NotConfiguredError("Xen credentials not set.")
    if 'nx-os' in kwargs.get('snmp_name', '').lower():
        raise NoMatchError("Incompatible Nexus found.")
    if 'xen' not in kwargs.get('snmp_name', ''):
        raise NoMatchError("XEN not found.")
    device = run_ssh_xen(ip)
    ret = {
        'status': 'success',
        'device': device,
    }
    tpl = get_base_result_template('ssh_xen')
    tpl.update(ret)
    return tpl
コード例 #34
0
ファイル: puppet.py プロジェクト: pydubreucq/ralph
def scan_address(ip_address, **kwargs):
    messages = []
    result = get_base_result_template("puppet", messages)
    try:
        device_info = _puppet(ip_address, messages)
    except NotConfiguredError as e:
        messages.append("Not configured.")
        result["status"] = "error"
        return result
    except (LshwError, Error) as e:
        messages.append(unicode(e))
        result["status"] = "error"
    else:
        result.update({"status": "success", "device": device_info})
    return result
コード例 #35
0
ファイル: ilo_hp.py プロジェクト: smagowr/ralph
def scan_address(ip_address, **kwargs):
    user = SETTINGS.get('user')
    password = SETTINGS.get('password')
    messages = []
    result = get_base_result_template('ilo_hp', messages)
    if not user or not password:
        result['status'] = 'error'
        messages.append(
            'Not configured. Set ILO_USER and ILO_PASSWORD in your '
            'configuration file.', )
    else:
        device_info = _ilo_hp(ip_address, user, password)
        result['status'] = 'success'
        result['device'] = device_info
    return result
コード例 #36
0
ファイル: ssh_hp_p2000.py プロジェクト: smagowr/ralph
def scan_address(ip_address, **kwargs):
    if 'nx-os' in kwargs.get('snmp_name', '').lower():
        raise NoMatchError("Incompatible Nexus found.")
    if 'StorageWorks' not in kwargs.get('snmp_name'):
        raise NoMatchError("No match")
    if not network.check_tcp_port(ip_address, 22):
        raise ConnectionError("Port 22 closed.")
    device = _run_ssh_p2000(ip_address)
    ret = {
        'status': 'success',
        'device': device,
    }
    tpl = get_base_result_template('ssh_hp_p2000')
    tpl.update(ret)
    return json.loads(json.dumps(tpl))  # to ensure its picklable
コード例 #37
0
ファイル: ilo_hp.py プロジェクト: andrzej-jankowski/ralph
def scan_address(ip_address, **kwargs):
    user = SETTINGS.get('user')
    password = SETTINGS.get('password')
    messages = []
    result = get_base_result_template('ilo_hp', messages)
    if not user or not password:
        result['status'] = 'error'
        messages.append(
            'Not configured. Set ILO_USER and ILO_PASSWORD in your '
            'configuration file.',
        )
    else:
        device_info = _ilo_hp(ip_address, user, password)
        result['status'] = 'success'
        result['device'] = device_info
    return result
コード例 #38
0
def scan_address(ip_address, **kwargs):
    if kwargs.get("http_family", "") not in ("Unspecified",):
        raise NoMatchError("It is not 3PAR.")
    if not (kwargs.get("snmp_name", "") or "").startswith("3PAR"):
        raise NoMatchError("It is not 3PAR.")
    user = SETTINGS.get("user")
    password = SETTINGS.get("password")
    messages = []
    result = get_base_result_template("ssh_3par", messages)
    if not user or not password:
        result["status"] = "error"
        messages.append("Not configured. Set SSH_3PAR_USER and SSH_3PAR_PASSWORD in your " "configuration file.")
    else:
        device_info = _ssh_3par(ip_address, user, password)
        result.update({"status": "success", "device": device_info})
    return result
コード例 #39
0
def scan_address(ip_address, **kwargs):
    status = 'success'
    ssh = _connect_ssh(ip_address)
    try:
        mac = '\n'.join(ssh.cisco_command(
            "show version | include Base ethernet MAC Address",
        ))
        raw = '\n'.join(ssh.cisco_command("show inventory"))
    finally:
        ssh.close()

    mac = mac.strip()
    if mac.startswith("Base ethernet MAC Address") and ':' in mac:
        mac = mac.split(':', 1)[1].strip().replace(":", "")
    else:
        ethernets = None
    inventory = list(cisco_inventory(raw))
    serials = [inv['sn'] for inv in inventory]
    dev_inv = inventory[0]
    model_name='Cisco Catalyst %s' % dev_inv['pid']
    sn = dev_inv['sn']
    model_type=DeviceType.switch
    device = {
        'hostname': network.hostname(ip_address),
        'model_name': model_name,
        'type': str(model_type),
        'serial_number': sn,
        'mac_adresses': [mac, ],
        'management_ip_addresses': [ip_address, ],
    }
    parts = inventory[1:]
    device['parts'] = []
    for p in parts:
        part = {
            'serial_number': p['sn'],
            'name': p['name'],
            'label': p['descr'],
        }
        device['parts'].append(part)
    ret = {
        'status': status,
        'device': device,
    }
    tpl = get_base_result_template('ssh_cisco_catalyst')
    tpl.update(ret)
    return tpl
コード例 #40
0
def scan_address(ip_address, **kwargs):
    snmp_name = (kwargs.get('snmp_name', '') or '').lower()
    if snmp_name and "onboard administrator" not in snmp_name:
        raise NoMatchError('It is not HP OA.')
    if kwargs.get('http_family', '') not in ('Unspecified', 'RomPager', 'HP'):
        raise NoMatchError('It is not HP OA.')
    messages = []
    result = get_base_result_template('hp_oa', messages)
    try:
        device_info = _hp_oa(ip_address)
    except (IncompatibleAnswerError, IncompleteAnswerError) as e:
        messages.append(unicode(e))
        result['status'] = 'error'
    else:
        result['status'] = 'success'
        result['device'] = device_info
    return result
コード例 #41
0
ファイル: hp_oa.py プロジェクト: 4i60r/ralph
def scan_address(ip_address, **kwargs):
    snmp_name = (kwargs.get('snmp_name', '') or '').lower()
    if snmp_name and "onboard administrator" not in snmp_name:
        raise NoMatchError('It is not HP OA.')
    if kwargs.get('http_family', '') not in ('Unspecified', 'RomPager', 'HP'):
        raise NoMatchError('It is not HP OA.')
    messages = []
    result = get_base_result_template('hp_oa', messages)
    try:
        device_info = _hp_oa(ip_address)
    except (IncompatibleAnswerError, IncompleteAnswerError) as e:
        messages.append(unicode(e))
        result['status'] = 'error'
    else:
        result['status'] = 'success'
        result['device'] = device_info
    return result
コード例 #42
0
def scan_address(ip_address, **kwargs):
    if 'nx-os' in (kwargs.get('snmp_name', '') or '').lower():
        raise NoMatchError('Incompatible Nexus found.')
    if kwargs.get('http_family', '') not in ('IBM', 'Unspecified'):
        raise NoMatchError('It is not IBM.')
    if not (kwargs.get('snmp_name', 'IBM') or 'IBM').startswith('IBM'):
        raise NoMatchError('It is not IBM.')
    if not network.check_tcp_port(ip_address, 22):
        raise ConnectionError('Port 22 closed on an IBM BladeServer.')
    messages = []
    result = get_base_result_template('ssh_ibm_bladecenter', messages)
    device = _blade_scan(ip_address)
    if not device:
        raise DeviceError("Malformed bladecenter device: %s" % ip_address)
    result['device'] = device
    result['status'] = 'success'
    return result
コード例 #43
0
ファイル: ssh_ibm_bladecenter.py プロジェクト: 4i60r/ralph
def scan_address(ip_address, **kwargs):
    if 'nx-os' in (kwargs.get('snmp_name', '') or '').lower():
        raise NoMatchError('Incompatible Nexus found.')
    if kwargs.get('http_family', '') not in ('IBM', 'Unspecified'):
        raise NoMatchError('It is not IBM.')
    if not (kwargs.get('snmp_name', 'IBM') or 'IBM').startswith('IBM'):
        raise NoMatchError('It is not IBM.')
    if not network.check_tcp_port(ip_address, 22):
        raise ConnectionError('Port 22 closed on an IBM BladeServer.')
    messages = []
    result = get_base_result_template('ssh_ibm_bladecenter', messages)
    device = _blade_scan(ip_address)
    if not device:
        raise DeviceError("Malformed bladecenter device: %s" % ip_address)
    result['device'] = device
    result['status'] = 'success'
    return result
コード例 #44
0
ファイル: ilo_hp.py プロジェクト: srikanth4372/sample
def scan_address(ip_address, **kwargs):
    if kwargs.get('http_family', '') not in ('Unspecified', 'RomPager', 'HP'):
        raise NoMatchError('It is not HP.')
    user = SETTINGS.get('user')
    password = SETTINGS.get('password')
    messages = []
    result = get_base_result_template('ilo_hp', messages)
    if not user or not password:
        result['status'] = 'error'
        messages.append(
            'Not configured. Set ILO_USER and ILO_PASSWORD in your '
            'configuration file.', )
    else:
        device_info = _ilo_hp(ip_address, user, password)
        result['status'] = 'success'
        result['device'] = device_info
    return result
コード例 #45
0
ファイル: ssh_linux.py プロジェクト: lmzopq/ralph
def scan_address(ip_address, **kwargs):
    messages = []
    result = get_base_result_template('ssh_linux', messages)
    snmp_name = kwargs.get('snmp_name', '') or ''
    if not snmp_name:
        raise NoMatchError("No snmp found")
    snmp_name = snmp_name.lower()
    if 'nx-os' in snmp_name:
        messages.append('Incompatible Nexus found.')
        result['status'] = 'error'
        return result
    if all((
            'linux' not in snmp_name,
            'xen' not in snmp_name,
            not snmp_name.startswith('vmware esx'),
    )):
        messages.append('No match.')
        result['status'] = 'error'
        return result
    ssh = None
    auths = SETTINGS.get('auths', [])
    for user, password in auths:
        if user is None or password is None:
            continue
        try:
            ssh = network.connect_ssh(ip_address, user, password)
        except network.AuthError:
            continue
        else:
            break
    if not ssh:
        messages.append('Authorization failed')
        result['status'] = 'error'
        return result
    try:
        device_info = _ssh_linux(ssh, ip_address)
    except (network.Error, paramiko.SSHException) as e:
        messages.append(unicode(e))
        result['status'] = 'error'
    else:
        result.update({
            'status': 'success',
            'device': device_info,
        })
    return result
コード例 #46
0
ファイル: ssh_linux.py プロジェクト: alberto-g/ralph
def scan_address(ip_address, **kwargs):
    messages = []
    result = get_base_result_template('ssh_linux', messages)
    snmp_name = kwargs.get('snmp_name', '') or ''
    if not snmp_name:
        raise NoMatchError("No snmp found")
    snmp_name = snmp_name.lower()
    if 'nx-os' in snmp_name:
        messages.append('Incompatible Nexus found.')
        result['status'] = 'error'
        return result
    if all((
        'linux' not in snmp_name,
        'xen' not in snmp_name,
        not snmp_name.startswith('vmware esx'),
    )):
        messages.append('No match.')
        result['status'] = 'error'
        return result
    ssh = None
    auths = SETTINGS.get('auths', [])
    for user, password in auths:
        if user is None or password is None:
            continue
        try:
            ssh = network.connect_ssh(ip_address, user, password)
        except network.AuthError:
            continue
        else:
            break
    if not ssh:
        messages.append('Authorization failed')
        result['status'] = 'error'
        return result
    try:
        device_info = _ssh_linux(ssh, ip_address)
    except (network.Error, paramiko.SSHException) as e:
        messages.append(unicode(e))
        result['status'] = 'error'
    else:
        result.update({
            'status': 'success',
            'device': device_info,
        })
    return result
コード例 #47
0
ファイル: ilo_hp.py プロジェクト: 4i60r/ralph
def scan_address(ip_address, **kwargs):
    if kwargs.get('http_family', '') not in ('Unspecified', 'RomPager', 'HP'):
        raise NoMatchError('It is not HP.')
    user = SETTINGS.get('user')
    password = SETTINGS.get('password')
    messages = []
    result = get_base_result_template('ilo_hp', messages)
    if not user or not password:
        result['status'] = 'error'
        messages.append(
            'Not configured. Set ILO_USER and ILO_PASSWORD in your '
            'configuration file.',
        )
    else:
        device_info = _ilo_hp(ip_address, user, password)
        result['status'] = 'success'
        result['device'] = device_info
    return result
コード例 #48
0
ファイル: ssh_3par.py プロジェクト: andrzej-jankowski/ralph
def scan_address(ip_address, **kwargs):
    user = SETTINGS.get('user')
    password = SETTINGS.get('password')
    messages = []
    result = get_base_result_template('ssh_3par', messages)
    if not user or not password:
        result['status'] = 'error'
        messages.append(
            'Not configured. Set SSH_3PAR_USER and SSH_3PAR_PASSWORD in your '
            'configuration file.',
        )
    else:
        device_info = _ssh_3par(ip_address, user, password)
        result.update({
            'status': 'success',
            'device': device_info,
        })
    return device_info
コード例 #49
0
ファイル: puppet.py プロジェクト: srikanth4372/sample
def scan_address(ip_address, **kwargs):
    messages = []
    result = get_base_result_template('puppet', messages)
    try:
        device_info = _puppet(ip_address, messages)
    except NotConfiguredError as e:
        messages.append('Not configured.')
        result['status'] = 'error'
        return result
    except (LshwError, Error) as e:
        messages.append(unicode(e))
        result['status'] = 'error'
    else:
        result.update({
            'status': 'success',
            'device': device_info,
        })
    return result
コード例 #50
0
def scan_address(ip_address, **kwargs):
    if kwargs.get('http_family') not in ('WindRiver-WebServer', ):
        raise NoMatchError("It's not a HP MSA Storage.")
    if 'nx-os' in (kwargs.get('snmp_name', '') or '').lower():
        raise NoMatchError("Incompatible Nexus found.")
    user = SETTINGS.get('user')
    password = SETTINGS.get('password')
    messages = []
    result = get_base_result_template('ssh_hp_msa', messages)
    if not user or not password:
        raise NotConfiguredError(
            'Not configured. Set SSH_MSA_USER and SSH_MSA_PASSWORD in '
            'your configuration file.', )
    result.update({
        'status': 'success',
        'device': _ssh_hp_msa(ip_address, user, password),
    })
    return result
コード例 #51
0
ファイル: http_ibm_system_x.py プロジェクト: lmzopq/ralph
def scan_address(ip_address, **kwargs):
    user = SETTINGS.get('user')
    password = SETTINGS.get('password')
    messages = []
    result = get_base_result_template('http_ibm_system_x', messages)
    if not user or not password:
        raise NotConfiguredError(
            'Not configured. Set IBM_SYSTEM_X_USER and IBM_SYSTEM_X_PASSWORD '
            'in your configuration file.', )
    headers, document = get_http_info(ip_address)
    family = guess_family(headers, document)
    if family != 'IBM System X':
        raise NoMatchError('It is not IBM System X device.')
    result.update({
        'status': 'success',
        'device': _http_ibm_system_x(ip_address, user, password),
    })
    return result
コード例 #52
0
ファイル: ssh_aix.py プロジェクト: smagowr/ralph
def scan_address(ip, **kwargs):
    if 'nx-os' in kwargs.get('snmp_name', '').lower():
        raise NoMatchError("Incompatible Nexus found.")
    if AIX_USER is None:
        raise NotConfiguredError("No credentials set up")
    kwargs['guessmodel'] = gvendor, gmodel = guessmodel.guessmodel(**kwargs)
    if gvendor != 'IBM':
        raise NoMatchError("No match")
    snmp_name = kwargs.get('snmp_name', '')
    if snmp_name and not snmp_name.startswith('IBM PowerPC'):
        raise NoMatchError("No match")
    device = run_ssh_aix(ip)
    ret = {
        'status': 'success',
        'device': device,
    }
    tpl = get_base_result_template('ssh_cisco_catalyst')
    tpl.update(ret)
    return tpl
コード例 #53
0
ファイル: ssh_xen.py プロジェクト: srikanth4372/sample
def scan_address(ip_address, **kwargs):
    snmp_name = kwargs.get('snmp_name', '') or ''
    http_family = kwargs.get('http_family', '') or ''
    if 'nx-os' in snmp_name.lower():
        raise NoMatchError("Incompatible Nexus found.")
    if 'xen' not in snmp_name and 'xen' not in http_family.lower():
        raise NoMatchError("XEN not found.")
    auths = SETTINGS.get('xen_auths')
    messages = []
    result = get_base_result_template('ssh_xen', messages)
    if not auths:
        result['status'] = 'error'
        messages.append(
            'Not configured. Set XEN_AUTHS in your configuration file.',
        )
    else:
        for user, password in auths:
            if user is None or password is None:
                continue
            try:
                ssh = _connect_ssh(ip_address, user, password)
            except AuthError:
                ssh = None
                continue
            else:
                break
        if not ssh:
            result['status'] = 'error'
            messages.append('Authorization failed.')
        else:
            try:
                device_info = _ssh_xen(ssh, ip_address)
            except (Error, ConnectionError) as e:
                result['status'] = 'error'
                messages.append(unicode(e))
            else:
                result.update({
                    'status': 'success',
                    'device': device_info,
                })
            finally:
                ssh.close()
    return result
コード例 #54
0
ファイル: http_supermicro.py プロジェクト: smagowr/ralph
def scan_address(ip_address, **kwargs):
    user = SETTINGS.get('user')
    password = SETTINGS.get('password')
    messages = []
    result = get_base_result_template('http_supermicro', messages)
    if not user or not password:
        result['status'] = 'error'
        messages.append('Not configured.')
    else:
        try:
            device_info = _http_supermicro(ip_address, user, password)
        except Error as e:
            result['status'] = 'error'
            messages.append(unicode(e))
        else:
            result.update({
                'status': 'success',
                'device': device_info,
            })
    return result
コード例 #55
0
ファイル: vmware.py プロジェクト: fossabot/ralph
def scan_address(ip_address, **kwargs):
    http_family = (kwargs.get('http_family', '') or '').strip().lower()
    snmp_name = (kwargs.get('snmp_name', '') or '').strip().lower()
    if all((
        'esx' not in http_family,
        'esx' not in snmp_name,
        'vmware' not in snmp_name,
    )):
        raise NoMatchError('It is not VMWare.')
    user = SETTINGS.get('user')
    password = SETTINGS.get('password')
    messages = []
    result = get_base_result_template('vmware', messages)
    if not user or not password:
        result['status'] = 'error'
        messages.append(
            'Not configured. Set VMWARE_USER and VMWARE_PASSWORD in your '
            'configuration file.',
        )
    else:
        try:
            server_conn = _connect(ip_address, user, password)
        except VIApiException as e:
            result['status'] = 'error'
            messages.append(unicode(e))
        else:
            try:
                if 'vcenter' in server_conn.get_server_type().lower():
                    raise NoMatchError(
                        "It is `VMware vCenter Server`. To save real "
                        "hypervisor - VM connecion you should scan only "
                        "VMware ESXi servers.",
                    )
                device_info = _vmware(server_conn, ip_address)
            finally:
                server_conn.disconnect()
            result.update({
                'status': 'success',
                'device': device_info,
            })
    return result
コード例 #56
0
ファイル: ipmi.py プロジェクト: smagowr/ralph
def scan_address(ip_address, **kwargs):
    user = SETTINGS.get('user')
    password = SETTINGS.get('password')
    messages = []
    result = get_base_result_template('ipmi', messages)
    if not user or not password:
        result['status'] = 'error'
        messages.append('Not configured.')
    else:
        ipmitool = IPMITool(ip_address, user, password)
        try:
            device_info = _ipmi(ipmitool)
        except (AuthError, Error) as e:
            result['status'] = 'error'
            messages.append(unicode(e))
        else:
            result.update({
                'status': 'success',
                'device': device_info,
            })
    return result
コード例 #57
0
def scan_address(ip_address, **kwargs):
    if kwargs.get('http_family', '') not in ('Unspecified', ):
        raise NoMatchError('It is not 3PAR.')
    if not (kwargs.get('snmp_name', '') or '').startswith('3PAR'):
        raise NoMatchError('It is not 3PAR.')
    user = SETTINGS.get('user')
    password = SETTINGS.get('password')
    messages = []
    result = get_base_result_template('ssh_3par', messages)
    if not user or not password:
        result['status'] = 'error'
        messages.append(
            'Not configured. Set SSH_3PAR_USER and SSH_3PAR_PASSWORD in your '
            'configuration file.', )
    else:
        device_info = _ssh_3par(ip_address, user, password)
        result.update({
            'status': 'success',
            'device': device_info,
        })
    return result