コード例 #1
0
def main():
    #
    # Define parameters for commandline entry
    #
    module = AnsibleModule(argument_spec=dict(
        outputfile=dict(required=True),
        host=dict(required=True),
        username=dict(required=True),
        password=dict(required=True),
        enablePassword=dict(required=False),
    ),
                           supports_check_mode=False)

    username = module.params['username']
    password = module.params['password']
    enablePassword = module.params['enablePassword']
    cliCommand = "display sys-info"
    outputfile = module.params['outputfile']
    hostIP = module.params['host']
    output = ""

    # Create instance of SSHClient object
    remote_conn_pre = paramiko.SSHClient()

    # Automatically add untrusted hosts (make sure okay for security policy in your environment)
    remote_conn_pre.set_missing_host_key_policy(paramiko.AutoAddPolicy())

    # initiate SSH connection with the switch
    remote_conn_pre.connect(hostIP, username=username, password=password)
    time.sleep(2)

    # Use invoke_shell to establish an 'interactive session'
    remote_conn = remote_conn_pre.invoke_shell()
    time.sleep(2)

    # Enable and enter configure terminal then send command
    output = output + cnos_utility.waitForDeviceResponse(
        "\n", ">", 2, remote_conn)

    output = output + cnos_utility.enterEnableModeForDevice(
        enablePassword, 3, remote_conn)

    #Make terminal length = 0
    output = output + cnos_utility.waitForDeviceResponse(
        "terminal length 0\n", "#", 2, remote_conn)

    #Send the CLi command
    output = output + cnos_utility.waitForDeviceResponse(
        cliCommand + "\n", "#", 2, remote_conn)

    #Save it into the file
    file = open(outputfile, "a")
    file.write(output)
    file.close()

    errorMsg = cnos_utility.checkOutputForError(output)
    if (errorMsg == None):
        module.exit_json(changed=True, msg="Device Sys Info is saved to file ")
    else:
        module.fail_json(msg=errorMsg)
コード例 #2
0
ファイル: enos_backup.py プロジェクト: kcorkins/ansible-cnos
def main():
    #
    # Define parameters for commandline entry
    #
    module = AnsibleModule(argument_spec=dict(
        outputfile=dict(required=True),
        host=dict(required=True),
        username=dict(required=True),
        password=dict(required=True, no_log=True),
        enablePassword=dict(required=False, no_log=True),
        deviceType=dict(required=True),
        configType=dict(required=True),
        protocol=dict(required=True),
        serverip=dict(required=True),
        rcpath=dict(required=True),
        serverusername=dict(required=False),
        serverpassword=dict(required=False),
    ),
                           supports_check_mode=False)

    username = module.params['username']
    password = module.params['password']
    enablePassword = module.params['enablePassword']
    outputfile = module.params['outputfile']
    host = module.params['host']
    deviceType = module.params['deviceType']
    configType = module.params['configType']
    protocol = module.params['protocol'].lower()
    rcserverip = module.params['serverip']
    rcpath = module.params['rcpath']
    serveruser = module.params['serverusername']
    serverpwd = module.params['serverpassword']
    output = ""
    timeout = 90
    tftptimeout = 450

    # Create instance of SSHClient object
    remote_conn_pre = paramiko.SSHClient()

    # Automatically add untrusted hosts (make sure okay for security policy in your environment)
    remote_conn_pre.set_missing_host_key_policy(paramiko.AutoAddPolicy())

    # initiate SSH connection with the switch
    remote_conn_pre.connect(host,
                            username=username,
                            password=password,
                            look_for_keys=False)
    time.sleep(2)

    # Use invoke_shell to establish an 'interactive session'
    remote_conn = remote_conn_pre.invoke_shell()
    time.sleep(2)

    #
    # Enable and enter configure terminal then send command
    output = output + cnos_utility.waitForDeviceResponse(
        "\n", ">", 2, remote_conn)

    output = output + cnos_utility.enterEnableModeForDevice(
        enablePassword, 3, remote_conn)

    # Make terminal length = 0
    output = output + cnos_utility.waitForDeviceResponse(
        "terminal-length 0\n", "#", 2, remote_conn)

    # Invoke method for config transfer from server
    if (configType == 'running-config'):
        if (protocol == "tftp" or protocol == "ftp"):
            transfer_status = enos_utility.doRunningConfigBackUp(
                protocol, tftptimeout, rcserverip, rcpath, serveruser,
                serverpwd, remote_conn)
        elif (protocol == "sftp" or protocol == "scp"):
            transfer_status = enos_utility.doSecureRunningConfigBackUp(
                protocol, timeout, rcserverip, rcpath, serveruser, serverpwd,
                remote_conn)
        else:
            transfer_status = "Invalid Protocol option"
    elif (configType == 'startup-config'):
        if (protocol == "tftp" or protocol == "ftp"):
            transfer_status = enos_utility.doStartupConfigBackUp(
                protocol, tftptimeout, rcserverip, rcpath, serveruser,
                serverpwd, remote_conn)
        elif (protocol == "sftp" or protocol == "scp"):
            transfer_status = enos_utility.doSecureStartupConfigBackUp(
                protocol, timeout, rcserverip, rcpath, serveruser, serverpwd,
                remote_conn)
        else:
            transfer_status = "Invalid Protocol option"
    else:
        transfer_status = "Invalid configType Option"

    output = output + "\n Config Back Up status \n" + transfer_status

    # Save it into the file
    file = open(outputfile, "a")
    file.write(output)
    file.close()

    # Logic to check when changes occur or not
    errorMsg = cnos_utility.checkOutputForError(output)
    if (errorMsg == None):
        module.exit_json(changed=True, msg="Config file tranferred to server")
    else:
        module.fail_json(msg=errorMsg)
コード例 #3
0
def main():
    #
    # Define parameters for commandline entry
    #
    module = AnsibleModule(argument_spec=dict(
        commandfile=dict(required=True),
        outputfile=dict(required=True),
        host=dict(required=True),
        deviceType=dict(required=True),
        username=dict(required=True),
        password=dict(required=True),
        enablePassword=dict(required=False),
    ),
                           supports_check_mode=False)
    username = module.params['username']
    password = module.params['password']
    enablePassword = module.params['enablePassword']
    commandfile = module.params['commandfile']
    outputfile = module.params['outputfile']
    deviceType = module.params['deviceType']
    hostIP = module.params['host']
    output = ""

    # Create instance of SSHClient object
    remote_conn_pre = paramiko.SSHClient()

    # Automatically add untrusted hosts (make sure okay for security policy in your environment)
    remote_conn_pre.set_missing_host_key_policy(paramiko.AutoAddPolicy())

    # initiate SSH connection with the switch
    remote_conn_pre.connect(hostIP, username=username, password=password)
    time.sleep(2)

    # Use invoke_shell to establish an 'interactive session'
    remote_conn = remote_conn_pre.invoke_shell()
    time.sleep(2)

    # Enable and enter configure terminal then send command
    output = output + cnos_utility.waitForDeviceResponse(
        "\n", ">", 2, remote_conn)

    output = output + cnos_utility.enterEnableModeForDevice(
        enablePassword, 3, remote_conn)

    #Make terminal length = 0
    output = output + cnos_utility.waitForDeviceResponse(
        "terminal length 0\n", "#", 2, remote_conn)

    #Go to config mode
    output = output + cnos_utility.waitForDeviceResponse(
        "configure d\n", "(config)#", 2, remote_conn)

    # Send commands one by one
    with open(commandfile, "r") as f:
        for line in f:
            #Omit the comment lines in template file
            if not line.startswith("#"):
                command = line
                if not line.endswith("\n"):
                    command = command + "\n"
                response = cnos_utility.waitForDeviceResponse(
                    command, "#", 2, remote_conn)
                errorMsg = cnos_utility.checkOutputForError(response)
                output = output + response
                if (errorMsg != None):
                    break  # To cater to Mufti case

#Write to memory
    output = output + cnos_utility.waitForDeviceResponse(
        "save\n", "#", 3, remote_conn)
    #Write output to file
    file = open(outputfile, "a")
    file.write(output)
    file.close()

    # Logic to check when changes occur or not
    errorMsg = cnos_utility.checkOutputForError(output)
    if (errorMsg == None):
        module.exit_json(changed=True, msg="Template Applied")
    else:
        module.fail_json(msg=errorMsg)
コード例 #4
0
def main():
    #
    # Define parameters for commandline entry
    #
    module = AnsibleModule(argument_spec=dict(
        clicommand=dict(required=True),
        clicommand2=dict(required=False),
        outputfile=dict(required=True),
        host=dict(required=True),
        deviceType=dict(required=True),
        username=dict(required=True),
        password=dict(required=True, no_log=True),
        enablePassword=dict(required=False, no_log=True),
    ),
                           supports_check_mode=False)

    username = module.params['username']
    password = module.params['password']
    enablePassword = module.params['enablePassword']
    cliCommand = module.params['clicommand']
    cliCommand2 = module.params['clicommand2']
    deviceType = module.params['deviceType']
    outputfile = module.params['outputfile']
    hostIP = module.params['host']
    output = ""

    # Create instance of SSHClient object
    remote_conn_pre = paramiko.SSHClient()

    # Automatically add untrusted hosts (make sure okay for security policy in your environment)
    remote_conn_pre.set_missing_host_key_policy(paramiko.AutoAddPolicy())

    # initiate SSH connection with the switch
    remote_conn_pre.connect(hostIP,
                            username=username,
                            password=password,
                            look_for_keys=False)
    time.sleep(2)

    # Use invoke_shell to establish an 'interactive session'
    remote_conn = remote_conn_pre.invoke_shell()
    time.sleep(2)

    # Enable and enter configure terminal then send command
    output = output + cnos_utility.waitForDeviceResponse(
        "\n", ">", 2, remote_conn)

    output = output + cnos_utility.enterEnableModeForDevice(
        enablePassword, 3, remote_conn)

    #Make terminal length = 0
    output = output + cnos_utility.waitForDeviceResponse(
        "terminal-length 0\n", "#", 2, remote_conn)

    #Disable console prompts
    output = output + cnos_utility.waitForDeviceResponse(
        "terminal dont-ask\n", "#", 2, remote_conn)

    #Go to config mode
    output = output + cnos_utility.waitForDeviceResponse(
        "configure t\n", "(config)#", 2, remote_conn)

    #Send the CLi command
    output = output + cnos_utility.waitForDeviceResponse(
        cliCommand + "\n", "(config)#", 2, remote_conn)

    #Send the second CLi command
    output = output + cnos_utility.waitForDeviceResponse(
        cliCommand2 + "\n", "(config)#", 2, remote_conn)

    #Save it into the file
    file = open(outputfile, "a")
    file.write(output)
    file.close()

    # Logic to check when changes occur or not
    errorMsg = cnos_utility.checkOutputForError(output)
    if (errorMsg == None):
        module.exit_json(changed=True,
                         msg="CLI command executed and results saved in file ")
    else:
        module.fail_json(msg=errorMsg)
コード例 #5
0
def main():
    #
    # Define parameters for vlan creation entry
    #
    module = AnsibleModule(argument_spec=dict(
        outputfile=dict(required=True),
        host=dict(required=True),
        username=dict(required=True),
        password=dict(required=True),
        enablePassword=dict(required=False),
        deviceType=dict(required=True),
        vlanArg1=dict(required=True),
        vlanArg2=dict(required=False),
        vlanArg3=dict(required=False),
        vlanArg4=dict(required=False),
        vlanArg5=dict(required=False),
    ),
                           supports_check_mode=False)

    username = module.params['username']
    password = module.params['password']
    enablePassword = module.params['enablePassword']
    vlanArg1 = module.params['vlanArg1']
    vlanArg2 = module.params['vlanArg2']
    vlanArg3 = module.params['vlanArg3']
    vlanArg4 = module.params['vlanArg4']
    vlanArg5 = module.params['vlanArg5']
    outputfile = module.params['outputfile']
    hostIP = module.params['host']
    deviceType = module.params['deviceType']

    output = ""

    # Create instance of SSHClient object
    remote_conn_pre = paramiko.SSHClient()

    # Automatically add untrusted hosts (make sure okay for security policy in your environment)
    remote_conn_pre.set_missing_host_key_policy(paramiko.AutoAddPolicy())

    # initiate SSH connection with the switch
    remote_conn_pre.connect(hostIP, username=username, password=password)
    time.sleep(2)

    # Use invoke_shell to establish an 'interactive session'
    remote_conn = remote_conn_pre.invoke_shell()
    time.sleep(2)

    # Enable and enter configure terminal then send command
    output = output + cnos_utility.waitForDeviceResponse(
        "\n", ">", 2, remote_conn)

    output = output + cnos_utility.enterEnableModeForDevice(
        enablePassword, 3, remote_conn)

    #Make terminal length = 0
    output = output + cnos_utility.waitForDeviceResponse(
        "terminal length 0\n", "#", 2, remote_conn)

    #Go to config mode
    output = output + cnos_utility.waitForDeviceResponse(
        "configure d\n", "(config)#", 2, remote_conn)

    #Send the CLi command
    #output = output + cnos_utility.createVlan(vlanid,vlanname,"(config)#", 2, remote_conn)
    output = output + cnos_utility.vlanConfig(
        remote_conn, deviceType, "(config)#", 2, vlanArg1, vlanArg2, vlanArg3,
        vlanArg4, vlanArg5)

    #Save it into the file
    file = open(outputfile, "a")
    file.write(output)
    file.close()

    # need to add logic to check when changes occur or not
    errorMsg = cnos_utility.checkOutputForError(output)
    if (errorMsg == None):
        module.exit_json(changed=True,
                         msg="VLAN configuration is accomplished ")
    else:
        module.fail_json(msg=errorMsg)
コード例 #6
0
def  main():
    #
    # Define parameters for portChannel creation entry
    #
    module = AnsibleModule(
        argument_spec=dict(
            outputfile=dict(required=True),
            host=dict(required=True),
            username=dict(required=True),
            password=dict(required=True),
            enablePassword=dict(required=False),
            deviceType=dict(required=True),
            interfaceRange=dict(required=False),
            interfaceOption=dict(required=False),
            interfaceArg1=dict(required=True),
            interfaceArg2=dict(required=False),
            interfaceArg3=dict(required=False),
            interfaceArg4=dict(required=False),
            interfaceArg5=dict(required=False),
            interfaceArg6=dict(required=False),
            interfaceArg7=dict(required=False),),
        supports_check_mode=False)

    username = module.params['username']
    password = module.params['password']
    enablePassword = module.params['enablePassword']
    interfaceRange = module.params['interfaceRange']
    interfaceOption = module.params['interfaceOption']
    interfaceArg1= module.params['interfaceArg1']
    interfaceArg2 = module.params['interfaceArg2']
    interfaceArg3= module.params['interfaceArg3']
    interfaceArg4 = module.params['interfaceArg4']
    interfaceArg5 = module.params['interfaceArg5']
    interfaceArg6 = module.params['interfaceArg6']
    interfaceArg7 = module.params['interfaceArg7']
    outputfile =  module.params['outputfile']
    hostIP = module.params['host']
    deviceType = module.params['deviceType']
    
    output = ""

    # Create instance of SSHClient object
    remote_conn_pre = paramiko.SSHClient()

    # Automatically add untrusted hosts (make sure okay for security policy in your environment)
    remote_conn_pre.set_missing_host_key_policy(paramiko.AutoAddPolicy())

    # initiate SSH connection with the switch
    remote_conn_pre.connect(hostIP, username=username, password=password)
    time.sleep(2)
    
    # Use invoke_shell to establish an 'interactive session'
    remote_conn = remote_conn_pre.invoke_shell()
    time.sleep(2)
    
    # Enable and enter configure terminal then send command
    output = output + cnos_utility.waitForDeviceResponse("\n",">", 2, remote_conn)
    
    output = output + cnos_utility.enterEnableModeForDevice(enablePassword, 3, remote_conn)
        
    #Make terminal length = 0
    output = output + cnos_utility.waitForDeviceResponse("terminal length 0\n","#", 2, remote_conn)
        
    #Go to config mode
    output = output + cnos_utility.waitForDeviceResponse("configure d\n","(config)#", 2, remote_conn)
    
    #Send the CLi command
    if(interfaceOption == None or interfaceOption == ""):
        output = output + cnos_utility.interfaceConfig(remote_conn, deviceType, "(config)#", 2, None, interfaceRange, 
                                                     interfaceArg1, interfaceArg2, interfaceArg3, interfaceArg4, interfaceArg5,interfaceArg6, interfaceArg7)
    elif(interfaceOption == "ethernet"):
        output = output + cnos_utility.interfaceConfig(remote_conn, deviceType, "(config)#", 2, "ethernet", interfaceRange, 
                                                     interfaceArg1, interfaceArg2, interfaceArg3, interfaceArg4, interfaceArg5,interfaceArg6, interfaceArg7)
    elif(interfaceOption == "loopback"):
        output = output + cnos_utility.interfaceConfig(remote_conn, deviceType, "(config)#", 2, "loopback", interfaceRange, 
                                                     interfaceArg1, interfaceArg2, interfaceArg3, interfaceArg4, interfaceArg5,interfaceArg6, interfaceArg7)
    elif(interfaceOption == "mgmt"):
        output = output + cnos_utility.interfaceConfig(remote_conn, deviceType, "(config)#", 2, "mgmt", interfaceRange, 
                                                     interfaceArg1, interfaceArg2, interfaceArg3, interfaceArg4, interfaceArg5,interfaceArg6, interfaceArg7)
    elif(interfaceOption == "port-aggregation"):
        output = output + cnos_utility.interfaceConfig(remote_conn, deviceType, "(config)#", 2, "port-aggregation", interfaceRange, 
                                                     interfaceArg1, interfaceArg2, interfaceArg3, interfaceArg4, interfaceArg5,interfaceArg6, interfaceArg7)
    elif(interfaceOption == "vlan"):
        output = output + cnos_utility.interfaceConfig(remote_conn, deviceType, "(config)#", 2, "vlan", interfaceRange, 
                                                     interfaceArg1, interfaceArg2, interfaceArg3, interfaceArg4, interfaceArg5,interfaceArg6, interfaceArg7)
    else:
        output = "Invalid interface option \n"
    #Save it into the file
    file = open(outputfile, "a")
    file.write(output)
    file.close()
    
    # Logic to check when changes occur or not
    errorMsg = cnos_utility.checkOutputForError(output)
    if(errorMsg == None):
        module.exit_json(changed=True, msg="Interface Configuration is done")
    else:
        module.fail_json(msg=errorMsg)