diff options
author | Peter Mikus <pmikus@cisco.com> | 2017-08-21 11:01:24 +0200 |
---|---|---|
committer | Peter Mikus <pmikus@cisco.com> | 2017-10-09 09:35:05 +0000 |
commit | df5ed0d9317e2a1d4a7248459cc6aec39f80a052 (patch) | |
tree | 7478e6273ef87b81c536c978e30e3435e4ceee2d /resources/libraries/robot/shared | |
parent | 08e35e37f7ad3394cea86c22ab7ffd990651c112 (diff) |
CSIT-768: Refactor Python container libraries
CSIT-769: Implement L2 RF keywords for container orchestration
Change-Id: I7637d1ecc3a45111522b8d6c578b3f88369aff6b
Signed-off-by: Peter Mikus <pmikus@cisco.com>
Diffstat (limited to 'resources/libraries/robot/shared')
-rw-r--r-- | resources/libraries/robot/shared/container.robot | 121 | ||||
-rw-r--r-- | resources/libraries/robot/shared/lxc.robot | 256 | ||||
-rw-r--r-- | resources/libraries/robot/shared/memif.robot | 26 |
3 files changed, 121 insertions, 282 deletions
diff --git a/resources/libraries/robot/shared/container.robot b/resources/libraries/robot/shared/container.robot new file mode 100644 index 0000000000..c8c940ba45 --- /dev/null +++ b/resources/libraries/robot/shared/container.robot @@ -0,0 +1,121 @@ +# Copyright (c) 2017 Cisco and/or its affiliates. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at: +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +*** Settings *** +| Documentation | Keywords related to linux containers +| Library | resources.libraries.python.CpuUtils +| Library | resources.libraries.python.topology.Topology + +*** Keywords *** +| Construct VNF containers on all DUTs +| | [Documentation] | Construct 1..N VNF container(s) of specific technology on +| | ... | all DUT nodes. +| | ... +| | ${group}= | Set Variable | VNF +| | ${guest_dir}= | Set Variable | /mnt/host +| | ${host_dir}= | Set Variable | /tmp +| | ${skip_cpus}= | Evaluate | ${vpp_cpus}+${system_cpus} +| | Import Library | resources.libraries.python.ContainerUtils.ContainerManager +| | ... | engine=${container_engine} | WITH NAME | ${group} +| | ${duts}= | Get Matches | ${nodes} | DUT* +| | :FOR | ${dut} | IN | @{duts} +| | | ${env}= | Create List | LC_ALL="en_US.UTF-8" +| | | ... | DEBIAN_FRONTEND=noninteractive | ETCDV3_ENDPOINTS=172.17.0.1:2379 +| | | ${cpu_node}= | Get interfaces numa node | ${nodes['${dut}']} +| | | ... | ${dut1_if1} | ${dut1_if2} +| | | Run Keyword | ${group}.Construct containers +| | | ... | name=${dut}_${group} | node=${nodes['${dut}']} +| | | ... | host_dir=${host_dir} | guest_dir=${guest_dir} +| | | ... | image=${container_image} | cpu_count=${container_cpus} +| | | ... | cpu_skip=${skip_cpus} | smt_used=${False} | cpuset_mems=${cpu_node} +| | | ... | cpu_shared=${False} | env=${env} | count=${container_count} +| | Append To List | ${container_groups} | ${group} + +| Construct ETCD containers on all DUTs +| | [Documentation] | Construct Docker ETCD container on all DUTs. +| | ... +| | ${group}= | Set Variable | ETCD +| | ${command}= | Set Variable +| | ... | /usr/local/bin/etcd -advertise-client-urls http://0.0.0.0:2379 -listen-client-urls http://0.0.0.0:2379 +| | ${host_dir}= | Set Variable | /tmp +| | ${image}= | Set Variable | quay.io/coreos/etcd:v3.2.5 +| | ${publish}= | Create List | 2379:2379 +| | Import Library | resources.libraries.python.ContainerUtils.ContainerManager +| | ... | engine=Docker | WITH NAME | ${group} +| | ${duts}= | Get Matches | ${nodes} | DUT* +| | :FOR | ${dut} | IN | @{duts} +| | | ${cpu_node}= | Get interfaces numa node | ${nodes['${dut}']} +| | | ... | ${dut1_if1} | ${dut1_if2} +| | | Run Keyword | ${group}.Construct container +| | | ... | name=${dut}_${group} | node=${nodes['${dut}']} +| | | ... | image=${container_image} | cpu_count=${1} | cpu_skip=${0} +| | | ... | smt_used=${False} | cpuset_mems=${cpu_node} | cpu_shared=${True} +| | | ... | publish=${publish} | command=${command} +| | Append To List | ${container_groups} | ${group} + +| Construct Kafka containers on all DUTs +| | [Documentation] | Construct Docker Kafka container on all DUTs. +| | ... +| | ${group}= | Set Variable | Kafka +| | ${image}= | Set Variable | spotify/kafka +| | ${publish}= | Create List | 2181:2181 | 9092:9092 +| | Import Library | resources.libraries.python.ContainerUtils.ContainerManager +| | ... | engine=Docker | WITH NAME | ${group} +| | ${duts}= | Get Matches | ${nodes} | DUT* +| | :FOR | ${dut} | IN | @{duts} +| | | ${env}= | Create List | ADVERTISED_HOST=172.17.0.1 | ADVERTISED_PORT=9092 +| | | ${cpu_node}= | Get interfaces numa node | ${nodes['${dut}']} +| | | ... | ${dut1_if1} | ${dut1_if2} +| | | Run Keyword | ${group}.Construct container +| | | ... | name=${dut}_${group} | node=${nodes['${dut}']} | image=${image} +| | | ... | cpu_count=${1} | cpu_skip=${0} | cpuset_mems=${cpu_node} +| | | ... | smt_used=${False} | cpu_shared=${True} | publish=${publish} +| | | ... | env=${env} +| | Append To List | ${container_groups} | ${group} + +| Acquire all '${group}' containers +| | [Documentation] | Acquire all container(s) in specific container group on +| | ... | all DUT nodes. +| | ... +| | Run Keyword | ${group}.Acquire all containers + +| Create all '${group}' containers +| | [Documentation] | Create/deploy all container(s) in specific container group +| | ... | on all DUT nodes. +| | ... +| | Run Keyword | ${group}.Create all containers + +| Install VPP in all '${group}' containers +| | [Documentation] | Install VPP on all container(s) in specific container +| | ... | group on all DUT nodes. +| | ... +| | Run Keyword | ${group}.Install VPP In All Containers + +| Configure VPP in all '${group}' containers +| | [Documentation] | Configure VPP on all container(s) in specific container +| | ... | group on all DUT nodes. +| | ... +| | Run Keyword | ${group}.Configure VPP In All Containers +| | ... | memif_create_lxc.vat + +| Stop all '${group}' containers +| | [Documentation] | Stop all container(s) in specific container group on all +| | ... | DUT nodes. +| | ... +| | Run Keyword | ${group}.Stop all containers + +| Destroy all '${group}' containers +| | [Documentation] | Destroy all container(s) in specific container group on +| | ... | all DUT nodes. +| | ... +| | Run Keyword | ${group}.Destroy all containers diff --git a/resources/libraries/robot/shared/lxc.robot b/resources/libraries/robot/shared/lxc.robot deleted file mode 100644 index 52d81dd3e4..0000000000 --- a/resources/libraries/robot/shared/lxc.robot +++ /dev/null @@ -1,256 +0,0 @@ -# Copyright (c) 2017 Cisco and/or its affiliates. -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at: -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -*** Settings *** -| Documentation | Keywords related to linux container (LXC) -| Library | resources.libraries.python.LXCUtils -| Library | resources.libraries.python.CpuUtils -| Library | resources.libraries.python.topology.Topology - -*** Keywords *** -| Create LXC container on DUT node -| | [Documentation] | Setup lxc container on DUT node. -| | ... -| | ... | *Arguments:* -| | ... -| | ... | - dut_node - DUT node. Type: dictionary -| | ... | - lxc_name - Name of LXC container. Type: dictionary -| | ... -| | ... | *Example:* -| | ... -| | ... | \| Create LXC container on DUT node \| ${nodes['DUT1']} \ -| | ... | \| DUT1_slave_1 \| -| | ... -| | [Arguments] | ${dut_node} | ${lxc_name} -| | ... -| | Import Library | resources.libraries.python.LXCUtils -| | ... | container_name=${lxc_name} | WITH NAME | ${lxc_name} -| | Run keyword | ${lxc_name}.Set node | ${dut_node} -| | Run keyword | ${lxc_name}.Create container | force_create=${TRUE} -| | Run keyword | ${lxc_name}.Mount host dir in container - -| Create LXC container on DUT node with cpuset -| | [Documentation] | Create LXC container on DUT node with cpuset. -| | ... -| | ... | *Arguments:* -| | ... -| | ... | - dut_node - DUT node. Type: dictionary -| | ... | - lxc_name - Name of LXC container. Type: dictionary -| | ... | - skip - number of cpus which will be skipped. Type: integer -| | ... | - count - number of cpus which will be allocated for lxc. Type: -| | ... | integer -| | ... -| | ... | *Example:* -| | ... -| | ... | \| Create LXC container on DUT node with cpuset \ -| | ... | \| ${nodes['DUT1']} \| DUT1_slave_1 \| 6 \| 1 \| -| | ... -| | [Arguments] | ${dut_node} | ${lxc_name} | ${skip}=${6} | ${count}=${1} -| | ... -| | Import Library | resources.libraries.python.LXCUtils -| | ... | container_name=${lxc_name} | WITH NAME | ${lxc_name} -| | ${dut_numa}= | Get interfaces numa node | ${dut_node} -| | ... | ${dut1_if1} | ${dut1_if2} -| | ${lxc_cpus}= | CPU list per node str | ${dut_node} | ${dut_numa} -| | ... | skip_cnt=${skip} | cpu_cnt=${count} | smt_used=${False} -| | Set Suite Variable | ${lxc_cpus} -| | Run keyword | ${lxc_name}.Set node | ${dut_node} -| | Run keyword | ${lxc_name}.Create container | force_create=${TRUE} -| | Run keyword | ${lxc_name}.Mount host dir in container -| | Run keyword | ${lxc_name}.Container cpuset cpus | 0,${lxc_cpus} - -| Create '${nr}' LXC containers on '${dut}' node -| | [Documentation] | Create and start multiple lxc containers on DUT node. -| | ... -| | ... | *Example:* -| | ... -| | ... | \| Create 5 LXC containers on DUT1 node \| -| | ... -| | :FOR | ${number} | IN RANGE | 1 | ${nr}+1 -| | | Create LXC container on DUT node | ${nodes['${dut}']} -| | | ... | ${dut}_${lxc_base_name}_${number} - -| Create '${nr}' LXC containers on all DUT nodes -| | [Documentation] | Create and start multiple LXC containers on all DUT nodes. -| | ... -| | ... | *Example:* -| | ... -| | ... | \| Create 5 LXC containers on all DUT nodes \| -| | ... -| | ${duts}= | Get Matches | ${nodes} | DUT* -| | :FOR | ${dut} | IN | @{duts} -| | | Create '${nr}' LXC containers on '${dut}' node - -| Create '${nr}' LXC containers on '${dut}' node with '${count}' cpus -| | [Documentation] | Create and start multiple LXC containers on DUT node. -| | ... | Set the cpuset.cpus cgroup profile for pin of cpus. -| | ... -| | ... | *Example:* -| | ... -| | ... | \| Create 5 LXC containers on DUT1 node with 2 cpus \| -| | ... -| | ${skip_cpus}= | Evaluate | ${vpp_cpus}+${system_cpus} -| | ${count_int}= | Convert To Integer | ${count} -| | ${duts}= | Get Matches | ${nodes} | DUT* -| | :FOR | ${number} | IN RANGE | 1 | ${nr}+1 -| | | ${skip}= | Evaluate | ${skip_cpus} + (${nr} - 1) * ${count} -| | | Create LXC container on DUT node with cpuset | ${nodes['${dut}']} -| | | ... | ${dut}_${lxc_base_name}_${number} | ${skip} | ${count_int} - -| Create '${nr}' LXC containers on all DUT nodes with '${count}' cpus -| | [Documentation] | Create and start multiple LXC containers on all DUT nodes. -| | ... | Set the cpuset.cpus cgroup profile for pin of cpus. -| | ... -| | ... | *Example:* -| | ... -| | ... | \| Create 5 LXC containers on all DUT nodes with 2 cpus \| -| | ... -| | ${duts}= | Get Matches | ${nodes} | DUT* -| | :FOR | ${dut} | IN | @{duts} -| | | Create '${nr}' LXC containers on '${dut}' node with '${count}' cpus - -| Destroy LXC container on DUT node -| | [Documentation] | Stop and destroy LXC container on DUT node. -| | ... -| | ... | *Arguments:* -| | ... -| | ... | - dut_node - DUT node. Type: dictionary -| | ... | - lxc_name - Name of LXC container. Type: dictionary -| | ... -| | ... | *Example:* -| | ... -| | ... | \| Destroy LXC container on DUT node \| ${nodes['DUT1']} \ -| | ... | \| DUT1_slave_1 \| -| | ... -| | [Arguments] | ${dut_node} | ${lxc_name} -| | ... -| | Import Library | resources.libraries.python.LXCUtils -| | ... | container_name=${lxc_name} | WITH NAME | ${lxc_name} -| | Run keyword | ${lxc_name}.Set node | ${dut_node} -| | Run keyword | ${lxc_name}.Destroy container - -| Destroy '${nr}' LXC containers on '${dut}' node -| | [Documentation] | Stop and destroy multiple LXC containers on DUT node. -| | ... -| | ... | *Example:* -| | ... -| | ... | \| Destroy 5 LXC containers on DUT1 node \| -| | ... -| | :FOR | ${number} | IN RANGE | 1 | ${nr}+1 -| | | Destroy LXC container on DUT node | ${nodes['${dut}']} -| | | ... | ${dut}_${lxc_base_name}_${number} - -| Destroy '${nr}' LXC containers on all DUT nodes -| | [Documentation] | Stop and destroy multiple LXC containers on all DUT nodes. -| | ... -| | ... | *Example:* -| | ... -| | ... | \| Destroy 5 LXC containers on all DUT nodes \| -| | ... -| | ${duts}= | Get Matches | ${nodes} | DUT* -| | :FOR | ${dut} | IN | @{duts} -| | | Destroy '${nr}' LXC containers on '${dut}' node - -| Install VPP on LXC container on DUT node -| | [Documentation] | Install vpp on LXC container on DUT node. -| | ... -| | ... | *Arguments:* -| | ... -| | ... | - dut_node - DUT node. Type: dictionary -| | ... | - lxc_name - Name of LXC container. Type: dictionary -| | ... -| | ... | *Example:* -| | ... -| | ... | \| Install VPP on LXC container on DUT node \| ${nodes['DUT1']} \ -| | ... | \| DUT1_slave_1 \| -| | ... -| | [Arguments] | ${dut_node} | ${lxc_name} -| | ... -| | Import Library | resources.libraries.python.LXCUtils -| | ... | container_name=${lxc_name} | WITH NAME | ${lxc_name} -| | Run keyword | ${lxc_name}.Set node | ${dut_node} -| | Run keyword | ${lxc_name}.Install VPP in container - -| Install VPP on '${nr}' LXC containers on '${dut}' node -| | [Documentation] | Install VPP on multiple LXC containers on DUT node. -| | ... -| | ... | *Example:* -| | ... -| | ... | \| Install VPP on 5 LXC containers on DUT1 node \| -| | ... -| | :FOR | ${number} | IN RANGE | 1 | ${nr}+1 -| | | Install VPP on LXC container on DUT node | ${nodes['${dut}']} -| | | ... | ${dut}_${lxc_base_name}_${number} - -| Install VPP on '${nr}' LXC containers on all DUT nodes -| | [Documentation] | Install VPP on multiple LXC containers on all DUT nodes. -| | ... -| | ... | *Example:* -| | ... -| | ... | \| Install VPP on 5 LXC containers on all DUT nodes \| -| | ... -| | ${duts}= | Get Matches | ${nodes} | DUT* -| | :FOR | ${dut} | IN | @{duts} -| | | Install VPP on '${nr}' LXC containers on '${dut}' node - -| Create startup configuration of VPP on LXC container on DUT node -| | [Documentation] | Create base startup configuration of VPP on LXC container -| | ... | on DUT node. -| | ... -| | ... | *Arguments:* -| | ... -| | ... | - dut_node - DUT node. Type: dictionary -| | ... | - lxc_name - Name of LXC container. Type: dictionary -| | ... -| | ... | *Example:* -| | ... -| | ... | \| Create startup configuration of VPP on LXC container on DUT node \ -| | ... | \| ${nodes['DUT1']} \| DUT1_slave_1 \| -| | ... -| | [Arguments] | ${dut_node} | ${lxc_name} -| | ... -| | Import Library | resources.libraries.python.VppConfigGenerator -| | ... | WITH NAME | ${lxc_name}_conf -| | Run keyword | ${lxc_name}_conf.Set node | ${dut_node} -| | Run keyword | ${lxc_name}_conf.Add unix CLI listen -| | Run keyword | ${lxc_name}_conf.Add unix nodaemon -| | Run keyword | ${lxc_name}_conf.Add unix exec | "/tmp/running.exec" -| | Run keyword | ${lxc_name}_conf.Add CPU main core | "0" -| | Run keyword | ${lxc_name}_conf.Add CPU corelist workers | ${lxc_cpus} -| | Run Keyword | ${lxc_name}_conf.Apply config LXC | ${lxc_name} - -| Create startup configuration of VPP on '${nr}' LXC containers on '${dut}' node -| | [Documentation] | Create base startup configuration of VPP on multiple LXC -| | ... | container on DUT node. -| | ... -| | ... | *Example:* -| | ... -| | ... | \| Create startup configuration of VPP on 1 LXC containers on DUT1 \ -| | ... | node \| -| | ... -| | :FOR | ${number} | IN RANGE | 1 | ${nr}+1 -| | | Create startup configuration of VPP on LXC container on DUT node -| | | ... | ${nodes['${dut}']} | ${dut}_${lxc_base_name}_${number} - -| Create startup configuration of VPP on '${nr}' LXC containers on all DUT nodes -| | [Documentation] | Create base startup configuration of VPP on multiple LXC -| | ... | container on all DUT nodes. -| | ... -| | ... | *Example:* -| | ... -| | ... | \| Create startup configuration of VPP on 1 LXC containers on all \ -| | ... | DUT nodes \| -| | ... -| | ${duts}= | Get Matches | ${nodes} | DUT* -| | :FOR | ${dut} | IN | @{duts} -| | | Create startup configuration of VPP on '${nr}' LXC containers on '${dut}' node diff --git a/resources/libraries/robot/shared/memif.robot b/resources/libraries/robot/shared/memif.robot index 71909af490..a4857feccf 100644 --- a/resources/libraries/robot/shared/memif.robot +++ b/resources/libraries/robot/shared/memif.robot @@ -51,29 +51,3 @@ | | Set Interface State | ${dut_node} | ${memif_2} | up | | Set Test Variable | ${${memif_if1}} | ${memif_1} | | Set Test Variable | ${${memif_if2}} | ${memif_2} - -| Create memif VPP configuration on '${nr}' LXC containers on '${dut}' node -| | [Documentation] | Create memif configuration of VPP on multiple LXC -| | ... | container on DUT node. -| | ... -| | ... | *Example:* -| | ... -| | ... | \| Create memif VPP configuration on 1 LXC containers on DUT1 node \| -| | ... -| | :FOR | ${number} | IN RANGE | 1 | ${nr}+1 -| | | Run Keyword | ${dut}_${lxc_base_name}_${number}.Create VPP cfg in container -| | | ... | memif_create_lxc.vat | socket1=memif-${dut}_VNF${number}-1 -| | | ... | socket2=memif-${dut}_VNF${number}-2 - -| Create memif VPP configuration on '${nr}' LXC containers on all DUT nodes -| | [Documentation] | Create memif configuration of VPP on multiple LXC -| | ... | container on all DUT nodes. -| | ... -| | ... | *Example:* -| | ... -| | ... | \| Create memif VPP configuration on 1 LXC containers on all \ -| | ... | DUT nodes \| -| | ... -| | ${duts}= | Get Matches | ${nodes} | DUT* -| | :FOR | ${dut} | IN | @{duts} -| | | Create memif VPP configuration on '${nr}' LXC containers on '${dut}' node |