问题:访问名称在循环中更改的变量


甲基蓝
2025-04-17 10:07:20 (16小时前)


这是我的剧本的内容:


  • 名称:下载校验和
    GET_URL:
    url:“{{item.value.url}}。sha1”
    dest:“/ VAR / {{ansible_user}} / tmp / {{item.value.dest}}。sha1”
    模式:0640



2 条回复
  1. 0# Autistic | 2019-08-31 10-32



    我也会尝试简化一些事情,以下是我提出的一些改变:




    1. 在slurp任务中,注册一个变量,比方说

      slurp_var

      。每个循环中的Ansible都不会覆盖你的变量,每个循环都会在list数组中添加结果

      slurp_var.results

      (例子如下)。


    2. 打印 - 或处理 - 您的结果,使用

      with_items

      环。

    3. </醇>


      这是一个修改过的PB来演示结果:


      1. <code>
      2.   ---
          • hosts: localhost
            gather_facts: false
            vars:
            packages:
            list:
          •   package_name1:
          •     url: http://domaine.com/package_name_src1
          •     dest: file1
          •   package_name2:
          •     url: http://domaine.com/package_name_src2
          •     dest: file2
        •  
        • tasks:

        • - name: slurp checksum
        •   slurp:
        •     src: "/tmp/{{ item.value.dest }}.sha1"
        •   register:  slurp_var
        •   with_dict: "{{ packages.list }}"
        • - name: debug
        •   debug:
        •     msg: "sha1: {{ item.content | b64decode }}"
        •   with_items: "{{ slurp_var.results }}"
        • </code>


        演示运行:




        1. [http_offline@greenhat-29 tests]$ cat /tmp/file1.sha1
          c1b016a6506775492a1968a1fa703781c6d066c8
          [http_offline@greenhat-29 tests]$ cat /tmp/file2.sha1
          6ab7a14cf0e04c09f1a2f0f572e7d67e35fa37bd
          [http_offline@greenhat-29 tests]$ ansible-playbook test.yml

        2. PLAY [localhost] *

        3. TASK [slurp checksum] **
          ok: [localhost] => (item={‘key’: package_name1’, value’: {‘url’: http://domaine.com/package_name_src1‘, ‘dest’: ‘file1’}})
          ok: [localhost] => (item={‘key’: package_name2’, value’: {‘url’: http://domaine.com/package_name_src2‘, ‘dest’: ‘file2’}})

        4. TASK [debug] *
          ok: [localhost] => (item={‘content’: YzFiMDE2YTY1MDY3NzU0OTJhMTk2OGExZmE3MDM3ODFjNmQwNjZjOAo=’, source’: ‘/tmp/file1.sha1’, encoding’: base64’, invocation’: {‘module_args’: {‘src’: ‘/tmp/file1.sha1’}}, _ansible_parsed’: True, _ansible_no_log’: False, failed’: False, changed’: False, item’: {‘key’: package_name1’, value’: {‘url’: http://domaine.com/package_name_src1‘, ‘dest’: ‘file1’}}, ‘_ansible_item_result’: True, ‘_ansible_ignore_errors’: None, ‘_ansible_item_label’: {‘key’: ‘package_name1’, ‘value’: {‘url’: ‘http://domaine.com/package_name_src1‘, ‘dest’: ‘file1’}}}) => {
          msg”: sha1: c1b016a6506775492a1968a1fa703781c6d066c8\n
          }
          ok: [localhost] => (item={‘content’: NmFiN2ExNGNmMGUwNGMwOWYxYTJmMGY1NzJlN2Q2N2UzNWZhMzdiZAo=’, source’: ‘/tmp/file2.sha1’, encoding’: base64’, invocation’: {‘module_args’: {‘src’: ‘/tmp/file2.sha1’}}, _ansible_parsed’: True, _ansible_no_log’: False, failed’: False, changed’: False, item’: {‘key’: package_name2’, value’: {‘url’: http://domaine.com/package_name_src2‘, ‘dest’: ‘file2’}}, ‘_ansible_item_result’: True, ‘_ansible_ignore_errors’: None, ‘_ansible_item_label’: {‘key’: ‘package_name2’, ‘value’: {‘url’: ‘http://domaine.com/package_name_src2‘, ‘dest’: ‘file2’}}}) => {
          msg”: sha1: 6ab7a14cf0e04c09f1a2f0f572e7d67e35fa37bd\n
          }

        5. PLAY RECAP *
          localhost : ok=2 changed=0 unreachable=0 failed=0

        6. [http_offline@greenhat-29 tests]$

        7. </code>


        需要你注意的一件事是检查

        slurp_var

        当你试图“啜饮”的文件丢失时,再添加一些

        when

        你后续任务中的条款..



        希望能帮助到你!


    登录 后才能参与评论