Add update from @obsoleted

pull/18777/head
Laurent Mazuel 9 years ago committed by Matt Clay
parent 801c44df9e
commit 5d5cac57ff

@ -428,6 +428,36 @@ def build_deployment_body(module):
return dict(properties=properties) return dict(properties=properties)
def get_failed_nested_operations(client, resource_group, current_operations):
new_operations = []
for operation in current_operations:
if operation.properties.provisioning_state == 'Failed':
new_operations.append(operation)
if operation.properties.target_resource and 'Microsoft.Resources/deployments' in operation.properties.target_resource.id:
nested_deployment = operation.properties.target_resource.resource_name
nested_operations = client.deployment_operations.list(resource_group, nested_deployment)
new_nested_operations = get_failed_nested_operations(client, resource_group, nested_operations)
new_operations += new_nested_operations
return new_operations
def get_failed_deployment_operations(module, client, resource_group, deployment_name):
operations = client.deployment_operations.list(resource_group, deployment_name)
return [
dict(
id=op.id,
operation_id=op.operation_id,
status_code=op.properties.status_code,
status_message=op.properties.status_message,
target_resource = dict(
id=op.properties.target_resource.id,
resource_name=op.properties.target_resource.resource_name,
resource_type=op.properties.target_resource.resource_type
) if op.properties.target_resource else None,
provisioning_state=op.properties.provisioning_state,
)
for op in get_failed_nested_operations(client, resource_group, operations)
]
def deploy_template(module, client, conn_info): def deploy_template(module, client, conn_info):
""" """
@ -464,11 +494,20 @@ def deploy_template(module, client, conn_info):
try: try:
client.resource_groups.create_or_update(group_name, params) client.resource_groups.create_or_update(group_name, params)
result = client.deployments.create_or_update(group_name, deployment_name, deploy_parameter) result = client.deployments.create_or_update(group_name, deployment_name, deploy_parameter)
return result.result() # Blocking wait, return the Deployment object deployment_result = result.result() # Blocking wait, return the Deployment object
if module.params.get('wait_for_deployment_completion'):
while not deployment_result.properties.provisioning_state in {'Canceled', 'Failed', 'Deleted', 'Succeeded'}:
deployment_result = client.deployments.get(group_name, deployment_name)
time.sleep(module.params.get('wait_for_deployment_polling_period'))
if deployment_result.properties.provisioning_state == 'Succeeded':
return deployment_result
failed_deployment_operations = get_failed_deployment_operations(module, client, group_name, deployment_name)
module.fail_json(msg='Deployment failed. Deployment id: %s' % (deployment_result.id), failed_deployment_operations=failed_deployment_operations)
except CloudError as e: except CloudError as e:
module.fail_json(msg='Deploy create failed with status code: %s and message: "%s"' % (e.status_code, e.message)) module.fail_json(msg='Deploy create failed with status code: %s and message: "%s"' % (e.status_code, e.message))
def destroy_resource_group(module, client, conn_info): def destroy_resource_group(module, client, conn_info):
""" """
Destroy the targeted resource group Destroy the targeted resource group
@ -516,14 +555,18 @@ def build_hierarchy(dependencies, tree=None):
def get_ip_dict(ip): def get_ip_dict(ip):
return dict(name=ip.name, ip_dict = dict(name=ip.name,
id=ip.id, id=ip.id,
public_ip=ip.ip_address, public_ip=ip.ip_address,
public_ip_allocation_method=str(ip.public_ip_allocation_method), public_ip_allocation_method=str(ip.public_ip_allocation_method))
dns_settings={
if ip.dns_settings:
ip_dict['dns_settings'] = {
'domain_name_label':ip.dns_settings.domain_name_label, 'domain_name_label':ip.dns_settings.domain_name_label,
'fqdn':ip.dns_settings.fqdn 'fqdn':ip.dns_settings.fqdn
}) }
return ip_dict
def nic_to_public_ips_instance(client, group, nics): def nic_to_public_ips_instance(client, group, nics):
@ -547,7 +590,7 @@ def main():
from ansible.module_utils.basic import AnsibleModule from ansible.module_utils.basic import AnsibleModule
argument_spec = dict( argument_spec = dict(
azure_url=dict(default=AZURE_URL), azure_url=dict(default=AZURE_URL),
subscription_id=dict(required=True), subscription_id=dict(),
client_secret=dict(no_log=True), client_secret=dict(no_log=True),
client_id=dict(), client_id=dict(),
tenant_or_domain=dict(), tenant_or_domain=dict(),
@ -560,7 +603,9 @@ def main():
parameters_link=dict(default=None), parameters_link=dict(default=None),
location=dict(default="West US"), location=dict(default="West US"),
deployment_mode=dict(default='Complete', choices=['Complete', 'Incremental']), deployment_mode=dict(default='Complete', choices=['Complete', 'Incremental']),
deployment_name=dict(default="ansible-arm") deployment_name=dict(default="ansible-arm"),
wait_for_deployment_completion=dict(default=True),
wait_for_deployment_polling_period=dict(default=30)
) )
module = AnsibleModule( module = AnsibleModule(
@ -591,7 +636,7 @@ def main():
'access_token':conn_info['security_token'] 'access_token':conn_info['security_token']
} }
) )
subscription_id = module.params.get('subscription_id') subscription_id = conn_info['subscription_id']
resource_client = ResourceManagementClient(ResourceManagementClientConfiguration(credentials, subscription_id)) resource_client = ResourceManagementClient(ResourceManagementClientConfiguration(credentials, subscription_id))
network_client = NetworkManagementClient(NetworkManagementClientConfiguration(credentials, subscription_id)) network_client = NetworkManagementClient(NetworkManagementClientConfiguration(credentials, subscription_id))
conn_info['deployment_name'] = module.params.get('deployment_name') conn_info['deployment_name'] = module.params.get('deployment_name')
@ -612,3 +657,4 @@ def main():
if __name__ == '__main__': if __name__ == '__main__':
main() main()

Loading…
Cancel
Save