我尝试着使用Ansible创建了一个追加FortiGate配置的playbook

首先

我打算使用Ansible自动化添加FortiGate配置,但是似乎并不是按照现有的状态进行添加,而是被设置为所写下的“应有姿态”,所以我只能(有点强行地)尝试实现添加的方法。

前提 tí)

Note: “前提” is the translation for “premise” or “assumption” in Chinese.

这篇文章旨在实现以下要求。

    • ユーザー(ローカルアカウント)の作成

 

    既存のグループ(type:firewall)に作成したユーザーを追加

机制

追加先为现有组的用户信息获取后,创建用户列表并生成设置用playbook的过程如下所示。具体详情如下所述。

    1. 创建用户

 

    1. 获取要添加到的组的成员信息

 

    1. 创建用户列表文件

 

    1. 将步骤1中创建的用户名追加到上述创建的用户列表文件中

 

    1. 将用户列表的内容展开到组设置的playbook模板中,创建playbook

 

    1. 删除用户列表

 

    运行配置的playbook

代码文件

文件夹结构

marseille@Altair 100_Ansible % tree fortigate_mod_group
fortigate_mod_group
├── ansible.cfg
├── inventory
│   └── hosts
├── log
├── playbook
│   └── add_user_and_add_group.yml
├── templates
│   └── add_user_group.jinja
└── tmp

5 directories, 4 files

教战手册

---
# https://ansible-galaxy-fortios-docs.readthedocs.io/en/latest/index.html
# https://ansible-galaxy-fortios-docs.readthedocs.io/en/latest/fortios_monitor.html
- name: FortiGateへのユーザー追加およびグループへの追加
  gather_facts: True
  hosts: LAB
  connection: httpapi
  collections:
    - fortinet.fortios

  vars:
    # ---- shared parameter ---- #
    vdom: "root"
    group_name: "31JFS"
    username: "testuser2"
    password: "testuser"

    # ---- fortios module parameter ---- #
    ansible_httpapi_port: 443
    ansible_httpapi_use_ssl: true
    ansible_httpapi_validate_certs: false

    # ---- role parameter ---- #
    src_role: "templates/add_user_group.jinja"
    dest_role: "playbook/add_user_group.yml"

    # ---- group parameter ---- #
    user_list: "tmp/users.txt"
    users: "{{lookup('file', '{{ ansible_env.PWD }}/{{ user_list }}').splitlines()}}"

  tasks:
    - name: ユーザー追加
      fortios_user_local:
        vdom: "{{ vdom }}"
        state: present
        user_local:
          name: "{{ username }}"
          passwd: "{{ password }}"
          status: "enable"
          two_factor: "disable"
          type: "password"

    - name: 追加先グループのメンバー情報取得
      fortios_configuration_fact:
        vdom: "{{ vdom }}"
        selector: user_group
        params: 
          name: "{{ group_name }}"
      register: get_object

    - name: ----- LOCAL WORK ------
      delegate_to: localhost
      block:
      - name: グループのユーザーリストファイル作成
        lineinfile:
          path: "{{ ansible_env.PWD }}/{{ user_list }}"
          line: "{{ item.1.name }}"
          create: yes
          owner: marseille
          mode: 0644
        with_subelements:
          - "{{ get_object.meta.results }}"
          - member
      - name: ユーザーリストファイルに新規追加ユーザーを追加
        lineinfile:
          path: "{{ ansible_env.PWD }}/{{ user_list }}"
          line: "{{ username }}"
      - name: ユーザーリストをもとに設定用playbookを作成
        template:
          src: "{{ ansible_env.PWD }}/{{ src_role }}"
          dest: "{{ ansible_env.PWD }}/{{ dest_role }}"
          owner: marseille
          mode: 0644
      - name: ユーザリストファイルの削除
        file:
          path: "{{ ansible_env.PWD }}/{{ user_list }}"
          state: absent

    - name: 設定用playbookをロード
      include_tasks: "{{ ansible_env.PWD }}/{{ dest_role }}"

模板

---
- name: 設定用playbookを実行
  fortios_user_group:
    vdom: {{ vdom }}
    state: present
    user_group:
      name: {{ group_name }}
      group_type: firewall
      member:
{% for user in users %}
      - name: "{{ user }}"
{% endfor %}

执行结果

2022-03-07 21:49:00,529 p=13930 u=marseille n=ansible | PLAY [FortiGateへのユーザー追加およびグループへの追加] **************************************************************************************************************************************************************************************
2022-03-07 21:49:00,542 p=13930 u=marseille n=ansible | TASK [Gathering Facts] **********************************************************************************************************************************************************************************************************************
2022-03-07 21:49:01,812 p=13934 u=marseille n=ansible | platform_type is set to fortinet.fortios.fortios
2022-03-07 21:49:02,912 p=13930 u=marseille n=ansible | ok: [FG60E]
2022-03-07 21:49:02,931 p=13930 u=marseille n=ansible | TASK [ユーザー追加] *************************************************************************************************************************************************************************************************************************
2022-03-07 21:49:05,135 p=13930 u=marseille n=ansible | changed: [FG60E]
2022-03-07 21:49:05,145 p=13930 u=marseille n=ansible | TASK [追加先グループのメンバー情報取得] *****************************************************************************************************************************************************************************************************
2022-03-07 21:49:06,909 p=13930 u=marseille n=ansible | ok: [FG60E]
2022-03-07 21:49:06,927 p=13930 u=marseille n=ansible | TASK [グループのユーザーリストファイル作成] *************************************************************************************************************************************************************************************************
2022-03-07 21:49:07,405 p=13930 u=marseille n=ansible | changed: [FG60E -> localhost] => (item=[{'name': '31JFS', 'q_origin_key': '31JFS', 'id': 3, 'group-type': 'firewall', 'authtimeout': 0, 'auth-concurrent-override': 'disable', 'auth-concurrent-value': 0, 'http-digest-realm': '', 'sso-attribute-value': '', 'match': [], 'user-id': 'email', 'password': 'auto-generate', 'user-name': 'disable', 'sponsor': 'optional', 'company': 'optional', 'email': 'enable', 'mobile-phone': 'disable', 'sms-server': 'fortiguard', 'sms-custom-server': '', 'expire-type': 'immediately', 'expire': 14400, 'max-accounts': 0, 'multiple-guest-add': 'disable', 'guest': []}, {'name': 'testuser1', 'q_origin_key': 'testuser1'}])
2022-03-07 21:49:07,422 p=13930 u=marseille n=ansible | TASK [ユーザーリストファイルに新規追加ユーザーを追加] ***************************************************************************************************************************************************************************************
2022-03-07 21:49:07,726 p=13930 u=marseille n=ansible | changed: [FG60E -> localhost]
2022-03-07 21:49:07,738 p=13930 u=marseille n=ansible | TASK [ユーザーリストをもとに設定用playbookを作成] *******************************************************************************************************************************************************************************************
2022-03-07 21:49:08,626 p=13930 u=marseille n=ansible | changed: [FG60E -> localhost]
2022-03-07 21:49:08,642 p=13930 u=marseille n=ansible | TASK [ユーザリストファイルの削除] ***********************************************************************************************************************************************************************************************************
2022-03-07 21:49:09,125 p=13930 u=marseille n=ansible | changed: [FG60E -> localhost]
2022-03-07 21:49:09,134 p=13930 u=marseille n=ansible | TASK [設定用playbookをロード] ***************************************************************************************************************************************************************************************************************
2022-03-07 21:49:09,168 p=13930 u=marseille n=ansible | included: /Users/marseille/Documents/100_Ansible/fortigate_mod_group/playbook/add_user_group.yml for FG60E
2022-03-07 21:49:09,177 p=13930 u=marseille n=ansible | TASK [設定用playbookを実行] *****************************************************************************************************************************************************************************************************************
2022-03-07 21:49:11,054 p=13930 u=marseille n=ansible | changed: [FG60E]
2022-03-07 21:49:11,158 p=13930 u=marseille n=ansible | PLAY RECAP **********************************************************************************************************************************************************************************************************************************
2022-03-07 21:49:11,158 p=13930 u=marseille n=ansible | FG60E                      : ok=9    changed=6    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
2022-03-07 21:49:11,257 p=13938 u=marseille n=ansible | shutdown complete
广告
将在 10 秒后关闭
bannerAds