--- # To get the binary from container to host, use the etcd data directory mounted # rw from host into the container. - name: Check unintentional include of this role assert: that: etcd_deployment_type == "kubeadm" - name: Check if etcdctl exist stat: path: "{{ bin_dir }}/etcdctl" get_attributes: no get_checksum: no get_mime: no register: stat_etcdctl - block: - name: Check version command: "{{ bin_dir }}/etcdctl version" register: etcdctl_version check_mode: no changed_when: false - name: Remove old binary if version is not OK file: path: "{{ bin_dir }}/etcdctl" state: absent when: etcd_version.lstrip('v') not in etcdctl_version.stdout when: stat_etcdctl.stat.exists - name: Check if etcdctl still exist after version check stat: path: "{{ bin_dir }}/etcdctl" get_attributes: no get_checksum: no get_mime: no register: stat_etcdctl - block: - name: Copy etcdctl script to host shell: "{{ docker_bin_dir }}/docker cp \"$({{ docker_bin_dir }}/docker ps -qf ancestor={{ etcd_image_repo }}:{{ etcd_image_tag }})\":/usr/local/bin/etcdctl {{ etcd_data_dir }}/etcdctl" when: container_manager == "docker" - name: Copy etcdctl script to host shell: >- etcd_ctr_id="$({{ bin_dir }}/crictl ps -q --image {{ etcd_image_repo }}:{{ etcd_image_tag }})" && etcd_ctr_pid="$({{ bin_dir }}/crictl inspect --output go-template --template '{{ '{{' }} .info.pid {{ '}}' }}' ${etcd_ctr_id})" && cp /proc/${etcd_ctr_pid}/root/usr/local/bin/etcdctl {{ etcd_data_dir }}/etcdctl when: container_manager in ['crio', 'containerd'] - name: Copy etcdctl to {{ bin_dir }} copy: src: "{{ etcd_data_dir }}/etcdctl" dest: "{{ bin_dir }}" remote_src: true mode: 0755 when: not stat_etcdctl.stat.exists - name: Remove binary in etcd data dir file: path: "{{ etcd_data_dir }}/etcdctl" state: absent - name: Create etcdctl wrapper script template: src: etcdctl.sh.j2 dest: "{{ bin_dir }}/etcdctl.sh" mode: 0755