Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
36 changes: 27 additions & 9 deletions ansible/roles/vm_set/library/vm_topology.py
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,7 @@
- ptf_mgmt_ipv6_addr: ipv6 address with prefixlen for the injected docker container
- ptf_mgmt_ip_gw: default gateway for the injected docker container
- ptf_mgmt_ipv6_gw: default ipv6 gateway for the injected docker container
- ptf_extra_mgmt_ip_addr: list of ip addresses with prefixlen for the injected docker container
- ptf_bp_ip_addr: ipv6 address with prefixlen for the injected docker container
- ptf_bp_ipv6_addr: ipv6 address with prefixlen for the injected docker container
- mgmt_bridge: a bridge which is used as mgmt bridge on the host
Expand Down Expand Up @@ -96,6 +97,7 @@
ptf_mgmt_ipv6_addr: "{{ ptf_ipv6 }}"
ptf_mgmt_ip_gw: "{{ mgmt_gw }}"
ptf_mgmt_ipv6_gw: "{{ mgmt_gw_v6 }}"
ptf_extra_mgmt_ip_addr: "{{ ptf_extra_mgmt_ip }}"
ptf_bp_ip_addr: "{{ ptf_ip }}"
ptf_bp_ipv6_addr: "{{ ptf_ip }}"
mgmt_bridge: "{{ mgmt_bridge }}"
Expand All @@ -112,6 +114,7 @@
ptf_mgmt_ipv6_addr: "{{ ptf_ipv6 }}"
ptf_mgmt_ip_gw: "{{ mgmt_gw }}"
ptf_mgmt_ipv6_gw: "{{ mgmt_gw_v6 | default(None) }}"
ptf_extra_mgmt_ip_addr: "{{ ptf_extra_mgmt_ip }}"
mgmt_bridge: "{{ mgmt_bridge }}"
vm_names: ""
'''
Expand Down Expand Up @@ -470,7 +473,8 @@ def add_injected_fp_ports_to_docker(self):
self.add_veth_if_to_docker(ext_if, int_if)

def add_mgmt_port_to_docker(self, mgmt_bridge, mgmt_ip, mgmt_gw,
mgmt_ipv6_addr=None, mgmt_gw_v6=None, api_server_pid=None):
mgmt_ipv6_addr=None, mgmt_gw_v6=None, extra_mgmt_ip_addr=None,
api_server_pid=None):
if api_server_pid:
self.pid = api_server_pid
if VMTopology.intf_not_exists(MGMT_PORT_NAME, pid=self.pid):
Expand All @@ -481,7 +485,8 @@ def add_mgmt_port_to_docker(self, mgmt_bridge, mgmt_ip, mgmt_gw,
self.add_br_if_to_docker(
mgmt_bridge, 'apiserver', MGMT_PORT_NAME)
self.add_ip_to_docker_if(MGMT_PORT_NAME, mgmt_ip, mgmt_ipv6_addr=mgmt_ipv6_addr,
mgmt_gw=mgmt_gw, mgmt_gw_v6=mgmt_gw_v6, api_server_pid=api_server_pid)
mgmt_gw=mgmt_gw, mgmt_gw_v6=mgmt_gw_v6,
extra_mgmt_ip_addr=extra_mgmt_ip_addr, api_server_pid=api_server_pid)

def add_bp_port_to_docker(self, mgmt_ip, mgmt_ipv6):
self.add_br_if_to_docker(
Expand Down Expand Up @@ -539,7 +544,8 @@ def add_br_if_to_netns(self, bridge, ext_if, int_if):
VMTopology.iface_up(int_if, netns=self.netns)

def add_ip_to_docker_if(self, int_if, mgmt_ip_addr, mgmt_ipv6_addr=None,
mgmt_gw=None, mgmt_gw_v6=None, api_server_pid=None):
mgmt_gw=None, mgmt_gw_v6=None, extra_mgmt_ip_addr=None,
api_server_pid=None):
if api_server_pid:
self.pid = api_server_pid

Expand All @@ -548,6 +554,11 @@ def add_ip_to_docker_if(self, int_if, mgmt_ip_addr, mgmt_ipv6_addr=None,
(self.pid, int_if))
VMTopology.cmd("nsenter -t %s -n ip addr add %s dev %s" %
(self.pid, mgmt_ip_addr, int_if))
if extra_mgmt_ip_addr is not None:
for ip_addr in extra_mgmt_ip_addr:
if ip_addr != "":
VMTopology.cmd("nsenter -t %s -n ip addr add %s dev %s" %
(self.pid, ip_addr, int_if))
if mgmt_gw:
if api_server_pid:
VMTopology.cmd(
Expand Down Expand Up @@ -1682,6 +1693,7 @@ def main():
ptf_mgmt_ipv6_addr=dict(required=False, type='str'),
ptf_mgmt_ip_gw=dict(required=False, type='str'),
ptf_mgmt_ipv6_gw=dict(required=False, type='str'),
ptf_extra_mgmt_ip_addr=dict(required=False, type='list', default=[]),
ptf_bp_ip_addr=dict(required=False, type='str'),
ptf_bp_ipv6_addr=dict(required=False, type='str'),
mgmt_bridge=dict(required=False, type='str'),
Expand Down Expand Up @@ -1723,6 +1735,7 @@ def main():
'ptf_mgmt_ipv6_addr',
'ptf_mgmt_ip_gw',
'ptf_mgmt_ipv6_gw',
'ptf_extra_mgmt_ip_addr',
'ptf_bp_ip_addr',
'ptf_bp_ipv6_addr',
'mgmt_bridge',
Expand Down Expand Up @@ -1753,12 +1766,13 @@ def main():
ptf_mgmt_ipv6_addr = module.params['ptf_mgmt_ipv6_addr']
ptf_mgmt_ip_gw = module.params['ptf_mgmt_ip_gw']
ptf_mgmt_ipv6_gw = module.params['ptf_mgmt_ipv6_gw']
ptf_extra_mgmt_ip_addr = module.params['ptf_extra_mgmt_ip_addr']
mgmt_bridge = module.params['mgmt_bridge']
netns_mgmt_ip_addr = module.params['netns_mgmt_ip_addr']

# Add management port to PTF docker and configure IP
net.add_mgmt_port_to_docker(
mgmt_bridge, ptf_mgmt_ip_addr, ptf_mgmt_ip_gw, ptf_mgmt_ipv6_addr, ptf_mgmt_ipv6_gw)
net.add_mgmt_port_to_docker(mgmt_bridge, ptf_mgmt_ip_addr, ptf_mgmt_ip_gw,
ptf_mgmt_ipv6_addr, ptf_mgmt_ipv6_gw, ptf_extra_mgmt_ip_addr)

ptf_bp_ip_addr = module.params['ptf_bp_ip_addr']
ptf_bp_ipv6_addr = module.params['ptf_bp_ipv6_addr']
Expand Down Expand Up @@ -1795,18 +1809,20 @@ def main():
'ptf_mgmt_ipv6_addr',
'ptf_mgmt_ip_gw',
'ptf_mgmt_ipv6_gw',
'ptf_extra_mgmt_ip_addr',
'mgmt_bridge'], cmd)

ptf_mgmt_ip_addr = module.params['ptf_mgmt_ip_addr']
ptf_mgmt_ipv6_addr = module.params['ptf_mgmt_ipv6_addr']
ptf_mgmt_ip_gw = module.params['ptf_mgmt_ip_gw']
ptf_mgmt_ipv6_gw = module.params['ptf_mgmt_ipv6_gw']
ptf_extra_mgmt_ip_addr = module.params['ptf_extra_mgmt_ip_addr']
mgmt_bridge = module.params['mgmt_bridge']

api_server_pid = net.get_pid('apiserver')

net.add_mgmt_port_to_docker(
mgmt_bridge, ptf_mgmt_ip_addr, ptf_mgmt_ip_gw, ptf_mgmt_ipv6_addr, ptf_mgmt_ipv6_gw, api_server_pid)
net.add_mgmt_port_to_docker(mgmt_bridge, ptf_mgmt_ip_addr, ptf_mgmt_ip_gw,
ptf_mgmt_ipv6_addr, ptf_mgmt_ipv6_gw, ptf_extra_mgmt_ip_addr, api_server_pid)
elif cmd == 'unbind':
check_params(module, ['vm_set_name',
'topo',
Expand Down Expand Up @@ -1861,6 +1877,7 @@ def main():
'ptf_mgmt_ipv6_addr',
'ptf_mgmt_ip_gw',
'ptf_mgmt_ipv6_gw',
'ptf_extra_mgmt_ip_addr',
'ptf_bp_ip_addr',
'ptf_bp_ipv6_addr',
'mgmt_bridge',
Expand Down Expand Up @@ -1892,11 +1909,12 @@ def main():
ptf_mgmt_ipv6_addr = module.params['ptf_mgmt_ipv6_addr']
ptf_mgmt_ip_gw = module.params['ptf_mgmt_ip_gw']
ptf_mgmt_ipv6_gw = module.params['ptf_mgmt_ipv6_gw']
ptf_extra_mgmt_ip_addr = module.params['ptf_extra_mgmt_ip_addr']
mgmt_bridge = module.params['mgmt_bridge']
netns_mgmt_ip_addr = module.params['netns_mgmt_ip_addr']

net.add_mgmt_port_to_docker(
mgmt_bridge, ptf_mgmt_ip_addr, ptf_mgmt_ip_gw, ptf_mgmt_ipv6_addr, ptf_mgmt_ipv6_gw)
net.add_mgmt_port_to_docker(mgmt_bridge, ptf_mgmt_ip_addr, ptf_mgmt_ip_gw,
ptf_mgmt_ipv6_addr, ptf_mgmt_ipv6_gw, ptf_extra_mgmt_ip_addr)

ptf_bp_ip_addr = module.params['ptf_bp_ip_addr']
ptf_bp_ipv6_addr = module.params['ptf_bp_ipv6_addr']
Expand Down
3 changes: 3 additions & 0 deletions ansible/roles/vm_set/tasks/add_topo.yml
Original file line number Diff line number Diff line change
Expand Up @@ -86,6 +86,7 @@
ptf_mgmt_ipv6_addr: "{{ ptf_ipv6 }}"
ptf_mgmt_ip_gw: "{{ mgmt_gw }}"
ptf_mgmt_ipv6_gw: "{{ mgmt_gw_v6 | default(None) }}"
ptf_extra_mgmt_ip_addr: "{{ ptf_extra_mgmt_ip.split(',') | default([]) }}"
mgmt_bridge: "{{ mgmt_bridge }}"
vm_names: ""
become: yes
Expand Down Expand Up @@ -138,6 +139,7 @@
ptf_mgmt_ipv6_addr: "{{ ptf_ipv6 }}"
ptf_mgmt_ip_gw: "{{ mgmt_gw }}"
ptf_mgmt_ipv6_gw: "{{ mgmt_gw_v6 | default(None) }}"
ptf_extra_mgmt_ip_addr: "{{ ptf_extra_mgmt_ip.split(',') | default([]) }}"
ptf_bp_ip_addr: "{{ ptf_bp_ip }}"
ptf_bp_ipv6_addr: "{{ ptf_bp_ipv6 }}"
mgmt_bridge: "{{ mgmt_bridge }}"
Expand Down Expand Up @@ -208,6 +210,7 @@
ptf_mgmt_ipv6_addr: "{{ ptf_ipv6 }}"
ptf_mgmt_ip_gw: "{{ mgmt_gw }}"
ptf_mgmt_ipv6_gw: "{{ mgmt_gw_v6 | default(None) }}"
ptf_extra_mgmt_ip_addr: "{{ ptf_extra_mgmt_ip.split(',') | default([]) }}"
ptf_bp_ip_addr: "{{ ptf_bp_ip }}"
ptf_bp_ipv6_addr: "{{ ptf_bp_ipv6 }}"
mgmt_bridge: "{{ mgmt_bridge }}"
Expand Down
33 changes: 21 additions & 12 deletions ansible/testbed-cli.sh
Original file line number Diff line number Diff line change
Expand Up @@ -143,7 +143,7 @@ function read_yaml

tb_line=${tb_lines[0]}
line_arr=($1)
for attr in group-name topo ptf_image_name ptf ptf_ip ptf_ipv6 netns_mgmt_ip server vm_base dut inv_name auto_recover comment;
for attr in group-name topo ptf_image_name ptf ptf_ip ptf_ipv6 ptf_extra_mgmt_ip netns_mgmt_ip server vm_base dut inv_name auto_recover comment;
do
value=$(python -c "from __future__ import print_function; tb=eval(\"$tb_line\"); print(tb.get('$attr', None))")
[ "$value" == "None" ] && value=
Expand All @@ -156,12 +156,16 @@ function read_yaml
ptf=${line_arr[4]}
ptf_ip=${line_arr[5]}
ptf_ipv6=${line_arr[6]}
netns_mgmt_ip=${line_arr[7]}
server=${line_arr[8]}
vm_base=${line_arr[9]}
dut=${line_arr[10]}
ptf_extra_mgmt_ip=${line_arr[7]}
if [ ! -z "$ptf_extra_mgmt_ip" ]; then
ptf_extra_mgmt_ip=$(python -c "from __future__ import print_function; print(','.join(eval(\"$ptf_extra_mgmt_ip\")))")
fi
netns_mgmt_ip=${line_arr[8]}
server=${line_arr[9]}
vm_base=${line_arr[10]}
dut=${line_arr[11]}
duts=$(python -c "from __future__ import print_function; print(','.join(eval(\"$dut\")))")
inv_name=${line_arr[11]}
inv_name=${line_arr[12]}
}

function read_file
Expand Down Expand Up @@ -267,7 +271,8 @@ function add_topo
ANSIBLE_SCP_IF_SSH=y ansible-playbook -i $vmfile testbed_add_vm_topology.yml --vault-password-file="${passwd}" -l "$server" \
-e testbed_name="$testbed_name" -e duts_name="$duts" -e VM_base="$vm_base" \
-e ptf_ip="$ptf_ip" -e topo="$topo" -e vm_set_name="$vm_set_name" \
-e ptf_imagename="$ptf_imagename" -e vm_type="$vm_type" -e ptf_ipv6="$ptf_ipv6" -e netns_mgmt_ip="$netns_mgmt_ip" \
-e ptf_imagename="$ptf_imagename" -e vm_type="$vm_type" -e ptf_ipv6="$ptf_ipv6" \
-e ptf_extra_mgmt_ip="$ptf_extra_mgmt_ip" -e netns_mgmt_ip="$netns_mgmt_ip" \
$ansible_options $@

if [[ "$ptf_imagename" != "docker-keysight-api-server" ]]; then
Expand Down Expand Up @@ -311,7 +316,8 @@ function remove_topo
ANSIBLE_SCP_IF_SSH=y ansible-playbook -i $vmfile testbed_remove_vm_topology.yml --vault-password-file="${passwd}" -l "$server" \
-e testbed_name="$testbed_name" -e duts_name="$duts" -e VM_base="$vm_base" \
-e ptf_ip="$ptf_ip" -e topo="$topo" -e vm_set_name="$vm_set_name" \
-e ptf_imagename="$ptf_imagename" -e vm_type="$vm_type" -e ptf_ipv6="$ptf_ipv6" -e netns_mgmt_ip="$netns_mgmt_ip" \
-e ptf_imagename="$ptf_imagename" -e vm_type="$vm_type" -e ptf_ipv6="$ptf_ipv6" \
-e ptf_extra_mgmt_ip="$ptf_extra_mgmt_ip" -e netns_mgmt_ip="$netns_mgmt_ip" \
-e remove_keysight_api_server="$remove_keysight_api_server" \
$ansible_options $@

Expand Down Expand Up @@ -342,7 +348,8 @@ function connect_topo
-e duts_name="$duts" \
-e VM_base="$vm_base" -e ptf_ip="$ptf_ip" \
-e topo="$topo" -e vm_set_name="$vm_set_name" \
-e ptf_imagename="$ptf_imagename" -e vm_type="$vm_type" -e ptf_ipv6="$ptf_ipv6" $@
-e ptf_imagename="$ptf_imagename" -e vm_type="$vm_type" -e ptf_ipv6="$ptf_ipv6" \
-e ptf_extra_mgmt_ip="$ptf_extra_mgmt_ip" $@

ansible-playbook fanout_connect.yml -i $vmfile --limit "$server" --vault-password-file="${passwd}" -e "dut=$duts" $@

Expand All @@ -361,7 +368,8 @@ function renumber_topo

ANSIBLE_SCP_IF_SSH=y ansible-playbook -i $vmfile testbed_renumber_vm_topology.yml --vault-password-file="${passwd}" \
-l "$server" -e testbed_name="$testbed_name" -e duts_name="$duts" -e VM_base="$vm_base" -e ptf_ip="$ptf_ip" \
-e topo="$topo" -e vm_set_name="$vm_set_name" -e ptf_imagename="$ptf_imagename" -e ptf_ipv6="$ptf_ipv6" $@
-e topo="$topo" -e vm_set_name="$vm_set_name" -e ptf_imagename="$ptf_imagename" -e ptf_ipv6="$ptf_ipv6" \
-e ptf_extra_mgmt_ip="$ptf_extra_mgmt_ip" $@

ansible-playbook fanout_connect.yml -i $vmfile --limit "$server" --vault-password-file="${passwd}" -e "dut=$duts" $@

Expand All @@ -381,7 +389,8 @@ function restart_ptf

ANSIBLE_SCP_IF_SSH=y ansible-playbook -i $vmfile testbed_renumber_vm_topology.yml --vault-password-file="${passwd}" \
-l "$server" -e testbed_name="$testbed_name" -e duts_name="$duts" -e VM_base="$vm_base" -e ptf_ip="$ptf_ip" \
-e topo="$topo" -e vm_set_name="$vm_set_name" -e ptf_imagename="$ptf_imagename" -e ptf_ipv6="$ptf_ipv6" -e netns_mgmt_ip="$netns_mgmt_ip" $@
-e topo="$topo" -e vm_set_name="$vm_set_name" -e ptf_imagename="$ptf_imagename" -e ptf_ipv6="$ptf_ipv6" \
-e ptf_extra_mgmt_ip="$ptf_extra_mgmt_ip" -e netns_mgmt_ip="$netns_mgmt_ip" $@

echo Done
}
Expand All @@ -408,7 +417,7 @@ function refresh_dut
-e testbed_name="$testbed_name" -e duts_name="$duts" -e VM_base="$vm_base" \
-e ptf_ip="$ptf_ip" -e topo="$topo" -e vm_set_name="$vm_set_name" \
-e ptf_imagename="$ptf_imagename" -e vm_type="$vm_type" -e ptf_ipv6="$ptf_ipv6" \
-e force_stop_sonic_vm="yes" \
-e ptf_extra_mgmt_ip="$ptf_extra_mgmt_ip" -e force_stop_sonic_vm="yes" \
$ansible_options $@

echo Done
Expand Down
1 change: 1 addition & 0 deletions ansible/testbed.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@
ptf: ptf-unknown
ptf_ip: 10.255.0.178/24
ptf_ipv6:
ptf_extra_mgmt_ip: []
server: server_1
vm_base: VM0100
dut:
Expand Down