---
####################################################################
# WARNING: These are designed specifically for Ansible tests       #
# and should not be used as examples of how to write Ansible roles #
####################################################################

# Copyright (c) Ansible Project
# GNU General Public License v3.0+ (see LICENSES/GPL-3.0-or-later.txt or https://www.gnu.org/licenses/gpl-3.0.txt)
# SPDX-License-Identifier: GPL-3.0-or-later

- name: Create a scaleway security_group
  scaleway_security_group:
    state: present
    region: '{{ scaleway_region }}'
    name: test_compute
    description: test_compute
    organization: '{{ scaleway_organization }}'
    stateful: true
    inbound_default_policy: accept
    outbound_default_policy: accept
    organization_default: false
  register: security_group

- debug: var=security_group

- name: Create security_group_rule check
  check_mode: true
  scaleway_security_group_rule:
    state: present
    region: '{{ scaleway_region }}'
    protocol: '{{ protocol }}'
    port: '{{ port }}'
    ip_range: '{{ ip_range }}'
    direction: '{{ direction }}'
    action: '{{ action }}'
    security_group: '{{ security_group.scaleway_security_group.id }}'
  register: security_group_rule_creation_task

- debug: var=security_group_rule_creation_task

- assert:
    that:
      - security_group_rule_creation_task is success
      - security_group_rule_creation_task is changed

- block:
  - name: Create security_group_rule check
    scaleway_security_group_rule:
      state: present
      region: '{{ scaleway_region }}'
      protocol: '{{ protocol }}'
      port: '{{ port }}'
      ip_range: '{{ ip_range }}'
      direction: '{{ direction }}'
      action: '{{ action }}'
      security_group: '{{ security_group.scaleway_security_group.id }}'
    register: security_group_rule_creation_task

  - debug: var=security_group_rule_creation_task

  - assert:
      that:
        - security_group_rule_creation_task is success
        - security_group_rule_creation_task is changed

  - name: Create security_group_rule duplicate
    scaleway_security_group_rule:
      state: present
      region: '{{ scaleway_region }}'
      protocol: '{{ protocol }}'
      port: '{{ port }}'
      ip_range: '{{ ip_range }}'
      direction: '{{ direction }}'
      action: '{{ action }}'
      security_group: '{{ security_group.scaleway_security_group.id }}'
    register: security_group_rule_creation_task

  - debug: var=security_group_rule_creation_task

  - assert:
      that:
        - security_group_rule_creation_task is success
        - security_group_rule_creation_task is not changed

  - name: Delete security_group_rule check
    check_mode: true
    scaleway_security_group_rule:
      state: absent
      region: '{{ scaleway_region }}'
      protocol: '{{ protocol }}'
      port: '{{ port }}'
      ip_range: '{{ ip_range }}'
      direction: '{{ direction }}'
      action: '{{ action }}'
      security_group: '{{ security_group.scaleway_security_group.id }}'
    register: security_group_rule_deletion_task

  - debug: var=security_group_rule_deletion_task

  - assert:
      that:
        - security_group_rule_deletion_task is success
        - security_group_rule_deletion_task is changed

  always:
  - name: Delete security_group_rule check
    scaleway_security_group_rule:
      state: absent
      region: '{{ scaleway_region }}'
      protocol: '{{ protocol }}'
      port: '{{ port }}'
      ip_range: '{{ ip_range }}'
      direction: '{{ direction }}'
      action: '{{ action }}'
      security_group: '{{ security_group.scaleway_security_group.id }}'
    register: security_group_rule_deletion_task

  - debug: var=security_group_rule_deletion_task

  - assert:
      that:
        - security_group_rule_deletion_task is success
        - security_group_rule_deletion_task is changed

- name: Delete security_group_rule check
  scaleway_security_group_rule:
    state: absent
    region: '{{ scaleway_region }}'
    protocol: '{{ protocol }}'
    port: '{{ port }}'
    ip_range: '{{ ip_range }}'
    direction: '{{ direction }}'
    action: '{{ action }}'
    security_group: '{{ security_group.scaleway_security_group.id }}'
  register: security_group_rule_deletion_task

- debug: var=security_group_rule_deletion_task

- assert:
    that:
      - security_group_rule_deletion_task is success
      - security_group_rule_deletion_task is not changed

- block:
  - name: Create security_group_rule with null check
    scaleway_security_group_rule:
      state: present
      region: '{{ scaleway_region }}'
      protocol: '{{ protocol }}'
      port: null
      ip_range: '{{ ip_range }}'
      direction: '{{ direction }}'
      action: '{{ action }}'
      security_group: '{{ security_group.scaleway_security_group.id }}'
    register: security_group_rule_creation_task

  - debug: var=security_group_rule_creation_task

  - assert:
      that:
        - security_group_rule_creation_task is success
        - security_group_rule_creation_task is changed

  - name: Create security_group_rule with null duplicate
    scaleway_security_group_rule:
      state: present
      region: '{{ scaleway_region }}'
      protocol: '{{ protocol }}'
      port: null
      ip_range: '{{ ip_range }}'
      direction: '{{ direction }}'
      action: '{{ action }}'
      security_group: '{{ security_group.scaleway_security_group.id }}'
    register: security_group_rule_creation_task

  - debug: var=security_group_rule_creation_task

  - assert:
      that:
        - security_group_rule_creation_task is success
        - security_group_rule_creation_task is not changed

  - name: Delete security_group_rule with null check
    check_mode: true
    scaleway_security_group_rule:
      state: absent
      region: '{{ scaleway_region }}'
      protocol: '{{ protocol }}'
      port: null
      ip_range: '{{ ip_range }}'
      direction: '{{ direction }}'
      action: '{{ action }}'
      security_group: '{{ security_group.scaleway_security_group.id }}'
    register: security_group_rule_deletion_task

  - debug: var=security_group_rule_deletion_task

  - assert:
      that:
        - security_group_rule_deletion_task is success
        - security_group_rule_deletion_task is changed

  always:
  - name: Delete security_group_rule with null check
    scaleway_security_group_rule:
      state: absent
      region: '{{ scaleway_region }}'
      protocol: '{{ protocol }}'
      port: null
      ip_range: '{{ ip_range }}'
      direction: '{{ direction }}'
      action: '{{ action }}'
      security_group: '{{ security_group.scaleway_security_group.id }}'
    register: security_group_rule_deletion_task

  - debug: var=security_group_rule_deletion_task

  - assert:
      that:
        - security_group_rule_deletion_task is success
        - security_group_rule_deletion_task is changed

- name: Delete security_group_rule with null check
  scaleway_security_group_rule:
    state: absent
    region: '{{ scaleway_region }}'
    protocol: '{{ protocol }}'
    port: null
    ip_range: '{{ ip_range }}'
    direction: '{{ direction }}'
    action: '{{ action }}'
    security_group: '{{ security_group.scaleway_security_group.id }}'
  register: security_group_rule_deletion_task

- debug: var=security_group_rule_deletion_task

- assert:
    that:
      - security_group_rule_deletion_task is success
      - security_group_rule_deletion_task is not changed

- name: Delete scaleway security_group
  scaleway_security_group:
    state: absent
    region: '{{ scaleway_region }}'
    name: test_compute
    description: test_compute
    organization: '{{ scaleway_organization }}'
    stateful: true
    inbound_default_policy: accept
    outbound_default_policy: accept
    organization_default: false
