首页 > 解决方案 > 在 Ansible playbook 中将动态变量与 with_item 一起传递给 include_tasks 的语法

问题描述

执行 parent.yml ,然后调用 child.yml playbook 以使用动态变量执行。

来自 parent.yml 的变量不会插入到 child.yml 剧本中。如果我使用正确的语法,请纠正我?

父.yml

- name: Main playbook to call MySQL backup
  hosts: localhost
  gather_facts: no

  tasks:
  - include_task: child.yml
    vars:
      var1: "{{ item.name }}"
      var2: "{{ item.db_name }}"
    with_items:
       - { name: '10.10.10.01', db_name: 'prod1' }
       - { name: '10.10.10.02', db_name: 'prod2' }

child.yml(从托管数据库获取 mysqldump)

- name: MySQL dump
  hosts: localhost
  #gather_facts: no
  #vars:
  #      v1: "{{ var1 }}"
  #      v2: "{{ var2 }}"

  tasks:
  - name: Executing the shell script
    shell: 'mysqldump -h "{{ var1 }}" -u"ansi" -p"*****" "{{ var2 }}"| gzip > /tmp/mysql_dump/"{{ var2 }}"_`date +%Y%m%d-%H%M`.gz'

致命:[127.0.0.1]:失败!=> {"reason": "在任务中未检测到任何操作。这通常表示模块名称拼写错误或模块路径不正确。\n\n错误似乎在 '/home/ansible/playbooks/DBpatch/Linux/child. yml':第 1 行,第 3 列,但可能\n位于文件中的其他位置,具体取决于确切的语法问题。\n\n违规行似乎是:\n\n\n- name: MySQL dump\n ^ here\ n"}

标签: ansibleansible-2.x

解决方案


include_task 需要一个任务列表,但你给它一个完整的剧本。Child.yml 应该只包含当前位于“tasks:”行下方的内容。另请参阅https://docs.ansible.com/ansible/latest/user_guide/playbooks_reuse_includes.html


推荐阅读