Ansible剧本未遍历device_list

问题描述

我正在尝试将变量循环到剧本中,但我不断收到以下错误消息

TASK [Add policy package to model device] ********************************************************************************************************************************************************************
Failed: [fmg01] (item={'device_name': 'FGT1','device_ip': '192.168.0.103','group_name': 'Branch_Office','policy_package': 'default','device_serial': 'FGVM01TM12345678'}) => {"ansible_loop_var": "item","changed": false,"item": {"device_ip": "192.168.0.103","device_name": "FGT1","device_serial": "FGVM01TM12345678","group_name": "Branch_Office","policy_package": "default"},"Meta": {"status": {"code": -10,"message": "The data is invalid for selected url"},"url": "/pm/pkg/adom/root"},"unreachable": false}

以下是我的YML剧本。当我使用静态变量(写出一个IP地址和序列号作为字符串)时,它工作得很好

---
- name: Add model device to FMG and install Policy Package
  hosts: fmg01
  #  gather_facts: no
  connection: httpapi
  collections:
    - fortinet.fortimanager
  vars_files:
    - inventory.yml

  tasks:
    - name: Add model device
      fmgr_dvm_cmd_add_device:
        loose_validation: true
        method: exec
        params:
          - data:
              adom: root
              device:
                # device action: add_model
                mgmt_mode: 'fmg'
                #os_ver: 6
                #mr: 4
                sn: '{{item.device_serial}}'
                adm_pass: 'password'
                adm_usr: 'admin'
                ip: '{{item.device_ip}}'
      loop: '{{device_list}}'


    - name: Add policy package to model device
      fmgr_pm_pkg_adom_obj:
        loose_validation: true
        method: set
        url_params:
          adom: root
          params:
          - data:
              name: default
            scope member:
            - name: '{{item.device_serial}}'
              vdom: root
            type: pkg
      loop: '{{device_list}}'

    - name: Install policy package to model device
      fmgr_securityconsole_install_package:
        loose_validation: true
        method: exec
        params:
        - data:
            adom: root
            pkg: default
          scope:
            - name: '{{item.device_serial}}'
              vdom: root
      loop: '{{device_list}}'

这是我的stock.yml文件。我在第一个任务中对此进行了测试。 ok传入了IP地址。我用device_serial参数测试了其他任务,但这没用。

#Feeds into playbook
#add_device / add_device_group
device_list:
  - device_name: FGT1
    device_ip: '192.168.0.103'
    group_name: Branch_Office
    policy_package: default
    device_serial: 'FGVM01TM12345678'

解决方法

问题原来是 params 部分的缩进问题

- name: Add policy package to model device
  fmgr_pm_pkg_adom_obj:
    loose_validation: true
    method: set
    url_params:
      adom: root
    params:
      - data:
          name: default
          scope member:
            - name: '{{item.device_serial}}'
              vdom: root
          type: pkg
  loop: '{{device_list}}'