Ansible从一个target node取值并赋值给所有的target node
Ansible操作三个node,其中有一个pod(app_api_pod_name)运行其中的一个上。 Step 1 需要判断这个pod中有没有存在一个文件,这个地方希望只在第一个node1上执行就可以了,这样其他的node都会skip, 如果是这样skip其他的node的时候,仍然会进行赋值,导致最后的结果是CA_exist无法registe,除了node1,其他node拿到CA_exist都是空值。 所以这个地方就理解了,ansible的所有变量,包括常量和临时变量都是按node进行区分和隔离的,不能共享。
Step 2 就是用来解决这个问题,在其他的node的变量组把这个值给赋值上,关键取值 hostvars[groups[‘role_control’][0]].CA_exist.rc
1 2 3 4 5 6 7 8 9 10 11 12 13 - name: check if CA exist in app-api become: yes shell: "kubectl exec -it {{ app_api_pod_name.stdout_lines[0] }} cat /etc/pki/ca-trust/source/anchors/xxxca.pem -n xxxx" ignore_errors: yes register: CA_exist when: "inventory_hostname == groups['role_control'][0] and app_api_pod_name is defined" - name: set if need to copy CA set_fact: need_copy: "{{ hostvars[groups['role_control'][0]].CA_exist.rc }} " when: "hostvars[groups['role_control'][0]].CA_exist is defined and hostvars[groups['role_control'][0]].CA_exist.rc == 1"