1- name: Prepare random number
2  set_fact:
3    dbname: "cosmos{{ resource_group | hash('md5') | truncate(7, True, '') }}{{ 1000 | random }}"
4    vnname: "vn{{ resource_group | hash('md5') | truncate(7, True, '') }}{{ 1000 | random }}"
5    subnetname: "subnet{{ resource_group | hash('md5') | truncate(7, True, '') }}{{ 1000 | random }}"
6  run_once: yes
7
8- name: Create virtual network
9  azure_rm_virtualnetwork:
10    resource_group: "{{ resource_group }}"
11    name: "{{ vnname }}"
12    address_prefixes_cidr:
13      - 10.1.0.0/16
14      - 172.100.0.0/16
15    dns_servers:
16      - 127.0.0.1
17      - 127.0.0.3
18
19- name: Add subnet
20  azure_rm_subnet:
21    name: "{{ subnetname }}"
22    virtual_network_name: "{{ vnname }}"
23    resource_group: "{{ resource_group }}"
24    address_prefix_cidr: "10.1.0.0/24"
25
26- name: Create instance of Database Account -- check mode
27  azure_rm_cosmosdbaccount:
28    resource_group: "{{ resource_group }}"
29    name: "{{ dbname }}"
30    location: eastasia
31    geo_rep_locations:
32      - name: eastasia
33        failover_priority: 0
34    database_account_offer_type: Standard
35  check_mode: yes
36  register: output
37- name: Assert the resource instance is well created
38  assert:
39    that:
40      - output.changed
41
42- name: Create instance of Database Account
43  azure_rm_cosmosdbaccount:
44    resource_group: "{{ resource_group }}"
45    name: "{{ dbname }}"
46    location: eastasia
47    kind: global_document_db
48    geo_rep_locations:
49      - name: eastasia
50        failover_priority: 0
51      - name: westus
52        failover_priority: 1
53    database_account_offer_type: Standard
54    is_virtual_network_filter_enabled: yes
55    virtual_network_rules:
56      - subnet:
57          resource_group: "{{ resource_group }}"
58          virtual_network_name: "{{ vnname }}"
59          subnet_name: "{{ subnetname }}"
60        ignore_missing_vnet_service_endpoint: yes
61  register: output
62- name: Assert the resource instance is well created
63  assert:
64    that:
65      - output.changed
66
67- name: Create again instance of Database Account
68  azure_rm_cosmosdbaccount:
69    resource_group: "{{ resource_group }}"
70    name: "{{ dbname }}"
71    location: eastasia
72    kind: global_document_db
73    geo_rep_locations:
74      - name: eastasia
75        failover_priority: 0
76      - name: westus
77        failover_priority: 1
78    database_account_offer_type: Standard
79    is_virtual_network_filter_enabled: yes
80    virtual_network_rules:
81      - subnet:
82          resource_group: "{{ resource_group }}"
83          virtual_network_name: "{{ vnname }}"
84          subnet_name: "{{ subnetname }}"
85        ignore_missing_vnet_service_endpoint: yes
86  register: output
87- name: Assert the state has not changed
88  assert:
89    that:
90      - output.changed == false
91
92- name: Create again instance of Database Account -- change something
93  azure_rm_cosmosdbaccount:
94    resource_group: "{{ resource_group }}"
95    name: "{{ dbname }}"
96    location: eastasia
97    kind: global_document_db
98    geo_rep_locations:
99      - name: eastasia
100        failover_priority: 0
101      - name: westus
102        failover_priority: 1
103    database_account_offer_type: Standard
104    is_virtual_network_filter_enabled: yes
105    virtual_network_rules:
106      - subnet:
107          resource_group: "{{ resource_group }}"
108          virtual_network_name: "{{ vnname }}"
109          subnet_name: "{{ subnetname }}"
110        ignore_missing_vnet_service_endpoint: yes
111    enable_automatic_failover: yes
112  register: output
113- name: Assert the state has not changed
114  assert:
115    that:
116      - output.changed
117
118- name: Get facts of single account
119  azure_rm_cosmosdbaccount_info:
120    resource_group: "{{ resource_group }}"
121    name: "{{ dbname }}"
122  register: output
123
124- name: Assert that facts are returned
125  assert:
126    that:
127      - output.changed == False
128      - output.accounts[0]['id'] != None
129      - output.accounts[0]['resource_group'] != None
130      - output.accounts[0]['name'] != None
131      - output.accounts[0]['location'] != None
132      - output.accounts[0]['kind'] != None
133      - output.accounts[0]['consistency_policy'] != None
134      - output.accounts[0]['failover_policies'] != None
135      - output.accounts[0]['read_locations'] != None
136      - output.accounts[0]['write_locations'] != None
137      - output.accounts[0]['database_account_offer_type'] != None
138      - output.accounts[0]['ip_range_filter'] != None
139      - output.accounts[0]['is_virtual_network_filter_enabled'] != None
140      - output.accounts[0]['enable_automatic_failover'] != None
141      - output.accounts[0]['enable_cassandra'] != None
142      - output.accounts[0]['enable_table'] != None
143      - output.accounts[0]['enable_gremlin'] != None
144      - output.accounts[0]['virtual_network_rules'] != None
145      - output.accounts[0]['enable_multiple_write_locations'] != None
146      - output.accounts[0]['document_endpoint'] != None
147      - output.accounts[0]['provisioning_state'] != None
148      - output.accounts[0]['tags'] != None
149
150- name: Get facts with keys
151  azure_rm_cosmosdbaccount_info:
152    resource_group: "{{ resource_group }}"
153    name: "{{ dbname }}"
154    retrieve_keys: all
155  register: output
156
157- name: Assert that facts are returned
158  assert:
159    that:
160      - output.changed == False
161      - output.accounts[0]['primary_master_key'] != None
162      - output.accounts[0]['secondary_master_key'] != None
163      - output.accounts[0]['primary_readonly_master_key'] != None
164      - output.accounts[0]['secondary_readonly_master_key'] != None
165
166- name: Get facts with readonly keys
167  azure_rm_cosmosdbaccount_info:
168    resource_group: "{{ resource_group }}"
169    name: "{{ dbname }}"
170    retrieve_keys: readonly
171    retrieve_connection_strings: yes
172  register: output
173
174- name: Assert that facts are returned
175  assert:
176    that:
177      - output.changed == False
178      - "'primary_master_key' not in output.accounts[0]"
179      - "'secondary_master_key' not in output.accounts[0]"
180      - output.accounts[0]['primary_readonly_master_key'] != None
181      - output.accounts[0]['secondary_readonly_master_key'] != None
182      - output.accounts[0]['connection_strings'] | length > 0
183
184- name: List acounts by resource group
185  azure_rm_cosmosdbaccount_info:
186    resource_group: "{{ resource_group }}"
187    name: "{{ dbname }}"
188  register: output
189
190- name: Assert that facts are returned
191  assert:
192    that:
193      - output.changed == False
194      - output.accounts[0]['id'] != None
195      - output.accounts[0]['resource_group'] != None
196      - output.accounts[0]['name'] != None
197      - output.accounts[0]['location'] != None
198      - output.accounts[0]['kind'] != None
199      - output.accounts[0]['consistency_policy'] != None
200      - output.accounts[0]['failover_policies'] != None
201      - output.accounts[0]['read_locations'] != None
202      - output.accounts[0]['write_locations'] != None
203      - output.accounts[0]['database_account_offer_type'] != None
204      - output.accounts[0]['ip_range_filter'] != None
205      - output.accounts[0]['is_virtual_network_filter_enabled'] != None
206      - output.accounts[0]['enable_automatic_failover'] != None
207      - output.accounts[0]['enable_cassandra'] != None
208      - output.accounts[0]['enable_table'] != None
209      - output.accounts[0]['enable_gremlin'] != None
210      - output.accounts[0]['virtual_network_rules'] != None
211      - output.accounts[0]['enable_multiple_write_locations'] != None
212      - output.accounts[0]['document_endpoint'] != None
213      - output.accounts[0]['provisioning_state'] != None
214      - output.accounts[0]['tags'] != None
215
216- name: Delete instance of Database Account -- check mode
217  azure_rm_cosmosdbaccount:
218    resource_group: "{{ resource_group }}"
219    name: "{{ dbname }}"
220    state: absent
221  check_mode: yes
222  register: output
223- name: Assert the state has changed
224  assert:
225    that:
226      - output.changed
227
228- name: Delete instance of Database Account
229  azure_rm_cosmosdbaccount:
230    resource_group: "{{ resource_group }}"
231    name: "{{ dbname }}"
232    state: absent
233  register: output
234- name: Assert the state has changed
235  assert:
236    that:
237      - output.changed
238
239# currently disabled as there's a bug in SDK / Service
240#- name: Delete unexisting instance of Database Account
241#  azure_rm_cosmosdbaccount:
242#    resource_group: "{{ resource_group }}"
243#    name: "{{ dbname }}"
244#    state: absent
245#  register: output
246#- name: Assert the state has changed
247#  assert:
248#    that:
249#      - output.changed == false
250