Exemple #1
0
 def test_config_to_get_to(self):
     running_config_hier = HConfig(self.host_a, self.os, self.options)
     running_config_hier.add_child('interface Vlan2')
     compiled_config_hier = HConfig(self.host_a, self.os, self.options)
     compiled_config_hier.add_child('interface Vlan3')
     remediation_config_hier = running_config_hier.config_to_get_to(
         compiled_config_hier)
     self.assertEqual(2, len(list(remediation_config_hier.all_children())))
Exemple #2
0
 def test_config_to_get_to(self):
     running_config_hier = HConfig(host=self.host_a)
     interface = running_config_hier.add_child('interface Vlan2')
     interface.add_child('ip address 192.168.1.1/24')
     compiled_config_hier = HConfig(host=self.host_a)
     compiled_config_hier.add_child('interface Vlan3')
     remediation_config_hier = running_config_hier.config_to_get_to(
         compiled_config_hier)
     self.assertEqual(2, len(list(remediation_config_hier.all_children())))
Exemple #3
0
 def test_config_to_get_to(self):
     running_config_hier = HConfig(host=self.host_a)
     interface = running_config_hier.add_child("interface Vlan2")
     interface.add_child("ip address 192.168.1.1/24")
     generated_config_hier = HConfig(host=self.host_a)
     generated_config_hier.add_child("interface Vlan3")
     remediation_config_hier = running_config_hier.config_to_get_to(
         generated_config_hier
     )
     assert len(list(remediation_config_hier.all_children())) == 2
def test_issue104() -> None:
    running_config_raw = ("tacacs-server deadtime 3\n"
                          "tacacs-server host 192.168.1.99 key 7 Test12345\n")
    generated_config_raw = (
        "tacacs-server host 192.168.1.98 key 0 Test135 timeout 3\n"
        "tacacs-server host 192.168.100.98 key 0 test135 timeout 3\n")

    host = Host(hostname="test", os="nxos")
    running_config = HConfig(host=host)
    running_config.load_from_string(running_config_raw)
    generated_config = HConfig(host=host)
    generated_config.load_from_string(generated_config_raw)
    rem = running_config.config_to_get_to(generated_config)
    expected_rem_lines = {
        "no tacacs-server deadtime 3",
        "no tacacs-server host 192.168.1.99 key 7 Test12345",
        "tacacs-server host 192.168.1.98 key 0 Test135 timeout 3",
        "tacacs-server host 192.168.100.98 key 0 test135 timeout 3",
    }
    rem_lines = {line.cisco_style_text() for line in rem.all_children()}
    assert expected_rem_lines == rem_lines
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)