Пример #1
0
def find_prompt(dut_name, username, pwd, ssh_obj, delay_factor=1):
    try:
        ssh_obj.clear_cached_read_data()
        rv = super(sonic_obj.SonicBaseConnection,
                   ssh_obj).find_prompt(delay_factor)
        rv = re.escape(rv)
        ssh_obj.clear_cached_read_data()
        st.log("read data1 : {}".format(rv))
        return rv, ssh_obj
    except Exception as exp:
        st.log("getting error as {} while checking the prompt".format(exp))
        if dut_name == "dut1":
            ssh_obj = con_obj.connect_to_device(acl_dict["dut1_mgmt_ip"],
                                                username, pwd)
            acl_dict["dut1_ssh_obj"] = ssh_obj
        elif dut_name == "dut3":
            ssh_obj = con_obj.connect_to_device(acl_dict["dut3_mgmt_ip"],
                                                username, pwd)
            acl_dict["dut3_ssh_obj"] = ssh_obj
        try:
            ssh_obj.clear_cached_read_data()
            rv = super(sonic_obj.SonicBaseConnection,
                       ssh_obj).find_prompt(delay_factor)
            rv = re.escape(rv)
            ssh_obj.clear_cached_read_data()
            st.log("read data2 : {}".format(rv))
            return rv, ssh_obj
        except Exception as exp:
            st.log(
                "getting error again as {} while checking the prompt".format(
                    exp))
            return False
Пример #2
0
def test_ft_tacacs_modify_server_parameters():
    """

    Author: Karthik Kumar Goud Battula([email protected])
    This Testcase covers the below scenarios
    Scenario-1: Verify device behavior when TACACS+ application parameters (valid and invalid) are modified while traffic is running.
    Scenario-2: Verify that the key and timeout options default to global but may be specified to unique values on a per Server basis.
    Scenario-3: Verify that the NAS will stop communicating with the current server is the server is down  after the duration of the configured server timeout  or the default timeout value
    Scenario-4: Verify that Taccacs server key can be configured with more that 4 special characters
    """
    invalid_l4_port = '59'
    invalid_pass_key = "key123"
    invalid_timeout = '10'
    invalid_ip_addr = '10.10.10.1'
    tacacs_obj.set_tacacs_properties(vars.D1, 'passkey', 'secretstring')
    st.log("Configuring global tacacs server key with special characters")
    tacacs_obj.set_tacacs_properties(vars.D1, 'passkey', data.passkey)
    st.log("Check client authentication by modifing ip address,timeout,passkey")
    tacacs_obj.set_tacacs_server(vars.D1, 'add', invalid_ip_addr, invalid_l4_port, invalid_timeout, invalid_pass_key,
                                 data.auth_type, data.priority_server2)
    st.log("Trying to SSH to the device when TACACS+ server is configured with invalid parameters")
    if ssh_obj.connect_to_device(data.ip_address, data.username, data.password, data.protocol, data.ssh_port):
        st.report_fail("Login_to_DUT_via_SSH_is_failed")
    st.log("Deleting the TACACS+ server which is invalid")
    tacacs_obj.set_tacacs_server(vars.D1, 'delete', invalid_ip_addr)
    st.log("Creating valid TACACS+ server")
    tacacs_obj.set_tacacs_server(vars.D1, 'add', data.tacacs_ser_ip_1, data.tcp_port, data.timeout, data.passkey,
                                 data.auth_type, data.priority)
    st.log("Trying to SSH to the device with TACACS+ server which is configured with the valid parameters")
    if not ssh_obj.connect_to_device(data.ip_address, data.username, data.password, data.protocol, data.ssh_port):
        debug_info("test_ft_tacacs_modify_server_parameters", data.tacacs_ser_ip_1)
        st.report_fail("Login_to_DUT_via_SSH_is_failed")
    st.report_pass("test_case_passed")
Пример #3
0
def chef_pre_config_in_parallel(thread=True):
    [out, exceptions] = utils.exec_foreach(thread, vars.dut_list,
                                           chef_pre_config)
    st.log(exceptions)
    if False in out:
        st.report_env_fail("test_case_not_executeds")
    st.log("Fetching Chef config params from sonic services file")
    chef_params.ip = util_obj.ensure_service_params(vars.D1, "chef", "ip")
    chef_params.username = util_obj.ensure_service_params(
        vars.D1, "chef", "username")
    chef_params.password = util_obj.ensure_service_params(
        vars.D1, "chef", "password")
    chef_params.path = util_obj.ensure_service_params(vars.D1, "chef", "path")
    chef_params.roles = util_obj.ensure_service_params(vars.D1, "chef",
                                                       "roles")
    chef_params.cookbook_path = util_obj.ensure_service_params(
        vars.D1, "chef", "cookbook_path")
    chef_params.client_path = util_obj.ensure_service_params(
        vars.D1, "chef", "client_path")
    chef_params.validation_file = util_obj.ensure_service_params(
        vars.D1, "chef", "validation_file")
    chef_params.client_rb = util_obj.ensure_service_params(
        vars.D1, "chef", "client_rb")
    chef_params.client_log = util_obj.ensure_service_params(
        vars.D1, "chef", "client_log")
    chef_params.default_rb = util_obj.ensure_service_params(
        vars.D1, "chef", "default_rb")
    chef_params.mgmt_intf = util_obj.ensure_service_params(
        vars.D1, "chef", "mgmt_intf")

    st.log("Logging in to chef server with the params from config file.")
    global ssh_conn_obj
    ssh_conn_obj = con_obj.connect_to_device(chef_params.ip,
                                             chef_params.username,
                                             chef_params.password)
    if not ssh_conn_obj:
        st.error("SSH connetion object not found.")
        st.report_env_fail("ssh_connection_failed", chef_params.ip)
    ip_addr = basic_obj.get_ifconfig_inet(vars.D1, chef_params.mgmt_intf)

    ssh_obj = con_obj.connect_to_device(ip_addr[0], 'admin', 'YourPaSsWoRd')
    if ssh_obj:
        chef_obj.bootstrap_chef_node(ssh_conn_obj, ip_addr[0], 'admin',
                                     'YourPaSsWoRd', node_name)
    else:
        chef_obj.bootstrap_chef_node(ssh_conn_obj, ip_addr[0], 'admin',
                                     'broadcom', node_name)
    st.log("CHEF pre-config Done")
Пример #4
0
def sync_with_server_time(dut_list, ip, username, password):
    """
    To Sync DUT with the CHEF server time.
    Author : Prudvi Mangadu ([email protected])
    :param dut:
    :param ip:
    :param username:
    :param password:
    :return:
    """
    ssh_obj = con_obj.connect_to_device(ip, username, password, 'ssh')
    if ssh_obj:
        prompt = ssh_obj.find_prompt()
        command = "date"
        output = ssh_obj.send_command(command,
                                      expect_string="{}|#|$".format(prompt))
        if not output:
            return False
        st.log(output)
        date = utils_obj.remove_last_line_from_string(output)
        con_obj.ssh_disconnect(ssh_obj)
        st.log("Server Time : {}".format(date))
        for dut in dut_list:
            ntp_obj.config_date(dut, date)
        return True
    else:
        con_obj.ssh_disconnect(ssh_obj)
        st.log(
            "SSH to Server is failed - failed to sync time between DUT and CHEF Server"
        )
        return False
Пример #5
0
def test_mgmt_vrf_bind():
    report_flag = 0
    #intf = ['mgmt','eth0']
    intf = ['eth0']
    if not mvrf.verify(vars.D1, mvrfstate='Enabled', interfaces=intf):
        st.log("FAILED")
        report_flag = 1
    if report_flag:
        st.report_tc_fail("ft_mgmtVrf_bind", "mgmt_vrf_eth0_bind_fail")
    else:
        st.report_tc_pass("ft_mgmtVrf_bind", "mgmt_vrf_eth0_bind_success")
    report_flag = 0
    intf_li = get_all_interfaces(vars.D1)
    if not mvrf.verify(
            vars.D1, mvrfstate='Enabled', interfaces=intf_li, dataport=True):
        report_flag = 1
    if report_flag:
        st.report_tc_fail("ft_mgmtVrf_dataport", "mgmt_vrf_dataport_bind")
    else:
        st.report_tc_pass("ft_mgmtVrf_dataport", "mgmt_vrf_dataport_nobind")
    report_flag = 0
    ip_addr = get_ifconfig_inet(vars.D1, 'eth0')
    if not ip_addr:
        st.log("IP Address not found on eth0")
        report_flag = 1
    ssh_conn_obj = connect_to_device(ip_addr[0], mgmt_vrf.username_default,
                                     mgmt_vrf.password_default)
    if not ssh_conn_obj:
        if not connect_to_device(ip_addr[0], mgmt_vrf.username_default,
                                 mgmt_vrf.password_alt):
            report_flag = 1
    if report_flag:
        st.report_tc_fail("ft_mgmtVrf_ssh", "mgmt_vrf_ssh_fail")
    else:
        st.report_tc_pass("ft_mgmtVrf_ssh", "mgmt_vrf_ssh_pass")
    if report_flag:
        st.report_fail("mgmt_vrf_eth0_bind_fail")
    else:
        st.report_pass("mgmt_vrf_eth0_bind_success")
Пример #6
0
def test_ft_tacacs_ssh_login_highest_priorityserver():
    """
    Author:Karthik Kumar Goud Battula([email protected]
    This test case covers the below Scenarios
    Scenario-1: verify if DUT is configured with more than one tacacs server with  priority configured  client can login do dut via heightest priority tacacs server
    Scenario-2: Verify user login with multiple TACACS server when nondefault priority is configured for all server.
    Scenario-3: Verify that if the current TACACS server is unresponsive  the NAS will failover  to the next configured TACACS server  according to configured server priorities  and so on.
    """
    st.log("Login to the device via SSH using the credentials of highest priority server")
    if not ssh_obj.connect_to_device(data.ip_address, data.username1, data.password1, data.protocol):
        debug_info("test_ft_tacacs_ssh_login_highest_priorityserver", data.tacacs_ser_ip_2)
        st.report_fail("Login_to_DUT_via_SSH_is_failed")
    tacacs_obj.set_tacacs_server(vars.D1, 'delete', data.tacacs_ser_ip_1)
    st.report_pass("test_case_passed")
Пример #7
0
def chef_package_install(dut,
                         url,
                         ip,
                         username='******',
                         password='******',
                         altpassword='******'):
    """
    Install CHEF package to the DUT with CHEF server url.
    Author : Prudvi Mangadu ([email protected])
    :param dut:
    :param url:
    :param ip:
    :param username:
    :param password:
    :return:
    """
    if basic_obj.verify_package(dut, 'chef'):
        return True
    ssh_obj = con_obj.connect_to_device(ip, username, password, 'ssh')
    if not ssh_obj:
        ssh_obj = con_obj.connect_to_device(ip, username, altpassword, 'ssh')
    if ssh_obj:
        prompt = ssh_obj.find_prompt()
        command = "apt-get install chef -y"
        st.log(
            ssh_obj.send_command(command,
                                 expect_string=r"URL of Chef server:\s*"))
        command = "{}".format(url)
        st.log(
            ssh_obj.send_command(command,
                                 expect_string="{}|#|$".format(prompt)))
        con_obj.ssh_disconnect(ssh_obj)
        return True
    else:
        con_obj.ssh_disconnect(ssh_obj)
        st.log("SSH to DUT is failed - Failed to install the chef package ")
        return False
Пример #8
0
def test_ft_radius_login_rest():
    """
    Verify that aaa authentication can be configured to radius and login authentication is successful.

    """
    data1 = json.loads("""
	{
		"openconfig-system-ext:auth-type": "pap"
	}
    """)
    data2 = json.loads("""
    {
      "openconfig-system:config": {
        "auth-port": 1812,
        "secret-key": "Lvl7india"
      }
    }
		""")
    data3 = json.loads("""
	{
	  "openconfig-system:authentication-method": [
		"radius",
		"local"
	  ]
	}
    """)
    rest_url1 = "/restconf/data/openconfig-system:system/aaa/server-groups/server-group={}/servers/server={}/config/openconfig-system-ext:auth-type".format(
        rbac.feature, rbac.host_ip)

    rest_url2 = "/restconf/data/openconfig-system:system/aaa/server-groups/server-group={}/servers/server={}/radius/config".format(
        rbac.feature, rbac.host_ip)
    rest_url3 = "/restconf/data/openconfig-system:system/aaa/authentication/config/authentication-method"
    st.log("Configuring Radius server configuration with REST")
    if not config_rest(
            vars.D1, http_method='put', rest_url=rest_url1, json_data=data1):
        st.report_fail("rest_call_failed", "PUT")
    if not config_rest(
            vars.D1, http_method='patch', rest_url=rest_url2, json_data=data2):
        st.report_fail("rest_call_failed", "PATCH")
    st.log("Setting login authentication to radius and local")
    if not config_rest(
            vars.D1, http_method='put', rest_url=rest_url3, json_data=data3):
        st.report_fail("rest_call_failed", "PUT")
    st.log("SSH to device using radius credentials with auth_type pap")
    if not ssh.connect_to_device(rbac.ip_address, rbac.host_username,
                                 rbac.host_password):
        st.report_fail("ssh_login_failed", rbac.global_auth_type)
    st.report_pass("ssh_login_with_radius_successful", rbac.global_auth_type)
Пример #9
0
def snmp_config(config='add'):
    global ssh_conn_obj
    if config == 'add':
        ip = ensure_service_params(vars.D1, "snmptrap", "ip")
        username = ensure_service_params(vars.D1, "snmptrap", "username")
        password = ensure_service_params(vars.D1, "snmptrap", "password")
        snmp_obj.set_snmp_config(vars.D1,
                                 snmp_rocommunity=ssh_data.ro_community,
                                 snmp_location=ssh_data.location)
        # Connect to the linux machine and check
        ssh_conn_obj = connect_to_device(ip, username, password)
        if not ssh_conn_obj:
            return False
    else:
        snmp_obj.restore_snmp_config(vars.D1)
    return True
Пример #10
0
def clear_syslog_from_remote_server(dut):
    """
    Clear the logs from the syslog server
    Author: Chaitanya Lohith Bollapragada ([email protected])

    :param dut:
    :return:
    """
    syslog_ip = utils.ensure_service_params(dut, "syslog", "ip")
    syslog_port = utils.ensure_service_params(dut, "syslog", "port")
    syslog_username = utils.ensure_service_params(dut, "syslog", "username")
    syslog_password = utils.ensure_service_params(dut, "syslog", "password")
    syslog_path = utils.ensure_service_params(dut, "syslog", "path")
    command = "sudo truncate -s 0 {}".format(syslog_path)
    syslog_con_obj = conf_obj.connect_to_device(syslog_ip,
                                                syslog_username,
                                                syslog_password,
                                                port=syslog_port)
    conf_obj.execute_command(syslog_con_obj, command)
    return True
Пример #11
0
def snmp_trap_pre_config():
    global capture_file, ssh_conn_obj
    ip = ensure_service_params(vars.D1, "snmptrap", "ip")
    username = ensure_service_params(vars.D1, "snmptrap", "username")
    password = ensure_service_params(vars.D1, "snmptrap", "password")
    path = ensure_service_params(vars.D1, "snmptrap", "path")

    # Connect to the linux machine and check
    ssh_conn_obj = connect_to_device(ip, username, password)
    if not ssh_conn_obj:
        st.report_tc_fail("ssh_connection_failed", ip)

    # enable traps on DUT
    snmp_obj.config_snmp_trap(vars.D1,
                              version=2,
                              ip_addr=ip,
                              community=data.ro_community)

    # start capture on the linux machine
    capture_file = path
Пример #12
0
def bootstrap_chef_node(chef_conn_obj, repo_path, device_ip, uname, password,
                        node_name):
    """
    :param chef_conn_obj:
    :param file_name:
    :return:
    """
    if not chef_conn_obj:
        return False

    ssh_obj = con_obj.connect_to_device(device_ip, uname, password)
    if not ssh_obj:
        password = '******'

    command = "cd {}".format(repo_path)
    st.log("Remote Command: {}".format(command))
    con_obj.execute_command(chef_conn_obj, command)
    command = "sudo knife bootstrap {} -x {} -P {} --sudo --ssh-verify-host-key never --node-ssl-verify-mode none -N {}"\
                        .format(device_ip, uname, password ,node_name)
    st.log("Remote Command: {}".format(command))
    return con_obj.execute_command(chef_conn_obj, command)
Пример #13
0
def get_syslog_from_remote_server(dut,
                                  severity=None,
                                  filter_list=None,
                                  lines=None):
    """
    Get the logs from the syslog server
    Author: Chaitanya Lohith Bollapragada ([email protected])

    :param dut:
    :param severity:
    :param filter_list:
    :param lines:
    :return:
    """

    syslog_ip = utils.ensure_service_params(dut, "syslog", "ip")
    syslog_port = utils.ensure_service_params(dut, "syslog", "port")
    syslog_username = utils.ensure_service_params(dut, "syslog", "username")
    syslog_password = utils.ensure_service_params(dut, "syslog", "password")
    syslog_path = utils.ensure_service_params(dut, "syslog", "path")

    if filter_list is None:
        filter_list = []
    filter_list = list(filter_list) if isinstance(filter_list,
                                                  list) else [filter_list]
    command = "cat {}".format(syslog_path)
    if severity:
        command += " | grep '{}'".format(severity)
    for each_filter in filter_list:
        command += " | grep '{}'".format(each_filter)
    if lines:
        command += "| tail -n {} ".format(lines)
    syslog_con_obj = conf_obj.connect_to_device(syslog_ip,
                                                syslog_username,
                                                syslog_password,
                                                port=syslog_port)
    syslog_file_contents = conf_obj.execute_command(syslog_con_obj, command)
    return syslog_file_contents
Пример #14
0
def test_ft_tacacs_enable_disable_failthrough():
    """
    Author: Karthik Kumar Goud Battula(karthikkumargoud,[email protected])
    This test case covers the below Scenarios
    Scenario-1: Verify the functionality of failthrough mechanism by changing the login authentication order
    Scenario-2: Verify the functionality of failthrough mechanism when DUT have multiple server with default priority.
    """
    tacacs_obj.set_tacacs_server(vars.D1, 'add', data.tacacs_ser_ip_2, data.tcp_port, data.timeout, data.passkey,
                                 data.auth_type, data.priority_server2)
    st.log(
        "Trying to SSH to the device using local credetails when login method set to TACACS+ and local and fail through mode is not enabled")
    if ssh_obj.connect_to_device(data.ip_address, data.local_username, data.local_password, data.protocol,
                                 data.ssh_port, alt_password=data.local_password2):
        st.report_fail("Login_to_DUT_via_SSH_is_failed")
    st.log(
        "Trying to SSH to the device using TACACS+ credetails when login method set to TACACS+ and local and fail through mode is not enabled")
    if not ssh_obj.connect_to_device(data.ip_address, data.username, data.password, data.protocol):
        debug_info("test_ft_tacacs_enable_disable_failthrough", data.tacacs_ser_ip_1)
        st.report_fail("Login_to_DUT_via_SSH_is_failed")
    st.log("Setting login authentication to local and tacacs+")
    tacacs_obj.set_aaa_authentication_properties(vars.D1, 'login', 'local tacacs+')
    st.log(
        "Trying to SSH to the device using local credetails when login method set to local and TACACS+ and fail through mode is not enabled")
    if not ssh_obj.connect_to_device(data.ip_address, data.local_username, data.local_password,
                                     alt_password=data.local_password2):
        st.report_fail("Login_to_DUT_via_SSH_is_failed")
    st.log(
        "Trying to SSH to the device using TACACS+ credetails when login method set to local and TACACS+ and fail through mode is not enabled")
    if ssh_obj.connect_to_device(data.ip_address, data.username, data.password, data.protocol, data.ssh_port):
        st.report_fail("Login_to_DUT_via_SSH_is_failed")
    st.log("Configuring AAA login to tacacs+ and local and enabling failthrough mode")
    tacacs_obj.set_aaa_authentication_properties(vars.D1, 'login', 'tacacs+ local')
    tacacs_obj.set_aaa_authentication_properties(vars.D1, 'failthrough', 'enable')
    st.log(
        "Trying to SSH to the device using local credetails when login method set to TACACS+ and local and fail through mode is enabled")
    if not ssh_obj.connect_to_device(data.ip_address, data.local_username, data.local_password,
                                     alt_password=data.local_password2):
        st.report_fail("Login_to_DUT_via_SSH_is_failed")
    st.log(
        "Trying to SSH to the device using TACACS+ credetails when login method set to TACACS+ and local and fail through mode is enabled")
    if not ssh_obj.connect_to_device(data.ip_address, data.username, data.password, data.protocol, data.ssh_port):
        debug_info("test_ft_tacacs_enable_disable_failthrough", data.tacacs_ser_ip_1)
        st.report_fail("Login_to_DUT_via_SSH_is_failed")
    st.report_pass("test_case_passed")
Пример #15
0
def test_ft_ssh_config_reload_docker():
    """
    Author : Prudvi Mangadu ([email protected])
    """
    result = True
    get_docker_ps(vars.D1)
    count = get_and_match_docker_count(vars.D1)
    ssh_d1 = connect_to_device(st.get_mgmt_ip(vars.D1), ssh_data.usr_default,
                               ssh_data.pwd_final)
    if ssh_d1:
        st.log(
            "Executing command - 'sudo config reload -y &' in to the SSH session."
        )
        st.log(execute_command(ssh_d1, 'sudo config reload -y &'))
        st.wait(5, 'After executing "config reload" cmd on SSH session.')
        st.log("Forcefully disconnecting the SSH session..")
        ssh_disconnect(ssh_d1)
    else:
        st.error('Cannot SSH into Device with default credentials')
        st.report_fail("ssh_failed")

    if not poll_wait(verify_docker_status, 180, vars.D1, 'Exited'):
        st.error(
            "Post 'config reload' from SSH, dockers are not auto recovered.")
        result = False

    if result:
        if not poll_wait(get_and_match_docker_count, 180, vars.D1, count):
            st.error("Post 'config reload' from SSH, ALL dockers are not UP.")
            result = False

    if not result:
        st.log("Test Failed: So recovering the device by reboot.")
        st.reboot(vars.D1)
        st.report_fail("test_case_failed")
    st.report_pass("test_case_passed")
Пример #16
0
def initialize_topology():
    # code for ensuring min topology

    vars = st.ensure_min_topology('D1D2:2', 'D1D3:0', 'D1D4:2', 'D3D4:2',
                                  'D3D2:2', 'D2D4:0')
    data.my_dut_list = st.get_dut_names()
    data.d1 = data.my_dut_list[0]
    data.d2 = data.my_dut_list[1]
    data.d3 = data.my_dut_list[2]
    data.d4 = data.my_dut_list[3]

    data.d1_d2_intf_1 = vars.D1D2P1
    data.d2_d1_intf_1 = vars.D2D1P1

    data.d1_d2_intf_2 = vars.D1D2P2
    data.d2_d1_intf_2 = vars.D2D1P2

    data.d1_d4_intf_1 = vars.D1D4P1
    data.d4_d1_intf_1 = vars.D4D1P1
    data.d1_d4_intf_2 = vars.D1D4P2
    data.d4_d1_intf_2 = vars.D4D1P2

    data.d3_d4_intf_1 = vars.D3D4P1
    data.d4_d3_intf_1 = vars.D4D3P1

    data.d3_d4_intf_2 = vars.D3D4P2
    data.d4_d3_intf_2 = vars.D4D3P2

    data.d3_d2_intf_1 = vars.D3D2P1
    data.d2_d3_intf_1 = vars.D2D3P1
    data.d3_d2_intf_2 = vars.D3D2P2
    data.d2_d3_intf_2 = vars.D2D3P2
    data.wait = 120

    def f1():
        ip = loc_lib.get_dut_ip(data.d1)
        return ip

    def f2():
        ip = loc_lib.get_dut_ip(data.d2)
        return ip

    def f3():
        ip = loc_lib.get_dut_ip(data.d3)
        return ip

    def f4():
        ip = loc_lib.get_dut_ip(data.d4)
        return ip

    [res, _] = putils.exec_all(True, [[f1], [f2], [f3], [f4]])
    data.d1_ip = res[0]
    data.d2_ip = res[1]
    data.d3_ip = res[2]
    data.d4_ip = res[3]

    data.role_path = os.path.join(os.path.dirname(__file__), data.role_dir)
    st.log('#####################{}'.format(data.role_path))

    chef_param_list = [
        'ip', 'username', 'password', 'cookbook_path', 'path', 'client_path',
        'validation_file', 'client_rb', 'client_log', 'user_home_folder'
    ]
    for chef_param in chef_param_list:
        chef_server[chef_param] = mutils.ensure_service_params(
            data.d1, chef_server.name, chef_param)

    chef_server.url = "https://{}:443".format(chef_server.ip)
    st.log("Chef server url used : {}".format(chef_server.url))

    st.log("Logging in to chef server with the params from config file.")
    chef_server.ssh_obj = con_obj.connect_to_device(chef_server.ip,
                                                    chef_server.username,
                                                    chef_server.password)
    if not chef_server.ssh_obj:
        st.error("SSH connetion object not found.")
        st.report_env_fail("ssh_connection_failed", chef_server.ip)

    for key, value in data.items():
        st.log('{} - {}'.format(key, value))
Пример #17
0
def pre_config_ztp():
    global vars
    global ssh_conn_obj_oob_v6
    global ssh_conn_obj
    global ssh_conn_obj_oob_v4
    global ssh_conn_obj_inb_v4
    global ssh_conn_obj_inb_v6
    vars = st.get_testbed_vars()
    # DHCPV6 out of band params
    ztp_params.dhcp6.ip = utils_obj.ensure_service_params(
        vars.D1, "ztp", "dhcpv6", "outofband", "ip")
    ztp_params.dhcp6.username = utils_obj.ensure_service_params(
        vars.D1, "ztp", "dhcpv6", "outofband", "username")
    ztp_params.dhcp6.password = utils_obj.ensure_service_params(
        vars.D1, "ztp", "dhcpv6", "outofband", "password")
    ztp_params.dhcp6.oob_port = utils_obj.ensure_service_params(
        vars.D1, "ztp", "dhcpv6", "outofband", "interface")
    ztp_params.dhcp6.oob_static_ip = utils_obj.ensure_service_params(
        vars.D1, "ztp", "dhcpv6", "outofband", "static_ip")
    # DHCPV4 out of band params
    ztp_params.dhcp.ip = utils_obj.ensure_service_params(
        vars.D1, "ztp", "dhcp", "outofband", "ip")
    ztp_params.dhcp.username = utils_obj.ensure_service_params(
        vars.D1, "ztp", "dhcp", "outofband", "username")
    ztp_params.dhcp.password = utils_obj.ensure_service_params(
        vars.D1, "ztp", "dhcp", "outofband", "password")
    ztp_params.oob_port = utils_obj.ensure_service_params(
        vars.D1, "ztp", "dhcp", "outofband", "interface")
    ztp_params.static_ip = utils_obj.ensure_service_params(
        vars.D1, "ztp", "dhcp", "outofband", "static_ip")
    #DHCPV6 in band params
    ztp_params.dhcp6.inband_ip = utils_obj.ensure_service_params(
        vars.D1, "ztp", "dhcpv6", "inband", "ip")
    ztp_params.dhcp6.inband_username = utils_obj.ensure_service_params(
        vars.D1, "ztp", "dhcpv6", "inband", "username")
    ztp_params.dhcp6.inband_password = utils_obj.ensure_service_params(
        vars.D1, "ztp", "dhcpv6", "inband", "password")
    ztp_params.dhcp6.inband_static_ip = utils_obj.ensure_service_params(
        vars.D1, "ztp", "dhcpv6", "inband", "static_ip")
    ztp_params.dhcp6.inband_port = utils_obj.ensure_service_params(
        vars.D1, "ztp", "dhcpv6", "inband", "interface")
    # DHCPV4 in band params
    ztp_params.dhcp.inband_ip = utils_obj.ensure_service_params(
        vars.D1, "ztp", "dhcp", "inband", "ip")
    ztp_params.dhcp.inband_username = utils_obj.ensure_service_params(
        vars.D1, "ztp", "dhcp", "inband", "username")
    ztp_params.dhcp.inband_password = utils_obj.ensure_service_params(
        vars.D1, "ztp", "dhcp", "inband", "password")
    ztp_params.dhcp.inband_static_ip = utils_obj.ensure_service_params(
        vars.D1, "ztp", "dhcp", "inband", "static_ip")
    ztp_params.inband_port = utils_obj.ensure_service_params(
        vars.D1, "ztp", "dhcp", "inband", "interface")

    ztp_params.dhcp6.oob_config_file = utils_obj.ensure_service_params(
        vars.D1, "ztp", "dhcpv6", "outofband", "config_file")
    ztp_params.dhcp6.inband_config_file = utils_obj.ensure_service_params(
        vars.D1, "ztp", "dhcpv6", "inband", "config_file")
    ztp_params.config_path = utils_obj.ensure_service_params(
        vars.D1, "ztp", "config_path")
    ztp_params.dhcp6.oob_home_path = utils_obj.ensure_service_params(
        vars.D1, "ztp", "dhcpv6", "outofband", "home_path")
    ztp_params.dhcp6.inband_home_path = utils_obj.ensure_service_params(
        vars.D1, "ztp", "dhcpv6", "inband", "home_path")
    ztp_params.port = utils_obj.ensure_service_params(vars.D1, "ztp", "dhcp",
                                                      "inband", "port")
    ztp_params.dut_path = utils_obj.ensure_service_params(
        vars.D1, "ztp", "dut_path")
    ztp_params.ztp_cfg_file_name = utils_obj.ensure_service_params(
        vars.D1, "ztp", "ztp_cfg_file_name")
    ztp_params.provision_script_path = utils_obj.ensure_service_params(
        vars.D1, "ztp", "provision_script_path")

    st.log("Clearing V4/V6 lease database from DUT ...")
    basic_obj.delete_directory_contents(vars.D1, config_params.lease_db_path)

    st.log("####### Connecting to DHCPV6 server -- OUT OF BAND ...###########")
    ssh_conn_obj_oob_v6 = con_obj.connect_to_device(ztp_params.dhcp6.ip,
                                                    ztp_params.dhcp6.username,
                                                    ztp_params.dhcp6.password)
    if not ssh_conn_obj_oob_v6:
        st.error(
            "SSH connection object not found for DHCPV6 server OUT OF BAND.")
        if network_flag != "inband":
            reset_module_config()
            st.report_env_fail("ssh_connection_failed", ztp_params.dhcp6.ip)
    st.log(
        "############Connecting to DHCPV4 server -- OUT OF BAND ...#############"
    )
    ssh_conn_obj_oob_v4 = con_obj.connect_to_device(ztp_params.dhcp.ip,
                                                    ztp_params.dhcp.username,
                                                    ztp_params.dhcp.password)
    if not ssh_conn_obj_oob_v4:
        st.error(
            "SSH connection object not found for DHCPV4 server OUT OF BAND.")
        # st.report_env_fail("ssh_connection_failed", ztp_params.dhcp6.ip)
    st.log(
        "###########Connecting to DHCPV4 server -- IN BAND ...##############")
    ssh_conn_obj_inb_v4 = con_obj.connect_to_device(
        ztp_params.dhcp.inband_ip, ztp_params.dhcp.inband_username,
        ztp_params.dhcp.inband_password)
    if not ssh_conn_obj_inb_v4:
        st.error(
            "SSH connection object not found for DHCPV4 server OUT OF BAND.")
        # st.report_env_fail("ssh_connection_failed", ztp_params.dhcp6.ip)
    ssh_conn_obj_inb_v6 = con_obj.connect_to_device(
        ztp_params.dhcp6.inband_ip, ztp_params.dhcp6.inband_username,
        ztp_params.dhcp6.inband_password)
    if not ssh_conn_obj_inb_v6:
        st.error(
            "SSH connection object not found for DHCPV4 server OUT OF BAND.")
        if network_flag == "inband":
            reset_module_config()
            st.report_env_fail("ssh_connection_failed",
                               ztp_params.dhcp6.inband_ip)
    st.log(
        "###########Stopping V4/V6 services to avoid the DHCP option conflict .. ###########"
    )
    v4_connection_objs = [ssh_conn_obj_oob_v4, ssh_conn_obj_inb_v4]
    for connection_obj in v4_connection_objs:
        if connection_obj:
            basic_obj.service_operations(connection_obj,
                                         config_params.dhcp_service_name,
                                         "stop", "server")
            if ztp_obj.verify_dhcpd_service_status(connection_obj,
                                                   config_params.dhcpd_pid):
                st.log("{} service is running which is not expected".format(
                    config_params.dhcp_service_name))
                reset_module_config()
                st.report_fail("service_running_not_expected",
                               config_params.dhcp_service_name)
    st.log("Restarting V6 services on required server .. ")
    if network_flag != "inband":
        ssh_conn_obj = ssh_conn_obj_oob_v6
        st.log("Using OUT OF BAND V6 ssh object ... ")
        if ssh_conn_obj_inb_v6:
            basic_obj.service_operations(ssh_conn_obj_inb_v6,
                                         config_params.dhcp6_service_name,
                                         "stop", "server")
            if ztp_obj.verify_dhcpd_service_status(ssh_conn_obj_inb_v6,
                                                   config_params.dhcpd6_pid):
                st.log("{} service is running which is not expected".format(
                    config_params.dhcp6_service_name))
                reset_module_config()
                st.report_fail("service_running_not_expected",
                               config_params.dhcp6_service_name)
        else:
            st.log("SSH object for INB V6 server is not found ...")
    else:
        st.log("Using INBAND V6 ssh object ... ")
        ssh_conn_obj = ssh_conn_obj_inb_v6
        if ssh_conn_obj_oob_v6:
            basic_obj.service_operations(ssh_conn_obj_oob_v6,
                                         config_params.dhcp6_service_name,
                                         "stop", "server")
            if ztp_obj.verify_dhcpd_service_status(ssh_conn_obj_oob_v6,
                                                   config_params.dhcpd6_pid):
                st.log("{} service is running which is not expected".format(
                    config_params.dhcp6_service_name))
                reset_module_config()
                st.report_fail("service_running_not_expected",
                               config_params.dhcp6_service_name)
        else:
            st.log("SSH object for OOB V6 server is not found ...")
    basic_obj.service_operations(ssh_conn_obj,
                                 config_params.dhcp6_service_name, "restart",
                                 "server")
    if not ztp_obj.verify_dhcpd_service_status(ssh_conn_obj,
                                               config_params.dhcpd6_pid):
        st.log("{} service is not running ".format(
            config_params.dhcp6_service_name))
        reset_module_config()
        st.report_fail("service_running_not_expected",
                       config_params.dhcp6_service_name)
    global dhcp6_port
    global dhcp6_static_ip
    global dhcp6_home_path
    global dhcp6_config_file
    if network_flag != "inband":
        dhcp6_port = ztp_params.dhcp6.oob_port
        dhcp6_static_ip = ztp_params.dhcp6.oob_static_ip
        dhcp6_home_path = ztp_params.dhcp6.oob_home_path
        dhcp6_config_file = ztp_params.dhcp6.oob_config_file
        ztp_params.home_path = ztp_params.dhcp6.oob_home_path
    else:
        dhcp6_port = ztp_params.dhcp6.inband_port
        dhcp6_static_ip = ztp_params.dhcp6.inband_static_ip
        dhcp6_home_path = ztp_params.dhcp6.inband_home_path
        dhcp6_config_file = ztp_params.dhcp6.inband_config_file
        ztp_params.home_path = ztp_params.dhcp6.inband_home_path
        basic_obj.ifconfig_operation(vars.D1, ztp_params.dhcp6.oob_port,
                                     "down")
    basic_obj.poll_for_system_status(vars.D1)
    ztp_cfg = {
        "admin-mode": True,
        "restart-ztp-interval": 30,
        "feat-console-logging": feat_logging_console
    }
    ztp_obj.config_ztp_backdoor_options(vars.D1, ztp_cfg)
Пример #18
0
def pre_config_ztp():
    global vars
    global ssh_conn_obj
    global outofband_conn_obj
    global ssh_conn_obj_oob_v6
    global ssh_conn_obj_inb_v6
    vars = st.get_testbed_vars()
    # DHCPV4 out of band params
    ztp_params.dhcp.ip = utils_obj.ensure_service_params(vars.D1, "ztp", "dhcp", "outofband", "ip")
    ztp_params.dhcp.username = utils_obj.ensure_service_params(vars.D1, "ztp", "dhcp", "outofband", "username")
    ztp_params.dhcp.password = utils_obj.ensure_service_params(vars.D1, "ztp", "dhcp", "outofband", "password")
    ztp_params.oob_port = utils_obj.ensure_service_params(vars.D1, "ztp", "dhcp", "outofband", "interface")
    # DHCPV4 in band params
    ztp_params.dhcp.inband_ip = utils_obj.ensure_service_params(vars.D1, "ztp", "dhcp", "inband", "ip")
    ztp_params.dhcp.inband_username = utils_obj.ensure_service_params(vars.D1, "ztp", "dhcp", "inband", "username")
    ztp_params.dhcp.inband_password = utils_obj.ensure_service_params(vars.D1, "ztp", "dhcp", "inband", "password")
    ztp_params.dhcp.inband_config_file = utils_obj.ensure_service_params(vars.D1, "ztp", "dhcp", "inband", "config_file")
    ztp_params.dhcp.inband_static_ip = utils_obj.ensure_service_params(vars.D1, "ztp", "dhcp", "inband", "static_ip")
    ztp_params.inband_port = utils_obj.ensure_service_params(vars.D1, "ztp", "dhcp", "inband", "interface")
    ztp_params.config_path = utils_obj.ensure_service_params(vars.D1, "ztp", "config_path")
    ztp_params.firmware_path = utils_obj.ensure_service_params(vars.D1, "ztp", "firmware_path")
    ztp_params.home_path = utils_obj.ensure_service_params(vars.D1, "ztp", "dhcp", "inband", "home_path")
    ztp_params.port = utils_obj.ensure_service_params(vars.D1, "ztp", "dhcp", "inband", "port")
    ztp_params.build_file_name = utils_obj.ensure_service_params(vars.D1, "ztp", "build_file_name")
    ztp_params.uninstall_image = utils_obj.ensure_service_params(vars.D1, "ztp", "uninstall_image")
    ztp_params.dut_path = utils_obj.ensure_service_params(vars.D1, "ztp", "dut_path")
    ztp_params.ztp_cfg_file_name = utils_obj.ensure_service_params(vars.D1, "ztp", "ztp_cfg_file_name")
    ztp_params.provision_script_path = utils_obj.ensure_service_params(vars.D1, "ztp", "provision_script_path")
    ztp_params.docker_path = utils_obj.ensure_service_params(vars.D1, "ztp", "docker_path")
    ztp_params.docker_image = utils_obj.ensure_service_params(vars.D1, "ztp", "docker_image")
    ztp_params.docker_component_name = utils_obj.ensure_service_params(vars.D1, "ztp", "docker_component_name")
    ztp_params.inband_port = utils_obj.ensure_service_params(vars.D1, "ztp", "dhcp", "inband", "interface")
    ztp_params.minigraph_file = utils_obj.ensure_service_params(vars.D1, "ztp", "minigraph_file")
    ztp_params.xml_path = utils_obj.ensure_service_params(vars.D1, "ztp", "xml_path")
    # DHCPV6 out of band params
    ztp_params.dhcp6.ip = utils_obj.ensure_service_params(vars.D1, "ztp", "dhcpv6", "outofband", "ip")
    ztp_params.dhcp6.username = utils_obj.ensure_service_params(vars.D1, "ztp", "dhcpv6", "outofband", "username")
    ztp_params.dhcp6.password = utils_obj.ensure_service_params(vars.D1, "ztp", "dhcpv6", "outofband", "password")
    ztp_params.dhcp6.oob_port = utils_obj.ensure_service_params(vars.D1, "ztp", "dhcpv6", "outofband", "interface")
    ztp_params.dhcp6.oob_static_ip = utils_obj.ensure_service_params(vars.D1, "ztp", "dhcpv6", "outofband", "static_ip")
    # DHCPV6 IN band params
    ztp_params.dhcp6.inband_ip = utils_obj.ensure_service_params(vars.D1, "ztp", "dhcpv6", "inband", "ip")
    ztp_params.dhcp6.inband_username = utils_obj.ensure_service_params(vars.D1, "ztp", "dhcpv6", "inband", "username")
    ztp_params.dhcp6.inband_password = utils_obj.ensure_service_params(vars.D1, "ztp", "dhcpv6", "inband", "password")
    ztp_params.dhcp6.inband_static_ip = utils_obj.ensure_service_params(vars.D1, "ztp", "dhcpv6", "inband", "static_ip")
    ztp_params.dhcp6.inband_port = utils_obj.ensure_service_params(vars.D1, "ztp", "dhcpv6", "inband", "interface")
    ztp_params.dhcp.inband_v4_subnet = utils_obj.ensure_service_params(vars.D1, "ztp", "dhcp", "inband", "subnet")
    ztp_params.dhcp.oob_v4_subnet= utils_obj.ensure_service_params(vars.D1, "ztp", "dhcp", "outofband", "subnet")
    ztp_params.dhcp6.inband_v6_subnet = utils_obj.ensure_service_params(vars.D1, "ztp", "dhcpv6", "inband", "subnet")
    ztp_params.dhcp6.oob_v6_subnet = utils_obj.ensure_service_params(vars.D1, "ztp", "dhcpv6", "outofband", "subnet")
    ztp_params.dhcp.client_ip_inband = utils_obj.ensure_service_params(vars.D1, "ztp", "dhcp", "inband", "client_ip")
    ztp_params.breakout = utils_obj.ensure_service_params(vars.D1, "ztp", "breakout")
    ztp_params.cli_type = st.get_ui_type(vars.D1)
    st.log("Clearing V4/V6 lease database from DUT ...")
    basic_obj.delete_directory_contents(vars.D1, config_params.lease_db_path)
    st.log("################# Logging in to DHCPV4 server ---- IN BAND ...#################")
    ssh_conn_obj = con_obj.connect_to_device(ztp_params.dhcp.inband_ip,
                                             ztp_params.dhcp.inband_username, ztp_params.dhcp.inband_password)
    if not ssh_conn_obj:
        st.error("SSH connetion object not found for DHCPV4 server IN BAND.")
        reset_module_config()
        st.report_env_fail("ssh_connection_failed", ztp_params.dhcp.inband_ip)
    st.log("########Restarting DHCPV4 service##########")
    basic_obj.service_operations(ssh_conn_obj, config_params.dhcp_service_name, "restart", "server")
    st.log("########Verifying DHCPV4 service status##########")
    if not ztp_obj.verify_dhcpd_service_status(ssh_conn_obj, config_params.dhcpd_pid):
        st.log("{} service is not running ".format(config_params.dhcp_service_name))
        reset_module_config()
        st.report_fail("service_running_not_expected", config_params.dhcp_service_name)
    st.log("################# Logging in to DHCPV4 server ---- OUT OF BAND ... #################")
    outofband_conn_obj = con_obj.connect_to_device(ztp_params.dhcp.ip,
                                                   ztp_params.dhcp.username, ztp_params.dhcp.password)
    if not outofband_conn_obj:
        st.error("OUT OF BAND SSH connetion object not found.")
    else:
        basic_obj.service_operations(outofband_conn_obj, config_params.dhcp_service_name, "stop", "server")
        if ztp_obj.verify_dhcpd_service_status(outofband_conn_obj, config_params.dhcpd_pid):
            st.log("{} service is running which is not expected".format(config_params.dhcp_service_name))
            reset_module_config()
            st.report_fail("service_running_not_expected", config_params.dhcp_service_name)
        # st.report_env_fail("ssh_connection_failed", ztp_params.dhcp.ip)
    st.log("################# Logging in to DHCPV6 server -- OUT OF BAND ... #################")
    ssh_conn_obj_oob_v6 = con_obj.connect_to_device(ztp_params.dhcp6.ip,
                                                    ztp_params.dhcp6.username, ztp_params.dhcp6.password)
    if not ssh_conn_obj_oob_v6:
        st.error("SSH connection object not found for DHCPV6 server OUT OF BAND.")
    st.log("################# Logging in to DHCPV6 server ---- IN BAND ... ##################")
    ssh_conn_obj_inb_v6 = con_obj.connect_to_device(ztp_params.dhcp6.inband_ip,
                                                    ztp_params.dhcp6.inband_username, ztp_params.dhcp6.inband_password)
    if not ssh_conn_obj_inb_v6:
        st.error("SSH connection object not found for DHCPV6 server IN BAND.")
    st.log("Stopping V4/V6 services to avoid the DHCP option conflict .. ")
    v6_connection_objs = [ssh_conn_obj_inb_v6, ssh_conn_obj_oob_v6]
    for connection_obj in v6_connection_objs:
        if connection_obj:
            basic_obj.service_operations(connection_obj, config_params.dhcp6_service_name, "stop", "server")
            if ztp_obj.verify_dhcpd_service_status(connection_obj, config_params.dhcpd6_pid):
                st.log("{} service is running which is not expected".format(config_params.dhcp6_service_name))
                reset_module_config()
                st.report_fail("service_running_not_expected", config_params.dhcp6_service_name)
    basic_obj.poll_for_system_status(vars.D1)
    st.log("Shutting down the out of band interface ...")
    basic_obj.ifconfig_operation(vars.D1, ztp_params.oob_port, "down")
    ztp_cfg = {"admin-mode": True, "restart-ztp-interval": 30, "feat-console-logging": feat_logging_console}
    ztp_obj.config_ztp_backdoor_options(vars.D1, ztp_cfg)
Пример #19
0
def initialize_topology():
    # code for ensuring min topology

    vars = st.ensure_min_topology("D1D2:2", "D1D3:1", "D2D3:1", "D2CHIP:TD3",
                                  "D3CHIP:TD3")

    data.my_dut_list = st.get_dut_names()
    data.d1 = vars.D1
    data.d2 = vars.D2
    data.d3 = vars.D3
    data.wait = 10
    data.clear_parallel = True
    data.portChannelName = 'PortChannel001'
    data.peerlinkintf = 'PortChannel002'
    data.mclag_domain = 1
    data.d1d2p1 = vars.D1D2P1
    data.d2d1p1 = vars.D2D1P1
    data.d1d2p2 = vars.D1D2P2
    data.d2d1p2 = vars.D2D1P2
    data.d3d1p1 = vars.D3D1P1
    data.d3d2p1 = vars.D3D2P1

    data.d3d1p2 = vars.D3D1P2
    data.d1_d2_intf_1 = vars.D1D2P1
    data.d2_d1_intf_1 = vars.D2D1P1

    data.d1_d2_intf_2 = vars.D1D2P2
    data.d2_d1_intf_2 = vars.D2D1P2
    data.d1_d3_intf_1 = vars.D1D3P1
    data.d3_d1_intf_1 = vars.D3D1P1
    data.d3_d1_intf_2 = vars.D3D1P2

    data.d2_d3_intf_1 = vars.D2D3P1
    data.d3_d2_intf_1 = vars.D3D2P1
    data.d1d2_ip = '11.11.11.1'
    data.d2d1_ip = '11.11.11.2'

    [res, _] = putils.exec_foreach(True, data.my_dut_list, loc_lib.get_dut_ip)
    data.d1_ip = res[0]
    data.d2_ip = res[1]
    data.d3_ip = res[2]
    data.cli_type = "click"

    data.role_path = os.path.join(os.path.dirname(__file__), data.role_dir)
    st.log('#####################{}'.format(data.role_path))

    chef_param_list = [
        'ip', 'username', 'password', 'cookbook_path', 'path', 'client_path',
        'validation_file', 'client_rb', 'client_log', 'user_home_folder'
    ]
    for chef_param in chef_param_list:
        chef_server[chef_param] = mutils.ensure_service_params(
            data.d1, chef_server.name, chef_param)

    chef_server.url = "https://{}:443".format(chef_server.ip)
    st.log("Chef server url used : {}".format(chef_server.url))

    st.log("Logging in to chef server with the params from config file.")
    chef_server.ssh_obj = con_obj.connect_to_device(chef_server.ip,
                                                    chef_server.username,
                                                    chef_server.password)
    if not chef_server.ssh_obj:
        st.error("SSH connetion object not found.")
        st.report_env_fail("ssh_connection_failed", chef_server.ip)
Пример #20
0
def pre_config_ztp():
    global vars
    global ssh_conn_obj
    global inband_ssh_conn_obj
    global ssh_conn_obj_oob_v6
    global ssh_conn_obj_inb_v6
    vars = st.get_testbed_vars()
    # DHCPV4 out of band params
    ztp_params.dhcp.ip = mutils.ensure_service_params(vars.D1, "ztp", "dhcp",
                                                      "outofband", "ip")
    ztp_params.dhcp.username = mutils.ensure_service_params(
        vars.D1, "ztp", "dhcp", "outofband", "username")
    ztp_params.dhcp.password = mutils.ensure_service_params(
        vars.D1, "ztp", "dhcp", "outofband", "password")
    ztp_params.dhcp.config_file = mutils.ensure_service_params(
        vars.D1, "ztp", "dhcp", "outofband", "config_file")
    ztp_params.dhcp.static_ip = mutils.ensure_service_params(
        vars.D1, "ztp", "dhcp", "outofband", "static_ip")
    ztp_params.oob_port = mutils.ensure_service_params(vars.D1, "ztp", "dhcp",
                                                       "outofband",
                                                       "interface")
    # DHCPV4 in band params
    ztp_params.dhcp.inband_ip = mutils.ensure_service_params(
        vars.D1, "ztp", "dhcp", "inband", "ip")
    ztp_params.dhcp.inband_username = mutils.ensure_service_params(
        vars.D1, "ztp", "dhcp", "inband", "username")
    ztp_params.dhcp.inband_password = mutils.ensure_service_params(
        vars.D1, "ztp", "dhcp", "inband", "password")
    ztp_params.config_path = mutils.ensure_service_params(
        vars.D1, "ztp", "config_path")
    ztp_params.firmware_path = mutils.ensure_service_params(
        vars.D1, "ztp", "firmware_path")
    ztp_params.home_path = mutils.ensure_service_params(
        vars.D1, "ztp", "dhcp", "outofband", "home_path")
    ztp_params.build_file_name = mutils.ensure_service_params(
        vars.D1, "ztp", "build_file_name")
    ztp_params.uninstall_image = mutils.ensure_service_params(
        vars.D1, "ztp", "uninstall_image")
    ztp_params.dut_path = mutils.ensure_service_params(vars.D1, "ztp",
                                                       "dut_path")
    ztp_params.ztp_cfg_file_name = mutils.ensure_service_params(
        vars.D1, "ztp", "ztp_cfg_file_name")
    ztp_params.provision_script_path = mutils.ensure_service_params(
        vars.D1, "ztp", "provision_script_path")
    ztp_params.docker_path = mutils.ensure_service_params(
        vars.D1, "ztp", "docker_path")
    ztp_params.docker_image = mutils.ensure_service_params(
        vars.D1, "ztp", "docker_image")
    ztp_params.docker_component_name = mutils.ensure_service_params(
        vars.D1, "ztp", "docker_component_name")
    ztp_params.inband_port = mutils.ensure_service_params(
        vars.D1, "ztp", "dhcp", "inband", "interface")
    ztp_params.minigraph_file = mutils.ensure_service_params(
        vars.D1, "ztp", "minigraph_file")
    ztp_params.xml_path = mutils.ensure_service_params(vars.D1, "ztp",
                                                       "xml_path")
    # DHCPV6 out of band params
    ztp_params.dhcp6.ip = mutils.ensure_service_params(vars.D1, "ztp",
                                                       "dhcpv6", "outofband",
                                                       "ip")
    ztp_params.dhcp6.username = mutils.ensure_service_params(
        vars.D1, "ztp", "dhcpv6", "outofband", "username")
    ztp_params.dhcp6.password = mutils.ensure_service_params(
        vars.D1, "ztp", "dhcpv6", "outofband", "password")
    ztp_params.dhcp6.oob_port = mutils.ensure_service_params(
        vars.D1, "ztp", "dhcpv6", "outofband", "interface")
    ztp_params.dhcp6.oob_static_ip = mutils.ensure_service_params(
        vars.D1, "ztp", "dhcpv6", "outofband", "static_ip")
    # DHCPV6 IN band params
    ztp_params.dhcp6.inband_ip = mutils.ensure_service_params(
        vars.D1, "ztp", "dhcpv6", "inband", "ip")
    ztp_params.dhcp6.inband_username = mutils.ensure_service_params(
        vars.D1, "ztp", "dhcpv6", "inband", "username")
    ztp_params.dhcp6.inband_password = mutils.ensure_service_params(
        vars.D1, "ztp", "dhcpv6", "inband", "password")
    ztp_params.dhcp6.inband_static_ip = mutils.ensure_service_params(
        vars.D1, "ztp", "dhcpv6", "inband", "static_ip")
    ztp_params.dhcp6.inband_port = mutils.ensure_service_params(
        vars.D1, "ztp", "dhcpv6", "inband", "interface")
    ztp_params.cli_type = st.get_ui_type(vars.D1)
    st.log("Clearing V4/V6 lease database from DUT ...")
    basic_obj.delete_directory_contents(vars.D1, config_params.lease_db_path)
    st.log("####### Connecting to DHCPV4 server -- OUT OF BAND ...###########")
    ssh_conn_obj = con_obj.connect_to_device(ztp_params.dhcp.ip,
                                             ztp_params.dhcp.username,
                                             ztp_params.dhcp.password)
    if not ssh_conn_obj:
        st.error("SSH connetion object not found.")
        reset_module_config()
        st.report_env_fail("ssh_connection_failed", ztp_params.dhcp.ip)
    inband_ssh_conn_obj = con_obj.connect_to_device(
        ztp_params.dhcp.inband_ip, ztp_params.dhcp.inband_username,
        ztp_params.dhcp.inband_password)
    if not inband_ssh_conn_obj:
        st.log("SSH connection to inband DHCP server is not successfull")
        # st.report_env_fail("ssh_connection_failed", ztp_params.dhcp.inband_ip)
    st.log(
        "############Connecting to DHCPV6 server -- OUT OF BAND ...#########")
    ssh_conn_obj_oob_v6 = con_obj.connect_to_device(ztp_params.dhcp6.ip,
                                                    ztp_params.dhcp6.username,
                                                    ztp_params.dhcp6.password)
    if not ssh_conn_obj_oob_v6:
        st.error(
            "SSH connection object not found for DHCPV6 server OUT OF BAND.")
    ssh_conn_obj_inb_v6 = con_obj.connect_to_device(
        ztp_params.dhcp6.inband_ip, ztp_params.dhcp6.inband_username,
        ztp_params.dhcp6.inband_password)
    if not ssh_conn_obj_inb_v6:
        st.error(
            "SSH connection object not found for DHCPV4 server OUT OF BAND.")
    st.log("Stopping V4/V6 services on unwanted servers .. ")
    v6_connection_objs = [ssh_conn_obj_inb_v6, ssh_conn_obj_oob_v6]
    for connection_obj in v6_connection_objs:
        if connection_obj:
            basic_obj.service_operations(connection_obj,
                                         config_params.dhcp6_service_name,
                                         "stop", "server")
            if ztp_obj.verify_dhcpd_service_status(connection_obj,
                                                   config_params.dhcpd6_pid):
                st.log("{} service is running which is not expected".format(
                    config_params.dhcp6_service_name))
                reset_module_config()
                st.report_fail("service_running_not_expected",
                               config_params.dhcp6_service_name)
    basic_obj.service_operations(ssh_conn_obj, config_params.dhcp_service_name,
                                 "restart", "server")
    if not ztp_obj.verify_dhcpd_service_status(ssh_conn_obj,
                                               config_params.dhcpd_pid):
        st.log("{} service is not running ".format(
            config_params.dhcp_service_name))
        reset_module_config()
        st.report_fail("service_running_not_expected",
                       config_params.dhcp_service_name)
    st.wait(5)
    if not basic_obj.check_interface_status(vars.D1, ztp_params.oob_port,
                                            "up"):
        basic_obj.ifconfig_operation(vars.D1, ztp_params.oob_port, "up")
    intf_obj.enable_dhcp_on_interface(vars.D1, ztp_params.oob_port)
    if not ip_obj.ping(vars.D1, ztp_params.dhcp.static_ip):
        st.log(
            "Pinging to DHCP server failed from DUT, issue either with DUT or server"
        )
        reset_module_config()
        st.report_fail("ping_fail", ztp_params.dhcp.static_ip)
    ztp_cfg = {
        "admin-mode": True,
        "restart-ztp-interval": 30,
        "feat-console-logging": feat_logging_console
    }
    ztp_obj.config_ztp_backdoor_options(vars.D1, ztp_cfg)
    lines = basic_obj.get_number_of_lines_in_file(ssh_conn_obj,
                                                  ztp_params.dhcp.config_file)
    st.log("###########LINES -- {}##############".format(lines))