diff --git a/ci-env/cleanup_env.sh b/ci-env/cleanup_env.sh new file mode 100644 index 0000000000..58839969eb --- /dev/null +++ b/ci-env/cleanup_env.sh @@ -0,0 +1,24 @@ +#!/bin/bash + +# print droplets +# cat < "droplets_${CIRCLE_BUILD_NUM}.txt" + +DROPLET_ID_ACC=$(cat < "droplets_${CIRCLE_BUILD_NUM}.txt") +# echo "DROPLET_ID_ACC: $DROPLET_ID_ACC" + +for DROPLET_ID in ${DROPLET_ID_ACC} +do + CURL_OUTPUT=$(curl -i -s -L -X DELETE -H 'Content-Type: application/json' -H "Authorization: Bearer $DO_API_TOKEN" \ + "https://api.digitalocean.com/v2/droplets/$DROPLET_ID") + # echo "CURL_OUTPUT: $CURL_OUTPUT" + + STATUS_CODE=$(echo "$CURL_OUTPUT" | grep "Status" | awk '{print $2}') + echo "STATUS_CODE: $STATUS_CODE" + + if [ "$STATUS_CODE" = "204" ] + then + echo "Droplet($DROPLET_ID) deleted successfully" + else + echo "Problem occurred: destroying droplet($DROPLET_ID) - status code: $STATUS_CODE" + fi +done diff --git a/ci-env/cloud-config.yaml b/ci-env/cloud-config.yaml new file mode 100644 index 0000000000..e286827334 --- /dev/null +++ b/ci-env/cloud-config.yaml @@ -0,0 +1,15 @@ +#cloud-config + +coreos: + etcd: + discovery: + addr: $private_ipv4:4001 + peer-addr: $private_ipv4:7001 + fleet: + public-ip: $private_ipv4 + metadata: public_ip=$public_ipv4 + units: + - name: etcd.service + command: start + - name: fleet.service + command: start diff --git a/ci-env/create_droplets.sh b/ci-env/create_droplets.sh new file mode 100644 index 0000000000..d3e7e232e9 --- /dev/null +++ b/ci-env/create_droplets.sh @@ -0,0 +1,55 @@ +#!/bin/bash + +# generate discovery URL for the new CoreOS cluster and update the cloud-config file +DISCOVERY_URL=$(curl -s -X GET "https://discovery.etcd.io/new") +echo "DISCOVERY_URL: $DISCOVERY_URL" +DISCOVERY_URL_ESCAPED=$(echo ${DISCOVERY_URL} | sed 's/\//\\\//g') +sed -i "s//${DISCOVERY_URL_ESCAPED}/g" ci-env/cloud-config.yaml +# cat ci-env/cloud-config.yaml + +COREOS_MACHINE_NAMES="\ +ci-${CIRCLE_BRANCH}-${CIRCLE_BUILD_NUM}-coreos-1 \ +ci-${CIRCLE_BRANCH}-${CIRCLE_BUILD_NUM}-coreos-2 \ +ci-${CIRCLE_BRANCH}-${CIRCLE_BUILD_NUM}-coreos-3" +for COREOS_MACHINE in ${COREOS_MACHINE_NAMES} +do + CURL_OUTPUT=$(curl -i -s -X POST https://api.digitalocean.com/v2/droplets \ + -H 'Content-Type: application/json' \ + -H "Authorization: Bearer $DO_API_TOKEN" \ + -d "{ + \"name\":\"${COREOS_MACHINE}\", + \"ssh_keys\":[${DO_DROPLET_SSH_PUBLIC_KEY_ID}],"' + "region":"ams3", + "size":"512mb", + "image":"coreos-stable", + "backups":false, + "ipv6":false, + "private_networking":true, + "user_data": "'"$(cat ci-env/cloud-config.yaml | sed 's/"/\\"/g')"'" + }') + # echo "CURL_OUTPUT: $CURL_OUTPUT" + + STATUS_CODE=$(echo ${CURL_OUTPUT} | awk '{print $2}') + + if [ "$STATUS_CODE" = "202" ] + then + DROPLET_DETAILS=$(echo "$CURL_OUTPUT" | grep "droplet") + # echo "DROPLET_DETAILS: $DROPLET_DETAILS" + + # split after `:` and `,` characters and extract the droplet ID + DROPLET_ID_JUNK_ARRAY=(${DROPLET_DETAILS//:/ }) + DROPLET_ID_JUNK=${DROPLET_ID_JUNK_ARRAY[2]} + DROPLET_ID_ARRAY=(${DROPLET_ID_JUNK//,/ }) + DROPLET_ID=${DROPLET_ID_ARRAY[0]} + + DROPLET_ID_ACC+="${DROPLET_ID} " + + echo "$COREOS_MACHINE (ID: $DROPLET_ID) droplet creation request accepted" + + # store droplet IDs in a file to be accessible in other script + echo ${DROPLET_ID_ACC} > "droplets_${CIRCLE_BUILD_NUM}.txt" + else + echo "Problem occurred: $COREOS_MACHINE droplet creation request - status code: $STATUS_CODE" + exit 1 + fi +done diff --git a/ci-env/wait_for_droplets_and_update_test_inputs.sh b/ci-env/wait_for_droplets_and_update_test_inputs.sh new file mode 100644 index 0000000000..ae7aebc1a5 --- /dev/null +++ b/ci-env/wait_for_droplets_and_update_test_inputs.sh @@ -0,0 +1,91 @@ +#!/bin/bash + +inc_and_sleep() +{ + ((WAITING_TIME+=SLEEP_INTERVAL)) + sleep ${SLEEP_INTERVAL} +} + +DROPLET_ID_ACC=$(cat "droplets_${CIRCLE_BUILD_NUM}.txt") +SLEEP_INTERVAL=5 # 5 sec +TIMEOUT=300 # 5 mins + +# retrieve IPv4 addresses of droplets +for DROPLET_ID in ${DROPLET_ID_ACC} +do + DROPLET_STATUS='' + WAITING_TIME=0 + while [ "$DROPLET_STATUS" != "active" ] && [ "$WAITING_TIME" -lt "$TIMEOUT" ] + do + CURL_OUTPUT=$(curl -i -s -L -X GET -H 'Content-Type: application/json' -H "Authorization: Bearer ${DO_API_TOKEN}" \ + "https://api.digitalocean.com/v2/droplets/$DROPLET_ID") + # echo "CURL_OUTPUT - GET DROPLET BY ID: $CURL_OUTPUT" + + STATUS_CODE=$(echo "$CURL_OUTPUT" | grep "Status" | awk '{print $2}') + # echo "STATUS_CODE: $STATUS_CODE" + + if [ "$STATUS_CODE" = "200" ] + then + echo "Droplet($DROPLET_ID) information retrieved successfully" + + RESPONSE_BODY_JSON=$(echo "$CURL_OUTPUT" | grep "ip_address") + # echo "RESPONSE_BODY_JSON: ${RESPONSE_BODY_JSON}" + + if [ "${RESPONSE_BODY_JSON}" = "" ] + then + inc_and_sleep + else + DROPLET_STATUS=$(\ + echo "$RESPONSE_BODY_JSON" | python -c \ +' +if True: + import json,sys; + obj = json.load(sys.stdin); + print obj["droplet"]["status"]; +'\ + ) + echo "Droplet($DROPLET_ID) status: ${DROPLET_STATUS}" + + if [ "$DROPLET_STATUS" = "active" ] + then + IP_ADDRESS=$(\ + echo "$RESPONSE_BODY_JSON" | python -c \ +' +if True: + import json,sys; + obj = json.load(sys.stdin); + ipv4_container_list = obj["droplet"]["networks"]["v4"]; + public_ipv4_container_list = filter(lambda x : x["type"] == "public", ipv4_container_list); + print public_ipv4_container_list[0]["ip_address"] if len(public_ipv4_container_list) > 0 else ""; +'\ + ) + echo "Droplet($DROPLET_ID) IPv4 address: $IP_ADDRESS" + + DROPLET_IP_ADDRESS_ACC+="${IP_ADDRESS} " + # echo "DROPLET_IP_ADDRESS_ACC: $DROPLET_IP_ADDRESS_ACC" + else + inc_and_sleep + fi + fi + else + echo "Problem occurred: retrieving droplet($DROPLET_ID) information - status code: $STATUS_CODE" + exit 1 + fi + done + if [ "$DROPLET_STATUS" != "active" ] + then + echo "Droplet($DROPLET_ID) is not active after ${WAITING_TIME}" + exit 1 + fi +done + +# update inputs files to use actual IP addresses +DROPLET_IP_ARRAY=(${DROPLET_IP_ADDRESS_ACC}) +find test -type f -exec sed -i "s//${DROPLET_IP_ARRAY[0]}/g" {} + + +# create ssh private key +SSH_KEY_PATH=droplets_rsa +echo -e "${DO_DROPLET_SSH_PRIVATE_KEY}" > ${SSH_KEY_PATH} + +# update inputs files to use actual ssh key +find test -type f -exec sed -i "s//${SSH_KEY_PATH}/g" {} + diff --git a/circle.yml b/circle.yml index f879fced29..3de525400a 100644 --- a/circle.yml +++ b/circle.yml @@ -12,6 +12,11 @@ general: - "builder.log" machine: + environment: + # "${CIRCLE_PR_NUMBER}" = "" denotes that the build is not part of a fork PR + # ignore test suites on node 1 in fork builds + ACTIVE_CI_TEST_SUITES_DROPLETS_NODE: $(if [ "${CIRCLE_PR_NUMBER}" = "" ]; then echo '!default,coreos,cadvisor'; else echo '!default'; fi) + RULE_DROPLET_MACHINE_NOT_FORK: '[ "${CIRCLE_NODE_INDEX}" = "1" ] && [ "${CIRCLE_PR_NUMBER}" = "" ]' pre: - sudo curl -L -o /usr/bin/docker 'http://s3-external-1.amazonaws.com/circle-downloads/docker-1.6.2-circleci'; sudo chmod 0755 /usr/bin/docker; true @@ -19,29 +24,40 @@ machine: - docker dependencies: -# cache_directories: -# - "~/docker" override: - docker info - docker images -# - if [[ -e ~/docker/image.tar ]]; then docker load -i ~/docker/image.tar; fi -# - docker pull orius123/dind-ssh -# - mkdir -p ~/docker; docker save orius123/dind-ssh > ~/docker/image.tar test: pre: -# - docker run --privileged --lxc-conf="lxc.aa_profile=unconfined" -d -p 4444 -p 49153:22 -e PORT=4444 --name docker_host_ssh orius123/dind-ssh -# - docker port docker_host_ssh 22 - - docker run -d -p 49165:8080 jenkins - - wget https://github.com/CloudSlang/cloud-slang/releases/download/cloudslang-0.8.RC1/cslang-builder.zip - - docker run -d -p 8500:8500 -p 8600:8600/udp fhalim/consul - - unzip cslang-builder.zip -d cslang-builder - - chmod +x cslang-builder/bin/cslang-builder - - mkdir cslang-builder/lib/Lib - - pip install -r python-lib/requirements.txt -t cslang-builder/lib/Lib + - ? > ### machine 0 + if [ "${CIRCLE_NODE_INDEX}" = "0" ]; + then docker run -d -p 49165:8080 jenkins + && docker run -d -p 8500:8500 -p 8600:8600/udp fhalim/consul; + fi + : parallel: true + - if eval "${RULE_DROPLET_MACHINE_NOT_FORK}"; then chmod +x ci-env/create_droplets.sh && ci-env/create_droplets.sh; fi: + parallel: true ### machine 1 + - ? > ### every machine + wget https://github.com/CloudSlang/cloud-slang/releases/download/cloudslang-0.8.RC1/cslang-builder.zip + && unzip cslang-builder.zip -d cslang-builder + && chmod +x cslang-builder/bin/cslang-builder + && mkdir cslang-builder/lib/Lib + && pip install -r python-lib/requirements.txt -t cslang-builder/lib/Lib + : parallel: true + - ? > ### machine 1 + if eval "${RULE_DROPLET_MACHINE_NOT_FORK}"; + then chmod +x ci-env/wait_for_droplets_and_update_test_inputs.sh + && ci-env/wait_for_droplets_and_update_test_inputs.sh; + fi + : parallel: true override: - - ./cslang-builder/bin/cslang-builder -ts cadvisor,jenkins,consul -cov + - ? > + case ${CIRCLE_NODE_INDEX} in + 0) ./cslang-builder/bin/cslang-builder -ts default,jenkins,consul -cov ;; + 1) ./cslang-builder/bin/cslang-builder -ts ${ACTIVE_CI_TEST_SUITES_DROPLETS_NODE} -cov ;; + esac + : parallel: true post: - - docker ps -a -# - docker stop $(docker ps -a -q) -# - docker rm $(docker ps -a -q) + - if eval "${RULE_DROPLET_MACHINE_NOT_FORK}"; then chmod +x ci-env/cleanup_env.sh && ci-env/cleanup_env.sh; fi: + parallel: true ### machine 1 diff --git a/content/io/cloudslang/docker/images/clear_unused_and_dangling_images.sl b/content/io/cloudslang/docker/images/clear_unused_and_dangling_images.sl index 1410d488c1..f31fd8f759 100644 --- a/content/io/cloudslang/docker/images/clear_unused_and_dangling_images.sl +++ b/content/io/cloudslang/docker/images/clear_unused_and_dangling_images.sl @@ -88,6 +88,6 @@ flow: - amount_of_dangling_images_deleted outputs: - amount_of_images_deleted: "0 if 'amount_of_images_deleted' not in locals() else amount_of_images_deleted" - - amount_of_dangling_images_deleted: "0 if 'amount_of_images_deleted' not in locals() else amount_of_dangling_images_deleted" + - amount_of_dangling_images_deleted: "0 if 'amount_of_dangling_images_deleted' not in locals() else amount_of_dangling_images_deleted" - dangling_images_list_safe_to_delete - images_list_safe_to_delete diff --git a/content/io/cloudslang/docker/images/get_used_images.sl b/content/io/cloudslang/docker/images/get_used_images.sl index 9022236977..5f5cbb0d7e 100644 --- a/content/io/cloudslang/docker/images/get_used_images.sl +++ b/content/io/cloudslang/docker/images/get_used_images.sl @@ -93,7 +93,7 @@ flow: - agentForwarding: required: false publish: - - image_list: returnResult.replace("\n"," ") + - image_list: returnResult.replace("\n"," ").replace(":latest", "") outputs: - image_list diff --git a/content/io/cloudslang/docker/maintenance/images_maintenance.sl b/content/io/cloudslang/docker/maintenance/images_maintenance.sl index b727216c14..f0a8985358 100644 --- a/content/io/cloudslang/docker/maintenance/images_maintenance.sl +++ b/content/io/cloudslang/docker/maintenance/images_maintenance.sl @@ -59,7 +59,7 @@ flow: NOT_ENOUGH_DISKSPACE: clear_unused_images - clear_unused_images: do: - docker_images.clear_unused_images: + docker_images.clear_unused_and_dangling_images: - docker_host - docker_username - docker_password: diff --git a/test/io/cloudslang/coreos/cluster_docker_images_maintenance.inputs.yaml b/test/io/cloudslang/coreos/cluster_docker_images_maintenance.inputs.yaml index ca360acfd0..06f5588093 100644 --- a/test/io/cloudslang/coreos/cluster_docker_images_maintenance.inputs.yaml +++ b/test/io/cloudslang/coreos/cluster_docker_images_maintenance.inputs.yaml @@ -7,11 +7,16 @@ # #################################################### test_cluster_docker_images_maintenance_success: - testSuites: [coreos_local] - description: This test needs to be run on local machine by activating the test suite and supplying the inputs + testSuites: [coreos] + description: > + This test cleans the CoreOS hosts in a cluster, + prepares a used and an unused Docker image, + runs the cluster_docker_images_maintenance flow, + checks that only the unused Docker image was deleted, + cleans up in the cluster. testFlowPath: io.cloudslang.coreos.test_cluster_docker_images_maintenance inputs: - - coreos_host: 111.111.111.111 # ip address of one host from the cluster + - coreos_host: # ip address of one host from the cluster - coreos_username: core # username for the machine - - private_key_file: c:/Users/bob/ssh_keys/id_rsa # path to private key file + - private_key_file: # path to private key file result: SUCCESS diff --git a/test/io/cloudslang/docker/cadvisor/get_container_metrics.inputs.yaml b/test/io/cloudslang/docker/cadvisor/get_container_metrics.inputs.yaml index 7a004210a5..06595dbbd2 100644 --- a/test/io/cloudslang/docker/cadvisor/get_container_metrics.inputs.yaml +++ b/test/io/cloudslang/docker/cadvisor/get_container_metrics.inputs.yaml @@ -7,11 +7,15 @@ # #################################################### test_get_container_metrics: - testSuites: [cadvisor_local] - description: Tests SUCCESS case - this test needs to be run on the Docker machine by activating the test suite and supplying the inputs + testSuites: [cadvisor] + description: > + This test clears the docker containers on the host, starts up a cadvisor container, + calls the get_container_metrics flow and validates the result. testFlowPath: io.cloudslang.docker.cadvisor.test_get_container_metrics inputs: - - host: localhost - - cadvisor_port: "32952" + - host: + - username: core + - private_key_file: + - cadvisor_port: "32541" - cadvisor_container_name: cadvisor - result: SUCCESS \ No newline at end of file + result: SUCCESS diff --git a/test/io/cloudslang/docker/cadvisor/report_machine_metrics.inputs.yaml b/test/io/cloudslang/docker/cadvisor/report_machine_metrics.inputs.yaml index 67d434f985..c39f7981ff 100644 --- a/test/io/cloudslang/docker/cadvisor/report_machine_metrics.inputs.yaml +++ b/test/io/cloudslang/docker/cadvisor/report_machine_metrics.inputs.yaml @@ -8,10 +8,14 @@ #################################################### test_report_machine_metrics: testSuites: [cadvisor] - description: Tests SUCCESS case + description: > + This test clears the docker containers on the host, starts up a cadvisor container, + calls the report_machine_metrics flow and validates the result. testFlowPath: io.cloudslang.docker.cadvisor.test_report_machine_metrics inputs: - - host: localhost + - host: + - username: core + - private_key_file: + - cadvisor_port: "32541" - cadvisor_container_name: cadvisor - - cadvisor_port: "32951" - result: SUCCESS \ No newline at end of file + result: SUCCESS diff --git a/test/io/cloudslang/docker/cadvisor/restart_container_base_on_usage.inputs.yaml b/test/io/cloudslang/docker/cadvisor/restart_container_base_on_usage.inputs.yaml index 491ccefdd4..a20cb98404 100644 --- a/test/io/cloudslang/docker/cadvisor/restart_container_base_on_usage.inputs.yaml +++ b/test/io/cloudslang/docker/cadvisor/restart_container_base_on_usage.inputs.yaml @@ -7,16 +7,15 @@ # ######################################################################################################## test_restart_container_base_on_usage_success: - testSuites: [cadvisor_local] + testSuites: [cadvisor] description: > - Tests SUCCESS case - starts a cAdvisor container, waits for the container to start up and runs - the restart_container_base_on_usage flow against it. The Docker host is cleared before and after - the actual test logic. + This test clears the docker containers on the host, starts up a cadvisor container, + calls the restart_container_base_on_usage flow and validates the result. testFlowPath: io.cloudslang.docker.cadvisor.test_restart_container_base_on_usage inputs: - - cadvisor_port: "23569" + - host: + - username: core + - private_key_file: + - cadvisor_port: "32541" - cadvisor_container_name: cadvisor - - host: 111.111.111.111 - - username: root - - private_key_file: "c:/.../id_rsa" result: SUCCESS diff --git a/test/io/cloudslang/docker/cadvisor/test_get_container_metrics.sl b/test/io/cloudslang/docker/cadvisor/test_get_container_metrics.sl index 9424db2e9f..3b5f7942b0 100644 --- a/test/io/cloudslang/docker/cadvisor/test_get_container_metrics.sl +++ b/test/io/cloudslang/docker/cadvisor/test_get_container_metrics.sl @@ -10,9 +10,9 @@ namespace: io.cloudslang.docker.cadvisor imports: - cadvisor: io.cloudslang.docker.cadvisor - cmd: io.cloudslang.base.cmd strings: io.cloudslang.base.strings + containers: io.cloudslang.docker.containers + utils: io.cloudslang.base.utils flow: @@ -20,16 +20,28 @@ flow: inputs: - host + - username + - private_key_file - cadvisor_port - cadvisor_container_name workflow: + - clear_docker_containers: + do: + containers.clear_containers: + - docker_host: host + - docker_username: username + - private_key_file + navigate: + SUCCESS: create_cAdvisor_container + FAILURE: CLEAR_DOCKER_CONTAINERS_PROBLEM - create_cAdvisor_container: do: - cmd.run_command: - - command: > - 'docker run --privileged -d --name ' + cadvisor_container_name + ' ' + + containers.run_container: + - container_name: cadvisor_container_name + - container_params: > + '--privileged --publish=' + cadvisor_port + ':8080 ' + '--volume=/:/rootfs:ro ' + '--volume=/var/run:/var/run:rw ' + '--volume=/sys:/sys:ro ' + @@ -38,22 +50,33 @@ flow: '--volume=/sys/fs/cgroup/cpuacct:/cgroup/cpuacct ' + '--volume=/sys/fs/cgroup/cpuset:/cgroup/cpuset ' + '--volume=/sys/fs/cgroup/memory:/cgroup/memory ' + - '--volume=/sys/fs/cgroup/blkio:/cgroup/blkio ' + - '--publish=' + cadvisor_port + ':8080 ' + - 'google/cadvisor:latest --logtostderr' - - overridable: false + '--volume=/sys/fs/cgroup/blkio:/cgroup/blkio' + - image_name: "'google/cadvisor:latest'" + - host + - username + - private_key_file navigate: - SUCCESS: validate_success_get_container_metrics + SUCCESS: sleep FAILURE: C_ADVISOR_CONTAINER_STARTUP_PROBLEM - - validate_success_get_container_metrics: + - sleep: + do: + utils.sleep: + - seconds: 5 + navigate: + SUCCESS: call_get_container_metrics + + - call_get_container_metrics: do: - cadvisor.get_container_metrics: + get_container_metrics: - host - cadvisor_port - container: cadvisor_container_name publish: - returnResult + navigate: + SUCCESS: validate_response_is_not_empty + FAILURE: CALL_GET_CONTAINER_METRICS_PROBLEM - validate_response_is_not_empty: do: @@ -61,18 +84,12 @@ flow: - string_in_which_to_search: returnResult - string_to_find: "'cpu'" navigate: - SUCCESS: clear_docker_host_after - FAILURE: VERIFY_FAILURE - - - clear_docker_host_after: - do: - cmd.run_command: - - command: > - 'docker rm -f ' + cadvisor_container_name - - overridable: false + SUCCESS: SUCCESS + FAILURE: VALIDATE_RESPONSE_IS_NOT_EMPTY_PROBLEM results: - SUCCESS - - FAILURE + - CLEAR_DOCKER_CONTAINERS_PROBLEM - C_ADVISOR_CONTAINER_STARTUP_PROBLEM - - VERIFY_FAILURE + - CALL_GET_CONTAINER_METRICS_PROBLEM + - VALIDATE_RESPONSE_IS_NOT_EMPTY_PROBLEM diff --git a/test/io/cloudslang/docker/cadvisor/test_report_machine_metrics.sl b/test/io/cloudslang/docker/cadvisor/test_report_machine_metrics.sl index 94f0dec63d..2c9dca6d75 100644 --- a/test/io/cloudslang/docker/cadvisor/test_report_machine_metrics.sl +++ b/test/io/cloudslang/docker/cadvisor/test_report_machine_metrics.sl @@ -10,35 +10,51 @@ namespace: io.cloudslang.docker.cadvisor imports: - cadvisor: io.cloudslang.docker.cadvisor - cmd: io.cloudslang.base.cmd + strings: io.cloudslang.base.strings + containers: io.cloudslang.docker.containers utils: io.cloudslang.base.utils + flow: name: test_report_machine_metrics inputs: - host - - cadvisor_container_name: - default: "'cadvisor'" - - cadvisor_port: - default: "'8080'" + - username + - private_key_file + - cadvisor_port + - cadvisor_container_name workflow: + - clear_docker_containers: + do: + containers.clear_containers: + - docker_host: host + - docker_username: username + - private_key_file + navigate: + SUCCESS: create_cAdvisor_container + FAILURE: CLEAR_DOCKER_CONTAINERS_PROBLEM - create_cAdvisor_container: do: - cmd.run_command: - - command: > - 'docker run --privileged -d --name ' + cadvisor_container_name + ' ' + + containers.run_container: + - container_name: cadvisor_container_name + - container_params: > + '--privileged --publish=' + cadvisor_port + ':8080 ' + '--volume=/:/rootfs:ro ' + '--volume=/var/run:/var/run:rw ' + '--volume=/sys:/sys:ro ' + '--volume=/var/lib/docker/:/var/lib/docker:ro ' + - '--volume=/cgroup:/cgroup ' + - '--publish=' + cadvisor_port + ':8080 ' + - 'google/cadvisor:latest' - - overridable: false + '--volume=/sys/fs/cgroup/cpu:/cgroup/cpu ' + + '--volume=/sys/fs/cgroup/cpuacct:/cgroup/cpuacct ' + + '--volume=/sys/fs/cgroup/cpuset:/cgroup/cpuset ' + + '--volume=/sys/fs/cgroup/memory:/cgroup/memory ' + + '--volume=/sys/fs/cgroup/blkio:/cgroup/blkio' + - image_name: "'google/cadvisor:latest'" + - host + - username + - private_key_file navigate: SUCCESS: sleep FAILURE: C_ADVISOR_CONTAINER_STARTUP_PROBLEM @@ -47,14 +63,32 @@ flow: do: utils.sleep: - seconds: 5 + navigate: + SUCCESS: call_report_machine_metrics - - validate_success_report_machine_metrics: + - call_report_machine_metrics: do: - cadvisor.report_machine_metrics: + report_machine_metrics: - host - cadvisor_port + publish: + - memory_capacity + navigate: + SUCCESS: validate_response_is_not_empty + FAILURE: CALL_GET_CONTAINER_METRICS_PROBLEM + + - validate_response_is_not_empty: + do: + strings.string_equals: + - first_string: str(memory_capacity) + - second_string: "'0'" + navigate: + SUCCESS: VALIDATE_RESPONSE_IS_NOT_EMPTY_PROBLEM + FAILURE: SUCCESS results: - SUCCESS - - FAILURE + - CLEAR_DOCKER_CONTAINERS_PROBLEM - C_ADVISOR_CONTAINER_STARTUP_PROBLEM + - CALL_GET_CONTAINER_METRICS_PROBLEM + - VALIDATE_RESPONSE_IS_NOT_EMPTY_PROBLEM diff --git a/test/io/cloudslang/docker/cadvisor/test_restart_container_base_on_usage.sl b/test/io/cloudslang/docker/cadvisor/test_restart_container_base_on_usage.sl index e6fbe439e9..5cd55aa07d 100644 --- a/test/io/cloudslang/docker/cadvisor/test_restart_container_base_on_usage.sl +++ b/test/io/cloudslang/docker/cadvisor/test_restart_container_base_on_usage.sl @@ -5,13 +5,11 @@ # The Apache License is available at # http://www.apache.org/licenses/LICENSE-2.0 # -######################################################################################################## +#################################################### namespace: io.cloudslang.docker.cadvisor imports: - cadvisor: io.cloudslang.docker.cadvisor - maintenance: io.cloudslang.docker.maintenance containers: io.cloudslang.docker.containers utils: io.cloudslang.base.utils @@ -20,37 +18,22 @@ flow: name: test_restart_container_base_on_usage inputs: - - cadvisor_port - - cadvisor_container_name - host - - port: - required: false - username - - password: - required: false - - private_key_file: - required: false - - timeout: - required: false + - private_key_file + - cadvisor_port + - cadvisor_container_name workflow: - - pre_clear_machine: - do: - maintenance.clear_host: - - docker_host: host - - docker_username: username - - docker_password: - default: password - required: false - - private_key_file: - required: false - - timeout: - required: false - - port: - required: false - navigate: - SUCCESS: create_cAdvisor_container - FAILURE: PRE_CLEAR_MACHINE_PROBLEM + - clear_docker_containers: + do: + containers.clear_containers: + - docker_host: host + - docker_username: username + - private_key_file + navigate: + SUCCESS: create_cAdvisor_container + FAILURE: CLEAR_DOCKER_CONTAINERS_PROBLEM - create_cAdvisor_container: do: @@ -66,18 +49,11 @@ flow: '--volume=/sys/fs/cgroup/cpuacct:/cgroup/cpuacct ' + '--volume=/sys/fs/cgroup/cpuset:/cgroup/cpuset ' + '--volume=/sys/fs/cgroup/memory:/cgroup/memory ' + - '--volume=/sys/fs/cgroup/blkio:/cgroup/blkio ' + '--volume=/sys/fs/cgroup/blkio:/cgroup/blkio' - image_name: "'google/cadvisor:latest'" - host - - port: - required: false - username - - password: - required: false - - private_key_file: - required: false - - timeout: - required: false + - private_key_file navigate: SUCCESS: sleep FAILURE: C_ADVISOR_CONTAINER_STARTUP_PROBLEM @@ -88,49 +64,20 @@ flow: - seconds: 5 navigate: SUCCESS: call_restart_container_base_on_usage - FAILURE: FAILED_TO_SLEEP - call_restart_container_base_on_usage: do: - cadvisor.restart_container_base_on_usage: + restart_container_base_on_usage: - container: cadvisor_container_name - host - cadvisor_port - - machine_connect_port: - default: port - required: false - username - - password: - required: false - - privateKeyFile: - default: private_key_file - required: false - navigate: - SUCCESS: post_clear_machine - FAILURE: CALL_RESTART_CONTAINER_BASE_ON_USAGE_PROBLEM - - - post_clear_machine: - do: - maintenance.clear_host: - - docker_host: host - - docker_username: username - - docker_password: - default: password - required: false - - private_key_file: - required: false - - timeout: - required: false - - port: - required: false + - privateKeyFile: private_key_file navigate: SUCCESS: SUCCESS - FAILURE: POST_CLEAR_MACHINE_PROBLEM + FAILURE: CALL_RESTART_CONTAINER_BASE_ON_USAGE_PROBLEM results: - SUCCESS - - FAILURE - - PRE_CLEAR_MACHINE_PROBLEM + - CLEAR_DOCKER_CONTAINERS_PROBLEM - C_ADVISOR_CONTAINER_STARTUP_PROBLEM - CALL_RESTART_CONTAINER_BASE_ON_USAGE_PROBLEM - - POST_CLEAR_MACHINE_PROBLEM - - FAILED_TO_SLEEP