From 379fb87b44985df12988c9baae343cf8354ab9f5 Mon Sep 17 00:00:00 2001 From: Etienne Deneuve <1010321+EtienneDeneuve@users.noreply.github.com> Date: Thu, 9 Aug 2018 11:00:17 +0200 Subject: [PATCH] add group_by_os_family in azure dynamic inventory (#40702) --- contrib/inventory/azure_rm.ini | 1 + contrib/inventory/azure_rm.py | 10 +++++++++- docs/docsite/rst/scenario_guides/guide_azure.rst | 10 +++++++++- 3 files changed, 19 insertions(+), 2 deletions(-) diff --git a/contrib/inventory/azure_rm.ini b/contrib/inventory/azure_rm.ini index 816da16532..6edd9b981b 100644 --- a/contrib/inventory/azure_rm.ini +++ b/contrib/inventory/azure_rm.ini @@ -19,4 +19,5 @@ include_powerstate=yes group_by_resource_group=yes group_by_location=yes group_by_security_group=yes +group_by_os_family=yes group_by_tag=yes diff --git a/contrib/inventory/azure_rm.py b/contrib/inventory/azure_rm.py index d68c83fae4..36ea938a6a 100755 --- a/contrib/inventory/azure_rm.py +++ b/contrib/inventory/azure_rm.py @@ -261,6 +261,7 @@ AZURE_CONFIG_SETTINGS = dict( group_by_location='AZURE_GROUP_BY_LOCATION', group_by_security_group='AZURE_GROUP_BY_SECURITY_GROUP', group_by_tag='AZURE_GROUP_BY_TAG', + group_by_os_family='AZURE_GROUP_BY_OS_FAMILY', use_private_ip='AZURE_USE_PRIVATE_IP' ) @@ -572,6 +573,7 @@ class AzureInventory(object): self.replace_dash_in_groups = False self.group_by_resource_group = True self.group_by_location = True + self.group_by_os_family = True self.group_by_security_group = True self.group_by_tag = True self.include_powerstate = True @@ -706,7 +708,7 @@ class AzureInventory(object): host_vars['os_disk'] = dict( name=machine.storage_profile.os_disk.name, - operating_system_type=machine.storage_profile.os_disk.os_type.value + operating_system_type=machine.storage_profile.os_disk.os_type.value.lower() ) if self.include_powerstate: @@ -811,10 +813,16 @@ class AzureInventory(object): host_name = self._to_safe(vars['name']) resource_group = self._to_safe(vars['resource_group']) + operating_system_type = self._to_safe(vars['os_disk']['operating_system_type'].lower()) security_group = None if vars.get('security_group'): security_group = self._to_safe(vars['security_group']) + if self.group_by_os_family: + if not self._inventory.get(operating_system_type): + self._inventory[operating_system_type] = [] + self._inventory[operating_system_type].append(host_name) + if self.group_by_resource_group: if not self._inventory.get(resource_group): self._inventory[resource_group] = [] diff --git a/docs/docsite/rst/scenario_guides/guide_azure.rst b/docs/docsite/rst/scenario_guides/guide_azure.rst index 1cbec34940..165f83cb4b 100644 --- a/docs/docsite/rst/scenario_guides/guide_azure.rst +++ b/docs/docsite/rst/scenario_guides/guide_azure.rst @@ -328,6 +328,7 @@ By default hosts are grouped by: * security group name * tag key * tag key_value +* os_disk operating_system_type (Windows/Linux) You can control host groupings and host selection by either defining environment variables or creating an azure_rm.ini file in your current working directory. @@ -344,6 +345,7 @@ Control grouping using the following variables defined in the environment: * AZURE_GROUP_BY_LOCATION=yes * AZURE_GROUP_BY_SECURITY_GROUP=yes * AZURE_GROUP_BY_TAG=yes +* AZURE_GROUP_BY_OS_FAMILY=yes Select hosts within specific resource groups by assigning a comma separated list to: @@ -390,7 +392,7 @@ file will contain the following: group_by_location=yes group_by_security_group=yes group_by_tag=yes - + group_by_os_family=yes Examples ........ @@ -402,6 +404,12 @@ Here are some examples using the inventory script: # Execute /bin/uname on all instances in the Testing resource group $ ansible -i azure_rm.py Testing -m shell -a "/bin/uname -a" + # Execute win_ping on all Windows instances + $ ansible -i azure_rm.py windows -m win_ping + + # Execute win_ping on all Windows instances + $ ansible -i azure_rm.py winux -m ping + # Use the inventory script to print instance specific information $ ./ansible/contrib/inventory/azure_rm.py --host my_instance_host_name --resource-groups=Testing --pretty