Variables 易变分块变量

Variables 易变分块变量,variables,ansible,Variables,Ansible,如何设置Ansible块变量(仅对块中的任务可见) 我试过: --- - hosts: test tasks: - block: - name: task 1 shell: "echo {{item}}" with_items: - one - two 但这似乎是一种错误的方式。 如果要为块定义变量,请执行以下操作: - block: - debug: var: var_for_blo

如何设置Ansible块变量(仅对块中的任务可见)

我试过:

---
- hosts: test
  tasks:
    - block:

       - name: task 1
         shell: "echo {{item}}"

      with_items:
        - one
        - two
但这似乎是一种错误的方式。

  • 如果要为块定义变量,请执行以下操作:

    - block:
    
      - debug:
          var: var_for_block
    
      vars:
        var_for_block: "value for var_for_block"
    
  • 如果你想像你的代码建议的那样“在块上循环”,你不能。它没有在Ansible中实现。 跟着

    现在考虑将任务保存到一个单独的文件中,并使用<代码>包含。

    • @Shasha99 您可以包含一个包含块的文件,这样您仍然可以从try/catch中获益

      includeFile.yml:

      - block
          - name: Finding the package.
            shell: rpm -qa | grep "{{pkgName}}"
            register: package
      
          - name: Uninstalling the package.
            shell: rpm -e "{{package}}"
        always:
          - debug: msg="this always executes"
      
      main.yml:

      ---
      - hosts: all
        vars: 
          - packageList : ["pkg1","pkg2","pkg3","pkg4"]
      
        tasks:
          - include: includeFile.yml pkgName="{{item}}"
            with_items: packageList
      

      所以在“变量优先级:我应该把变量放在哪里?”一段中,oat-有一个条目“block vars(仅适用于块中的任务)”,问题是“它是什么?”好的,我试着阻止vars-不知为什么-但我真的不知道如何声明它们?你说得对,thx,我以前尝试过,但我将var放在块的开头,该语法不起作用。@ITIC如果您想在块上循环,您可以尝试以下替代方法:是@Shasha99 include with_items很有用,但块提供try/catch语法,变量优先级不同。