From 717f01ff6d40d503b345adac6fd8edea165fced3 Mon Sep 17 00:00:00 2001 From: Chris Evich Date: Mon, 6 Nov 2017 15:29:43 -0500 Subject: [PATCH 1/4] Introduce role to clone from git repos in parallel For a large number of large repositories, running this in parallel is ***MUCH*** faster. The role simply takes a list of Ansible ``git`` module arguments, builds a list of async. tasks, then ensures they all complete before a 10-minute (default) timeout. Signed-off-by: Chris Evich --- .../roles/git_repo_cloned/defaults/main.yml | 18 +++++++++++++ .../roles/git_repo_cloned/tasks/async_git.yml | 25 +++++++++++++++++++ .../git_repo_cloned/tasks/async_status.yml | 11 ++++++++ .../roles/git_repo_cloned/tasks/main.yml | 23 +++++++++++++++++ .../roles/git_repo_cloned/vars/main.yml | 4 +++ 5 files changed, 81 insertions(+) create mode 100644 contrib/test/integration/roles/git_repo_cloned/defaults/main.yml create mode 100644 contrib/test/integration/roles/git_repo_cloned/tasks/async_git.yml create mode 100644 contrib/test/integration/roles/git_repo_cloned/tasks/async_status.yml create mode 100644 contrib/test/integration/roles/git_repo_cloned/tasks/main.yml create mode 100644 contrib/test/integration/roles/git_repo_cloned/vars/main.yml diff --git a/contrib/test/integration/roles/git_repo_cloned/defaults/main.yml b/contrib/test/integration/roles/git_repo_cloned/defaults/main.yml new file mode 100644 index 00000000..731e90df --- /dev/null +++ b/contrib/test/integration/roles/git_repo_cloned/defaults/main.yml @@ -0,0 +1,18 @@ +--- + +# Maximum time to wait (in seconds) for each git operation to complete +git_op_timeout: '{{ 60 * 30 }}' + +# Interval time (in seconds) to wait between each git status check +git_op_status_delay: '10' + +# List of dictionaries, with options to the git ansible module. +git_ops: + +# Default depth to use when no depth option specified (above). +# 1: shallow clone only reference HEAD +# None: clone all commits +git_def_depth: 1 + +# When true, always force-clone, clobbering any posible local changes. +always_force: False diff --git a/contrib/test/integration/roles/git_repo_cloned/tasks/async_git.yml b/contrib/test/integration/roles/git_repo_cloned/tasks/async_git.yml new file mode 100644 index 00000000..7386f13f --- /dev/null +++ b/contrib/test/integration/roles/git_repo_cloned/tasks/async_git.yml @@ -0,0 +1,25 @@ +--- + +- name: The destination directory always exists + file: + path: "{{ git_op.dest }}" + state: directory + +- name: git_op's options are fed to git module + git: + dest: "{{ git_op.dest }}" + repo: "{{ git_op.repo }}" + depth: "{{ git_op.depth | default(git_def_depth | int) }}" + recursive: "{{ git_op['recursive'] | default(omit) }}" + reference: "{{ git_op.reference | default(omit) }}" + refspec: "{{ git_op.refspec | default(omit) }}" + remote: "{{ git_op.remote | default(omit) }}" + version: "{{ git_op.version | default(omit) }}" + force: "{{ git_op.force | default(omit) if not always_force else True }}" + register: result + async: "{{ git_op_timeout }}" + poll: 0 + +- name: git_op async-state is included in async_results list + set_fact: + async_results: "{{ async_results | union([result]) }}" diff --git a/contrib/test/integration/roles/git_repo_cloned/tasks/async_status.yml b/contrib/test/integration/roles/git_repo_cloned/tasks/async_status.yml new file mode 100644 index 00000000..3ab526c8 --- /dev/null +++ b/contrib/test/integration/roles/git_repo_cloned/tasks/async_status.yml @@ -0,0 +1,11 @@ +--- + +- name: All async states in async_result completed or timed out + async_status: + jid: "{{ async_result.ansible_job_id }}" + failed_when: result | failed + register: result + until: result.finished | bool + # Guarantee at least one retry + retries: "{{ (git_op_timeout|int / git_op_status_delay|int) | round(method='ceil')|int }}" + delay: "{{ git_op_status_delay|int }}" diff --git a/contrib/test/integration/roles/git_repo_cloned/tasks/main.yml b/contrib/test/integration/roles/git_repo_cloned/tasks/main.yml new file mode 100644 index 00000000..d9427755 --- /dev/null +++ b/contrib/test/integration/roles/git_repo_cloned/tasks/main.yml @@ -0,0 +1,23 @@ +--- + +- assert: + that: + # Verify conformance with defaults, expected types, and values + - "git_op_timeout | default(0) >= 1" + - "git_op_status_delay | default(0) >= 1" + - "git_ops is defined" + # Verify vars were not overridden by command-line, include, or role override + - "async_results == []" + - "result == None" + +- name: All git operations are run in parallel + include: "{{ role_path }}/tasks/async_git.yml" + with_items: "{{ git_ops }}" + loop_control: + loop_var: "git_op" + +- name: All parallel git operations are completed and are successful + include: "{{ role_path }}/tasks/async_status.yml" + with_items: "{{ async_results }}" + loop_control: + loop_var: "async_result" diff --git a/contrib/test/integration/roles/git_repo_cloned/vars/main.yml b/contrib/test/integration/roles/git_repo_cloned/vars/main.yml new file mode 100644 index 00000000..1886dfb2 --- /dev/null +++ b/contrib/test/integration/roles/git_repo_cloned/vars/main.yml @@ -0,0 +1,4 @@ +--- + +async_results: [] +result: From 3761cf8e86a6d4f0b7f43127fbc397e9f887744a Mon Sep 17 00:00:00 2001 From: Chris Evich Date: Mon, 6 Nov 2017 15:36:46 -0500 Subject: [PATCH 2/4] Utilize git_repo_cloned + vars for all repos Signed-off-by: Chris Evich --- contrib/test/integration/build/bats.yml | 5 ----- contrib/test/integration/build/cri-tools.yml | 6 ----- contrib/test/integration/build/kubernetes.yml | 6 ----- contrib/test/integration/build/plugins.yml | 6 ----- contrib/test/integration/build/runc.yml | 6 ----- contrib/test/integration/main.yml | 15 +++++++++++-- contrib/test/integration/vars.yml | 22 +++++++++++++++++++ 7 files changed, 35 insertions(+), 31 deletions(-) diff --git a/contrib/test/integration/build/bats.yml b/contrib/test/integration/build/bats.yml index d4ea19c6..7f947805 100644 --- a/contrib/test/integration/build/bats.yml +++ b/contrib/test/integration/build/bats.yml @@ -1,10 +1,5 @@ --- -- name: clone bats source repo - git: - repo: "https://github.com/sstephenson/bats.git" - dest: "{{ ansible_env.GOPATH }}/src/github.com/sstephenson/bats" - - name: install bats command: "./install.sh /usr/local" args: diff --git a/contrib/test/integration/build/cri-tools.yml b/contrib/test/integration/build/cri-tools.yml index 9a117f3c..034081f2 100644 --- a/contrib/test/integration/build/cri-tools.yml +++ b/contrib/test/integration/build/cri-tools.yml @@ -1,11 +1,5 @@ --- -- name: clone cri-tools source repo - git: - repo: "https://github.com/kubernetes-incubator/cri-tools.git" - dest: "{{ ansible_env.GOPATH }}/src/github.com/kubernetes-incubator/cri-tools" - version: "9ff5e8f78a4182ab8d5ba9bcccdda5f338600eab" - - name: install crictl command: "/usr/bin/go install github.com/kubernetes-incubator/cri-tools/cmd/crictl" diff --git a/contrib/test/integration/build/kubernetes.yml b/contrib/test/integration/build/kubernetes.yml index f724230c..07d22f8d 100644 --- a/contrib/test/integration/build/kubernetes.yml +++ b/contrib/test/integration/build/kubernetes.yml @@ -1,11 +1,5 @@ --- -- name: clone kubernetes source repo - git: - repo: "https://github.com/runcom/kubernetes.git" - dest: "{{ ansible_env.GOPATH }}/src/k8s.io/kubernetes" - version: "cri-o-patched-1.8" - - name: install etcd command: "hack/install-etcd.sh" args: diff --git a/contrib/test/integration/build/plugins.yml b/contrib/test/integration/build/plugins.yml index e342a0b9..fc4f7bd1 100644 --- a/contrib/test/integration/build/plugins.yml +++ b/contrib/test/integration/build/plugins.yml @@ -1,11 +1,5 @@ --- -- name: clone plugins source repo - git: - repo: "https://github.com/containernetworking/plugins.git" - dest: "{{ ansible_env.GOPATH }}/src/github.com/containernetworking/plugins" - version: "dcf7368eeab15e2affc6256f0bb1e84dd46a34de" - - name: build plugins command: "./build.sh" args: diff --git a/contrib/test/integration/build/runc.yml b/contrib/test/integration/build/runc.yml index 7bb0491d..c6cc8c94 100644 --- a/contrib/test/integration/build/runc.yml +++ b/contrib/test/integration/build/runc.yml @@ -1,11 +1,5 @@ --- -- name: clone runc source repo - git: - repo: "https://github.com/opencontainers/runc.git" - dest: "{{ ansible_env.GOPATH }}/src/github.com/opencontainers/runc" - version: "84a082bfef6f932de921437815355186db37aeb1" - - name: build runc make: params: BUILDTAGS="seccomp selinux" diff --git a/contrib/test/integration/main.yml b/contrib/test/integration/main.yml index ce4a206f..4d26baa0 100644 --- a/contrib/test/integration/main.yml +++ b/contrib/test/integration/main.yml @@ -4,13 +4,19 @@ - "{{ playbook_dir }}/vars.yml" tags: - setup - tasks: + pre_tasks: - name: set up the system include: system.yml - name: install Golang tools include: golang.yml + roles: + - role: git_repo_cloned + git_ops: '{{ git_operations }}' + always_force: False + + post_tasks: - name: clone build and install bats include: "build/bats.yml" @@ -33,7 +39,12 @@ tags: - integration - e2e - tasks: + roles: + - role: git_repo_cloned + git_ops: '{{ git_operations }}' + always_force: True + + post_tasks: - name: clone build and install cri-o include: "build/cri-o.yml" diff --git a/contrib/test/integration/vars.yml b/contrib/test/integration/vars.yml index f1e5e2f7..5578adca 100644 --- a/contrib/test/integration/vars.yml +++ b/contrib/test/integration/vars.yml @@ -1,5 +1,27 @@ --- +# List of repositories to clone. Each item accepts any option or value supported +# by Ansible's ``git`` module. +git_operations: + - repo: "https://github.com/sstephenson/bats.git" + dest: "{{ ansible_env.GOPATH }}/src/github.com/sstephenson/bats" + + - repo: "https://github.com/kubernetes-incubator/cri-tools.git" + dest: "{{ ansible_env.GOPATH }}/src/github.com/kubernetes-incubator/cri-tools" + version: "9ff5e8f78a4182ab8d5ba9bcccdda5f338600eab" + + - repo: "https://github.com/runcom/kubernetes.git" + dest: "{{ ansible_env.GOPATH }}/src/k8s.io/kubernetes" + version: "cri-o-patched-1.8" + + - repo: "https://github.com/containernetworking/plugins.git" + dest: "{{ ansible_env.GOPATH }}/src/github.com/containernetworking/plugins" + version: "dcf7368eeab15e2affc6256f0bb1e84dd46a34de" + + - repo: "https://github.com/opencontainers/runc.git" + dest: "{{ ansible_env.GOPATH }}/src/github.com/opencontainers/runc" + version: "84a082bfef6f932de921437815355186db37aeb1" + # For results.yml Paths use rsync 'source' conventions artifacts: "/tmp/artifacts" # Base-directory for collection crio_integration_filepath: "{{ artifacts }}/testout.txt" From 61cbf79a0b84014ee618327dbc4de465c2767c67 Mon Sep 17 00:00:00 2001 From: Chris Evich Date: Tue, 7 Nov 2017 10:58:29 -0500 Subject: [PATCH 3/4] Remove a few unnecessary packages Signed-off-by: Chris Evich --- contrib/test/integration/system.yml | 5 ----- 1 file changed, 5 deletions(-) diff --git a/contrib/test/integration/system.yml b/contrib/test/integration/system.yml index d07ae0c8..f3208741 100644 --- a/contrib/test/integration/system.yml +++ b/contrib/test/integration/system.yml @@ -23,10 +23,7 @@ - libassuan-devel - libffi-devel - libgpg-error-devel - - libguestfs-tools - libseccomp-devel - - libvirt-client - - libvirt-python - libxml2-devel - libxslt-devel - make @@ -41,8 +38,6 @@ - ostree-devel - pkgconfig - python - - python2-boto - - python2-crypto - python-devel - python-virtualenv - PyYAML From cae701e08c5d4441a4de3fe7bf677883407d7769 Mon Sep 17 00:00:00 2001 From: Chris Evich Date: Mon, 6 Nov 2017 16:16:04 -0500 Subject: [PATCH 4/4] DO NOT MERGE: TEST SEPARATION OF BUILD VS INSTALL Stab in the dark, I have no idea what/if there are any dependencies between build tasks and prior install tasks. Assuming not, the order is preserved,by separating build from install/configure, the ``setup`` AMI-cache state is guaranteed to be uniform, no matter what repos were cloned for the build vs install steps. Maybe. Signed-off-by: Chris Evich --- contrib/test/integration/build/cri-o.yml | 64 ------------------ contrib/test/integration/build/kubernetes.yml | 48 +------------- contrib/test/integration/build/plugins.yml | 38 +---------- contrib/test/integration/build/runc.yml | 11 ---- .../integration/{build => install}/bats.yml | 0 contrib/test/integration/install/cri-o.yml | 65 +++++++++++++++++++ .../{build => install}/cri-tools.yml | 0 .../test/integration/install/kubernetes.yml | 48 ++++++++++++++ contrib/test/integration/install/plugins.yml | 28 ++++++++ contrib/test/integration/install/runc.yml | 12 ++++ contrib/test/integration/main.yml | 42 +++++++++--- contrib/test/integration/test.yml | 3 - contrib/test/integration/vars.yml | 5 ++ 13 files changed, 195 insertions(+), 169 deletions(-) rename contrib/test/integration/{build => install}/bats.yml (100%) create mode 100644 contrib/test/integration/install/cri-o.yml rename contrib/test/integration/{build => install}/cri-tools.yml (100%) create mode 100644 contrib/test/integration/install/kubernetes.yml create mode 100644 contrib/test/integration/install/plugins.yml create mode 100644 contrib/test/integration/install/runc.yml diff --git a/contrib/test/integration/build/cri-o.yml b/contrib/test/integration/build/cri-o.yml index fa025035..52aec5a6 100644 --- a/contrib/test/integration/build/cri-o.yml +++ b/contrib/test/integration/build/cri-o.yml @@ -10,70 +10,6 @@ msg: "Expected cri-o to be cloned at {{ ansible_env.GOPATH }}/src/github.com/kubernetes-incubator/cri-o but it wasn't!" when: not dir_stat.stat.exists -- name: install cri-o tools - make: - target: install.tools - chdir: "{{ ansible_env.GOPATH }}/src/github.com/kubernetes-incubator/cri-o" - - name: build cri-o make: chdir: "{{ ansible_env.GOPATH }}/src/github.com/kubernetes-incubator/cri-o" - -- name: install cri-o - make: - target: install - chdir: "{{ ansible_env.GOPATH }}/src/github.com/kubernetes-incubator/cri-o" - -- name: install cri-o systemd files - make: - target: install.systemd - chdir: "{{ ansible_env.GOPATH }}/src/github.com/kubernetes-incubator/cri-o" - -- name: install cri-o config - make: - target: install.config - chdir: "{{ ansible_env.GOPATH }}/src/github.com/kubernetes-incubator/cri-o" - -- name: install configs - copy: - src: "{{ ansible_env.GOPATH }}/src/github.com/kubernetes-incubator/cri-o/{{ item.src }}" - dest: "{{ item.dest }}" - remote_src: yes - with_items: - - src: contrib/cni/10-crio-bridge.conf - dest: /etc/cni/net.d/10-crio-bridge.conf - - src: contrib/cni/99-loopback.conf - dest: /etc/cni/net.d/99-loopback.conf - - src: test/redhat_sigstore.yaml - dest: /etc/containers/registries.d/registry.access.redhat.com.yaml - -- name: run with overlay - replace: - regexp: 'storage_driver = ""' - replace: 'storage_driver = "overlay"' - name: /etc/crio/crio.conf - backup: yes - -- name: run with systemd cgroup manager - replace: - regexp: 'cgroup_manager = "cgroupfs"' - replace: 'cgroup_manager = "systemd"' - name: /etc/crio/crio.conf - backup: yes - -- name: add docker.io default registry - lineinfile: - dest: /etc/crio/crio.conf - line: '"docker.io"' - insertafter: 'registries = \[' - regexp: 'docker\.io' - state: present - -- name: add overlay storage opts on RHEL/CentOS - lineinfile: - dest: /etc/crio/crio.conf - line: '"overlay.override_kernel_check=1"' - insertafter: 'storage_option = \[' - regexp: 'overlay\.override_kernel_check=1' - state: present - when: ansible_distribution == 'RedHat' or ansible_distribution == 'CentOS' diff --git a/contrib/test/integration/build/kubernetes.yml b/contrib/test/integration/build/kubernetes.yml index 07d22f8d..fc4febcd 100644 --- a/contrib/test/integration/build/kubernetes.yml +++ b/contrib/test/integration/build/kubernetes.yml @@ -1,5 +1,6 @@ --- +# TODO: Is this required for building kube, or can it happen after? - name: install etcd command: "hack/install-etcd.sh" args: @@ -8,50 +9,3 @@ - name: build kubernetes make: chdir: "{{ ansible_env.GOPATH }}/src/k8s.io/kubernetes" - -- name: Add custom cluster service file for the e2e testing - copy: - dest: /etc/systemd/system/customcluster.service - content: | - [Unit] - After=network-online.target - Wants=network-online.target - [Service] - WorkingDirectory={{ ansible_env.GOPATH }}/src/k8s.io/kubernetes - ExecStart=/usr/local/bin/createcluster.sh - User=root - [Install] - WantedBy=multi-user.target - -- name: Add create cluster background script for e2e testing - copy: - dest: /usr/local/bin/createcluster.sh - content: | - #!/bin/bash - - export PATH=/usr/local/go/bin:/usr/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/root/bin:{{ ansible_env.GOPATH }}/bin:{{ ansible_env.GOPATH }}/src/k8s.io/kubernetes/third_party/etcd:{{ ansible_env.GOPATH }}/src/k8s.io/kubernetes/_output/local/bin/linux/amd64/ - export CONTAINER_RUNTIME=remote - export CGROUP_DRIVER=systemd - export CONTAINER_RUNTIME_ENDPOINT='/var/run/crio.sock --runtime-request-timeout=5m' - export ALLOW_SECURITY_CONTEXT="," - export ALLOW_PRIVILEGED=1 - export DNS_SERVER_IP={{ ansible_eth0.ipv4.address }} - export API_HOST={{ ansible_eth0.ipv4.address }} - export API_HOST_IP={{ ansible_eth0.ipv4.address }} - export KUBE_ENABLE_CLUSTER_DNS=true - ./hack/local-up-cluster.sh - mode: "u=rwx,g=rwx,o=x" - -- name: Set kubernetes_provider to be local - lineinfile: - dest: /etc/environment - line: 'KUBERNETES_PROVIDER=local' - regexp: 'KUBERNETES_PROVIDER=' - state: present - -- name: Set KUBECONFIG - lineinfile: - dest: /etc/environment - line: 'KUBECONFIG=/var/run/kubernetes/admin.kubeconfig' - regexp: 'KUBECONFIG=' - state: present diff --git a/contrib/test/integration/build/plugins.yml b/contrib/test/integration/build/plugins.yml index fc4f7bd1..259aab8b 100644 --- a/contrib/test/integration/build/plugins.yml +++ b/contrib/test/integration/build/plugins.yml @@ -5,40 +5,8 @@ args: chdir: "{{ ansible_env.GOPATH }}/src/github.com/containernetworking/plugins" -- name: install plugins - copy: - src: "{{ ansible_env.GOPATH }}/src/github.com/containernetworking/plugins/bin/{{ item }}" - dest: "/opt/cni/bin" - mode: "o=rwx,g=rx,o=rx" - remote_src: yes - with_items: - - bridge - - dhcp - - flannel - - host-local - - ipvlan - - loopback - - macvlan - - ptp - - sample - - tuning - - vlan - -- name: clone runcom plugins source repo - git: - repo: "https://github.com/runcom/plugins.git" - dest: "{{ ansible_env.GOPATH }}/src/github.com/containernetworking/plugins" - version: "custom-bridge" - force: yes - -- name: build plugins +# TODO: Okay to rename this plugins -> custom-bridge-plugins? +- name: build custom-bridge-plugins command: "./build.sh" args: - chdir: "{{ ansible_env.GOPATH }}/src/github.com/containernetworking/plugins" - -- name: install custom bridge - copy: - src: "{{ ansible_env.GOPATH }}/src/github.com/containernetworking/plugins/bin/bridge" - dest: "/opt/cni/bin/bridge-custom" - mode: "o=rwx,g=rx,o=rx" - remote_src: yes + chdir: "{{ ansible_env.GOPATH }}/src/github.com/containernetworking/custom-bridge-plugins" diff --git a/contrib/test/integration/build/runc.yml b/contrib/test/integration/build/runc.yml index c6cc8c94..02a5ffe4 100644 --- a/contrib/test/integration/build/runc.yml +++ b/contrib/test/integration/build/runc.yml @@ -4,14 +4,3 @@ make: params: BUILDTAGS="seccomp selinux" chdir: "{{ ansible_env.GOPATH }}/src/github.com/opencontainers/runc" - -- name: install runc - make: - target: "install" - chdir: "{{ ansible_env.GOPATH }}/src/github.com/opencontainers/runc" - -- name: link runc - file: - src: /usr/local/sbin/runc - dest: /usr/bin/runc - state: link diff --git a/contrib/test/integration/build/bats.yml b/contrib/test/integration/install/bats.yml similarity index 100% rename from contrib/test/integration/build/bats.yml rename to contrib/test/integration/install/bats.yml diff --git a/contrib/test/integration/install/cri-o.yml b/contrib/test/integration/install/cri-o.yml new file mode 100644 index 00000000..ef221f78 --- /dev/null +++ b/contrib/test/integration/install/cri-o.yml @@ -0,0 +1,65 @@ +--- + +- name: install cri-o tools + make: + target: install.tools + chdir: "{{ ansible_env.GOPATH }}/src/github.com/kubernetes-incubator/cri-o" + +- name: install cri-o + make: + target: install + chdir: "{{ ansible_env.GOPATH }}/src/github.com/kubernetes-incubator/cri-o" + +- name: install cri-o systemd files + make: + target: install.systemd + chdir: "{{ ansible_env.GOPATH }}/src/github.com/kubernetes-incubator/cri-o" + +- name: install cri-o config + make: + target: install.config + chdir: "{{ ansible_env.GOPATH }}/src/github.com/kubernetes-incubator/cri-o" + +- name: install configs + copy: + src: "{{ ansible_env.GOPATH }}/src/github.com/kubernetes-incubator/cri-o/{{ item.src }}" + dest: "{{ item.dest }}" + remote_src: yes + with_items: + - src: contrib/cni/10-crio-bridge.conf + dest: /etc/cni/net.d/10-crio-bridge.conf + - src: contrib/cni/99-loopback.conf + dest: /etc/cni/net.d/99-loopback.conf + - src: test/redhat_sigstore.yaml + dest: /etc/containers/registries.d/registry.access.redhat.com.yaml + +- name: run with overlay + replace: + regexp: 'storage_driver = ""' + replace: 'storage_driver = "overlay"' + name: /etc/crio/crio.conf + backup: yes + +- name: run with systemd cgroup manager + replace: + regexp: 'cgroup_manager = "cgroupfs"' + replace: 'cgroup_manager = "systemd"' + name: /etc/crio/crio.conf + backup: yes + +- name: add docker.io default registry + lineinfile: + dest: /etc/crio/crio.conf + line: '"docker.io"' + insertafter: 'registries = \[' + regexp: 'docker\.io' + state: present + +- name: add overlay storage opts on RHEL/CentOS + lineinfile: + dest: /etc/crio/crio.conf + line: '"overlay.override_kernel_check=1"' + insertafter: 'storage_option = \[' + regexp: 'overlay\.override_kernel_check=1' + state: present + when: ansible_distribution == 'RedHat' or ansible_distribution == 'CentOS' diff --git a/contrib/test/integration/build/cri-tools.yml b/contrib/test/integration/install/cri-tools.yml similarity index 100% rename from contrib/test/integration/build/cri-tools.yml rename to contrib/test/integration/install/cri-tools.yml diff --git a/contrib/test/integration/install/kubernetes.yml b/contrib/test/integration/install/kubernetes.yml new file mode 100644 index 00000000..b2c32ec9 --- /dev/null +++ b/contrib/test/integration/install/kubernetes.yml @@ -0,0 +1,48 @@ +--- + +- name: Add custom cluster service file for the e2e testing + copy: + dest: /etc/systemd/system/customcluster.service + content: | + [Unit] + After=network-online.target + Wants=network-online.target + [Service] + WorkingDirectory={{ ansible_env.GOPATH }}/src/k8s.io/kubernetes + ExecStart=/usr/local/bin/createcluster.sh + User=root + [Install] + WantedBy=multi-user.target + +- name: Add create cluster background script for e2e testing + copy: + dest: /usr/local/bin/createcluster.sh + content: | + #!/bin/bash + + export PATH=/usr/local/go/bin:/usr/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/root/bin:{{ ansible_env.GOPATH }}/bin:{{ ansible_env.GOPATH }}/src/k8s.io/kubernetes/third_party/etcd:{{ ansible_env.GOPATH }}/src/k8s.io/kubernetes/_output/local/bin/linux/amd64/ + export CONTAINER_RUNTIME=remote + export CGROUP_DRIVER=systemd + export CONTAINER_RUNTIME_ENDPOINT='/var/run/crio.sock --runtime-request-timeout=5m' + export ALLOW_SECURITY_CONTEXT="," + export ALLOW_PRIVILEGED=1 + export DNS_SERVER_IP={{ ansible_eth0.ipv4.address }} + export API_HOST={{ ansible_eth0.ipv4.address }} + export API_HOST_IP={{ ansible_eth0.ipv4.address }} + export KUBE_ENABLE_CLUSTER_DNS=true + ./hack/local-up-cluster.sh + mode: "u=rwx,g=rwx,o=x" + +- name: Set kubernetes_provider to be local + lineinfile: + dest: /etc/environment + line: 'KUBERNETES_PROVIDER=local' + regexp: 'KUBERNETES_PROVIDER=' + state: present + +- name: Set KUBECONFIG + lineinfile: + dest: /etc/environment + line: 'KUBECONFIG=/var/run/kubernetes/admin.kubeconfig' + regexp: 'KUBECONFIG=' + state: present diff --git a/contrib/test/integration/install/plugins.yml b/contrib/test/integration/install/plugins.yml new file mode 100644 index 00000000..f05fed5f --- /dev/null +++ b/contrib/test/integration/install/plugins.yml @@ -0,0 +1,28 @@ +--- + +- name: install plugins + copy: + src: "{{ ansible_env.GOPATH }}/src/github.com/containernetworking/plugins/bin/{{ item }}" + dest: "/opt/cni/bin" + mode: "o=rwx,g=rx,o=rx" + remote_src: yes + with_items: + - bridge + - dhcp + - flannel + - host-local + - ipvlan + - loopback + - macvlan + - ptp + - sample + - tuning + - vlan + +- name: install custom bridge + copy: + # TODO: Okay to rename this plugins -> custom-bridge-plugins? + src: "{{ ansible_env.GOPATH }}/src/github.com/containernetworking/custom-bridge-plugins/bin/bridge" + dest: "/opt/cni/bin/bridge-custom" + mode: "o=rwx,g=rx,o=rx" + remote_src: yes diff --git a/contrib/test/integration/install/runc.yml b/contrib/test/integration/install/runc.yml new file mode 100644 index 00000000..1556eb03 --- /dev/null +++ b/contrib/test/integration/install/runc.yml @@ -0,0 +1,12 @@ +--- + +- name: install runc + make: + target: "install" + chdir: "{{ ansible_env.GOPATH }}/src/github.com/opencontainers/runc" + +- name: link runc + file: + src: /usr/local/sbin/runc + dest: /usr/bin/runc + state: link diff --git a/contrib/test/integration/main.yml b/contrib/test/integration/main.yml index 4d26baa0..a21644f5 100644 --- a/contrib/test/integration/main.yml +++ b/contrib/test/integration/main.yml @@ -17,21 +17,17 @@ always_force: False post_tasks: - - name: clone build and install bats - include: "build/bats.yml" - - name: clone build and install cri-tools - include: "build/cri-tools.yml" - - - name: clone build and install kubernetes + - name: Install ETCD and Build Kubernetes include: "build/kubernetes.yml" - - name: clone build and install runc + - name: Build runc include: "build/runc.yml" - - name: clone build and install networking plugins + - name: Build networking plugins include: "build/plugins.yml" + - hosts: all remote_user: root vars_files: @@ -45,9 +41,37 @@ always_force: True post_tasks: - - name: clone build and install cri-o + - name: Install BATS + include: "install/bats.yml" + + - name: Install cri-tools + include: "install/cri-tools.yml" + + - name: Re-Install ETCD and Re-Build Kubernetes + include: "build/kubernetes.yml" + + - name: Re-Install kubernetes + include: "install/kubernetes.yml" + + - name: Build runc + include: "build/runc.yml" + + - name: install runc + include: "install/runc.yml" + + - name: Build networking plugins + include: "build/plugins.yml" + + - name: Install networking plugins + include: "install/plugins.yml" + + - name: Build CRI-O include: "build/cri-o.yml" + - name: Install CRI-O + include: "install/cri-o.yml" + + - hosts: all remote_user: root vars_files: diff --git a/contrib/test/integration/test.yml b/contrib/test/integration/test.yml index 593e8a1c..418ceff7 100644 --- a/contrib/test/integration/test.yml +++ b/contrib/test/integration/test.yml @@ -1,8 +1,5 @@ --- -- name: clone build and install cri-tools - include: "build/cri-tools.yml" - - name: Make testing output verbose so it can be converted to xunit lineinfile: dest: "{{ ansible_env.GOPATH }}/src/k8s.io/kubernetes/hack/make-rules/test.sh" diff --git a/contrib/test/integration/vars.yml b/contrib/test/integration/vars.yml index 5578adca..0a0ba4a0 100644 --- a/contrib/test/integration/vars.yml +++ b/contrib/test/integration/vars.yml @@ -18,6 +18,11 @@ git_operations: dest: "{{ ansible_env.GOPATH }}/src/github.com/containernetworking/plugins" version: "dcf7368eeab15e2affc6256f0bb1e84dd46a34de" + # TODO: Okay to rename this plugins -> custom-bridge-plugins and drop force: yes? + - repo: "https://github.com/runcom/plugins.git" + dest: "{{ ansible_env.GOPATH }}/src/github.com/containernetworking/custom-bridge-plugins" + version: "custom-bridge" + - repo: "https://github.com/opencontainers/runc.git" dest: "{{ ansible_env.GOPATH }}/src/github.com/opencontainers/runc" version: "84a082bfef6f932de921437815355186db37aeb1"