在剧本中为多个客户使用注册

时间:2020-03-04 07:15:15

标签: linux shell ansible

大家好。

我的剧本中的第一个任务将在服务器中执行。 第二项任务将在客户端中执行。 ##

第一个任务:为库存中列出的所有客户生成令牌编号

- hosts: Server
  vars:
    clients:
      - clientA
      - ClientB
  tasks:
   - name: generate ticket on server and save it as a variable
     shell: /path/to/bin ticket {{ clients }} 
     register: ticket

第二项任务:让客户端使用特定于他们的生成令牌。

(例如:ClientA应该获取票证{{hostvars ['server'] ['ticket'] [0] ['stdout']}}

一个客户端的输出示例:“ stdout”:“ 9338e126e8dd454820870b3ba19f5344334c8b1d” ##

注意:以下游戏是针对一位客户的
- hosts: ClientA
  tasks:
  shell: /path/to/bin --key /path/to/store-key/ticket.key --ticket {{ hostvars['server']['ticket']['stdout'] }}

上面的播放对一个客户来说完全可以,但是不知道为多个客户写游戏(循环)

需要输入以编写以下播放的Shell值(对于多个客户端)##

- hosts: "{{ clients }}"
  vars:
    clients:
      - clientA
      - ClientB
  tasks:
  shell: /path/to/bin --key /path/to/store-key/ticket.key --ticket !!!!!!!!Please your input here !!!!!!!!!

我们如何实现呢?

##

1 个答案:

答案 0 :(得分:0)

一种可能的解决方案是

  1. 添加到主机的clients组索引中的主机
clients:
  hosts:
    clientA:
      uid: 0
      <etc>
    clientB:
      uid: 1
      <etc>
  1. 将循环添加到服务器部分(见下文)
  2. 通过其uid作为ticket变量中的数组索引来寻址客户的令牌
- hosts: serverA
  tasks:
   - name: generate ticket on server and save it as a variable
     shell: /path/to/bin ticket {{ item }} 
     register: ticket
     with_items:
      - "{{ groups['clients'] }}"

- hosts: clients
  tasks:
   - name: checkticket
     shell: /path/to/bin --key /path/to/store-key/ticket.key --ticket {{ hostvars['serverA']['ticket']['results'][uid]['stdout'] }}