cloud-init-dev team mailing list archive
-
cloud-init-dev team
-
Mailing list archive
-
Message #05373
[Merge] ~chad.smith/cloud-init:cleanup/render-az-instance-data-for-azure into cloud-init:master
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'}
Follow ups