azure icon indicating copy to clipboard operation
azure copied to clipboard

azure.azcollection.azure_rm_sqldatabase idempotency doesn't work

Open dvntstph opened this issue 5 years ago • 1 comments

SUMMARY

If playbook task is executed again after Azure SQL database already exists the tasks fails with misleading error: An exception occurred during task execution. To see the full traceback, use -vvv. The error was: KeyError: 'edition' This breaks any recurring automation or CI/CD pipelines.

ISSUE TYPE
  • Bug Report
COMPONENT NAME

azure.azcollection.azure_rm_sqldatabase

ANSIBLE VERSION
ansible 2.10.2
CONFIGURATION

OS / ENVIRONMENT

Azure DevOps Runner

STEPS TO REPRODUCE

**Tasks Content**

# tasks file for non-prod_azure_rm_sqlserver
  - name: Create variable for desired region
    set_fact: 
      defined_region: "{{ item.value.location_of_resources }}"
    with_dict: "{{ placement }}"

  - name: Set the Service Principal ID
    set_fact: 
      client_id: "{{ item.value.client_id }}"
    no_log: True
    with_dict: "{{ subscription_authentication }}"

  - name: Set the Service Principal secret
    set_fact: 
      secret: "{{ item.value.secret }}"
    no_log: True
    with_dict: "{{ subscription_authentication }}"

  - name: Set the Service Principal tenant_id
    set_fact: 
      tenant : "{{ item.value.tenant }}"
    no_log: True
    with_dict: "{{ subscription_authentication }}"

  - name: Manage Subscription Resource Group
    azure_rm_resourcegroup:
     tenant: "{{ tenant }}"
     client_id: "{{ client_id }}"
     secret: "{{ secret }}"
     subscription_id: "{{ item.value.subscription_id }}"
     state: present
     location: "{{ defined_region }}"
     name: "{{ item.value.resource_group }}"
     tags: "{{ item.value.tags }}"
    with_dict: "{{ sql_server_paramaters }}"

  - name: Manage SQL Database Servers
    azure.azcollection.azure_rm_sqlserver:
     tenant: "{{ tenant }}"
     client_id: "{{ client_id }}"
     secret: "{{ secret }}"
     subscription_id: "{{ item.value.subscription_id }}"
     state: present
     location: "{{ defined_region }}"
     resource_group: "{{ item.value.resource_group }}"
     name: "{{ item.value.db_server_name }}"
     admin_username: "{{ item.value.admin_username }}"
     admin_password: "{{ item.value.admin_password }}"
     tags: "{{ item.value.tags }}"
    with_dict: "{{ sql_server_paramaters }}"

**Vars Content**
---
# vars file for non-prod_azure_rm_sqlserver
placement:
 azure_region:
  location_of_resources: eastus

subscription_authentication:
 service_principal:
  name: Service Connection Name
  tenant: exxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxa73c
  client_id: 1axxxxxxx-xxxx-xxxx-xxxx-xxxxxxxa73c
  secret: !vault |
          $ANSIBLE_VAULT;1.1;AES256
          36366162376432333535353737376235636235316133323738363064616139636264326361343136
          6138396265626666656163616662643136633338363235300a306239666131643662393863653862
          37376538316665616532613937356135373962373938313737633366623932323137303438323032
          3436656136333834320a393562626634396435346562616563386130323262393338613663626261
          34326539333935643664316239663662333231366336336165376161303061653961353231633565
          3636376365656630343061383066326435653833303563396664

sql_server_paramaters:
 SQL_server:
  subscription_id: exxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxa73c
  resource_group: USEPRNPINTRGR01
  db_server_name: USEPRNPINTSQLXXX0001
  admin_username: mssqladmin
  admin_password: !vault |
          $ANSIBLE_VAULT;1.1;AES256
          31636631353661313632333463633335343430643831343161396530313431666332326465646164
          6131633636343862633366653335663031393831356636350a336132316137323264643565393561
          62373364616235613066306466313061636266646633346333343737336334393337303362386166
          3733376139343334300a366463363961323961373933323361373634663864366464656535393330
          64316161353434343866386162333361376265626131633033373361303935373332
  tags:
   client: mycustomer
   automation: ansible

sql_db_paramaters:
 SQL_database:
  subscription_id: exxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxa73c
  resource_group: USEPRNPINTRGR01
  db_name: USEPRNPINTSDBXXX0001
  db_server_name: USEPRNPINTSQLXXX0001
  edition: premium
  collation: Latin1_General_CI_AS
  max_size_bytes: 268435456000
  zone_redundant: false
  elastic_pool_name: USEPRNPINTSQLPOOL
   tags:
   client: mycustomer
   automation: ansible
 
 



EXPECTED RESULTS

Task should report ok and move on to next task

ACTUAL RESULTS

Task Fails with An exception occurred during task execution. To see the full traceback, use -vvv. The error was: KeyError: 'edition'


TASK [non-prod_azure_rm_sqldatabase : Manage SQL Databases] ********************
task path: /home/vsts/work/1/s/myclient/non-prod_azure_rm_sqldatabase/tasks/main.yml:38
<127.0.0.1> ESTABLISH LOCAL CONNECTION FOR USER: vsts
<127.0.0.1> EXEC /bin/sh -c 'echo ~vsts && sleep 0'
<127.0.0.1> EXEC /bin/sh -c '( umask 77 && mkdir -p "` echo /home/vsts/.ansible/tmp `"&& mkdir "` echo /home/vsts/.ansible/tmp/ansible-tmp-1602022127.2841625-3140-79177511662512 `" && echo ansible-tmp-1602022127.2841625-3140-79177511662512="` echo /home/vsts/.ansible/tmp/ansible-tmp-1602022127.2841625-3140-79177511662512 `" ) && sleep 0'
Using module file /home/vsts/.ansible/collections/ansible_collections/azure/azcollection/plugins/modules/azure_rm_sqldatabase.py
<127.0.0.1> PUT /home/vsts/.ansible/tmp/ansible-local-3022zhf7w0jz/tmp8hncz8e1 TO /home/vsts/.ansible/tmp/ansible-tmp-1602022127.2841625-3140-79177511662512/AnsiballZ_azure_rm_sqldatabase.py
<127.0.0.1> EXEC /bin/sh -c 'chmod u+x /home/vsts/.ansible/tmp/ansible-tmp-1602022127.2841625-3140-79177511662512/ /home/vsts/.ansible/tmp/ansible-tmp-1602022127.2841625-3140-79177511662512/AnsiballZ_azure_rm_sqldatabase.py && sleep 0'
<127.0.0.1> EXEC /bin/sh -c '/opt/hostedtoolcache/Python/3.6.12/x64/bin/python /home/vsts/.ansible/tmp/ansible-tmp-1602022127.2841625-3140-79177511662512/AnsiballZ_azure_rm_sqldatabase.py && sleep 0'
<127.0.0.1> EXEC /bin/sh -c 'rm -f -r /home/vsts/.ansible/tmp/ansible-tmp-1602022127.2841625-3140-79177511662512/ > /dev/null 2>&1 && sleep 0'
The full traceback is:
Traceback (most recent call last):
  File "/home/vsts/.ansible/tmp/ansible-tmp-1602022127.2841625-3140-79177511662512/AnsiballZ_azure_rm_sqldatabase.py", line 102, in <module>
    _ansiballz_main()
  File "/home/vsts/.ansible/tmp/ansible-tmp-1602022127.2841625-3140-79177511662512/AnsiballZ_azure_rm_sqldatabase.py", line 94, in _ansiballz_main
    invoke_module(zipped_mod, temp_path, ANSIBALLZ_PARAMS)
  File "/home/vsts/.ansible/tmp/ansible-tmp-1602022127.2841625-3140-79177511662512/AnsiballZ_azure_rm_sqldatabase.py", line 40, in invoke_module
    runpy.run_module(mod_name='ansible_collections.azure.azcollection.plugins.modules.azure_rm_sqldatabase', init_globals=None, run_name='__main__', alter_sys=True)
  File "/opt/hostedtoolcache/Python/3.6.12/x64/lib/python3.6/runpy.py", line 205, in run_module
    return _run_module_code(code, init_globals, run_name, mod_spec)
  File "/opt/hostedtoolcache/Python/3.6.12/x64/lib/python3.6/runpy.py", line 96, in _run_module_code
    mod_name, mod_spec, pkg_name, script_name)
  File "/opt/hostedtoolcache/Python/3.6.12/x64/lib/python3.6/runpy.py", line 85, in _run_code
    exec(code, run_globals)
  File "/tmp/ansible_azure.azcollection.azure_rm_sqldatabase_payload_yvqo7kqq/ansible_azure.azcollection.azure_rm_sqldatabase_payload.zip/ansible_collections/azure/azcollection/plugins/modules/azure_rm_sqldatabase.py", line 515, in <module>
  File "/tmp/ansible_azure.azcollection.azure_rm_sqldatabase_payload_yvqo7kqq/ansible_azure.azcollection.azure_rm_sqldatabase_payload.zip/ansible_collections/azure/azcollection/plugins/modules/azure_rm_sqldatabase.py", line 511, in main
  File "/tmp/ansible_azure.azcollection.azure_rm_sqldatabase_payload_yvqo7kqq/ansible_azure.azcollection.azure_rm_sqldatabase_payload.zip/ansible_collections/azure/azcollection/plugins/modules/azure_rm_sqldatabase.py", line 314, in __init__
  File "/tmp/ansible_azure.azcollection.azure_rm_sqldatabase_payload_yvqo7kqq/ansible_azure.azcollection.azure_rm_sqldatabase_payload.zip/ansible_collections/azure/azcollection/plugins/module_utils/azure_rm_common.py", line 436, in __init__
  File "/tmp/ansible_azure.azcollection.azure_rm_sqldatabase_payload_yvqo7kqq/ansible_azure.azcollection.azure_rm_sqldatabase_payload.zip/ansible_collections/azure/azcollection/plugins/modules/azure_rm_sqldatabase.py", line 387, in exec_module
KeyError: 'edition'
failed: [localhost] (item={'key': 'myclient_Non-Production_Intranet_SQL_database', 'value': {'subscription_id': 'XXXX-XXXX-XXXX', 'resource_group': 'USEPRNPINTRGR01', 'db_name': 'USEPRNPINTSDBXXX0001', 'db_server_name': 'USEPRNPINTSQLXXX0001', 'edition': 'premium', 'collation': 'Latin1_General_CI_AS', 'max_size_bytes': 268435456000, 'zone_redundant': False, 'elastic_pool_name': 'USEPRNPINTSQLPOOL', 'tags': {'client': 'myclient', 'automation': 'ansible'}}}) => {
    "ansible_loop_var": "item",
    "changed": false,
    "item": {
        "key": "myclient_Non-Production_Intranet_SQL_database",
       "value": {
            "collation": "Latin1_General_CI_AS",
            "db_name": "USEPRNPINTSDBXXX0001",
            "db_server_name": "USEPRNPINTSQLXXX0001",
            "edition": "premium",
            "elastic_pool_name": "USEPRNPINTSQLPOOL",
            "max_size_bytes": 268435456000,
            "resource_group": "USEPRNPINTRGR01",
            "subscription_id": "XXXX-XXXX-XXXX",
            "tags": {
                "automation": "ansible",
                "client": "myclient"
            },
            "zone_redundant": false
        }
    },
    "module_stderr": "Traceback (most recent call last):\n  File \"/home/vsts/.ansible/tmp/ansible-tmp-1602022127.2841625-3140-79177511662512/AnsiballZ_azure_rm_sqldatabase.py\", line 102, in <module>\n    _ansiballz_main()\n  File \"/home/vsts/.ansible/tmp/ansible-tmp-1602022127.2841625-3140-79177511662512/AnsiballZ_azure_rm_sqldatabase.py\", line 94, in _ansiballz_main\n    invoke_module(zipped_mod, temp_path, ANSIBALLZ_PARAMS)\n  File \"/home/vsts/.ansible/tmp/ansible-tmp-1602022127.2841625-3140-79177511662512/AnsiballZ_azure_rm_sqldatabase.py\", line 40, in invoke_module\n    runpy.run_module(mod_name='ansible_collections.azure.azcollection.plugins.modules.azure_rm_sqldatabase', init_globals=None, run_name='__main__', alter_sys=True)\n  File \"/opt/hostedtoolcache/Python/3.6.12/x64/lib/python3.6/runpy.py\", line 205, in run_module\n    return _run_module_code(code, init_globals, run_name, mod_spec)\n  File \"/opt/hostedtoolcache/Python/3.6.12/x64/lib/python3.6/runpy.py\", line 96, in _run_module_code\n    mod_name, mod_spec, pkg_name, script_name)\n  File \"/opt/hostedtoolcache/Python/3.6.12/x64/lib/python3.6/runpy.py\", line 85, in _run_code\n    exec(code, run_globals)\n  File \"/tmp/ansible_azure.azcollection.azure_rm_sqldatabase_payload_yvqo7kqq/ansible_azure.azcollection.azure_rm_sqldatabase_payload.zip/ansible_collections/azure/azcollection/plugins/modules/azure_rm_sqldatabase.py\", line 515, in <module>\n  File \"/tmp/ansible_azure.azcollection.azure_rm_sqldatabase_payload_yvqo7kqq/ansible_azure.azcollection.azure_rm_sqldatabase_payload.zip/ansible_collections/azure/azcollection/plugins/modules/azure_rm_sqldatabase.py\", line 511, in main\n  File \"/tmp/ansible_azure.azcollection.azure_rm_sqldatabase_payload_yvqo7kqq/ansible_azure.azcollection.azure_rm_sqldatabase_payload.zip/ansible_collections/azure/azcollection/plugins/modules/azure_rm_sqldatabase.py\", line 314, in __init__\n  File \"/tmp/ansible_azure.azcollection.azure_rm_sqldatabase_payload_yvqo7kqq/ansible_azure.azcollection.azure_rm_sqldatabase_payload.zip/ansible_collections/azure/azcollection/plugins/module_utils/azure_rm_common.py\", line 436, in __init__\n  File \"/tmp/ansible_azure.azcollection.azure_rm_sqldatabase_payload_yvqo7kqq/ansible_azure.azcollection.azure_rm_sqldatabase_payload.zip/ansible_collections/azure/azcollection/plugins/modules/azure_rm_sqldatabase.py\", line 387, in exec_module\nKeyError: 'edition'\n",
    "module_stdout": "",
    "msg": "MODULE FAILURE\nSee stdout/stderr for the exact error",
    "rc": 1
}

dvntstph avatar Oct 06 '20 23:10 dvntstph

@dvntstph Can you update to V1.13.0 and try again? Does your problem still exist? Thank you very much!

ansible-galaxy collection install azure.azcollection --force

Fred-sun avatar Sep 07 '22 05:09 Fred-sun

@dvntstph Are you still concerned about this problem? Does the problem still exist? If it doesn't exist, I will close it, Thank you very much!

Fred-sun avatar Mar 01 '23 07:03 Fred-sun