2016-12-26 06:36:45 +00:00
|
|
|
# -*- coding: utf-8 -*-
|
|
|
|
'''
|
|
|
|
:codeauthor: :email:`Eric Radman <ericshane@eradman.com>`
|
|
|
|
'''
|
|
|
|
|
|
|
|
# Import Python libs
|
|
|
|
from __future__ import absolute_import
|
|
|
|
|
|
|
|
# Import Salt Testing libs
|
2017-02-27 13:58:07 +00:00
|
|
|
from tests.support.unit import skipIf, TestCase
|
|
|
|
from tests.support.mock import (
|
2016-12-26 06:36:45 +00:00
|
|
|
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
|
|
|
|
'''
|
2017-04-10 13:00:57 +00:00
|
|
|
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)
|