我试图弄清楚如何循环shell命令,但是这些命令包含变量。我使用这个链接作为参考https://github.com/VerosK/ansible-iscsi-target/blob/master/tasks/implementations/lio.yml
代码是通过每个磁盘的命令列表循环的。
以下是工作代码:
---
-
become: true
gather_facts: false
hosts: isci_ansible_centos01
vars:
iscsi_target_base: iqn.2017-11.local.centos7
iscsi_targets:
- wwn: iqn.2019-8.local.centos7
disks:
- name: 'iscsidisk1'
device: '/dev/sdb'
vgname: 'vg.iscsi1'
lvname: 'lv.iscsi1'
mode: 'block'
- name: iscsidisk2
device: /dev/sdc
vgname: vg.iscsi2
lvname: lv.iscsi2
mode: block
tasks:
#targetcli '/backstores/block' create scsids1 /dev/vg-iscsi/lv-iscsi
- name: Create backstore
shell: targetcli '/backstores/{{ item.1.mode }}' create {{ item.1.name }} /dev/{{ item.1.vgname }}/{{ item.1.lvname }}
with_subelements:
- "{{ iscsi_targets }}"
- disks
ignore_errors: yes
#targetcli '/iscsi' create iqn.2017-11.local.centos7:disk1
- name: Create target
shell: targetcli '/iscsi' create {{ iscsi_target_base }}:{{item.1.name}}
with_subelements:
- "{{ iscsi_targets }}"
- disks
ignore_errors: yes
# targetcli '/iscsi/iqn.2017-11.local.centos7:disk1/tpg1/acls' create iqn.2017-11.local.centos7:node1
- name: Create nodes
shell: targetcli '/iscsi/{{ iscsi_target_base }}:{{item.1.name}}/tpg1/acls' create {{ iscsi_target_base }}:node{{item.1.name}}
with_subelements:
- "{{ iscsi_targets }}"
- disks
# targetcli '/iscsi/iqn.2017-11.local.centos7:disk1/tpg1' set attribute authentication=0 demo_mode_write_protect=0
- name: Set Authentication
shell: targetcli '/iscsi/{{ iscsi_target_base }}:{{item.1.name}}/tpg1' set attribute authentication=0 demo_mode_write_protect=0
with_subelements:
- "{{ iscsi_targets }}"
- disks
# targetcli '/iscsi/iqn.2017-11.local.centos7:disk1/tpg1' set attribute generate_node_acls=1
- name: Set geenerate_node_acls
shell: targetcli '/iscsi/{{ iscsi_target_base }}:{{item.1.name}}/tpg1' set attribute generate_node_acls=1
with_subelements:
- "{{ iscsi_targets }}"
- disks
# targetcli '/iscsi/iqn.2017-11.local.centos7:disk1/tpg1/luns' create /backstores/block/scsids
- name: Create backing_store
shell: targetcli '/iscsi/{{ iscsi_target_base }}:{{item.1.name}}/tpg1/luns' create /backstores/block/{{ item.1.name }}
with_subelements:
- "{{ iscsi_targets }}"
- disks下面是我想要做的事情,将其转化为:但我认为变量项正在变得混乱。这个方法支持吗?我只想知道作为将来的参考。
- name: Configure ISCSI using SHELL LOOP
shell: {{ item }}
loop:
- targetcli '/backstores/{{ item.1.mode }}' create {{ item.1.name }} /dev/{{ item.1.vgname }}/{{ item.1.lvname }}
- targetcli '/iscsi' create {{ iscsi_target_base }}:{{item.1.name}}
- targetcli '/iscsi/{{ iscsi_target_base }}:{{item.1.name}}/tpg1/acls' create {{ iscsi_target_base }}:node{{item.1.name}}
- targetcli '/iscsi/{{ iscsi_target_base }}:{{item.1.name}}/tpg1' set attribute authentication=0 demo_mode_write_protect=0
- targetcli '/iscsi/{{ iscsi_target_base }}:{{item.1.name}}/tpg1' set attribute generate_node_acls=1
- targetcli '/iscsi/{{ iscsi_target_base }}:{{item.1.name}}/tpg1/luns' create /backstores/block/{{ item.1.name }}
with_subelements:
- "{{ iscsi_targets }}"
- disks顺便说一句,我不得不使用with_subelements来访问iscsi_targets中的项目。出于某种原因,它不允许我使用with_items和使用{item.device}访问
发布于 2019-07-27 03:22:24
- shell: "{{ item }}"
loop:
- "AAA {{ item.1.name }} {{ item.1.device }}"
- "BBB {{ item.1.name }} {{ item.1.device }}"
with_subelements:
- "{{ targets }}"
- disks问:“支持吗?”
答:没有。不可能将2 环放在一个任务中。
相反,可以使用命令创建一个文件。
shell> cat commands.yml
- debug:
msg: "{{ cmd_item }}"
loop:
- "AAA {{ item.1.name }} {{ item.1.device }}"
- "BBB {{ item.1.name }} {{ item.1.device }}"
loop_control:
loop_var: cmd_item并迭代(循环) include_tasks。下面这出戏
- hosts: localhost
vars:
targets:
- wwn: 2019.centos7
disks:
- name: 'disk1'
device: '/dev/sdb'
- name: 'disk2'
device: '/dev/sdc'
tasks:
- include_tasks: commands.yml
loop: "{{ targets|subelements('disks') }}"给
"msg": "AAA disk1 /dev/sdb"
"msg": "BBB disk1 /dev/sdb"
"msg": "AAA disk2 /dev/sdc"
"msg": "BBB disk2 /dev/sdc"https://stackoverflow.com/questions/57227541
复制相似问题