Chad Smith has proposed merging ~chad.smith/cloud-init:cleanup/render-az-instance-data-for-azure into cloud-init:master.
Commit message: azure: render avaiability zone in instance-data.json Azure's IMDS service provides availability zone location information. Expose that compute.location information as the instance availability zone. Requested reviews: cloud-init commiters (cloud-init-dev) For more details, see: https://code.launchpad.net/~chad.smith/cloud-init/+git/cloud-init/+merge/353530 Example Azure IMDS instance-data.json: { "base64-encoded-keys": [ "ds/meta-data/random_seed", "ds/user-data" ], "ds": { "meta-data": { "azure_data": { "configurationsettype": "LinuxProvisioningConfiguration" }, "imds": { "compute": { "location": "eastus2", "name": "my-c1", "offer": "UbuntuServer", "osType": "Linux", "placementGroupId": "", "platformFaultDomain": "0", "platformUpdateDomain": "0", "publisher": "Canonical", "resourceGroupName": "srugroup1", "sku": "18.10-DAILY", "subscriptionId": "12aad61c-6de4-4e53-a6c6-5aff52a83777", "tags": "", "version": "18.10.201808150", "vmId": "a23bf3e3-ed47-4ae3-919f-8e4b445a5624", "vmScaleSetName": "", "vmSize": "Standard_DS1_v2", "zone": "" }, "network": { "interface": [ { "ipv4": { "ipAddress": [ { "privateIpAddress": "10.0.0.4", "publicIpAddress": "104.210.15.52" } ], "subnet": [ { "address": "10.0.0.0", "prefix": "24" } ] }, "ipv6": { "ipAddress": [] }, "macAddress": "000D3A04186B" } ] } }, "instance-id": "e3f33ba2-47ed-e34a-919f-8e4b445a5624", "local-hostname": "my-c1", "random_seed": "T0VNMGQAAAABTVZSVFVBTE1JQ1JPU0ZUAhcABk1TRlSXAAAA8AwjVxwe3X9w76ahFp8SESrhF6AtP/c/rTcRlJNgsqTyQc85yMgLeIuXcpQvBsF0vxstzBuBqbY64qpQ2N2YNw==" }, "user-data": "I2Nsb3VkLWNvbmZpZwpzc2hfaW1wb3J0X2lkOiBbY2hhZC5zbWl0aF0KaG9zdG5hbWU6IFNSVS13b3JrZWQKcnVuY21kOgogICAgICAgICAgLSBlY2hvICdoaScKICAgICAgICAgIC0gZWNobyAnaGknICAgIyBDaGVjayBMUDogIzE3NjQyNjQgU2NoZW1hOiBkbyBub3Qgd2FybiBvbiBkdXBsaWNhdGUgaXRlbXMgaW4gY29tbWFuZHMKCg==", "vendor-data": null }, "v1": { "availability-zone": null, "cloud-name": "azure", "instance-id": "e3f33ba2-47ed-e34a-919f-8e4b445a5624", "local-hostname": "my-c1", "region": null } } -- Your team cloud-init commiters is requested to review the proposed merge of ~chad.smith/cloud-init:cleanup/render-az-instance-data-for-azure into cloud-init:master.
diff --git a/cloudinit/sources/DataSourceAzure.py b/cloudinit/sources/DataSourceAzure.py index 783445e..658b935 100644 --- a/cloudinit/sources/DataSourceAzure.py +++ b/cloudinit/sources/DataSourceAzure.py @@ -308,6 +308,13 @@ class DataSourceAzure(sources.DataSource): util.logexc(LOG, "handling set_hostname failed") return False + @property + def availability_zone(self): + imds_md = self.metadata.get('imds') + if imds_md: + return self.metadata.get('compute', {}).get('location') + return None + def get_metadata_from_agent(self): temp_hostname = self.metadata.get('local-hostname') agent_cmd = self.ds_cfg['agent_command'] diff --git a/tests/unittests/test_datasource/test_azure.py b/tests/unittests/test_datasource/test_azure.py index 4e428b7..6371cb6 100644 --- a/tests/unittests/test_datasource/test_azure.py +++ b/tests/unittests/test_datasource/test_azure.py @@ -83,7 +83,26 @@ def construct_valid_ovf_env(data=None, pubkeys=None, return content -NETWORK_METADATA = { +IMDS_METADATA = { + "compute": { + "location": "eastus2", + "name": "my-c1", + "offer": "UbuntuServer", + "osType": "Linux", + "placementGroupId": "", + "platformFaultDomain": "0", + "platformUpdateDomain": "0", + "publisher": "Canonical", + "resourceGroupName": "srugroup1", + "sku": "18.10-DAILY", + "subscriptionId": "12aad61c-6de4-4e53-a6c6-5aff52a83777", + "tags": "", + "version": "18.10.201808150", + "vmId": "a23bf3e3-ed47-4ae3-919f-8e4b445a5624", + "vmScaleSetName": "", + "vmSize": "Standard_DS1_v2", + "zone": "" + }, "network": { "interface": [ { @@ -127,9 +146,9 @@ class TestGetMetadataFromIMDS(HttprettyTestCase): """Do not perform DHCP setup when nic is already up.""" m_net_is_up.return_value = True m_readurl.return_value = url_helper.StringResponse( - json.dumps(NETWORK_METADATA).encode('utf-8')) + json.dumps(IMDS_METADATA).encode('utf-8')) self.assertEqual( - NETWORK_METADATA, + IMDS_METADATA, dsaz.get_metadata_from_imds('eth9', retries=3)) m_net_is_up.assert_called_with('eth9') @@ -146,10 +165,10 @@ class TestGetMetadataFromIMDS(HttprettyTestCase): """Perform DHCP setup when nic is not up.""" m_net_is_up.return_value = False m_readurl.return_value = url_helper.StringResponse( - json.dumps(NETWORK_METADATA).encode('utf-8')) + json.dumps(IMDS_METADATA).encode('utf-8')) self.assertEqual( - NETWORK_METADATA, + IMDS_METADATA, dsaz.get_metadata_from_imds('eth9', retries=2)) m_net_is_up.assert_called_with('eth9') @@ -186,6 +205,7 @@ class TestGetMetadataFromIMDS(HttprettyTestCase): class TestAzureDataSource(CiTestCase): with_logs = True + maxDiff= None def setUp(self): super(TestAzureDataSource, self).setUp() @@ -206,7 +226,7 @@ class TestAzureDataSource(CiTestCase): self.m_get_metadata_from_imds = self.patches.enter_context( mock.patch.object( dsaz, 'get_metadata_from_imds', - mock.MagicMock(return_value=NETWORK_METADATA))) + mock.MagicMock(return_value=IMDS_METADATA))) self.m_fallback_nic = self.patches.enter_context( mock.patch('cloudinit.sources.net.find_fallback_nic', return_value='eth9')) @@ -438,13 +458,7 @@ fdescfs /dev/fd fdescfs rw 0 0 expected_metadata = { 'azure_data': { 'configurationsettype': 'LinuxProvisioningConfiguration'}, - 'imds': {'network': {'interface': [{ - 'ipv4': {'ipAddress': [ - {'privateIpAddress': '10.0.0.4', - 'publicIpAddress': '104.46.124.81'}], - 'subnet': [{'address': '10.0.0.0', 'prefix': '24'}]}, - 'ipv6': {'ipAddress': []}, - 'macAddress': '000D3A047598'}]}}, + 'imds': IMDS_METADATA, 'instance-id': 'test-instance-id', 'local-hostname': u'myhost', 'random_seed': 'wild'}
_______________________________________________ Mailing list: https://launchpad.net/~cloud-init-dev Post to : cloud-init-dev@lists.launchpad.net Unsubscribe : https://launchpad.net/~cloud-init-dev More help : https://help.launchpad.net/ListHelp