def test_load_from_file(self): hier = HConfig(host=self.host_a) config = 'interface Vlan2\n ip address 1.1.1.1 255.255.255.0' with tempfile.NamedTemporaryFile(mode='r+') as myfile: myfile.file.write(config) myfile.file.flush() hier.load_from_file(myfile.name) self.assertEqual(2, len(list(hier.all_children())))
def test_load_from_file(self): hier = HConfig(host=self.host_a) config = "interface Vlan2\n ip address 1.1.1.1 255.255.255.0" with tempfile.NamedTemporaryFile(mode="r+", delete=False) as myfile: myfile.file.write(config) myfile.file.flush() myfile.close() hier.load_from_file(myfile.name) os.remove(myfile.name) assert len(list(hier.all_children())) == 2
def main(): module = AnsibleModule( argument_spec=dict( hostname=dict(required=True), compiled_config=dict(required=True), running_config=dict(required=True), remediation_config=dict(required=True), os_role=dict(required=True), config_tags=dict(required=False) ), required_together=( ['hostname', 'compiled_config', 'running_config', 'remediation_config', 'os_role'] ), supports_check_mode=False ) hostname = str(module.params['hostname']) compiled_config = str(module.params['compiled_config']) running_config = str(module.params['running_config']) remediation_config = str(module.params['remediation_config']) os_role = str(module.params['os_role']) operating_system = os_role.strip('os_') if module.params['config_tags']: config_tags = list(module.params['config_tags']) else: config_tags = False hier_files = ['hierarchical_configuration_options.yml', 'hierarchical_configuration_tags.yml'] for item in hier_files: if not os.path.isfile('roles/{}/vars/{}'.format( os_role, item)): module.fail_json(msg="Error opening {}.".format(item)) hier_options = yaml.load(open('roles/{}/vars/{}'.format( os_role, 'hierarchical_configuration_options.yml'))) hier_tags = yaml.load(open('roles/{}/vars/{}'.format( os_role, 'hierarchical_configuration_tags.yml'))) if os.path.isfile(running_config): running_hier = HConfig(hostname=hostame, os=operating_system, options=hier_options ) running_hier.load_from_file(running_config) else: module.fail_json(msg="Error opening {}.".format(running_config)) if os.path.isfile(compiled_config): compiled_hier = HConfig(hostname=hostame, os=operating_system, options=hier_options ) compiled_hier.load_from_file(compiled_config) else: module.fail_json(msg="Error opening {}.".format(compiled_config)) remediation_hier = compiled_hier.deep_diff_tree_with(running_hier) remediation_hier = running_hier.config_to_get_to(compiled_hier) remediation_hier.set_order_weight() remediation_hier.add_sectional_exiting() remediation_hier.add_tags(hier_tags) with open(remediation_config, 'w') as f: if config_tags: for line in remediation_hier.dump(): if line['tags'] in config_tags: f.write('{}\n'.format(line['text'])) else: for line in remediation_hier.all_children(): f.write('{}\n'.format(line.cisco_style_text())) with open(remediation_config) as f: remediation_config = f.read() results = dict() results['response'] = remediation_config if len(remediation_config) > 0: module.exit_json(changed=True, **results) else: module.exit_json(changed=False)