How do I set register a variable to persist between plays in ansible?

前端 未结 3 1733
傲寒
傲寒 2020-12-02 07:49

I have an ansible playbook, where I\'d like a variable I register on one machine to be available on another.

In my case, I\'d like to run a command on localhos

3条回答
  •  一个人的身影
    2020-12-02 08:21

    Use a dummy host and its variables

    For example to pass K8S token and hash from the master to the workers.

    On master

    - name: "Cluster token"
      shell: kubeadm token list | cut -d ' ' -f1 | sed -n '2p'
      register: K8S_TOKEN
    
    - name: "CA Hash"
      shell: openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //'
      register: K8S_MASTER_CA_HASH
    
    - name: "Add K8S Token and Hash to dummy host"
      add_host:
        name:   "K8S_TOKEN_HOLDER"
        token:  "{{ K8S_TOKEN.stdout }}"
        hash:   "{{ K8S_MASTER_CA_HASH.stdout }}"
    
    - name:
      debug:
        msg: "[Master] K8S_TOKEN_HOLDER K8S token is {{ hostvars['K8S_TOKEN_HOLDER']['token'] }}"
    
    - name:
      debug:
        msg: "[Master] K8S_TOKEN_HOLDER K8S Hash is  {{ hostvars['K8S_TOKEN_HOLDER']['hash'] }}"
    

    On worker

    - name:
      debug:
        msg: "[Worker] K8S_TOKEN_HOLDER K8S token is {{ hostvars['K8S_TOKEN_HOLDER']['token'] }}"
    
    - name:
      debug:
        msg: "[Worker] K8S_TOKEN_HOLDER K8S Hash is  {{ hostvars['K8S_TOKEN_HOLDER']['hash'] }}"
    
    - name: "Kubeadmn join"
      shell: >
        kubeadm join --token={{ hostvars['K8S_TOKEN_HOLDER']['token'] }}
        --discovery-token-ca-cert-hash sha256:{{ hostvars['K8S_TOKEN_HOLDER']['hash'] }}
        {{K8S_MASTER_NODE_IP}}:{{K8S_API_SERCURE_PORT}}
    

提交回复
热议问题