Migrate Legacy Playbooks

This document targets incompatible playbooks written for FortiManager Galaxy collections earlier than 1.0.5.

Detect Compatiblity Issue

When runninng legacy playbooks with newer FortiManager collection, the module will fail and an error message will remind you:

failed: [fortimanager01] => {
    "changed": false,
    "module_stderr": "Legacy playbook detected, please revise the playbook or install latest legacy fortimanager galaxy collection: #ansible-galaxy collection install -f fortinet.fortimanager:1.0.5",
    "module_stdout": "",
    "msg": "MODULE FAILURE\nSee stdout/stderr for the exact error",
    "rc": 1
}

There are two ways to resolve this issue:

  • Continue to use “legacy” playbook format, with a FortiManager Collection <= 1.0.5

  • Convert playbooks to FortiManager Collection 1.0.4+ schema with the newest version of the collection.

Tweak The Playbook

Legacy FortiManager collection requires the playbook has a parameter method, with newer FortiManager collection, it’s presented with optional statement: state: [present, absent].

Lagecy FortiManager collection has explicit declaration: url_params, it’s omitted in newer collection, of course, the parameters themselves have indentations advanced.

Legacy FortiManager collection has statement: params -> data array -> body array. In newer collection, all them are removed and the module name without prefix fmgr_ is here as the top level parameter name.

An example is as below:

- name: create policy in the object      |   - name: create policy in the object
  fmgr_pkg_firewall_policy:              |     fmgr_pkg_firewall_policy:
    method: "set"                        |       adom: "{{ policy_adom }}"
    url_params:                          |       pkg: "{{ policy_package_name }}"
        adom: "{{ policy_adom }}"        |       state: 'present'
        pkg: "{{ policy_package_name }}" |       pkg_firewall_policy:
    params:                              |             name: "{{ item.name }}"
      - data:                            |             policyid: "{{ item.id  }}"
        - name: "{{ item.name }}"        |             action: "{{ item.action }}"
          policyid: "{{ item.id  }}"     |             srcintf: "any"
          action: "{{ item.action }}"    |             dstintf: "any"
          srcintf: "any"                 |             srcaddr: "{{ item.src }}"
          dstintf: "any"                 |             dstaddr: "{{ item.dst }}"
          srcaddr: "{{ item.src }}"      |             service: "{{ item.service }}"
          dstaddr: "{{ item.dst }}"      |             schedule: "{{ item.schedule }}"
          service: "{{ item.service }}"  |     register: policyinfo
          schedule: "{{ item.schedule }}"|     ignore_errors: true
  register: policyinfo                   |     with_items: "{{ policy_array }}"
  ignore_errors: true                    |
  with_items: "{{ policy_array }}"       |