我對 ansible 比較陌生,並且正在嘗試編寫一個劇本,根據 user_type (我正在嘗試定義)將使用者新增至一組伺服器...
所以......我的劇本看起來有點像這樣......
- name: add user
user:
name={{ item }}
state=present
shell=/bin/bash
with_items: "{{ userlist }}"
tags: add_new_user
become: true
userlist
在單獨的 yml 檔案中定義:
---
userlist:
user1
user2
user3
在我的主機檔案中定義,我有 3 個群組:
[grp1]
192.168.0.0
192.168.0.1
[grp2]
192.168.0.0
192.168.0.3
[grp3]
192.168.0.4
我正在考慮做的是將這些 grp 類型添加到我的用戶列表中,所以它看起來有點像這樣:
---
userlist:
user1 grp1
user2 grp2
user3 grp3
我正在嘗試弄清楚我的劇本到底如何計算出哪些用戶被添加到哪些伺服器 - 我知道我需要聲明另一個變量,以便我的劇本知道 user1 被添加到 grp1 中的伺服器,但是我想不出來怎麼辦?
答案1
一個簡單的方法:使用組變數:
如果每台伺服器只有一個用戶,您可以在清單中定義它們(您需要調整您的遊戲以不循環並使用newuser
as var 代替):
[grp1:vars]
newuser=user1
如果有更多用戶,您需要 YAML inventory(而不是 ini)或使用群組 var 檔案:group_vars
在包含清單檔案的目錄下建立一個名為的子目錄,每組一個文件,例如
$ cat grp1
userlist:
- user1
- user2
然後userlist
將為每個組單獨定義。
答案2
最簡單的方法是透過主機變數或主機群組變數。您可以在此處閱讀如何執行此操作ansible手冊。另一個更高級的選項是透過自訂事實或腳本。您需要閱讀有關變數排序的資訊以避免意外行為。
我還想指出一些小的語法錯誤。你不能以榮譽({)開始聲明。每行放置一個聲明時使用冒號。就像這樣:
庫存文件:
[grp1]
host1
host2
host3
[grp2]
host4
host5
host6
[grp3]
host1
host4
劇本.yml:
- hosts: all
become: true
tasks:
- name: adding users to x
user:
name: "{{ item }} "
state: present
shell: /bin/bash
with_items: "{{ userlist }}"
tags: add_new_user
group_vars/grp1.yml:
---
userlist:
- user1
- user2
- user3
host_vars/host5.yml
---
userlist:
- user1
- user4
- user10