'data_list' 由 csv 檔案中的值組成。我想使用“data_list”中的值來遍歷劇本“創建用戶”部分中的引數,但是在運行我的劇本后出現此錯誤:
TASK [Create Multiple Users : Create multiple users] ***************************
fatal: [10.12.201.20]: FAILED! => {"reason": "Vars in a Task must be specified as a dictionary, or a list of dictionaries\n\nThe error appears to be in '/runner/project/Windows AD/roles/Create Multiple Users/tasks/Create_multiple_users.yml': line 14, column 9, but may\nbe elsewhere in the file depending on the exact syntax problem.\n\nThe offending line appears to be:\n\n - \"{{ item.groups }}\"\n vars: data_list\n ^ here\n"}
這是我的劇本:
---
- name: Read Users
hosts: localhost
vars:
data_list: []
tasks:
- read_csv:
path: user.csv
key: name
fieldnames: name,firstname,surname,displayName,groups
delimiter: ','
register: userdata
- name: Extract the list
set_fact:
data_list: "{{ data_list [{ 'name': item.value.name, 'firstname': item.value.firstname, 'surname': item.value.surname, 'displayName': item.value.displayName, 'groups': item.value.groups }] }}"
loop: "{{ userdata.dict|dict2items }}"
- name: Create multiple Windows AD user accounts
hosts: "{{ hostname }}"
gather_facts: false
any_errors_fatal: false
become: yes
become_method: runas
become_user: admin
roles:
- { role: Create Multiple Users }
- name: Create users
community.windows.win_domain_user:
name: "{{ item.name }}"
firstname: "{{ item.firstname }}"
surname: "{{ item.surname }}"
attributes:
displayName: "{{ item.firstname ' ' item.surname }}"
groups:
- "{{ item.groups }}"
vars: data_list
with_items:
- "{{ data_list }}"
我應該寫什么正確的變數?
uj5u.com熱心網友回復:
這是導致您的任務錯誤的行
vars: data_list
如您的錯誤訊息中所述,該vars
部分應如下所示:
vars:
var1: value1
var2: value2
但這不是您上面腳本中的唯一問題。您正在單獨播放中收集 csv 資料,localhost
并將該資訊設定為變數中的事實data_list
。當您的第一次游戲結束時,該 var 將僅從localhost
目標中獲知。如果您想在針對其他主機的第二次播放中重用它,則必須從hostvars
魔術變數中獲取該 var
{{ hostvars.localhost.data_list }}
這不是這里最好的方法,因為您可以輕松地將您的劇本縮短為單一劇本。這里的技巧是將您的 csv 收集任務委托給 localhost 并進行設定run_once: true
,以便注冊的 var 僅計算一次并分發給具有相同值的所有主機。您還可以洗掉基本上將其復制key: value
到新變數的集合事實。
這是一個(未經測驗的)示例劇本,向您展示方式:
---
- name: Create multiple Windows AD user accounts from CSV
hosts: "{{ hostname }}"
gather_facts: false
tasks:
- name: read csv from localhost (single run same registered var for all hosts)
read_csv:
path: user.csv
key: name
fieldnames: name,firstname,surname,displayName,groups
delimiter: ','
register: userdata
run_once: true
delegate_to: localhost
- name: Create users
community.windows.win_domain_user:
name: "{{ item.name }}"
firstname: "{{ item.firstname }}"
surname: "{{ item.surname }}"
attributes:
displayName: "{{ item.firstname ' ' item.surname }}"
groups:
- "{{ item.groups }}"
# This will work on any number of hosts as `userdata`
# now has the same value for each hosts inside this play.
# we just have to extract the values from each keys from
# `userdata` and loop on that list
loop: "{{ userdata.dict | dict2items | map(attribute='value') }}"
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/506955.html