在循环内从 csv 文件获取后在 ansible 脚本中使用变量

在循环内从 csv 文件获取后在 ansible 脚本中使用变量

我是 Ansible 新手。我想知道如何在 Ansible 中读取 excel 或 csv 文件,将信息存储在变量中并使用这些变量。

实际上我想创建虚拟机。我将使用 csv 文件获取虚拟机的详细信息(如主机名、分区详细信息、IP 详细信息)。

如果有人能在这方面帮助我。

答案1

使用read_csv – 读取 CSV 文件模块。例如剧本

- hosts: localhost
  tasks:
    - read_csv:
        path: vms.csv
        key: hostname
      register: vms
    - debug:
        msg: "{{ item.key }}:
              {{ item.value.hostname }},
              {{ item.value.partition }},
              {{ item.value.ip }}"
      loop: "{{ vms.dict|dict2items }}"

使用文件

$ cat vms.csv
hostname,partition,ip
hostname1,/dev/sda1,10.1.0.21
hostname2,/dev/sda1,10.1.0.22
hostname3,/dev/sda1,10.1.0.23

给出

  msg: 'hostname1: hostname1, /dev/sda1, 10.1.0.21'
  msg: 'hostname2: hostname2, /dev/sda1, 10.1.0.22'
  msg: 'hostname3: hostname3, /dev/sda1, 10.1.0.23'

答案2

分享我的 ansible 代码。这对我有用

剧本.yaml

---
- name: Read Users
  gather_facts: True
  hosts: localhost

  tasks:
  - read_csv:
      path: users.csv
    register: userlist

  - debug: 
      msg: "{{ user.username }} and password is {{ user.password }}"
    loop: "{{ userlist.list }}"
    loop_control:
      loop_var: user

用户.csv

username,password
user0,test123
user1,test123

Ansible 输出

PLAY [Read Users] *************************************************

TASK [Gathering Facts] *********************************************************
ok: [127.0.0.1]

TASK [read_csv] ****************************************************************
ok: [127.0.0.1]

TASK [debug] *******************************************************************
ok: [127.0.0.1] => (item={u'username': u'user0', u'password': u'test123'}) => {
    "msg": "user0 and password is test123"
}
ok: [127.0.0.1] => (item={u'username': u'user1', u'password': u'test123'}) => {
    "msg": "user1 and password is test123"
}

PLAY RECAP *********************************************************************
127.0.0.1                  : ok=3    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

相关内容