def main(): module = AnsibleModule( argument_spec=dict( vlanid=dict(required=True, type='str'), name=dict(required=False), descr=dict(required=False), state=dict(choices=['present', 'absent'], default='present'), port=dict(default=830, type='int'), hostname=dict(required=True), username=dict(required=True), password=dict(required=True), ), supports_check_mode=True ) if not HAS_PYHP: module.fail_json(msg='There was a problem loading from the pyhpecw7 ' + 'module.', error=str(ie)) username = module.params['username'] password = module.params['password'] port = module.params['port'] hostname = socket.gethostbyname(module.params['hostname']) device_args = dict(host=hostname, username=username, password=password, port=port) device = HPCOM7(**device_args) vlanid = module.params['vlanid'] name = module.params['name'] descr = module.params['descr'] state = module.params['state'] changed = False args = dict(vlanid=vlanid, name=name, descr=descr) proposed = dict((k, v) for k, v in args.iteritems() if v is not None) try: device.open() except ConnectionError as e: safe_fail(module, device, msg=str(e)) try: vlan = Vlan(device, vlanid) vlan.param_check(**proposed) except LengthOfStringError as lose: safe_fail(module, device, msg=str(lose)) except VlanIDError as vie: safe_fail(module, device, msg=str(vie)) except PYHPError as e: safe_fail(module, device, msg=str(e)) try: existing = vlan.get_config() except PYHPError as e: safe_fail(module, device, msg=str(e), descr='error getting vlan config') if state == 'present': delta = dict(set(proposed.iteritems()).difference( existing.iteritems())) if delta: vlan.build(stage=True, **delta) elif state == 'absent': if existing: vlan.remove(stage=True) commands = None end_state = existing if device.staged: commands = device.staged_to_string() if module.check_mode: device.close() safe_exit(module, device, changed=True, commands=commands) else: try: device.execute_staged() end_state = vlan.get_config() except PYHPError as e: safe_fail(module, device, msg=str(e), descr='error during execution') changed = True results = {} results['proposed'] = proposed results['existing'] = existing results['state'] = state results['commands'] = commands results['changed'] = changed results['end_state'] = end_state safe_exit(module, device, **results)
def main(): module = AnsibleModule(argument_spec=dict( vlanid=dict(required=True, type='str'), name=dict(required=False), descr=dict(required=False), state=dict(choices=['present', 'absent'], default='present'), port=dict(default=830, type='int'), hostname=dict(required=True), username=dict(required=True), password=dict(required=True), ), supports_check_mode=True) if not HAS_PYHP: module.fail_json(msg='There was a problem loading from the pyhpecw7 ' + 'module.', error=str(ie)) username = module.params['username'] password = module.params['password'] port = module.params['port'] hostname = socket.gethostbyname(module.params['hostname']) device_args = dict(host=hostname, username=username, password=password, port=port) device = HPCOM7(**device_args) vlanid = module.params['vlanid'] name = module.params['name'] descr = module.params['descr'] state = module.params['state'] changed = False args = dict(vlanid=vlanid, name=name, descr=descr) proposed = dict((k, v) for k, v in args.iteritems() if v is not None) try: device.open() except ConnectionError as e: safe_fail(module, device, msg=str(e)) try: vlan = Vlan(device, vlanid) vlan.param_check(**proposed) except LengthOfStringError as lose: safe_fail(module, device, msg=str(lose)) except VlanIDError as vie: safe_fail(module, device, msg=str(vie)) except PYHPError as e: safe_fail(module, device, msg=str(e)) try: existing = vlan.get_config() except PYHPError as e: safe_fail(module, device, msg=str(e), descr='error getting vlan config') if state == 'present': delta = dict( set(proposed.iteritems()).difference(existing.iteritems())) if delta: vlan.build(stage=True, **delta) elif state == 'absent': if existing: vlan.remove(stage=True) commands = None end_state = existing if device.staged: commands = device.staged_to_string() if module.check_mode: device.close() safe_exit(module, device, changed=True, commands=commands) else: try: device.execute_staged() end_state = vlan.get_config() except PYHPError as e: safe_fail(module, device, msg=str(e), descr='error during execution') changed = True results = {} results['proposed'] = proposed results['existing'] = existing results['state'] = state results['commands'] = commands results['changed'] = changed results['end_state'] = end_state safe_exit(module, device, **results)
class VlanTestCase(BaseFeatureCase): @mock.patch('pyhpecw7.comware.HPCOM7') def setUp(self, mock_device): self.device = mock_device self.vlan = Vlan(self.device, vlanid='77') def test_get_vlan_list(self): expected_get, get_reply = self.xml_get_and_reply('vlan_list') self.device.get.return_value = get_reply expected = ['1', '20', '77'] vlan_list = self.vlan.get_vlan_list() self.assertEqual(vlan_list, expected) self.assert_get_request(expected_get) def test_get_config(self): expected_get, get_reply = self.xml_get_and_reply('vlan') self.device.get.return_value = get_reply expected = {'name': 'hello', 'vlanid': '77', 'descr': 'goodbye'} vlan = self.vlan.get_config() self.assertEqual(vlan, expected) self.assert_get_request(expected_get) def test_build_config(self): result = self.vlan._build_config(state='present') expected = self.read_config_xml('vlan') self.assert_elements_equal(result, expected) result = self.vlan._build_config(state='present', name='hello') expected = self.read_config_xml('vlan_name') self.assert_elements_equal(result, expected) result = self.vlan._build_config('present', name='hello', descr='goodbye') expected = self.read_config_xml('vlan_name_descr') self.assert_elements_equal(result, expected) result = self.vlan._build_config('absent') expected = self.read_config_xml('vlan_absent') self.assert_elements_equal(result, expected) def test_param_check(self): with self.assertRaises(LengthOfStringError): self.vlan.param_check(name=('a' * 255)) with self.assertRaises(LengthOfStringError): self.vlan.param_check(descr=('b' * 255)) @mock.patch.object(Vlan, '_build_config') def test_build(self, mock_build_config): self.vlan.build(name='a', descr='b') mock_build_config.assert_called_with(state='present', name='a', descr='b') self.device.edit_config.assert_called_with(mock_build_config.return_value) self.vlan.build(stage=False, name='a', descr='b') mock_build_config.assert_called_with(state='present', name='a', descr='b') self.device.edit_config.assert_called_with(mock_build_config.return_value) self.vlan.build(stage=True, name='a', descr='b') mock_build_config.assert_called_with(state='present', name='a', descr='b') self.device.stage_config.assert_called_with(mock_build_config.return_value, 'edit_config') @mock.patch.object(Vlan, '_build_config') def test_remove(self, mock_build_config): self.vlan.remove() mock_build_config.assert_called_with(state='absent') self.device.edit_config.assert_called_with(mock_build_config.return_value) self.vlan.remove(stage=False) mock_build_config.assert_called_with(state='absent') self.device.edit_config.assert_called_with(mock_build_config.return_value) self.vlan.remove(stage=True) mock_build_config.assert_called_with(state='absent') self.device.stage_config.assert_called_with(mock_build_config.return_value, 'edit_config')