Skip to content

Instantly share code, notes, and snippets.

@walbert947
Last active October 5, 2016 01:19
Show Gist options
  • Save walbert947/5731264d0ad0c94fcf36245f5d966c92 to your computer and use it in GitHub Desktop.
Save walbert947/5731264d0ad0c94fcf36245f5d966c92 to your computer and use it in GitHub Desktop.
Ansible gcdns module test playbook
---
- name: 'Test the Google Cloud DNS module'
hosts: localhost
gather_facts: no
connection: local
vars:
#- test_zone: 'testing.example.com.' # <--- MUST include trailing dot
#- test_zone_id: 'testing-example-com'
#- gcp_project_id: 'test-project'
#- gcp_credentials_file: '/path/to/keys.json'
#- gcp_service_account_email: '12345-abcdefg@developer.gserviceaccount.com'
tasks:
- name: 'Ensure that check mode is enabled'
assert:
that:
- "ansible_check_mode"
################################################################################
# Testing
################################################################################
# ============================================================================
- name: 'gcdns_zone: Test missing zone in check mode'
gcdns_zone:
project_id: "{{ gcp_project_id }}"
credentials_file: "{{ gcp_credentials_file }}"
service_account_email: "{{ gcp_service_account_email }}"
register: result
ignore_errors: true
- assert:
that:
- "result.failed"
- "result.msg == 'missing required arguments: zone'"
# ============================================================================
- name: 'gcdns_zone: Test missing zone'
gcdns_zone:
project_id: "{{ gcp_project_id }}"
credentials_file: "{{ gcp_credentials_file }}"
service_account_email: "{{ gcp_service_account_email }}"
register: result
ignore_errors: true
always_run: true
- assert:
that:
- "result.failed"
- "result.msg == 'missing required arguments: zone'"
# ============================================================================
- name: 'gcdns_zone: Test zone creation in check mode'
gcdns_zone:
project_id: "{{ gcp_project_id }}"
credentials_file: "{{ gcp_credentials_file }}"
service_account_email: "{{ gcp_service_account_email }}"
zone: "{{ test_zone }}"
register: result
ignore_errors: true
- assert:
that:
- "result.changed"
- "result.state == 'present'"
- "result.zone == '{{ test_zone }}'"
- "result.description == ''"
# ============================================================================
- name: 'gcdns_zone: Test zone creation in check mode using the "name" alias'
gcdns_zone:
project_id: "{{ gcp_project_id }}"
credentials_file: "{{ gcp_credentials_file }}"
service_account_email: "{{ gcp_service_account_email }}"
name: "{{ test_zone }}"
register: result
ignore_errors: true
- assert:
that:
- "result.changed"
- "result.state == 'present'"
- "result.zone == '{{ test_zone }}'"
- "result.description == ''"
# ============================================================================
- name: 'gcdns_zone: Test zone creation'
gcdns_zone:
project_id: "{{ gcp_project_id }}"
credentials_file: "{{ gcp_credentials_file }}"
service_account_email: "{{ gcp_service_account_email }}"
zone: "{{ test_zone }}"
register: result
ignore_errors: true
always_run: true
- assert:
that:
- "result.changed"
- "result.state == 'present'"
- "result.zone == '{{ test_zone }}'"
- "result.description == ''"
# ============================================================================
- name: 'gcdns_zone: Test zone creation again'
gcdns_zone:
project_id: "{{ gcp_project_id }}"
credentials_file: "{{ gcp_credentials_file }}"
service_account_email: "{{ gcp_service_account_email }}"
zone: "{{ test_zone }}"
register: result
ignore_errors: true
always_run: true
- assert:
that:
- "not result.changed"
- "result.state == 'present'"
- "result.zone == '{{ test_zone }}'"
- "result.description == ''"
# ============================================================================
- name: 'gcdns_zone: Test zone creation again without a trailing dot'
gcdns_zone:
project_id: "{{ gcp_project_id }}"
credentials_file: "{{ gcp_credentials_file }}"
service_account_email: "{{ gcp_service_account_email }}"
zone: "{{ test_zone[:-1] }}"
register: result
ignore_errors: true
always_run: true
- assert:
that:
- "not result.changed"
- "result.state == 'present'"
- "result.zone == '{{ test_zone }}'"
- "result.description == ''"
# ============================================================================
- name: 'gcdns_zone: Test zone removal in check mode'
gcdns_zone:
project_id: "{{ gcp_project_id }}"
credentials_file: "{{ gcp_credentials_file }}"
service_account_email: "{{ gcp_service_account_email }}"
zone: "{{ test_zone }}"
state: absent
register: result
ignore_errors: true
- assert:
that:
- "result.changed"
- "result.state == 'absent'"
- "result.zone == '{{ test_zone }}'"
- "result.description == ''"
# ============================================================================
- name: 'gcdns_zone: Test zone removal'
gcdns_zone:
project_id: "{{ gcp_project_id }}"
credentials_file: "{{ gcp_credentials_file }}"
service_account_email: "{{ gcp_service_account_email }}"
zone: "{{ test_zone }}"
state: absent
register: result
ignore_errors: true
always_run: true
- assert:
that:
- "result.changed"
- "result.state == 'absent'"
- "result.zone == '{{ test_zone }}'"
- "result.description == ''"
# ============================================================================
- name: 'gcdns_zone: Test zone removal again'
gcdns_zone:
project_id: "{{ gcp_project_id }}"
credentials_file: "{{ gcp_credentials_file }}"
service_account_email: "{{ gcp_service_account_email }}"
zone: "{{ test_zone }}"
state: absent
register: result
ignore_errors: true
always_run: true
- assert:
that:
- "not result.changed"
- "result.state == 'absent'"
- "result.zone == '{{ test_zone }}'"
- "result.description == ''"
# ============================================================================
- name: 'gcdns_zone: Test zone creation with description'
gcdns_zone:
project_id: "{{ gcp_project_id }}"
credentials_file: "{{ gcp_credentials_file }}"
service_account_email: "{{ gcp_service_account_email }}"
zone: "{{ test_zone }}"
description: 'hello'
register: result
ignore_errors: true
always_run: true
- assert:
that:
- "result.changed"
- "result.state == 'present'"
- "result.description == 'hello'"
- "result.zone == '{{ test_zone }}'"
# ============================================================================
- name: 'gcdns_zone: Test creation of TLDs in check mode: .com.'
gcdns_zone:
project_id: "{{ gcp_project_id }}"
credentials_file: "{{ gcp_credentials_file }}"
service_account_email: "{{ gcp_service_account_email }}"
zone: '.com.'
register: result
ignore_errors: true
- assert:
that:
- "result.failed"
- "result.msg == 'cannot create top-level domain: .com.'"
# ============================================================================
- name: 'gcdns_zone: Test creation of TLDs: com'
gcdns_zone:
project_id: "{{ gcp_project_id }}"
credentials_file: "{{ gcp_credentials_file }}"
service_account_email: "{{ gcp_service_account_email }}"
zone: 'com'
register: result
ignore_errors: true
always_run: true
- assert:
that:
- "result.failed"
- "result.msg == 'cannot create top-level domain: com'"
# ============================================================================
- name: 'gcdns_zone: Test creation of zone with owned name in check mode: google.com'
gcdns_zone:
project_id: "{{ gcp_project_id }}"
credentials_file: "{{ gcp_credentials_file }}"
service_account_email: "{{ gcp_service_account_email }}"
zone: 'google.com'
register: result
ignore_errors: true
# This can't reasonably be tested in check mode. :(
- assert:
that:
- "result.changed"
- "result.state == 'present'"
- "result.description == ''"
- "result.zone == 'google.com.'"
# ============================================================================
- name: 'gcdns_zone: Test creation of zone with owned name: google.com'
gcdns_zone:
project_id: "{{ gcp_project_id }}"
credentials_file: "{{ gcp_credentials_file }}"
service_account_email: "{{ gcp_service_account_email }}"
zone: 'google.com'
register: result
ignore_errors: true
always_run: true
- assert:
that:
- "result.failed"
- "result.msg == 'ownership of zone google.com. needs to be verified at https://www.google.com/webmasters/verification/'"
# ============================================================================
- name: 'gcdns_record: Test missing zone and zone_id in check mode'
gcdns_record:
project_id: "{{ gcp_project_id }}"
credentials_file: "{{ gcp_credentials_file }}"
service_account_email: "{{ gcp_service_account_email }}"
record: "www.{{ test_zone }}"
type: 'A'
value: '10.2.3.4'
register: result
ignore_errors: true
- assert:
that:
- "result.failed"
- "result.msg == 'one of the following is required: zone,zone_id'"
# ============================================================================
- name: 'gcdns_record: Test missing zone and zone_id'
gcdns_record:
project_id: "{{ gcp_project_id }}"
credentials_file: "{{ gcp_credentials_file }}"
service_account_email: "{{ gcp_service_account_email }}"
record: "www.{{ test_zone }}"
type: 'A'
value: '10.2.3.4'
register: result
ignore_errors: true
always_run: true
- assert:
that:
- "result.failed"
- "result.msg == 'one of the following is required: zone,zone_id'"
# ============================================================================
- name: 'gcdns_record: Test missing record in check mode'
gcdns_record:
project_id: "{{ gcp_project_id }}"
credentials_file: "{{ gcp_credentials_file }}"
service_account_email: "{{ gcp_service_account_email }}"
zone_id: "{{ test_zone_id }}"
type: 'A'
value: '10.2.3.4'
register: result
ignore_errors: true
- assert:
that:
- "result.failed"
- "result.msg == 'missing required arguments: record'"
# ============================================================================
- name: 'gcdns_record: Test missing record'
gcdns_record:
project_id: "{{ gcp_project_id }}"
credentials_file: "{{ gcp_credentials_file }}"
service_account_email: "{{ gcp_service_account_email }}"
zone_id: "{{ test_zone_id }}"
type: 'A'
value: '10.2.3.4'
register: result
ignore_errors: true
always_run: true
- assert:
that:
- "result.failed"
- "result.msg == 'missing required arguments: record'"
# ============================================================================
- name: 'gcdns_record: Test missing type in check mode'
gcdns_record:
project_id: "{{ gcp_project_id }}"
credentials_file: "{{ gcp_credentials_file }}"
service_account_email: "{{ gcp_service_account_email }}"
record: "www.{{ test_zone }}"
zone_id: "{{ test_zone_id }}"
value: '10.2.3.4'
register: result
ignore_errors: true
- assert:
that:
- "result.failed"
- "result.msg == 'missing required arguments: type'"
# ============================================================================
- name: 'gcdns_record: Test missing type'
gcdns_record:
project_id: "{{ gcp_project_id }}"
credentials_file: "{{ gcp_credentials_file }}"
service_account_email: "{{ gcp_service_account_email }}"
record: "www.{{ test_zone }}"
zone_id: "{{ test_zone_id }}"
value: '10.2.3.4'
register: result
ignore_errors: true
always_run: true
- assert:
that:
- "result.failed"
- "result.msg == 'missing required arguments: type'"
# ============================================================================
- name: 'gcdns_record: Test state=present and missing values in check mode'
gcdns_record:
project_id: "{{ gcp_project_id }}"
credentials_file: "{{ gcp_credentials_file }}"
service_account_email: "{{ gcp_service_account_email }}"
record: "www.{{ test_zone }}"
zone_id: "{{ test_zone_id }}"
type: 'A'
register: result
ignore_errors: true
- assert:
that:
- "result.failed"
- "result.msg == 'state is present but the following are missing: values'"
# ============================================================================
- name: 'gcdns_record: Test state=present and missing values'
gcdns_record:
project_id: "{{ gcp_project_id }}"
credentials_file: "{{ gcp_credentials_file }}"
service_account_email: "{{ gcp_service_account_email }}"
record: "www.{{ test_zone }}"
zone_id: "{{ test_zone_id }}"
type: 'A'
register: result
ignore_errors: true
always_run: true
- assert:
that:
- "result.failed"
- "result.msg == 'state is present but the following are missing: values'"
# ============================================================================
- name: 'gcdns_record: Test negative TTL in check mode'
gcdns_record:
project_id: "{{ gcp_project_id }}"
credentials_file: "{{ gcp_credentials_file }}"
service_account_email: "{{ gcp_service_account_email }}"
record: "www.{{ test_zone }}"
zone_id: "{{ test_zone_id }}"
type: 'A'
ttl: -1
value: '10.2.3.4'
register: result
ignore_errors: true
- assert:
that:
- "result.failed"
- "result.msg == 'TTL cannot be less than zero, got: -1'"
# ============================================================================
- name: 'gcdns_record: Test negative TTL'
gcdns_record:
project_id: "{{ gcp_project_id }}"
credentials_file: "{{ gcp_credentials_file }}"
service_account_email: "{{ gcp_service_account_email }}"
record: "www.{{ test_zone }}"
zone_id: "{{ test_zone_id }}"
type: 'A'
ttl: -1
value: '10.2.3.4'
register: result
ignore_errors: true
always_run: true
- assert:
that:
- "result.failed"
- "result.msg == 'TTL cannot be less than zero, got: -1'"
# ============================================================================
- name: 'gcdns_record: Test invalid record type in check mode'
gcdns_record:
project_id: "{{ gcp_project_id }}"
credentials_file: "{{ gcp_credentials_file }}"
service_account_email: "{{ gcp_service_account_email }}"
record: "www.{{ test_zone }}"
zone_id: "{{ test_zone_id }}"
type: 'banana'
value: '10.2.3.4'
register: result
ignore_errors: true
- assert:
that:
- "result.failed"
- "result.msg.startswith('value of type must be one of')"
# ============================================================================
- name: 'gcdns_record: Test invalid record type'
gcdns_record:
project_id: "{{ gcp_project_id }}"
credentials_file: "{{ gcp_credentials_file }}"
service_account_email: "{{ gcp_service_account_email }}"
record: "www.{{ test_zone }}"
zone_id: "{{ test_zone_id }}"
type: 'banana'
value: '10.2.3.4'
register: result
ignore_errors: true
always_run: true
- assert:
that:
- "result.failed"
- "result.msg.startswith('value of type must be one of')"
# ============================================================================
- name: 'gcdns_record: Test (hopefully!) nonexistent zone in check mode'
gcdns_record:
project_id: "{{ gcp_project_id }}"
credentials_file: "{{ gcp_credentials_file }}"
service_account_email: "{{ gcp_service_account_email }}"
record: 'www.sadgfafasdgasggggggade.com'
zone: 'sadgfafasdgasggggggade.com'
type: 'A'
value: '10.2.3.4'
register: result
ignore_errors: true
- assert:
that:
- "result.failed"
- "result.msg == 'zone name was not found: sadgfafasdgasggggggade.com.'"
# ============================================================================
- name: 'gcdns_record: Test (hopefully!) nonexistent zone'
gcdns_record:
project_id: "{{ gcp_project_id }}"
credentials_file: "{{ gcp_credentials_file }}"
service_account_email: "{{ gcp_service_account_email }}"
record: 'www.sadgfafasdgasggggggade.com'
zone: 'sadgfafasdgasggggggade.com'
type: 'A'
value: '10.2.3.4'
register: result
ignore_errors: true
always_run: true
- assert:
that:
- "result.failed"
- "result.msg == 'zone name was not found: sadgfafasdgasggggggade.com.'"
# ============================================================================
- name: 'gcdns_record: Test (hopefully!) nonexistent zone_id in check mode'
gcdns_record:
project_id: "{{ gcp_project_id }}"
credentials_file: "{{ gcp_credentials_file }}"
service_account_email: "{{ gcp_service_account_email }}"
record: 'www.sadgfafasdgasggggggade.com'
zone_id: 'sadgfafasdgasggggggade-com'
type: 'A'
value: '10.2.3.4'
register: result
ignore_errors: true
- assert:
that:
- "result.failed"
- "result.msg == 'zone id was not found: sadgfafasdgasggggggade-com'"
# ============================================================================
- name: 'gcdns_record: Test (hopefully!) nonexistent zone_id'
gcdns_record:
project_id: "{{ gcp_project_id }}"
credentials_file: "{{ gcp_credentials_file }}"
service_account_email: "{{ gcp_service_account_email }}"
record: 'www.sadgfafasdgasggggggade.com'
zone_id: 'sadgfafasdgasggggggade-com'
type: 'A'
value: '10.2.3.4'
register: result
ignore_errors: true
always_run: true
- assert:
that:
- "result.failed"
- "result.msg == 'zone id was not found: sadgfafasdgasggggggade-com'"
# ============================================================================
- name: 'gcdns_record: Test invalid zone in check mode'
gcdns_record:
project_id: "{{ gcp_project_id }}"
credentials_file: "{{ gcp_credentials_file }}"
service_account_email: "{{ gcp_service_account_email }}"
record: 'www.12345'
zone: '12345'
type: 'A'
value: '10.2.3.4'
register: result
ignore_errors: true
- assert:
that:
- "result.failed"
- "result.msg == 'zone name was not found: 12345.'"
# ============================================================================
- name: 'gcdns_record: Test invalid zone'
gcdns_record:
project_id: "{{ gcp_project_id }}"
credentials_file: "{{ gcp_credentials_file }}"
service_account_email: "{{ gcp_service_account_email }}"
record: 'www.12345'
zone: '12345'
type: 'A'
value: '10.2.3.4'
register: result
ignore_errors: true
always_run: true
- assert:
that:
- "result.failed"
- "result.msg == 'zone name was not found: 12345.'"
# ============================================================================
- name: 'gcdns_record: Test invalid zone_id in check mode'
gcdns_record:
project_id: "{{ gcp_project_id }}"
credentials_file: "{{ gcp_credentials_file }}"
service_account_email: "{{ gcp_service_account_email }}"
record: 'www.12345.com'
zone_id: '12345.com'
type: 'A'
value: '10.2.3.4'
register: result
ignore_errors: true
- assert:
that:
- "result.failed"
- "result.msg == 'zone id was not found: 12345.com'"
# ============================================================================
- name: 'gcdns_record: Test invalid zone_id'
gcdns_record:
project_id: "{{ gcp_project_id }}"
credentials_file: "{{ gcp_credentials_file }}"
service_account_email: "{{ gcp_service_account_email }}"
record: 'www.12345.com'
zone_id: '12345.com'
type: 'A'
value: '10.2.3.4'
register: result
ignore_errors: true
always_run: true
- assert:
that:
- "result.failed"
- "result.msg == 'zone id was not found: 12345.com'"
# ============================================================================
- name: 'gcdns_record: Test invalid record in check mode'
gcdns_record:
project_id: "{{ gcp_project_id }}"
credentials_file: "{{ gcp_credentials_file }}"
service_account_email: "{{ gcp_service_account_email }}"
record: "12...345.{{ test_zone }}"
zone_id: "{{ test_zone_id }}"
type: 'A'
value: '10.2.3.4'
register: result
ignore_errors: true
- assert:
that:
- "result.failed"
- "result.msg == 'record name is invalid: 12...345.{{ test_zone }}'"
# ============================================================================
- name: 'gcdns_record: Test invalid record'
gcdns_record:
project_id: "{{ gcp_project_id }}"
credentials_file: "{{ gcp_credentials_file }}"
service_account_email: "{{ gcp_service_account_email }}"
record: "12...345.{{ test_zone }}"
zone_id: "{{ test_zone_id }}"
type: 'A'
value: '10.2.3.4'
register: result
ignore_errors: true
always_run: true
- assert:
that:
- "result.failed"
- "result.msg == 'record name is invalid: 12...345.{{ test_zone }}'"
# ============================================================================
- name: 'gcdns_record: Test non-[A, AAAA] record with invalid value for type'
gcdns_record:
project_id: "{{ gcp_project_id }}"
credentials_file: "{{ gcp_credentials_file }}"
service_account_email: "{{ gcp_service_account_email }}"
record: "www.{{ test_zone }}"
zone_id: "{{ test_zone_id }}"
type: 'MX'
value: 'banana'
register: result
ignore_errors: true
always_run: true
# This can't easily be tested in check mode. :(
- assert:
that:
- "result.failed"
- "result.msg.startswith('value is invalid for the given type: MX, got value: ')"
- "'banana' in result.msg"
# ============================================================================
- name: 'gcdns_record: Test DNS zone apex rule violation in check mode - deleting root SOA record'
gcdns_record:
project_id: "{{ gcp_project_id }}"
credentials_file: "{{ gcp_credentials_file }}"
service_account_email: "{{ gcp_service_account_email }}"
record: "{{ test_zone }}"
zone: "{{ test_zone}}"
type: 'SOA'
state: absent
overwrite: true
register: result
ignore_errors: true
- assert:
that:
- "result.failed"
- "result.msg == 'cannot delete SOA records'"
# ============================================================================
- name: 'gcdns_record: Test DNS zone apex rule violation - deleting root SOA record'
gcdns_record:
project_id: "{{ gcp_project_id }}"
credentials_file: "{{ gcp_credentials_file }}"
service_account_email: "{{ gcp_service_account_email }}"
record: "{{ test_zone }}"
zone: "{{ test_zone}}"
type: 'SOA'
state: absent
overwrite: true
register: result
ignore_errors: true
always_run: true
- assert:
that:
- "result.failed"
- "result.msg == 'cannot delete SOA records'"
# ============================================================================
- name: 'gcdns_record: Test DNS zone apex rule violation in check mode - add non-root SOA'
gcdns_record:
project_id: "{{ gcp_project_id }}"
credentials_file: "{{ gcp_credentials_file }}"
service_account_email: "{{ gcp_service_account_email }}"
record: "test.{{ test_zone }}"
zone: "{{ test_zone}}"
type: 'SOA'
value: 'ns1.example.com. ns2.example.com. 1 21600 3600 1209600 300'
register: result
ignore_errors: true
- assert:
that:
- "result.failed"
- "result.msg == 'non-root SOA records are not permitted, got: test.{{ test_zone }}'"
# ============================================================================
- name: 'gcdns_record: Test DNS zone apex rule violation - add non-root SOA'
gcdns_record:
project_id: "{{ gcp_project_id }}"
credentials_file: "{{ gcp_credentials_file }}"
service_account_email: "{{ gcp_service_account_email }}"
record: "test.{{ test_zone }}"
zone: "{{ test_zone}}"
type: 'SOA'
value: 'ns1.example.com. ns2.example.com. 1 21600 3600 1209600 300'
register: result
ignore_errors: true
always_run: true
- assert:
that:
- "result.failed"
- "result.msg == 'non-root SOA records are not permitted, got: test.{{ test_zone }}'"
# ============================================================================
- name: "gcdns_record: Test creation of a record using the zone in check mode"
gcdns_record:
project_id: "{{ gcp_project_id }}"
credentials_file: "{{ gcp_credentials_file }}"
service_account_email: "{{ gcp_service_account_email }}"
record: "www.{{ test_zone }}"
zone: "{{ test_zone }}"
type: 'A'
value: '10.2.3.4'
register: result
ignore_errors: true
- assert:
that:
- "result.changed"
- "result.state == 'present'"
- "result.record == 'www.{{ test_zone }}'"
- "result.zone == '{{ test_zone }}'"
- "result.zone_id == '{{ test_zone_id }}'"
- "result.type == 'A'"
- "result['values'] == ['10.2.3.4']"
- "result.ttl == 300"
- "not result.overwrite"
# ============================================================================
- name: 'gcdns_record: Test creation of a record using the zone in check mode using the "name" alias'
gcdns_record:
project_id: "{{ gcp_project_id }}"
credentials_file: "{{ gcp_credentials_file }}"
service_account_email: "{{ gcp_service_account_email }}"
name: "www.{{ test_zone }}"
zone: "{{ test_zone }}"
type: 'A'
value: '10.2.3.4'
register: result
ignore_errors: true
- assert:
that:
- "result.changed"
- "result.state == 'present'"
- "result.record == 'www.{{ test_zone }}'"
- "result.zone == '{{ test_zone }}'"
- "result.zone_id == '{{ test_zone_id }}'"
- "result.type == 'A'"
- "result['values'] == ['10.2.3.4']"
- "result.ttl == 300"
- "not result.overwrite"
# ============================================================================
- name: "gcdns_record: Test creation of a record using the zone ID in check mode"
gcdns_record:
project_id: "{{ gcp_project_id }}"
credentials_file: "{{ gcp_credentials_file }}"
service_account_email: "{{ gcp_service_account_email }}"
record: "www.{{ test_zone }}"
zone_id: "{{ test_zone_id }}"
type: 'A'
value: '10.2.3.4'
register: result
ignore_errors: true
- assert:
that:
- "result.changed"
- "result.state == 'present'"
- "result.record == 'www.{{ test_zone }}'"
- "result.zone == '{{ test_zone }}'"
- "result.zone_id == '{{ test_zone_id }}'"
- "result.type == 'A'"
- "result['values'] == ['10.2.3.4']"
- "result.ttl == 300"
- "not result.overwrite"
# ============================================================================
- name: "gcdns_record: Test creation of a record"
gcdns_record:
project_id: "{{ gcp_project_id }}"
credentials_file: "{{ gcp_credentials_file }}"
service_account_email: "{{ gcp_service_account_email }}"
record: "www.{{ test_zone }}"
zone_id: "{{ test_zone_id }}"
type: 'A'
value: '10.2.3.4'
register: result
ignore_errors: true
always_run: true
- assert:
that:
- "result.changed"
- "result.state == 'present'"
- "result.record == 'www.{{ test_zone }}'"
- "result.zone == '{{ test_zone }}'"
- "result.zone_id == '{{ test_zone_id }}'"
- "result.type == 'A'"
- "result['values'] == ['10.2.3.4']"
- "result.ttl == 300"
- "not result.overwrite"
# ============================================================================
- name: "gcdns_record: Test creation of a record again"
gcdns_record:
project_id: "{{ gcp_project_id }}"
credentials_file: "{{ gcp_credentials_file }}"
service_account_email: "{{ gcp_service_account_email }}"
record: "www.{{ test_zone }}"
zone_id: "{{ test_zone_id }}"
type: 'A'
value: '10.2.3.4'
register: result
ignore_errors: true
always_run: true
- assert:
that:
- "not result.changed"
- "result.state == 'present'"
- "result.record == 'www.{{ test_zone }}'"
- "result.zone == '{{ test_zone }}'"
- "result.zone_id == '{{ test_zone_id }}'"
- "result.type == 'A'"
- "result['values'] == ['10.2.3.4']"
- "result.ttl == 300"
- "not result.overwrite"
# ============================================================================
- name: 'gcdns_zone: Test removal of a non-empty zone in check mode'
gcdns_zone:
project_id: "{{ gcp_project_id }}"
credentials_file: "{{ gcp_credentials_file }}"
service_account_email: "{{ gcp_service_account_email }}"
zone: "{{ test_zone }}"
state: absent
register: result
ignore_errors: true
- assert:
that:
- "result.failed"
- "result.msg == 'zone is not empty and cannot be removed: {{ test_zone }}'"
# ============================================================================
- name: 'gcdns_zone: Test removal of a non-empty zone'
gcdns_zone:
project_id: "{{ gcp_project_id }}"
credentials_file: "{{ gcp_credentials_file }}"
service_account_email: "{{ gcp_service_account_email }}"
zone: "{{ test_zone }}"
state: absent
register: result
ignore_errors: true
always_run: true
- assert:
that:
- "result.failed"
- "result.msg == 'zone is not empty and cannot be removed: {{ test_zone }}'"
# ============================================================================
- name: "gcdns_record: Test removal of a record and missing values in check mode"
gcdns_record:
project_id: "{{ gcp_project_id }}"
credentials_file: "{{ gcp_credentials_file }}"
service_account_email: "{{ gcp_service_account_email }}"
state: absent
record: "www.{{ test_zone }}"
zone_id: "{{ test_zone_id }}"
type: 'A'
register: result
ignore_errors: true
- assert:
that:
- "result.failed"
- "result.msg == 'overwrite is False but the following are missing: values'"
# ============================================================================
- name: "gcdns_record: Test removal of a record and missing values"
gcdns_record:
project_id: "{{ gcp_project_id }}"
credentials_file: "{{ gcp_credentials_file }}"
service_account_email: "{{ gcp_service_account_email }}"
state: absent
record: "www.{{ test_zone }}"
zone_id: "{{ test_zone_id }}"
type: 'A'
register: result
ignore_errors: true
always_run: true
- assert:
that:
- "result.failed"
- "result.msg == 'overwrite is False but the following are missing: values'"
# ============================================================================
- name: "gcdns_record: Test removal of a record in check mode"
gcdns_record:
project_id: "{{ gcp_project_id }}"
credentials_file: "{{ gcp_credentials_file }}"
service_account_email: "{{ gcp_service_account_email }}"
state: absent
record: "www.{{ test_zone }}"
zone_id: "{{ test_zone_id }}"
type: 'A'
value: '10.2.3.4'
register: result
ignore_errors: true
- assert:
that:
- "result.changed"
- "result.state == 'absent'"
- "result.record == 'www.{{ test_zone }}'"
- "result.zone == '{{ test_zone }}'"
- "result.zone_id == '{{ test_zone_id }}'"
- "result.type == 'A'"
- "result['values'] == ['10.2.3.4']"
- "result.ttl == 300"
- "not result.overwrite"
# ============================================================================
- name: "gcdns_record: Test removal of a record"
gcdns_record:
project_id: "{{ gcp_project_id }}"
credentials_file: "{{ gcp_credentials_file }}"
service_account_email: "{{ gcp_service_account_email }}"
state: absent
record: "www.{{ test_zone }}"
zone_id: "{{ test_zone_id }}"
type: 'A'
value: '10.2.3.4'
register: result
ignore_errors: true
always_run: true
- assert:
that:
- "result.changed"
- "result.state == 'absent'"
- "result.record == 'www.{{ test_zone }}'"
- "result.zone == '{{ test_zone }}'"
- "result.zone_id == '{{ test_zone_id }}'"
- "result.type == 'A'"
- "result['values'] == ['10.2.3.4']"
- "result.ttl == 300"
- "not result.overwrite"
# ============================================================================
- name: "gcdns_record: Test removal of a record again"
gcdns_record:
project_id: "{{ gcp_project_id }}"
credentials_file: "{{ gcp_credentials_file }}"
service_account_email: "{{ gcp_service_account_email }}"
state: absent
record: "www.{{ test_zone }}"
zone_id: "{{ test_zone_id }}"
type: 'A'
value: '10.2.3.4'
register: result
ignore_errors: true
always_run: true
- assert:
that:
- "not result.changed"
- "result.state == 'absent'"
- "result.record == 'www.{{ test_zone }}'"
- "result.zone == '{{ test_zone }}'"
- "result.zone_id == '{{ test_zone_id }}'"
- "result.type == 'A'"
- "result['values'] == ['10.2.3.4']"
- "result.ttl == 300"
- "not result.overwrite"
# ============================================================================
- name: 'gcdns_zone: Test zone removal on an empty zone in check mode'
gcdns_zone:
project_id: "{{ gcp_project_id }}"
credentials_file: "{{ gcp_credentials_file }}"
service_account_email: "{{ gcp_service_account_email }}"
zone: "{{ test_zone }}"
state: absent
register: result
ignore_errors: true
- assert:
that:
- "result.changed"
- "result.state == 'absent'"
- "result.zone == '{{ test_zone }}'"
- "result.description == ''"
# ============================================================================
- name: 'gcdns_zone: Test zone removal on an empty zone'
gcdns_zone:
project_id: "{{ gcp_project_id }}"
credentials_file: "{{ gcp_credentials_file }}"
service_account_email: "{{ gcp_service_account_email }}"
zone: "{{ test_zone }}"
state: absent
register: result
ignore_errors: true
always_run: true
- assert:
that:
- "result.changed"
- "result.state == 'absent'"
- "result.zone == '{{ test_zone }}'"
- "result.description == ''"
# ============================================================================
- name: 'gcdns_zone: Recreate zone'
gcdns_zone:
project_id: "{{ gcp_project_id }}"
credentials_file: "{{ gcp_credentials_file }}"
service_account_email: "{{ gcp_service_account_email }}"
zone: "{{ test_zone }}"
register: result
ignore_errors: true
always_run: true
- assert:
that:
- "result.changed"
- "result.state == 'present'"
- "result.zone == '{{ test_zone }}'"
- "result.description == ''"
# ============================================================================
- name: "gcdns_record: Test creation of an A record"
gcdns_record:
project_id: "{{ gcp_project_id }}"
credentials_file: "{{ gcp_credentials_file }}"
service_account_email: "{{ gcp_service_account_email }}"
record: "test.{{ test_zone }}"
zone_id: "{{ test_zone_id }}"
type: 'A'
value: '10.2.3.4'
register: result
ignore_errors: true
always_run: true
- assert:
that:
- "result.changed"
- "result.state == 'present'"
- "result.record == 'test.{{ test_zone }}'"
- "result.zone == '{{ test_zone }}'"
- "result.zone_id == '{{ test_zone_id }}'"
- "result.type == 'A'"
- "result['values'] == ['10.2.3.4']"
- "result.ttl == 300"
- "not result.overwrite"
# ============================================================================
- name: "gcdns_record: Test creation of an A record again"
gcdns_record:
project_id: "{{ gcp_project_id }}"
credentials_file: "{{ gcp_credentials_file }}"
service_account_email: "{{ gcp_service_account_email }}"
record: "test.{{ test_zone }}"
zone_id: "{{ test_zone_id }}"
type: 'A'
value: '10.2.3.4'
register: result
ignore_errors: true
always_run: true
- assert:
that:
- "not result.changed"
- "result.state == 'present'"
- "result.record == 'test.{{ test_zone }}'"
- "result.zone == '{{ test_zone }}'"
- "result.zone_id == '{{ test_zone_id }}'"
- "result.type == 'A'"
- "result['values'] == ['10.2.3.4']"
- "result.ttl == 300"
- "not result.overwrite"
# ============================================================================
- name: "gcdns_record: Test creation of an A record with invalid value in check mode"
gcdns_record:
project_id: "{{ gcp_project_id }}"
credentials_file: "{{ gcp_credentials_file }}"
service_account_email: "{{ gcp_service_account_email }}"
record: "bad.{{ test_zone }}"
zone_id: "{{ test_zone_id }}"
type: 'A'
value: '10.2.3.400'
register: result
ignore_errors: true
- assert:
that:
- "result.failed"
- "result.msg == 'invalid A record value, got: 10.2.3.400'"
# ============================================================================
- name: "gcdns_record: Test creation of an A record with invalid value"
gcdns_record:
project_id: "{{ gcp_project_id }}"
credentials_file: "{{ gcp_credentials_file }}"
service_account_email: "{{ gcp_service_account_email }}"
record: "bad.{{ test_zone }}"
zone_id: "{{ test_zone_id }}"
type: 'A'
value: '10.2.3.400'
register: result
ignore_errors: true
always_run: true
- assert:
that:
- "result.failed"
- "result.msg == 'invalid A record value, got: 10.2.3.400'"
# ============================================================================
- name: "gcdns_record: Test creation of an AAAA record"
gcdns_record:
project_id: "{{ gcp_project_id }}"
credentials_file: "{{ gcp_credentials_file }}"
service_account_email: "{{ gcp_service_account_email }}"
record: "test.{{ test_zone }}"
zone_id: "{{ test_zone_id }}"
type: 'AAAA'
value: 'fd00:db8::1'
register: result
ignore_errors: true
always_run: true
- assert:
that:
- "result.changed"
- "result.state == 'present'"
- "result.record == 'test.{{ test_zone }}'"
- "result.zone == '{{ test_zone }}'"
- "result.zone_id == '{{ test_zone_id }}'"
- "result.type == 'AAAA'"
- "result['values'] == ['fd00:db8::1']"
- "result.ttl == 300"
- "not result.overwrite"
# ============================================================================
- name: "gcdns_record: Test creation of an AAAA record again"
gcdns_record:
project_id: "{{ gcp_project_id }}"
credentials_file: "{{ gcp_credentials_file }}"
service_account_email: "{{ gcp_service_account_email }}"
record: "test.{{ test_zone }}"
zone_id: "{{ test_zone_id }}"
type: 'AAAA'
value: 'fd00:db8::1'
register: result
ignore_errors: true
always_run: true
- assert:
that:
- "not result.changed"
- "result.state == 'present'"
- "result.record == 'test.{{ test_zone }}'"
- "result.zone == '{{ test_zone }}'"
- "result.zone_id == '{{ test_zone_id }}'"
- "result.type == 'AAAA'"
- "result['values'] == ['fd00:db8::1']"
- "result.ttl == 300"
- "not result.overwrite"
# ============================================================================
- name: "gcdns_record: Test creation of an AAAA record with invalid value in check mode"
gcdns_record:
project_id: "{{ gcp_project_id }}"
credentials_file: "{{ gcp_credentials_file }}"
service_account_email: "{{ gcp_service_account_email }}"
record: "bad.{{ test_zone }}"
zone_id: "{{ test_zone_id }}"
type: 'AAAA'
value: 'fd00::db8::1'
register: result
ignore_errors: true
- assert:
that:
- "result.failed"
- "result.msg == 'invalid AAAA record value, got: fd00::db8::1'"
# ============================================================================
- name: "gcdns_record: Test creation of an AAAA record with invalid value"
gcdns_record:
project_id: "{{ gcp_project_id }}"
credentials_file: "{{ gcp_credentials_file }}"
service_account_email: "{{ gcp_service_account_email }}"
record: "bad.{{ test_zone }}"
zone_id: "{{ test_zone_id }}"
type: 'AAAA'
value: 'fd00::db8::1'
register: result
ignore_errors: true
always_run: true
- assert:
that:
- "result.failed"
- "result.msg == 'invalid AAAA record value, got: fd00::db8::1'"
# ============================================================================
- name: "gcdns_record: Test creation of a CNAME record"
gcdns_record:
project_id: "{{ gcp_project_id }}"
credentials_file: "{{ gcp_credentials_file }}"
service_account_email: "{{ gcp_service_account_email }}"
record: "alias.{{ test_zone }}"
zone_id: "{{ test_zone_id }}"
type: 'CNAME'
value: "www.{{ test_zone }}"
register: result
ignore_errors: true
always_run: true
- assert:
that:
- "result.changed"
- "result.state == 'present'"
- "result.record == 'alias.{{ test_zone }}'"
- "result.zone == '{{ test_zone }}'"
- "result.zone_id == '{{ test_zone_id }}'"
- "result.type == 'CNAME'"
- "result['values'] == ['www.{{ test_zone }}']"
- "result.ttl == 300"
- "not result.overwrite"
# ============================================================================
- name: "gcdns_record: Test creation of a CNAME record again"
gcdns_record:
project_id: "{{ gcp_project_id }}"
credentials_file: "{{ gcp_credentials_file }}"
service_account_email: "{{ gcp_service_account_email }}"
record: "alias.{{ test_zone }}"
zone_id: "{{ test_zone_id }}"
type: 'CNAME'
value: "www.{{ test_zone }}"
register: result
ignore_errors: true
always_run: true
- assert:
that:
- "not result.changed"
- "result.state == 'present'"
- "result.record == 'alias.{{ test_zone }}'"
- "result.zone == '{{ test_zone }}'"
- "result.zone_id == '{{ test_zone_id }}'"
- "result.type == 'CNAME'"
- "result['values'] == ['www.{{ test_zone }}']"
- "result.ttl == 300"
- "not result.overwrite"
# ============================================================================
- name: "gcdns_record: Test creation of a CNAME record for a name that already exists in check mode"
gcdns_record:
project_id: "{{ gcp_project_id }}"
credentials_file: "{{ gcp_credentials_file }}"
service_account_email: "{{ gcp_service_account_email }}"
record: "test.{{ test_zone }}"
zone_id: "{{ test_zone_id }}"
type: 'CNAME'
value: "www.{{ test_zone }}"
register: result
ignore_errors: true
# There's no easy way to check this in check mode without walking the zone's
# records. :(
- assert:
that:
- "result.changed"
- "result.state == 'present'"
- "result.record == 'test.{{ test_zone }}'"
- "result.zone == '{{ test_zone }}'"
- "result.zone_id == '{{ test_zone_id }}'"
- "result.type == 'CNAME'"
- "result['values'] == ['www.{{ test_zone }}']"
- "result.ttl == 300"
- "not result.overwrite"
# ============================================================================
- name: "gcdns_record: Test creation of a CNAME record for a name that already exists"
gcdns_record:
project_id: "{{ gcp_project_id }}"
credentials_file: "{{ gcp_credentials_file }}"
service_account_email: "{{ gcp_service_account_email }}"
record: "test.{{ test_zone }}"
zone_id: "{{ test_zone_id }}"
type: 'CNAME'
value: "www.{{ test_zone }}"
register: result
ignore_errors: true
always_run: true
- assert:
that:
- "result.failed"
- "result.msg == 'non-CNAME resource record already exists: test.{{ test_zone }}'"
# ============================================================================
- name: "gcdns_record: Test creation of a CNAME record with multiple values in check mode"
gcdns_record:
project_id: "{{ gcp_project_id }}"
credentials_file: "{{ gcp_credentials_file }}"
service_account_email: "{{ gcp_service_account_email }}"
record: "multialias.{{ test_zone }}"
zone_id: "{{ test_zone_id }}"
type: 'CNAME'
values:
- "www.{{ test_zone }}"
- "www2.{{ test_zone }}"
register: result
ignore_errors: true
- assert:
that:
- "result.failed"
- "result.msg.startswith('CNAME or SOA records cannot have more than one value, got:')"
- "'www.{{ test_zone }}' in result.msg"
- "'www2.{{ test_zone }}' in result.msg"
# ============================================================================
- name: "gcdns_record: Test creation of a CNAME record with multiple values"
gcdns_record:
project_id: "{{ gcp_project_id }}"
credentials_file: "{{ gcp_credentials_file }}"
service_account_email: "{{ gcp_service_account_email }}"
record: "multialias.{{ test_zone }}"
zone_id: "{{ test_zone_id }}"
type: 'CNAME'
values:
- "www.{{ test_zone }}"
- "www2.{{ test_zone }}"
register: result
ignore_errors: true
always_run: true
- assert:
that:
- "result.failed"
- "result.msg.startswith('CNAME or SOA records cannot have more than one value, got:')"
- "'www.{{ test_zone }}' in result.msg"
- "'www2.{{ test_zone }}' in result.msg"
# ============================================================================
- name: "gcdns_record: Test creation of a CNAME with the same name as the zone in check mode"
gcdns_record:
project_id: "{{ gcp_project_id }}"
credentials_file: "{{ gcp_credentials_file }}"
service_account_email: "{{ gcp_service_account_email }}"
record: "{{ test_zone }}"
zone_id: "{{ test_zone_id }}"
type: 'CNAME'
value: "www.{{ test_zone }}"
register: result
ignore_errors: true
- assert:
that:
- "result.failed"
- "result.msg == 'CNAME records cannot match the zone name'"
# ============================================================================
- name: "gcdns_record: Test creation of a CNAME with the same name as the zone"
gcdns_record:
project_id: "{{ gcp_project_id }}"
credentials_file: "{{ gcp_credentials_file }}"
service_account_email: "{{ gcp_service_account_email }}"
record: "{{ test_zone }}"
zone_id: "{{ test_zone_id }}"
type: 'CNAME'
value: "www.{{ test_zone }}"
register: result
ignore_errors: true
always_run: true
- assert:
that:
- "result.failed"
- "result.msg == 'CNAME records cannot match the zone name'"
# ============================================================================
- name: "gcdns_record: Test creation of an MX record"
gcdns_record:
project_id: "{{ gcp_project_id }}"
credentials_file: "{{ gcp_credentials_file }}"
service_account_email: "{{ gcp_service_account_email }}"
record: "test.{{ test_zone }}"
zone_id: "{{ test_zone_id }}"
type: 'MX'
value: "10 {{ test_zone }}"
register: result
ignore_errors: true
always_run: true
- assert:
that:
- "result.changed"
- "result.state == 'present'"
- "result.record == 'test.{{ test_zone }}'"
- "result.zone == '{{ test_zone }}'"
- "result.zone_id == '{{ test_zone_id }}'"
- "result.type == 'MX'"
- "result['values'] == ['10 {{ test_zone }}']"
- "result.ttl == 300"
- "not result.overwrite"
# ============================================================================
- name: "gcdns_record: Test creation of an MX record again"
gcdns_record:
project_id: "{{ gcp_project_id }}"
credentials_file: "{{ gcp_credentials_file }}"
service_account_email: "{{ gcp_service_account_email }}"
record: "test.{{ test_zone }}"
zone_id: "{{ test_zone_id }}"
type: 'MX'
value: "10 {{ test_zone }}"
register: result
ignore_errors: true
always_run: true
- assert:
that:
- "not result.changed"
- "result.state == 'present'"
- "result.record == 'test.{{ test_zone }}'"
- "result.zone == '{{ test_zone }}'"
- "result.zone_id == '{{ test_zone_id }}'"
- "result.type == 'MX'"
- "result['values'] == ['10 {{ test_zone }}']"
- "result.ttl == 300"
- "not result.overwrite"
# ============================================================================
- name: "gcdns_record: Test creation of an NS record"
gcdns_record:
project_id: "{{ gcp_project_id }}"
credentials_file: "{{ gcp_credentials_file }}"
service_account_email: "{{ gcp_service_account_email }}"
record: "test.{{ test_zone }}"
zone_id: "{{ test_zone_id }}"
type: 'NS'
value: "www.{{ test_zone }}"
register: result
ignore_errors: true
always_run: true
- assert:
that:
- "result.changed"
- "result.state == 'present'"
- "result.record == 'test.{{ test_zone }}'"
- "result.zone == '{{ test_zone }}'"
- "result.zone_id == '{{ test_zone_id }}'"
- "result.type == 'NS'"
- "result['values'] == ['www.{{ test_zone }}']"
- "result.ttl == 300"
- "not result.overwrite"
# ============================================================================
- name: "gcdns_record: Test creation of an NS record again"
gcdns_record:
project_id: "{{ gcp_project_id }}"
credentials_file: "{{ gcp_credentials_file }}"
service_account_email: "{{ gcp_service_account_email }}"
record: "test.{{ test_zone }}"
zone_id: "{{ test_zone_id }}"
type: 'NS'
value: "www.{{ test_zone }}"
register: result
ignore_errors: true
always_run: true
- assert:
that:
- "not result.changed"
- "result.state == 'present'"
- "result.record == 'test.{{ test_zone }}'"
- "result.zone == '{{ test_zone }}'"
- "result.zone_id == '{{ test_zone_id }}'"
- "result.type == 'NS'"
- "result['values'] == ['www.{{ test_zone }}']"
- "result.ttl == 300"
- "not result.overwrite"
# ============================================================================
- name: "gcdns_record: Test update of a root NS record in check mode"
gcdns_record:
project_id: "{{ gcp_project_id }}"
credentials_file: "{{ gcp_credentials_file }}"
service_account_email: "{{ gcp_service_account_email }}"
record: "{{ test_zone }}"
zone_id: "{{ test_zone_id }}"
type: 'NS'
overwrite: true
values:
- "ns-cloud1.googledomains.com."
- "ns-cloud2.googledomains.com."
- "ns-cloud3.googledomains.com."
- "ns-cloud4.googledomains.com."
- "ns-cloud5.googledomains.com."
register: result
ignore_errors: true
- assert:
that:
- "result.failed"
- "result.msg == 'cannot update existing root NS records'"
# ============================================================================
- name: "gcdns_record: Test update of a root NS record"
gcdns_record:
project_id: "{{ gcp_project_id }}"
credentials_file: "{{ gcp_credentials_file }}"
service_account_email: "{{ gcp_service_account_email }}"
record: "{{ test_zone }}"
zone_id: "{{ test_zone_id }}"
type: 'NS'
overwrite: true
values:
- "ns-cloud1.googledomains.com."
- "ns-cloud2.googledomains.com."
- "ns-cloud3.googledomains.com."
- "ns-cloud4.googledomains.com."
- "ns-cloud5.googledomains.com."
register: result
ignore_errors: true
always_run: true
- assert:
that:
- "result.failed"
- "result.msg == 'cannot update existing root NS records'"
# ============================================================================
- name: "gcdns_record: Test creation of a wildcard NS record in check mode"
gcdns_record:
project_id: "{{ gcp_project_id }}"
credentials_file: "{{ gcp_credentials_file }}"
service_account_email: "{{ gcp_service_account_email }}"
record: "*.{{ test_zone }}"
zone_id: "{{ test_zone_id }}"
type: 'NS'
value: "www.{{ test_zone }}"
register: result
ignore_errors: true
- assert:
that:
- "result.failed"
- "result.msg == 'wildcard NS records not allowed, got: *.{{ test_zone }}'"
# ============================================================================
- name: "gcdns_record: Test creation of a wildcard NS record"
gcdns_record:
project_id: "{{ gcp_project_id }}"
credentials_file: "{{ gcp_credentials_file }}"
service_account_email: "{{ gcp_service_account_email }}"
record: "*.{{ test_zone }}"
zone_id: "{{ test_zone_id }}"
type: 'NS'
value: "www.{{ test_zone }}"
register: result
ignore_errors: true
always_run: true
- assert:
that:
- "result.failed"
- "result.msg == 'wildcard NS records not allowed, got: *.{{ test_zone }}'"
# ============================================================================
- name: 'gcdns_record: Test update of root SOA record in check mode'
gcdns_record:
project_id: "{{ gcp_project_id }}"
credentials_file: "{{ gcp_credentials_file }}"
service_account_email: "{{ gcp_service_account_email }}"
record: "{{ test_zone }}"
zone: "{{ test_zone}}"
type: 'SOA'
overwrite: true
value: 'ns1.example.com. ns2.example.com. 1 21600 3600 1209600 400'
register: result
ignore_errors: true
- assert:
that:
- "result.failed"
- "result.msg == 'cannot update SOA records'"
# ============================================================================
- name: 'gcdns_record: Test update of root SOA record'
gcdns_record:
project_id: "{{ gcp_project_id }}"
credentials_file: "{{ gcp_credentials_file }}"
service_account_email: "{{ gcp_service_account_email }}"
record: "{{ test_zone }}"
zone: "{{ test_zone}}"
type: 'SOA'
overwrite: true
value: 'ns1.example.com. ns2.example.com. 1 21600 3600 1209600 400'
register: result
ignore_errors: true
always_run: true
- assert:
that:
- "result.failed"
- "result.msg == 'cannot update SOA records'"
# ============================================================================
# This is a bit of a nonsense test, as this PTR record would never actually do
# anything useful, but we'll test the creation of it nonetheless.
- name: "gcdns_record: Test creation of a PTR record"
gcdns_record:
project_id: "{{ gcp_project_id }}"
credentials_file: "{{ gcp_credentials_file }}"
service_account_email: "{{ gcp_service_account_email }}"
record: "test.{{ test_zone }}"
zone_id: "{{ test_zone_id }}"
type: 'PTR'
value: "www.{{ test_zone }}"
register: result
ignore_errors: true
always_run: true
- assert:
that:
- "result.changed"
- "result.state == 'present'"
- "result.record == 'test.{{ test_zone }}'"
- "result.zone == '{{ test_zone }}'"
- "result.zone_id == '{{ test_zone_id }}'"
- "result.type == 'PTR'"
- "result['values'] == ['www.{{ test_zone }}']"
- "result.ttl == 300"
- "not result.overwrite"
# ============================================================================
- name: "gcdns_record: Test creation of a PTR record again"
gcdns_record:
project_id: "{{ gcp_project_id }}"
credentials_file: "{{ gcp_credentials_file }}"
service_account_email: "{{ gcp_service_account_email }}"
record: "test.{{ test_zone }}"
zone_id: "{{ test_zone_id }}"
type: 'PTR'
value: "www.{{ test_zone }}"
register: result
ignore_errors: true
always_run: true
- assert:
that:
- "not result.changed"
- "result.state == 'present'"
- "result.record == 'test.{{ test_zone }}'"
- "result.zone == '{{ test_zone }}'"
- "result.zone_id == '{{ test_zone_id }}'"
- "result.type == 'PTR'"
- "result['values'] == ['www.{{ test_zone }}']"
- "result.ttl == 300"
- "not result.overwrite"
# ============================================================================
- name: "gcdns_record: Test creation of an SRV record"
gcdns_record:
project_id: "{{ gcp_project_id }}"
credentials_file: "{{ gcp_credentials_file }}"
service_account_email: "{{ gcp_service_account_email }}"
record: "test.{{ test_zone }}"
zone_id: "{{ test_zone_id }}"
type: 'SRV'
value: "0 5 5060 test.{{ test_zone }}"
register: result
ignore_errors: true
always_run: true
- assert:
that:
- "result.changed"
- "result.state == 'present'"
- "result.record == 'test.{{ test_zone }}'"
- "result.zone == '{{ test_zone }}'"
- "result.zone_id == '{{ test_zone_id }}'"
- "result.type == 'SRV'"
- "result['values'] == ['0 5 5060 test.{{ test_zone }}']"
- "result.ttl == 300"
- "not result.overwrite"
# ============================================================================
- name: "gcdns_record: Test creation of an SRV record again"
gcdns_record:
project_id: "{{ gcp_project_id }}"
credentials_file: "{{ gcp_credentials_file }}"
service_account_email: "{{ gcp_service_account_email }}"
record: "test.{{ test_zone }}"
zone_id: "{{ test_zone_id }}"
type: 'SRV'
value: "0 5 5060 test.{{ test_zone }}"
register: result
ignore_errors: true
always_run: true
- assert:
that:
- "not result.changed"
- "result.state == 'present'"
- "result.record == 'test.{{ test_zone }}'"
- "result.zone == '{{ test_zone }}'"
- "result.zone_id == '{{ test_zone_id }}'"
- "result.type == 'SRV'"
- "result['values'] == ['0 5 5060 test.{{ test_zone }}']"
- "result.ttl == 300"
- "not result.overwrite"
# ============================================================================
- name: "gcdns_record: Test creation of a TXT record"
gcdns_record:
project_id: "{{ gcp_project_id }}"
credentials_file: "{{ gcp_credentials_file }}"
service_account_email: "{{ gcp_service_account_email }}"
record: "test.{{ test_zone }}"
zone_id: "{{ test_zone_id }}"
type: 'TXT'
value: '"hello world"'
register: result
ignore_errors: true
always_run: true
- assert:
that:
- "result.changed"
- "result.state == 'present'"
- "result.record == 'test.{{ test_zone }}'"
- "result.zone == '{{ test_zone }}'"
- "result.zone_id == '{{ test_zone_id }}'"
- "result.type == 'TXT'"
- "result['values'] == ['\"hello world\"']"
- "result.ttl == 300"
- "not result.overwrite"
# ============================================================================
- name: "gcdns_record: Test creation of a TXT record again"
gcdns_record:
project_id: "{{ gcp_project_id }}"
credentials_file: "{{ gcp_credentials_file }}"
service_account_email: "{{ gcp_service_account_email }}"
record: "test.{{ test_zone }}"
zone_id: "{{ test_zone_id }}"
type: 'TXT'
value: '"hello world"'
register: result
ignore_errors: true
always_run: true
- assert:
that:
- "not result.changed"
- "result.state == 'present'"
- "result.record == 'test.{{ test_zone }}'"
- "result.zone == '{{ test_zone }}'"
- "result.zone_id == '{{ test_zone_id }}'"
- "result.type == 'TXT'"
- "result['values'] == ['\"hello world\"']"
- "result.ttl == 300"
- "not result.overwrite"
# ============================================================================
- name: "gcdns_record: Test creation of a TXT record with multiple strings"
gcdns_record:
project_id: "{{ gcp_project_id }}"
credentials_file: "{{ gcp_credentials_file }}"
service_account_email: "{{ gcp_service_account_email }}"
record: "test2.{{ test_zone }}"
zone_id: "{{ test_zone_id }}"
type: 'TXT'
value: '"hello" "world"'
register: result
ignore_errors: true
always_run: true
- assert:
that:
- "result.changed"
- "result.state == 'present'"
- "result.record == 'test2.{{ test_zone }}'"
- "result.zone == '{{ test_zone }}'"
- "result.zone_id == '{{ test_zone_id }}'"
- "result.type == 'TXT'"
- "result['values'] == ['\"hello\" \"world\"']"
- "result.ttl == 300"
- "not result.overwrite"
# ============================================================================
- name: "gcdns_record: Test creation of a TXT record with multiple strings again"
gcdns_record:
project_id: "{{ gcp_project_id }}"
credentials_file: "{{ gcp_credentials_file }}"
service_account_email: "{{ gcp_service_account_email }}"
record: "test2.{{ test_zone }}"
zone_id: "{{ test_zone_id }}"
type: 'TXT'
value: '"hello" "world"'
register: result
ignore_errors: true
always_run: true
- assert:
that:
- "not result.changed"
- "result.state == 'present'"
- "result.record == 'test2.{{ test_zone }}'"
- "result.zone == '{{ test_zone }}'"
- "result.zone_id == '{{ test_zone_id }}'"
- "result.type == 'TXT'"
- "result['values'] == ['\"hello\" \"world\"']"
- "result.ttl == 300"
- "not result.overwrite"
# ============================================================================
- name: "gcdns_record: Test creation of a TXT record without enclosed quotes in check mode"
gcdns_record:
project_id: "{{ gcp_project_id }}"
credentials_file: "{{ gcp_credentials_file }}"
service_account_email: "{{ gcp_service_account_email }}"
record: "test3.{{ test_zone }}"
zone_id: "{{ test_zone_id }}"
type: 'TXT'
value: 'hello world'
register: result
ignore_errors: true
- assert:
that:
- "result.failed"
- "result.msg == 'TXT values must be enclosed in double quotes, got: hello world'"
# ============================================================================
- name: "gcdns_record: Test creation of a TXT record without enclosed quotes"
gcdns_record:
project_id: "{{ gcp_project_id }}"
credentials_file: "{{ gcp_credentials_file }}"
service_account_email: "{{ gcp_service_account_email }}"
record: "test3.{{ test_zone }}"
zone_id: "{{ test_zone_id }}"
type: 'TXT'
value: 'hello world'
register: result
ignore_errors: true
always_run: true
- assert:
that:
- "result.failed"
- "result.msg == 'TXT values must be enclosed in double quotes, got: hello world'"
# ============================================================================
- name: "gcdns_record: Test creation of an A record with multiple values"
gcdns_record:
project_id: "{{ gcp_project_id }}"
credentials_file: "{{ gcp_credentials_file }}"
service_account_email: "{{ gcp_service_account_email }}"
record: "round.{{ test_zone }}"
zone_id: "{{ test_zone_id }}"
type: 'A'
values:
- '10.0.0.10'
- '10.10.0.10'
- '10.20.0.10'
register: result
ignore_errors: true
always_run: true
- assert:
that:
- "result.changed"
- "result.state == 'present'"
- "result.record == 'round.{{ test_zone }}'"
- "result.zone == '{{ test_zone }}'"
- "result.zone_id == '{{ test_zone_id }}'"
- "result.type == 'A'"
- "result['values'] == ['10.0.0.10', '10.10.0.10', '10.20.0.10']"
- "result.ttl == 300"
- "not result.overwrite"
# ============================================================================
- name: "gcdns_record: Test creation of a record with a short ttl"
gcdns_record:
project_id: "{{ gcp_project_id }}"
credentials_file: "{{ gcp_credentials_file }}"
service_account_email: "{{ gcp_service_account_email }}"
record: "ttl-short.{{ test_zone }}"
zone_id: "{{ test_zone_id }}"
type: 'A'
ttl: 10
value: '10.2.3.4'
register: result
ignore_errors: true
always_run: true
- assert:
that:
- "result.changed"
- "result.state == 'present'"
- "result.record == 'ttl-short.{{ test_zone }}'"
- "result.zone == '{{ test_zone }}'"
- "result.zone_id == '{{ test_zone_id }}'"
- "result.type == 'A'"
- "result.ttl == 10"
- "result['values'] == ['10.2.3.4']"
- "not result.overwrite"
# ============================================================================
- name: "gcdns_record: Test creation of a record with a long ttl"
gcdns_record:
project_id: "{{ gcp_project_id }}"
credentials_file: "{{ gcp_credentials_file }}"
service_account_email: "{{ gcp_service_account_email }}"
record: "ttl-long.{{ test_zone }}"
zone_id: "{{ test_zone_id }}"
type: 'A'
ttl: 604800
value: '10.2.3.4'
register: result
ignore_errors: true
always_run: true
- assert:
that:
- "result.changed"
- "result.state == 'present'"
- "result.record == 'ttl-long.{{ test_zone }}'"
- "result.zone == '{{ test_zone }}'"
- "result.zone_id == '{{ test_zone_id }}'"
- "result.type == 'A'"
- "result.ttl == 604800"
- "result['values'] == ['10.2.3.4']"
- "not result.overwrite"
# ============================================================================
- name: 'gcdns_record: Test removal of a multi-value record using incomplete values in check mode'
gcdns_record:
project_id: "{{ gcp_project_id }}"
credentials_file: "{{ gcp_credentials_file }}"
service_account_email: "{{ gcp_service_account_email }}"
record: "round.{{ test_zone }}"
state: absent
zone_id: "{{ test_zone_id }}"
type: 'A'
values:
- '10.0.0.10'
- '10.10.0.10'
register: result
ignore_errors: true
- assert:
that:
- "result.failed"
- "result.msg.startswith('cannot delete due to non-matching ttl or values: ')"
# ============================================================================
- name: 'gcdns_record: Test removal of a multi-value record using incomplete values'
gcdns_record:
project_id: "{{ gcp_project_id }}"
credentials_file: "{{ gcp_credentials_file }}"
service_account_email: "{{ gcp_service_account_email }}"
record: "round.{{ test_zone }}"
state: absent
zone_id: "{{ test_zone_id }}"
type: 'A'
values:
- '10.0.0.10'
- '10.10.0.10'
register: result
ignore_errors: true
always_run: true
- assert:
that:
- "result.failed"
- "result.msg.startswith('cannot delete due to non-matching ttl or values: ')"
# ============================================================================
- name: 'gcdns_record: Test removal of a multi-value record using complete values'
gcdns_record:
project_id: "{{ gcp_project_id }}"
credentials_file: "{{ gcp_credentials_file }}"
service_account_email: "{{ gcp_service_account_email }}"
record: "round.{{ test_zone }}"
state: absent
zone_id: "{{ test_zone_id }}"
type: 'A'
values:
- '10.0.0.10'
- '10.10.0.10'
- '10.20.0.10'
register: result
ignore_errors: true
always_run: true
- assert:
that:
- "result.changed"
- "result.state == 'absent'"
- "result.record == 'round.{{ test_zone }}'"
- "result.zone == '{{ test_zone }}'"
- "result.zone_id == '{{ test_zone_id }}'"
- "result.type == 'A'"
- "result['values'] == ['10.0.0.10', '10.10.0.10', '10.20.0.10']"
- "result.ttl == 300"
- "not result.overwrite"
# ============================================================================
- name: 'gcdns_record: Test removal of a multi-value record using complete values again'
gcdns_record:
project_id: "{{ gcp_project_id }}"
credentials_file: "{{ gcp_credentials_file }}"
service_account_email: "{{ gcp_service_account_email }}"
record: "round.{{ test_zone }}"
state: absent
zone_id: "{{ test_zone_id }}"
type: 'A'
values:
- '10.0.0.10'
- '10.10.0.10'
- '10.20.0.10'
register: result
ignore_errors: true
always_run: true
- assert:
that:
- "not result.changed"
- "result.state == 'absent'"
- "result.record == 'round.{{ test_zone }}'"
- "result.zone == '{{ test_zone }}'"
- "result.zone_id == '{{ test_zone_id }}'"
- "result.type == 'A'"
- "result['values'] == ['10.0.0.10', '10.10.0.10', '10.20.0.10']"
- "result.ttl == 300"
- "not result.overwrite"
# ============================================================================
- name: "gcdns_record: Recreate A record with multiple values"
gcdns_record:
project_id: "{{ gcp_project_id }}"
credentials_file: "{{ gcp_credentials_file }}"
service_account_email: "{{ gcp_service_account_email }}"
record: "round.{{ test_zone }}"
zone_id: "{{ test_zone_id }}"
type: 'A'
values:
- '10.0.0.10'
- '10.10.0.10'
- '10.20.0.10'
register: result
ignore_errors: true
always_run: true
- assert:
that:
- "result.changed"
- "result.state == 'present'"
- "result.record == 'round.{{ test_zone }}'"
- "result.zone == '{{ test_zone }}'"
- "result.zone_id == '{{ test_zone_id }}'"
- "result.type == 'A'"
- "result['values'] == ['10.0.0.10', '10.10.0.10', '10.20.0.10']"
- "result.ttl == 300"
- "not result.overwrite"
# ============================================================================
- name: 'gcdns_record: Test removal of a multi-value record using no values without overwrite protection'
gcdns_record:
project_id: "{{ gcp_project_id }}"
credentials_file: "{{ gcp_credentials_file }}"
service_account_email: "{{ gcp_service_account_email }}"
record: "round.{{ test_zone }}"
state: absent
zone_id: "{{ test_zone_id }}"
type: 'A'
overwrite: true
register: result
ignore_errors: true
always_run: true
- assert:
that:
- "result.changed"
- "result.state == 'absent'"
- "result.record == 'round.{{ test_zone }}'"
- "result.zone == '{{ test_zone }}'"
- "result.zone_id == '{{ test_zone_id }}'"
- "result.type == 'A'"
- "result.overwrite"
- "result.ttl == 300"
# ============================================================================
- name: 'gcdns_record: Test creation of an A record with the same name as the zone'
gcdns_record:
project_id: "{{ gcp_project_id }}"
credentials_file: "{{ gcp_credentials_file }}"
service_account_email: "{{ gcp_service_account_email }}"
record: "{{ test_zone }}"
zone_id: "{{ test_zone_id }}"
type: 'A'
value: '10.6.7.8'
register: result
ignore_errors: true
always_run: true
- assert:
that:
- "result.changed"
- "result.state == 'present'"
- "result.record == '{{ test_zone }}'"
- "result.zone == '{{ test_zone }}'"
- "result.zone_id == '{{ test_zone_id }}'"
- "result.type == 'A'"
- "result['values'] == ['10.6.7.8']"
- "result.ttl == 300"
- "not result.overwrite"
# ============================================================================
- name: 'gcdns_record: Test changing the value of a single-value record with overwrite protection in check mode'
gcdns_record:
project_id: "{{ gcp_project_id }}"
credentials_file: "{{ gcp_credentials_file }}"
service_account_email: "{{ gcp_service_account_email }}"
record: "test.{{ test_zone }}"
zone_id: "{{ test_zone_id }}"
type: 'A'
value: '10.6.7.8'
register: result
ignore_errors: true
always_run: true
- assert:
that:
- "result.failed"
- "result.msg == 'cannot overwrite existing record, overwrite protection enabled'"
# ============================================================================
- name: 'gcdns_record: Test changing the value of a single-value record with overwrite protection'
gcdns_record:
project_id: "{{ gcp_project_id }}"
credentials_file: "{{ gcp_credentials_file }}"
service_account_email: "{{ gcp_service_account_email }}"
record: "test.{{ test_zone }}"
zone_id: "{{ test_zone_id }}"
type: 'A'
value: '10.6.7.8'
register: result
ignore_errors: true
always_run: true
- assert:
that:
- "result.failed"
- "result.msg == 'cannot overwrite existing record, overwrite protection enabled'"
# ============================================================================
- name: 'gcdns_record: Test changing the value of a single-value record without overwrite protection'
gcdns_record:
project_id: "{{ gcp_project_id }}"
credentials_file: "{{ gcp_credentials_file }}"
service_account_email: "{{ gcp_service_account_email }}"
record: "test.{{ test_zone }}"
zone_id: "{{ test_zone_id }}"
type: 'A'
overwrite: true
value: '10.6.7.8'
register: result
ignore_errors: true
always_run: true
- assert:
that:
- "result.changed"
- "result.state == 'present'"
- "result.record == 'test.{{ test_zone }}'"
- "result.zone == '{{ test_zone }}'"
- "result.zone_id == '{{ test_zone_id }}'"
- "result.type == 'A'"
- "result.overwrite"
- "result['values'] == ['10.6.7.8']"
- "result.ttl == 300"
# ============================================================================
- name: 'gcdns_record: Test changing the value of an existing record to an invalid value, without overwrite protection'
gcdns_record:
project_id: "{{ gcp_project_id }}"
credentials_file: "{{ gcp_credentials_file }}"
service_account_email: "{{ gcp_service_account_email }}"
record: "test.{{ test_zone }}"
zone_id: "{{ test_zone_id }}"
type: 'MX'
overwrite: true
value: '5.6.78'
register: result
ignore_errors: true
always_run: true
- assert:
that:
- "result.failed"
- "result.msg == 'error updating record, the original record was restored'"
# ============================================================================
- name: 'gcdns_record: Test that the value of the restored record is unchanged'
gcdns_record:
project_id: "{{ gcp_project_id }}"
credentials_file: "{{ gcp_credentials_file }}"
service_account_email: "{{ gcp_service_account_email }}"
record: "test.{{ test_zone }}"
zone_id: "{{ test_zone_id }}"
type: 'MX'
value: "10 {{ test_zone }}"
register: result
ignore_errors: true
always_run: true
- assert:
that:
- "not result.changed"
- "result.state == 'present'"
- "result.record == 'test.{{ test_zone }}'"
- "result.zone == '{{ test_zone }}'"
- "result.zone_id == '{{ test_zone_id }}'"
- "result.type == 'MX'"
- "result['values'] == ['10 {{ test_zone }}']"
- "result.ttl == 300"
- "not result.overwrite"
################################################################################
# Cleanup
################################################################################
- gcdns_record:
project_id: "{{ gcp_project_id }}"
credentials_file: "{{ gcp_credentials_file }}"
service_account_email: "{{ gcp_service_account_email }}"
record: "alias.{{ test_zone }}"
state: absent
zone_id: "{{ test_zone_id }}"
type: CNAME
overwrite: yes
always_run: true
- gcdns_record:
project_id: "{{ gcp_project_id }}"
credentials_file: "{{ gcp_credentials_file }}"
service_account_email: "{{ gcp_service_account_email }}"
record: "test.{{ test_zone }}"
state: absent
zone_id: "{{ test_zone_id }}"
type: A
overwrite: yes
always_run: true
- gcdns_record:
project_id: "{{ gcp_project_id }}"
credentials_file: "{{ gcp_credentials_file }}"
service_account_email: "{{ gcp_service_account_email }}"
record: "test.{{ test_zone }}"
state: absent
zone_id: "{{ test_zone_id }}"
type: AAAA
overwrite: yes
always_run: true
- gcdns_record:
project_id: "{{ gcp_project_id }}"
credentials_file: "{{ gcp_credentials_file }}"
service_account_email: "{{ gcp_service_account_email }}"
record: "test.{{ test_zone }}"
state: absent
zone_id: "{{ test_zone_id }}"
type: MX
overwrite: yes
always_run: true
- gcdns_record:
project_id: "{{ gcp_project_id }}"
credentials_file: "{{ gcp_credentials_file }}"
service_account_email: "{{ gcp_service_account_email }}"
record: "test.{{ test_zone }}"
state: absent
zone_id: "{{ test_zone_id }}"
type: NS
overwrite: yes
always_run: true
- gcdns_record:
project_id: "{{ gcp_project_id }}"
credentials_file: "{{ gcp_credentials_file }}"
service_account_email: "{{ gcp_service_account_email }}"
record: "test.{{ test_zone }}"
state: absent
zone_id: "{{ test_zone_id }}"
type: PTR
overwrite: yes
always_run: true
- gcdns_record:
project_id: "{{ gcp_project_id }}"
credentials_file: "{{ gcp_credentials_file }}"
service_account_email: "{{ gcp_service_account_email }}"
record: "test.{{ test_zone }}"
state: absent
zone_id: "{{ test_zone_id }}"
type: SRV
overwrite: yes
always_run: true
- gcdns_record:
project_id: "{{ gcp_project_id }}"
credentials_file: "{{ gcp_credentials_file }}"
service_account_email: "{{ gcp_service_account_email }}"
record: "test.{{ test_zone }}"
state: absent
zone_id: "{{ test_zone_id }}"
type: TXT
overwrite: yes
always_run: true
- gcdns_record:
project_id: "{{ gcp_project_id }}"
credentials_file: "{{ gcp_credentials_file }}"
service_account_email: "{{ gcp_service_account_email }}"
record: "test2.{{ test_zone }}"
state: absent
zone_id: "{{ test_zone_id }}"
type: TXT
overwrite: yes
always_run: true
- gcdns_record:
project_id: "{{ gcp_project_id }}"
credentials_file: "{{ gcp_credentials_file }}"
service_account_email: "{{ gcp_service_account_email }}"
record: "{{ test_zone }}"
state: absent
zone_id: "{{ test_zone_id }}"
type: A
overwrite: yes
always_run: true
- gcdns_record:
project_id: "{{ gcp_project_id }}"
credentials_file: "{{ gcp_credentials_file }}"
service_account_email: "{{ gcp_service_account_email }}"
record: "ttl-long.{{ test_zone }}"
state: absent
zone_id: "{{ test_zone_id }}"
type: A
overwrite: yes
always_run: true
- gcdns_record:
project_id: "{{ gcp_project_id }}"
credentials_file: "{{ gcp_credentials_file }}"
service_account_email: "{{ gcp_service_account_email }}"
record: "ttl-short.{{ test_zone }}"
state: absent
zone_id: "{{ test_zone_id }}"
type: A
overwrite: yes
always_run: true
- gcdns_zone:
project_id: "{{ gcp_project_id }}"
credentials_file: "{{ gcp_credentials_file }}"
service_account_email: "{{ gcp_service_account_email }}"
zone: "{{ test_zone }}"
state: absent
always_run: true
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment