blob: 2244b5a46a3732e9fc7a117b281de1758973d43f [file] [log] [blame]
#!/usr/bin/python3
#
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
# flake8: noqa
from __future__ import absolute_import, division, print_function
__metaclass__ = type
import six
ANSIBLE_METADATA = {'metadata_version': '1.1',
'status': ['preview'],
'supported_by': 'community'}
DOCUMENTATION = '''
---
module: azure_rm_virtualmachinescaleset_nic_list_facts
version_added: "2.9"
short_description: Get network interface facts for a VMSS
description:
- Get a list of all network interfaces for a virtual machine scale set
options:
vmss_name:
description:
- Name of the virtual machine scale set.
required: true
resource_group:
description:
- Name of the resource group containing the virtual machine scale set.
required: true
extends_documentation_fragment:
- azure
author:
- "Min Pae (@sputnik13)"
'''
EXAMPLES = '''
- name: Get all network interfaces in a virtual machine scale set
azure_rm_virtualmachinescaleset_nic_list_facts:
resource_group: myResourceGroup
vmss_name: myvmss
'''
RETURN = '''
azure_networkinterfaces:
description: List of network interface dicts.
returned: always
type: list
example: [{
"dns_settings": {
"applied_dns_servers": [],
"dns_servers": [],
"internal_dns_name_label": null,
"internal_fqdn": null
},
"enable_ip_forwarding": false,
"etag": 'W/"59726bfc-08c4-44ed-b900-f6a559876a9d"',
"id": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroup/myResourceGroup/providers/Microsoft.Network/networkInterfaces/nic003",
"ip_configuration": {
"name": "default",
"private_ip_address": "10.10.0.4",
"private_ip_allocation_method": "Dynamic",
"public_ip_address": {
"id": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroup/myResourceGroup/providers/Microsoft.Network/publicIPAddresses/publicip001",
"name": "publicip001"
},
"subnet": {
"id": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroup/myResourceGroup/providers/Microsoft.Network/virtualNetworks/vnet001/subnets/subnet001",
"name": "subnet001",
"virtual_network_name": "vnet001"
}
},
"location": "westus",
"mac_address": null,
"name": "nic003",
"network_security_group": {
"id": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroup/myResourceGroup/providers/Microsoft.Network/networkSecurityGroups/secgroup001",
"name": "secgroup001"
},
"primary": null,
"provisioning_state": "Succeeded",
"tags": {},
"type": "Microsoft.Network/networkInterfaces"
}]
networkinterfaces:
description: List of network interface dict, the dict contains parameters can be passed to C(azure_rm_networkinterface) module.
type: list
returned: always
contains:
id:
description:
- Id of the network interface.
resource_group:
description:
- Name of a resource group where the network interface exists.
name:
description:
- Name of the network interface.
location:
description:
- Azure location.
virtual_network:
description:
- An existing virtual network with which the network interface will be associated.
- It is a dict which contains C(name) and C(resource_group) of the virtual network.
subnet:
description:
- Name of an existing subnet within the specified virtual network.
tags:
description:
- Tags of the network interface.
ip_configurations:
description:
- List of ip configuration if contains mutilple configuration.
contains:
name:
description:
- Name of the ip configuration.
private_ip_address:
description:
- Private ip address for the ip configuration.
private_ip_allocation_method:
description:
- private ip allocation method.
public_ip_address:
description:
- Name of the public ip address. None for disable ip address.
public_ip_allocation_method:
description:
- public ip allocation method.
load_balancer_backend_address_pools:
description:
- List of an existing load-balancer backend address pool id to associate with the network interface.
primary:
description:
- Whether the ip configuration is the primary one in the list.
application_security_groups:
description:
- List of Application security groups.
sample: /subscriptions/<subsid>/resourceGroups/<rg>/providers/Microsoft.Network/applicationSecurityGroups/myASG
enable_accelerated_networking:
description:
- Specifies whether the network interface should be created with the accelerated networking feature or not
create_with_security_group:
description:
- Specifies whether a default security group should be be created with the NIC. Only applies when creating a new NIC.
type: bool
security_group:
description:
- A security group resource ID with which to associate the network interface.
enable_ip_forwarding:
description:
- Whether to enable IP forwarding
dns_servers:
description:
- Which DNS servers should the NIC lookup
- List of IP's
mac_address:
description:
- The MAC address of the network interface.
provisioning_state:
description:
- The provisioning state of the network interface.
dns_settings:
description:
- The DNS settings in network interface.
contains:
dns_servers:
description: List of DNS servers IP addresses.
applied_dns_servers:
description:
- If the VM that uses this NIC is part of an Availability Set, then this list will have the union of all DNS servers
from all NICs that are part of the Availability Set. This property is what is configured on each of those VMs.
internal_dns_name_label:
description: Relative DNS name for this NIC used for internal communications between VMs in the same virtual network.
internal_fqdn:
description: Fully qualified DNS name supporting internal communications between VMs in the same virtual network.
''' # NOQA
try:
from msrestazure.azure_exceptions import CloudError
from azure.common import AzureMissingResourceHttpError, AzureHttpError
except Exception:
# This is handled in azure_rm_common
pass
from ansible.module_utils.azure_rm_common import AzureRMModuleBase, azure_id_to_dict
AZURE_OBJECT_CLASS = 'NetworkInterface'
class AzureRMVirtualMachineScaleSetNetworkInterfaceFacts(AzureRMModuleBase):
def __init__(self):
self.module_arg_spec = dict(
vmss_name=dict(type='str', required=True),
resource_group=dict(type='str', required=True),
tags=dict(type='list')
)
self.results = dict(
changed=False,
networkinterfaces=[]
)
self.vmss_name = None
self.resource_group = None
self.tags = None
super(AzureRMVirtualMachineScaleSetNetworkInterfaceFacts,
self).__init__(self.module_arg_spec,
supports_tags=False,
facts_module=True
)
def exec_module(self, **kwargs):
for key in self.module_arg_spec:
setattr(self, key, kwargs[key])
if not (self.vmss_name and self.resource_group):
self.fail("Parameter error: resource group and name are required parameters.")
networkinterfaces = []
networkinterfaces = self.list_nics()
self.results['networkinterfaces'] = self._promote_properties(self.serialize_nics(networkinterfaces))
return self.results
def list_nics(self):
self.log('Get properties for {0}'.format(self.vmss_name))
item = None
try:
return self.network_client.network_interfaces.list_virtual_machine_scale_set_network_interfaces(self.resource_group, self.vmss_name)
except Exception as exc:
self.fail("Error fetching nic list - {0}".format(str(exc)))
def serialize_nics(self, raws):
return [self.serialize_obj(item, AZURE_OBJECT_CLASS) for item in raws] if raws else []
def _promote_properties(self, obj):
if isinstance(obj, list):
return [self._promote_properties(i) for i in obj]
if isinstance(obj, dict):
for k,v in six.iteritems(obj):
if isinstance(v, (list, dict)):
obj.update({k: self._promote_properties(v)})
if isinstance(obj.get("properties"), dict):
properties = obj.pop("properties")
obj.update(properties)
return obj
def main():
AzureRMVirtualMachineScaleSetNetworkInterfaceFacts()
if __name__ == '__main__':
main()