def _load_compiled_config(self, compiled_config): """ Build HierarchicalConfiguration object for the Compiled Config """ compiled_config_hier = HierarchicalConfiguration( options=self.hier_options) compiled_config_hier.from_config_text(compiled_config) return compiled_config_hier
def _load_running_config(self, running_config): """ Build HierarchicalConfiguration object for the Running Config """ running_config_hier = HierarchicalConfiguration( options=self.hier_options) running_config_hier.from_config_text(running_config) return running_config_hier
def main(): module = AnsibleModule( argument_spec=dict(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=([ 'compiled_config', 'running_config', 'remediation_config', 'os_role' ]), supports_check_mode=False) 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']) 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 = HierarchicalConfiguration(options=hier_options) running_hier.from_file(running_config) else: module.fail_json(msg="Error opening {}.".format(running_config)) if os.path.isfile(compiled_config): compiled_hier = HierarchicalConfiguration(options=hier_options) compiled_hier.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.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.to_detailed_ouput(): if line['tags'] in config_tags: f.write('{}\n'.format(line['text'])) else: for line in remediation_hier.to_detailed_ouput(): f.write('{}\n'.format(line['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)