diff options
Diffstat (limited to 'test/scenario_test/docker_control.py')
-rw-r--r-- | test/scenario_test/docker_control.py | 236 |
1 files changed, 236 insertions, 0 deletions
diff --git a/test/scenario_test/docker_control.py b/test/scenario_test/docker_control.py new file mode 100644 index 00000000..e081df26 --- /dev/null +++ b/test/scenario_test/docker_control.py @@ -0,0 +1,236 @@ +from fabric.api import local +import time +import os + +GOBGP_CONTAINER_NAME = "gobgp" +GOBGP_ADDRESS = "10.0.255.1/16" +GOBGP_CONFIG_FILE = "gobgpd.conf" +BRIDGE_ADDRESS = "10.0.255.2" +CONFIG_DIR = "/usr/local/gobgp" +CONFIG_DIRR = "/usr/local/gobgp/" +STARTUP_FILE_NAME = "gobgp_startup.sh" +STARTUP_FILE = "/mnt/" + STARTUP_FILE_NAME +BRIDGE_0 = "br0" +BRIDGE_1 = "br1" +BRIDGE_2 = "br2" + +def test_user_check(): + root = False + outbuf = local("echo $USER", capture=True) + user = outbuf + if user == "root": + root = True + + return root + + +def docker_related_installation(): + local("apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 36A1D7869245C8950F966E92D8576A8BA88D21E9", capture=True) + local('sh -c "echo deb https://get.docker.io/ubuntu docker main > /etc/apt/sources.list.d/docker.list"', capture=True) + local("apt-get update", capture=True) + local("apt-get install -y --force-yes lxc-docker-1.3.2", capture=True) + local("ln -sf /usr/bin/docker.io /usr/local/bin/docker", capture=True) + local("gpasswd -a `whoami` docker", capture=True) + local("apt-get install -y --force-yes emacs23-nox", capture=True) + local("apt-get install -y --force-yes wireshark", capture=True) + local("apt-get install -y --force-yes iputils-arping", capture=True) + local("apt-get install -y --force-yes bridge-utils", capture=True) + local("apt-get install -y --force-yes tcpdump", capture=True) + local("apt-get install -y --force-yes lv", capture=True) + local("wget https://raw.github.com/jpetazzo/pipework/master/pipework -O /usr/local/bin/pipework", capture=True) + local("chmod 755 /usr/local/bin/pipework", capture=True) + local("docker pull osrg/quagga", capture=True) + local("docker pull osrg/gobgp", capture=True) + local("mkdir /usr/local/gobgp", capture=True) + local("docker run --privileged=true -v /usr/local/gobgp:/mnt --name gobgp --rm osrg/gobgp go run /root/gobgp/tools/route-server/quagga-rsconfig.go -c /mnt", capture=True) + + +def docker_pkg_check(): + docker_exists = False + outbuf = local("dpkg -l | grep docker | awk '{print $2}'", capture=True) + dpkg_list = outbuf.split('\n') + for dpkg in dpkg_list: + # print "lxc-docker in ",dpkg + if ("lxc-docker" in dpkg): + docker_exists = True + return docker_exists + + +def docker_container_check(): + container_exists = False + outbuf = local("docker ps", capture=True) + docker_ps = outbuf.split('\n') + for container in docker_ps: + container_name = container.split()[-1] + if container_name == GOBGP_CONTAINER_NAME: + container_exists = True + return container_exists + + +def get_docker_containers(): + containers = [] + cmd = "docker ps | awk '{print $NF}' | grep -e '^[q][0-9][0-9]*$'" + outbuf = local(cmd, capture=True) + docker_ps = outbuf.split('\n') + for container in docker_ps: + if container != "NAMES": + containers.append(container.split()[-1]) + return containers + + +def docker_run_quagga(quagga_num): + quagga_name = "q" + str(quagga_num) + cmd = "docker run --privileged=true -v " + CONFIG_DIR + "/" + quagga_name + ":/etc/quagga --name " + quagga_name + " -id osrg/quagga" + local(cmd, capture=True) + quagga_address = "10.0.0." + str(quagga_num) + "/16" + cmd = "pipework " + BRIDGE_0 + " " + quagga_name + " " + quagga_address + local(cmd, capture=True) + + +def docker_run_gobgp(): + cmd = "docker run --privileged=true -v " + CONFIG_DIR + ":/mnt -d --name " + GOBGP_CONTAINER_NAME + " -id osrg/gobgp" + local(cmd, capture=True) + cmd = "pipework " + BRIDGE_0 + " " + GOBGP_CONTAINER_NAME + " " + GOBGP_ADDRESS + local(cmd, capture=True) + + +def make_startup_file(): + file_buff = '#!/bin/bash' + '\n' + file_buff += 'cd /root/gobgp' + '\n' + file_buff += 'git pull origin master' + '\n' + file_buff += 'go get -v' + '\n' + file_buff += 'go build' + '\n' + file_buff += './gobgp -f /mnt/gobgpd.conf' + cmd = "echo \"" + file_buff + "\" > " + CONFIG_DIRR + STARTUP_FILE_NAME + local(cmd, capture=True) + cmd = "chmod 755 " + CONFIG_DIRR + STARTUP_FILE_NAME + local(cmd, capture=True) + + +def docker_containers_create(quagga_num): + bridge_setting_for_docker_connection(BRIDGE_0) + pwd = local("pwd", capture=True) + cmd = "go run " + pwd + "/quagga-rsconfig.go -n " + str(quagga_num) + " -c /usr/local/gobgp" + local(cmd, capture=True) + for num in range(1, quagga_num + 1): + docker_run_quagga(num) + docker_run_gobgp() + make_startup_file() + + +def docker_stop_quagga(quagga): + cmd = "docker rm -f " + quagga + local(cmd, capture=True) + cmd = "rm -rf " + CONFIG_DIRR + quagga + local(cmd, capture=True) + + +def docker_stop_gobgp(): + cmd = "docker rm -f " + GOBGP_CONTAINER_NAME + local(cmd, capture=True) + + +def docker_containers_destroy(): + if docker_container_check() is True: + containers = get_docker_containers() + for container in containers: + docker_stop_quagga(container) + docker_stop_gobgp() + bridge_unsetting_for_docker_connection(BRIDGE_0) + cmd = "rm -rf " + CONFIG_DIRR + GOBGP_CONFIG_FILE + local(cmd, capture=True) + cmd = "rm -rf " + CONFIG_DIRR + STARTUP_FILE_NAME + local(cmd, capture=True) + else: + print "docker containers not exists." + os.exit(1) + + +def docker_containers_recreate(quagga_num): + docker_containers_destroy() + docker_containers_create(quagga_num) + + +def docker_container_append(quagga_num): + print "start append docker container." + pwd = local("pwd", capture=True) + cmd = "go run " + pwd + "/quagga-rsconfig.go -a " + str(quagga_num) + " -c /usr/local/gobgp" + local(cmd, capture=True) + docker_run_quagga(quagga_num) + cmd = "docker exec gobgp /usr/bin/pkill gobgp -SIGHUP" + local(cmd, capture=True) + print "please wait" + sleep_time = 15 + time.sleep(sleep_time) + print "complete append docker container." + + +def docker_container_depend(quagga_num): + print "start remove docker container." + quagga = "q" + str(quagga_num) + docker_stop_quagga(quagga) + print "please wait" + sleep_time = 15 + time.sleep(sleep_time) + print "complete remove docker container." + + +def bridge_setting_for_docker_connection(bridge): + sysfs_name = "/sys/class/net/" + bridge + if os.path.exists(sysfs_name): + bridge_unsetting_for_docker_connection(bridge) + bridge_setting_for_docker_connection(bridge) + else: + cmd = "brctl addbr " + bridge + local(cmd, capture=True) + cmd = "ifconfig " + bridge + " " + BRIDGE_ADDRESS + local(cmd, capture=True) + cmd = "ifconfig " + bridge + " up" + local(cmd, capture=True) + + +def bridge_unsetting_for_docker_connection(bridge): + sysfs_name = "/sys/class/net/" + bridge + if os.path.exists(sysfs_name): + cmd = "ifconfig " + bridge + " down" + local(cmd, capture=True) + cmd = "brctl delbr " + bridge + local(cmd, capture=True) + + +def gobgp_start(): + cmd = "docker exec gobgp " + STARTUP_FILE + " > /dev/null 2>&1 &" + # cmd = "docker exec gobgp " + STARTUP_FILE + local(cmd, capture=True) + + +def init_test_env_executor(quagga_num): + print "start initialization of test environment." + if test_user_check() is False: + print "you are not root" + print "please run the test after you login as root" + return + + if docker_pkg_check(): + if docker_container_check(): + print "gobgp test environment already exists." + print "so that remake gobgp test environment." + docker_containers_recreate(quagga_num) + else: + print "make gobgp test environment." + docker_containers_create(quagga_num) + gobgp_start() + + print "please wait" + sleep_time = 15 + time.sleep(sleep_time) + print "complete initialization of test environment." + + +def docker_related_install_executor(): + print "start install of docker related" + if test_user_check() is False: + print "you are not root" + print "please run the test after you login as root" + return + docker_related_installation()
\ No newline at end of file |