본문 바로가기

기타

kubernetes 클러스터의 %28register stdout%29 초기화에서 마지막 두 줄을 가져오는 방법

반응형

kubernetes 클러스터의 %28register stdout%29 초기화에서 마지막 두 줄을 가져오는 방법

%3 질문에 대한 플레이북 파일입니다.a

  - name: Initialize the Kubernetes cluster using kubeadm
    command: kubeadm init --config /etc/kubernetes/kubeadminit.yaml
    register: init_output

  - name: Copy join command to local file
    local_action: copy content={{ init_output.stdout }} dest="./join-command"

현재 join-command에는 콘텐츠에 대한 텍스트 %29의 전체 stdout %2830%2B 줄이 포함되어 있습니다. 내가 잡고 싶은 것은 전체 출력 대신 init_output.stdout의 마지막 두 줄뿐이다. I%27ve가 인덱스 참조 %28ie를 사용하는 것을 조사했습니다. init_output.stdout%5B%23%5D%29 그러나 %27은 출력이 항상 같은 길이일 것이라는 것을 모르고 %27은 인덱스를 사용하여 두 줄 이상을 가져오는 방법을 모르지만 i%27m는 마지막 두 줄이 항상 join 명령이 될 것이라고 확신한다. 모든 제안 %3f




목록에서 마지막 두 줄 선택

- local_action: copy content={{ init_output.stdout_lines[-2:] }} dest="./join-command"

블록에서 선 형식을 지정할 수 있는 것은 %27s입니다. 예를들면

    - local_action:
        module: copy
        content: |
          {{ init_output.stdout_lines[-2] }}
          {{ init_output.stdout_lines[-1] }}
        dest: "./join-command"

루프로 선을 추가하려면

    - local_action:
        module: lineinfile
        path: "./join-command"
        line: "{{ item }}"
        insertafter: EOF
        create: true
      loop: "{{ init_output.stdout_lines[-2:] }}"



이런 문제가 발생하여 join 명령을 로컬 파일에 복사하고 싶지 않아서 set_fact를 대신했습니다% 3a

- set_fact:
    join_cmd: '{{ init_output.stdout_lines[-2][:-2] }}{{ init_output.stdout_lines[-1] }}'



내가 한 짓이...

- name: kubeadm init
  shell: |
    kubeadm init --control-plane-endpoint \
    localhost \
    --control-plane-endpoint kube-api.local >> /tmp/run_kube_init.sh
  when: master == "yes"

- name: Extract join token for nodes
  shell: tail -n +2 /tmp/run_kube_init.sh | head -n -1 | awk '{print $5}' | tail -n 1
  register: JOIN_TOKEN
  when: master == "yes"

- set_fact:
    join_token: "{{ JOIN_TOKEN.stdout }}"
  when: master == "yes"

- name: join nodes
  shell: |
    kubeadm join kube-api.local:6443 \
    --token {{ JOIN_TOKEN.stdout }} \
    --discovery-token-unsafe-skip-ca-verification
  when: master == "no"

- name: rm /tmp/run_kube_init.sh
  ansible.builtin.file:
    path: /tmp/run_kube_init.sh
    state: absent
  when: master == "yes"
반응형