首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法循环的shell命令列表和将变量传递给命令?

无法循环的shell命令列表和将变量传递给命令?
EN

Stack Overflow用户
提问于 2019-07-26 22:12:07
回答 1查看 1.1K关注 0票数 1

我试图弄清楚如何循环shell命令,但是这些命令包含变量。我使用这个链接作为参考https://github.com/VerosK/ansible-iscsi-target/blob/master/tasks/implementations/lio.yml

代码是通过每个磁盘的命令列表循环的。

以下是工作代码:

代码语言:javascript
复制
---
-
  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

下面是我想要做的事情,将其转化为:但我认为变量项正在变得混乱。这个方法支持吗?我只想知道作为将来的参考。

代码语言:javascript
复制
- 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}访问

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-07-27 03:22:24

代码语言:javascript
复制
    - shell: "{{ item }}"
      loop:
        - "AAA {{ item.1.name }} {{ item.1.device }}"
        - "BBB {{ item.1.name }} {{ item.1.device }}"
      with_subelements:
         - "{{ targets }}"
         - disks

问:“支持吗?

答:没有。不可能将2 放在一个任务中。

相反,可以使用命令创建一个文件。

代码语言:javascript
复制
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。下面这出戏

代码语言:javascript
复制
- 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') }}"

代码语言:javascript
复制
    "msg": "AAA disk1 /dev/sdb"
    "msg": "BBB disk1 /dev/sdb"
    "msg": "AAA disk2 /dev/sdc"
    "msg": "BBB disk2 /dev/sdc"
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57227541

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档