diff options
| -rw-r--r-- | cloudinit/sources/DataSourceSmartOS.py | 19 | ||||
| -rw-r--r-- | tests/unittests/test_datasource/test_smartos.py | 51 | 
2 files changed, 62 insertions, 8 deletions
| diff --git a/cloudinit/sources/DataSourceSmartOS.py b/cloudinit/sources/DataSourceSmartOS.py index 6355fc2a..35fa8c33 100644 --- a/cloudinit/sources/DataSourceSmartOS.py +++ b/cloudinit/sources/DataSourceSmartOS.py @@ -64,7 +64,11 @@ SMARTOS_ATTRIB_MAP = {      'availability_zone': ('sdc:datacenter_name', True),      'vendor-data': ('sdc:vendor-data', False),      'operator-script': ('sdc:operator-script', False), -    'network-data': ('sdc:nics', False), +} + +SMARTOS_ATTRIB_JSON = { +    # Cloud-init Key : (SmartOS Key known JSON) +    'network-data': 'sdc:nics',  }  DS_NAME = 'SmartOS' @@ -233,6 +237,9 @@ class DataSourceSmartOS(sources.DataSource):              smartos_noun, strip = attribute              md[ci_noun] = self.md_client.get(smartos_noun, strip=strip) +        for ci_noun, smartos_noun in SMARTOS_ATTRIB_JSON.items(): +            md[ci_noun] = self.md_client.get_json(smartos_noun) +          # @datadictionary: This key may contain a program that is written          # to a file in the filesystem of the guest on each boot and then          # executed. It may be of any format that would be considered @@ -281,11 +288,7 @@ class DataSourceSmartOS(sources.DataSource):          self.metadata = util.mergemanydict([md, self.metadata])          self.userdata_raw = ud          self.vendordata_raw = md['vendor-data'] -        if not md['network-data']: -            smartos_noun, strip = SMARTOS_ATTRIB_MAP.get('network-data') -            self.network_data = self.md_client.get_json(smartos_noun, -                                                        strip=strip) -            md['network-data'] = self.network_data +        self.network_data = md['network-data']          self._set_provisioned()          return True @@ -401,8 +404,8 @@ class JoyentMetadataClient(object):              result = result.strip()          return result -    def get_json(self, key, default=None, strip=False): -        result = self.get(key, default=default, strip=strip) +    def get_json(self, key, default=None): +        result = self.get(key, default=default)          if result is None:              return default          return json.loads(result) diff --git a/tests/unittests/test_datasource/test_smartos.py b/tests/unittests/test_datasource/test_smartos.py index 5c49966a..1ee64d60 100644 --- a/tests/unittests/test_datasource/test_smartos.py +++ b/tests/unittests/test_datasource/test_smartos.py @@ -24,6 +24,7 @@  from __future__ import print_function +import json  import os  import os.path  import re @@ -47,6 +48,48 @@ try:  except ImportError:      import mock +SDC_NICS = json.loads(""" +[ +    { +        "nic_tag": "external", +        "primary": true, +        "mtu": 1500, +        "model": "virtio", +        "gateway": "8.12.42.1", +        "netmask": "255.255.255.0", +        "ip": "8.12.42.102", +        "network_uuid": "992fc7ce-6aac-4b74-aed6-7b9d2c6c0bfe", +        "gateways": [ +            "8.12.42.1" +        ], +        "vlan_id": 324, +        "mac": "90:b8:d0:f5:e4:f5", +        "interface": "net0", +        "ips": [ +            "8.12.42.102/24" +        ] +    }, +    { +        "nic_tag": "sdc_overlay/16187209", +        "gateway": "192.168.128.1", +        "model": "virtio", +        "mac": "90:b8:d0:a5:ff:cd", +        "netmask": "255.255.252.0", +        "ip": "192.168.128.93", +        "network_uuid": "4cad71da-09bc-452b-986d-03562a03a0a9", +        "gateways": [ +            "192.168.128.1" +        ], +        "vlan_id": 2, +        "mtu": 8500, +        "interface": "net1", +        "ips": [ +            "192.168.128.93/22" +        ] +    } +] +""") +  MOCK_RETURNS = {      'hostname': 'test-host',      'root_authorized_keys': 'ssh-rsa AAAAB3Nz...aC1yc2E= keyname', @@ -60,6 +103,7 @@ MOCK_RETURNS = {      'sdc:vendor-data': '\n'.join(['VENDOR_DATA', '']),      'user-data': '\n'.join(['something', '']),      'user-script': '\n'.join(['/bin/true', '']), +    'sdc:nics': SDC_NICS,  }  DMI_DATA_RETURN = 'smartdc' @@ -275,6 +319,13 @@ class TestSmartOSDataSource(helpers.FilesystemMockingTestCase):          self.assertEquals(MOCK_RETURNS['cloud-init:user-data'],                            dsrc.userdata_raw) +    def test_sdc_nics(self): +        dsrc = self._get_ds(mockdata=MOCK_RETURNS) +        ret = dsrc.get_data() +        self.assertTrue(ret) +        self.assertEquals(MOCK_RETURNS['sdc:nics'], +                          dsrc.metadata['network-data']) +      def test_sdc_scripts(self):          dsrc = self._get_ds(mockdata=MOCK_RETURNS)          ret = dsrc.get_data() | 
