|
|
|
- name: Fix resource prefix
|
|
|
|
set_fact:
|
|
|
|
role_name: "{{ (resource_group | replace('-','x'))[-8:] }}{{ 1000 | random }}testrole"
|
|
|
|
subscription_id: "{{ lookup('env','AZURE_SUBSCRIPTION_ID') }}"
|
|
|
|
principal_id: "{{ lookup('env','AZURE_CLIENT_ID') }}"
|
|
|
|
run_once: yes
|
|
|
|
|
|
|
|
- name: Create a role definition (Check Mode)
|
|
|
|
azure_rm_roledefinition:
|
|
|
|
name: "{{ role_name }}"
|
|
|
|
scope: "/subscriptions/{{ subscription_id }}/resourceGroups/{{ resource_group }}"
|
|
|
|
permissions:
|
|
|
|
- actions:
|
|
|
|
- "Microsoft.Compute/virtualMachines/read"
|
|
|
|
not_actions:
|
|
|
|
- "Microsoft.Compute/virtualMachines/write"
|
|
|
|
data_actions:
|
|
|
|
- "Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read"
|
|
|
|
not_data_actions:
|
|
|
|
- "Microsoft.Storage/storageAccounts/blobServices/containers/blobs/write"
|
|
|
|
assignable_scopes:
|
|
|
|
- "/subscriptions/{{ subscription_id }}/resourceGroups/{{ resource_group }}"
|
|
|
|
check_mode: yes
|
|
|
|
register: output
|
|
|
|
|
|
|
|
- name: Assert creating role definition check mode
|
|
|
|
assert:
|
|
|
|
that:
|
|
|
|
- output.changed
|
|
|
|
|
|
|
|
- name: Create a role definition
|
|
|
|
azure_rm_roledefinition:
|
|
|
|
name: "{{ role_name }}"
|
|
|
|
scope: "/subscriptions/{{ subscription_id }}/resourceGroups/{{ resource_group }}"
|
|
|
|
permissions:
|
|
|
|
- actions:
|
|
|
|
- "Microsoft.Compute/virtualMachines/read"
|
|
|
|
not_actions:
|
|
|
|
- "Microsoft.Compute/virtualMachines/write"
|
|
|
|
data_actions:
|
|
|
|
- "Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read"
|
|
|
|
not_data_actions:
|
|
|
|
- "Microsoft.Storage/storageAccounts/blobServices/containers/blobs/write"
|
|
|
|
assignable_scopes:
|
|
|
|
- "/subscriptions/{{ subscription_id }}/resourceGroups/{{ resource_group }}"
|
|
|
|
register: output
|
|
|
|
|
|
|
|
- name: Assert creating role definition
|
|
|
|
assert:
|
|
|
|
that:
|
|
|
|
- output.changed
|
|
|
|
|
|
|
|
- name: Get facts by type
|
|
|
|
azure_rm_roledefinition_facts:
|
|
|
|
scope: "/subscriptions/{{ subscription_id }}/resourceGroups/{{ resource_group }}"
|
|
|
|
type: custom
|
|
|
|
register: facts
|
|
|
|
|
|
|
|
- name: Assert facts
|
|
|
|
assert:
|
|
|
|
that:
|
|
|
|
- facts['roledefinitions'] | length > 1
|
|
|
|
|
|
|
|
- name: Get facts by name
|
|
|
|
azure_rm_roledefinition_facts:
|
|
|
|
scope: "/subscriptions/{{ subscription_id }}/resourceGroups/{{ resource_group }}"
|
|
|
|
role_name: "{{ role_name }}"
|
|
|
|
register: facts
|
|
|
|
until: "{{ facts.roledefinitions | length > 0 }}"
|
|
|
|
retries: 50
|
|
|
|
delay: 60
|
|
|
|
|
|
|
|
- name: Assert facts
|
|
|
|
assert:
|
|
|
|
that:
|
|
|
|
- facts['roledefinitions'] | length == 1
|
|
|
|
- facts['roledefinitions'][0]['permissions'] | length == 1
|
|
|
|
- facts['roledefinitions'][0]['permissions'][0]['not_data_actions'] | length == 1
|
|
|
|
- facts['roledefinitions'][0]['permissions'][0]['data_actions'] | length == 1
|
|
|
|
|
|
|
|
- name: Update the role definition (idempotent)
|
|
|
|
azure_rm_roledefinition:
|
|
|
|
name: "{{ role_name }}"
|
|
|
|
scope: "/subscriptions/{{ subscription_id }}/resourceGroups/{{ resource_group }}"
|
|
|
|
permissions:
|
|
|
|
- actions:
|
|
|
|
- "Microsoft.Compute/virtualMachines/read"
|
|
|
|
not_actions:
|
|
|
|
- "Microsoft.Compute/virtualMachines/write"
|
|
|
|
data_actions:
|
|
|
|
- "Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read"
|
|
|
|
not_data_actions:
|
|
|
|
- "Microsoft.Storage/storageAccounts/blobServices/containers/blobs/write"
|
|
|
|
assignable_scopes:
|
|
|
|
- "/subscriptions/{{ subscription_id }}/resourceGroups/{{ resource_group }}"
|
|
|
|
register: output
|
|
|
|
|
|
|
|
- name: assert output not changed
|
|
|
|
assert:
|
|
|
|
that:
|
|
|
|
- not output.changed
|
|
|
|
|
|
|
|
- name: Update the role definition
|
|
|
|
azure_rm_roledefinition:
|
|
|
|
name: "{{ role_name }}"
|
|
|
|
scope: "/subscriptions/{{ subscription_id }}/resourceGroups/{{ resource_group }}"
|
|
|
|
permissions:
|
|
|
|
- actions:
|
|
|
|
- "Microsoft.Compute/virtualMachines/read"
|
|
|
|
- "Microsoft.Compute/virtualMachines/start/action"
|
|
|
|
not_actions:
|
|
|
|
- "Microsoft.Compute/virtualMachines/write"
|
|
|
|
data_actions:
|
|
|
|
- "Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read"
|
|
|
|
not_data_actions:
|
|
|
|
- "Microsoft.Storage/storageAccounts/blobServices/containers/blobs/write"
|
|
|
|
assignable_scopes:
|
|
|
|
- "/subscriptions/{{ subscription_id }}/resourceGroups/{{ resource_group }}"
|
|
|
|
register: output
|
|
|
|
|
|
|
|
- name: assert output changed
|
|
|
|
assert:
|
|
|
|
that:
|
|
|
|
- output.changed
|
|
|
|
|
|
|
|
- name: Get role definition facts
|
|
|
|
azure_rm_roledefinition_facts:
|
|
|
|
role_name: "{{ role_name }}"
|
|
|
|
scope: "/subscriptions/{{ subscription_id }}/resourceGroups/{{ resource_group }}"
|
|
|
|
type: custom
|
|
|
|
register: roledef
|
|
|
|
until: "{{ roledef.roledefinitions | length > 0 }}"
|
|
|
|
retries: 50
|
|
|
|
delay: 60
|
|
|
|
|
|
|
|
- name: Assert role definition facts
|
|
|
|
assert:
|
|
|
|
that:
|
|
|
|
- roledef['roledefinitions'] | length == 1
|
|
|
|
- roledef['roledefinitions'][0]['id']
|
|
|
|
|
|
|
|
- name: Create a role assignment (Check Mode)
|
|
|
|
azure_rm_roleassignment:
|
|
|
|
scope: "/subscriptions/{{ subscription_id }}/resourceGroups/{{ resource_group }}"
|
|
|
|
assignee_object_id: "{{ principal_id }}"
|
|
|
|
role_definition_id: "{{ roledef['roledefinitions'][0]['id'] }}"
|
|
|
|
check_mode: yes
|
|
|
|
register: output
|
|
|
|
|
|
|
|
- name: Assert creating role definition check mode
|
|
|
|
assert:
|
|
|
|
that:
|
|
|
|
- output.changed
|
|
|
|
|
|
|
|
- name: Create a role assignment
|
|
|
|
azure_rm_roleassignment:
|
|
|
|
scope: "/subscriptions/{{ subscription_id }}/resourceGroups/{{ resource_group }}"
|
|
|
|
assignee_object_id: "{{ principal_id }}"
|
|
|
|
role_definition_id: "{{ roledef['roledefinitions'][0]['id'] }}"
|
|
|
|
register: output
|
|
|
|
|
|
|
|
- name: Assert creating role assignment
|
|
|
|
assert:
|
|
|
|
that:
|
|
|
|
- output.changed
|
|
|
|
|
|
|
|
- name: Get facts
|
|
|
|
azure_rm_roleassignment_facts:
|
|
|
|
scope: "/subscriptions/{{ subscription_id }}/resourceGroups/{{ resource_group }}"
|
|
|
|
assignee: "{{ principal_id }}"
|
|
|
|
role_definition_id: "{{ roledef['roledefinitions'][0]['id'] }}"
|
|
|
|
register: facts
|
|
|
|
|
|
|
|
- name: assert role assignment facts
|
|
|
|
assert:
|
|
|
|
that:
|
|
|
|
- facts['roleassignments'] | length > 0
|
|
|
|
- facts['roleassignments'][0]['id']
|
|
|
|
|
|
|
|
- name: delete role assignment
|
|
|
|
azure_rm_roleassignment:
|
|
|
|
name: "{{ facts['roleassignments'][0]['id'].split('/')[-1] }}"
|
|
|
|
scope: "/subscriptions/{{ subscription_id }}"
|
|
|
|
state: absent
|
|
|
|
|
|
|
|
- name: Delete the role definition (Check Mode)
|
|
|
|
azure_rm_roledefinition:
|
|
|
|
name: "{{ role_name }}"
|
|
|
|
scope: "/subscriptions/{{ subscription_id }}/resourceGroups/{{ resource_group }}"
|
|
|
|
state: absent
|
|
|
|
check_mode: yes
|
|
|
|
register: output
|
|
|
|
|
|
|
|
- name: assert deleting role definition check mode
|
|
|
|
assert:
|
|
|
|
that: output.changed
|
|
|
|
|
|
|
|
- name: Delete the role definition
|
|
|
|
azure_rm_roledefinition:
|
|
|
|
name: "{{ role_name }}"
|
|
|
|
scope: "/subscriptions/{{ subscription_id }}/resourceGroups/{{ resource_group }}"
|
|
|
|
state: absent
|
|
|
|
register: output
|
|
|
|
|
|
|
|
- assert:
|
|
|
|
that:
|
|
|
|
- output.changed
|