# -*- coding: utf-8 -*- ''' :codeauthor: :email:`Eric Radman ` ''' # Import Python libs from __future__ import absolute_import # Import Salt Testing libs from tests.support.unit import skipIf, TestCase from tests.support.mock import ( MagicMock, patch, NO_MOCK, NO_MOCK_REASON, ) # Import Salt libs import salt.cloud EXAMPLE_PROVIDERS = { 'nyc_vcenter': {'vmware': {'driver': 'vmware', 'password': '123456', 'profiles': {'nyc-vm': {'cluster': 'nycvirt', 'datastore': 'datastore1', 'devices': {'disk': {'Hard disk 1': {'controller': 'SCSI controller 1', 'size': 20}}, 'network': {'Network Adapter 1': {'mac': '44:44:44:44:44:42', 'name': 'vlan50', 'switch_type': 'standard'}}, 'scsi': {'SCSI controller 1': {'type': 'paravirtual'}}}, 'extra_config': {'mem.hotadd': 'yes'}, 'folder': 'coreinfra', 'image': 'rhel6_64Guest', 'memory': '8GB', 'num_cpus': 2, 'power_on': True, 'profile': 'nyc-vm', 'provider': 'nyc_vcenter:vmware', 'resourcepool': 'Resources'}}, 'url': 'vca1.saltstack.com', 'user': 'root'}} } EXAMPLE_PROFILES = { 'nyc-vm': {'cluster': 'nycvirt', 'datastore': 'datastore1', 'devices': {'disk': {'Hard disk 1': {'controller': 'SCSI controller 1', 'size': 20}}, 'network': {'Network Adapter 1': {'mac': '44:44:44:44:44:42', 'name': 'vlan50', 'switch_type': 'standard'}}, 'scsi': {'SCSI controller 1': {'type': 'paravirtual'}}}, 'extra_config': {'mem.hotadd': 'yes'}, 'folder': 'coreinfra', 'image': 'rhel6_64Guest', 'memory': '8GB', 'num_cpus': 2, 'power_on': True, 'profile': 'nyc-vm', 'provider': 'nyc_vcenter:vmware', 'resourcepool': 'Resources'} } EXAMPLE_MAP = { 'nyc-vm': {'db1': {'cpus': 4, 'devices': {'disk': {'Hard disk 1': {'size': 40}}, 'network': {'Network Adapter 1': {'mac': '22:4a:b2:92:b3:eb'}}}, 'memory': '16GB', 'name': 'db1'}} } @skipIf(NO_MOCK, NO_MOCK_REASON) class MapConfTest(TestCase): ''' Validate evaluation of salt-cloud map configuration ''' def test_cloud_map_merge_conf(self): ''' Ensure that nested values can be selectivly overridden in a map file ''' with patch('salt.config.check_driver_dependencies', MagicMock(return_value=True)), \ patch('salt.cloud.Map.read', MagicMock(return_value=EXAMPLE_MAP)): self.maxDiff = None opts = {'extension_modules': '/var/cache/salt/master/extmods', 'providers': EXAMPLE_PROVIDERS, 'profiles': EXAMPLE_PROFILES} cloud_map = salt.cloud.Map(opts) merged_profile = { 'create': {'db1': {'cluster': 'nycvirt', 'cpus': 4, 'datastore': 'datastore1', 'devices': {'disk': {'Hard disk 1': {'controller': 'SCSI controller 1', 'size': 40}}, 'network': {'Network Adapter 1': {'mac': '22:4a:b2:92:b3:eb', 'name': 'vlan50', 'switch_type': 'standard'}}, 'scsi': {'SCSI controller 1': {'type': 'paravirtual'}}}, 'driver': 'vmware', 'extra_config': {'mem.hotadd': 'yes'}, 'folder': 'coreinfra', 'image': 'rhel6_64Guest', 'memory': '16GB', 'name': 'db1', 'num_cpus': 2, 'password': '123456', 'power_on': True, 'profile': 'nyc-vm', 'provider': 'nyc_vcenter:vmware', 'resourcepool': 'Resources', 'url': 'vca1.saltstack.com', 'user': 'root'}} } self.assertEqual(cloud_map.map_data(), merged_profile)