diff --git a/.ansible-lint b/.ansible-lint index 00671fe2bf45a12d86eec2c8a4e1fe85c3abb9b8..2f674e4732b9c3c7c911054d16515e7359f470b0 100644 --- a/.ansible-lint +++ b/.ansible-lint @@ -3,3 +3,4 @@ skip_list: - 'role-name[path]' # Avoid using paths when importing roles. - 'meta-runtime[unsupported-version]' # requires_ansible key must be set to a supported version. - 'meta-unsupported-ansible' # Required ansible version in meta/runtime.yml must be a supported version. + - 'var-naming[no-role-prefix]' diff --git a/geant/ops_ansible/CHANGELOG.md b/geant/ops_ansible/CHANGELOG.md index 935129e946caa210919a70a24523fdd5f90e6b74..4d7ddebcaad665941d6240b7517aa26b79bd4a30 100644 --- a/geant/ops_ansible/CHANGELOG.md +++ b/geant/ops_ansible/CHANGELOG.md @@ -1,9 +1,24 @@ -# Changelog -## 1.0.4 2023-08-04 -- Changes in the role 'cic_generic': - - Added support for fixing a stanza: a new verb 'fix' to work with the fix_template. - - Added support for Junos 'system_login' stanza. -## 1.0.3 2023-08-02 -- Added cic_generic role to manage the test of arbitrary templates against the network. -- Config push strategy is now template-dependant: you should decide if you want a replace or a merge -- Added email generation for test runs that generates differences +Changelog +========= +1.0.5 2023-10-13 + +Changes in the role 'cic_generic': + +- system_login stanza is in the 'replace' mode. +- Added support for system_dns stanza + + +1.0.4 2023-08-04 + +Changes in the role 'cic_generic': + +Added support for fixing a stanza: a new verb 'fix' to work with the fix_template. +Added support for Junos 'system_login' stanza. + + + +1.0.3 2023-08-02 + +Added cic_generic role to manage the test of arbitrary templates against the network. +Config push strategy is now template-dependant: you should decide if you want a replace or a merge +Added email generation for test runs that generates differences diff --git a/geant/ops_ansible/roles/cic_generic/tasks/main.yml b/geant/ops_ansible/roles/cic_generic/tasks/main.yml index 3c862bce8c33fd14b2a19954cb2235af947c66d5..7c26c1ef0d61ebb4b00924c44a3e2a6121c6fc43 100644 --- a/geant/ops_ansible/roles/cic_generic/tasks/main.yml +++ b/geant/ops_ansible/roles/cic_generic/tasks/main.yml @@ -21,6 +21,30 @@ ansible.builtin.debug: msg: "{{ opid }}" +- name: Merge system login user vars + merge_vars: + suffix_to_merge: users__to_merge + merged_var_name: system_login_users + expected_type: 'list' + +- name: Merge system login classes vars + merge_vars: + suffix_to_merge: classes__to_merge + merged_var_name: system_login_classes + expected_type: 'list' + +- name: Merge snmp communities vars + merge_vars: + suffix_to_merge: snmp_communities__to_merge + merged_var_name: snmp_communities + expected_type: 'list' + +- name: Merge prefix lists + merge_vars: + suffix_to_merge: prefix_lists__to_merge + merged_var_name: po_prefixlists + expected_type: 'list' + - name: Include compiling the template ansible.builtin.include_tasks: compile_template.yaml when: (verb in verbs) @@ -28,3 +52,7 @@ - name: Include the test tasks if specified ansible.builtin.include_tasks: test_template.yaml when: verb == "test" + +- name: Include the test tasks if specified + ansible.builtin.include_tasks: fix_template.yaml + when: verb == "fix" diff --git a/geant/ops_ansible/roles/cic_generic/tasks/test_template.yaml b/geant/ops_ansible/roles/cic_generic/tasks/test_template.yaml index 4125f2bdb47426b725d3535393d0622447c66b3e..ed7f42373cc9b1993c205b0cbae8e561bf60d6b7 100644 --- a/geant/ops_ansible/roles/cic_generic/tasks/test_template.yaml +++ b/geant/ops_ansible/roles/cic_generic/tasks/test_template.yaml @@ -1,5 +1,6 @@ --- -- name: Verify "{{ config_object }}" [CHECK ONLY] +### This task will fail if commit-check fails +- name: Test "{{ config_object }}" [CHECK ONLY] juniper_junos_config: load: "{{ config_objects[config_object].strategy }}" src: "/var/tmp/ansible_run_{{ opid }}/{{ config_object }}.conf" @@ -8,15 +9,23 @@ check: true commit: false register: response - when: verb == "test" and (dry_run | ansible.builtin.bool) + when: verb == "test" and dry_run | ansible.builtin.bool +### This task never fails. It only shows differences if ther are any +### but commit-check in the previous task should succeed - name: Show DRY diff of "{{ config_object }}" ansible.builtin.debug: msg: "{{ response }}" when: verb == "test" and (dry_run | ansible.builtin.bool) and (response.changed | ansible.builtin.bool) +# ### This task will artificially fail if there is config that needs to be added or removed +# - name: Fail if there are diffs +# ansible.builtin.fail: +# msg: "Running configuration is not the same as the intended" +# when: response.changed == true + - name: Send an e-mail using Geant SMTP servers - community.general.notification.mail: + community.general.mail: host: "{{ cic_alerts_mail_host }}" port: "{{ cic_alerts_smtp_port }}" sender: "{{ cic_alerts_sender }}" diff --git a/geant/ops_ansible/roles/cic_generic/templates/system_dns.j2 b/geant/ops_ansible/roles/cic_generic/templates/system_dns.j2 new file mode 100644 index 0000000000000000000000000000000000000000..55251f64d76d96a03e52b48ee8991d17f678e5ce --- /dev/null +++ b/geant/ops_ansible/roles/cic_generic/templates/system_dns.j2 @@ -0,0 +1,15 @@ +system { +{% if system_name_servers is defined %} + {% if system_name_servers|length > 1 %} + replace: name-server { + {%- for name_server in system_name_servers %} + {{ name_server }}; + {%- endfor %} + } +{% else %} + {%- for name_server in system_name_servers %} + replace: name-server {{ name_server }}; + {% endfor %} + {% endif %} + {% endif %} +} diff --git a/geant/ops_ansible/roles/cic_generic/templates/system_login.j2 b/geant/ops_ansible/roles/cic_generic/templates/system_login.j2 index e76db0d7795567c97a30056b017647ee11613e78..e7cbade1c5b9633cf36843147d74955eb56ed587 100644 --- a/geant/ops_ansible/roles/cic_generic/templates/system_login.j2 +++ b/geant/ops_ansible/roles/cic_generic/templates/system_login.j2 @@ -70,6 +70,7 @@ replace: login { {% endfor %} } {% endif %} + message "----------------------------------------------------------------\n\n This is {{ inventory_hostname }} a GEANT Router in {{ site_city }}, {{ site_country }}.\n Warning: Unauthorized access to this equipment is strictly forbidden and will lead to prosecution \n\n-------------------------------------------------------------\n"; } } diff --git a/geant/ops_ansible/roles/cic_generic/vars/main.yml b/geant/ops_ansible/roles/cic_generic/vars/main.yml index b6cfa481802d0ac175020c7a3ee2d465077e612d..52d7c1b1a69e31001cf85add531d6ebafe57f536 100644 --- a/geant/ops_ansible/roles/cic_generic/vars/main.yml +++ b/geant/ops_ansible/roles/cic_generic/vars/main.yml @@ -25,4 +25,6 @@ config_objects: system_ntp: strategy: replace system_login: - strategy: merge + strategy: replace + system_dns: + strategy: replace diff --git a/geant/ops_ansible/roles/manage_global_prefix_lists/tasks/main.yml b/geant/ops_ansible/roles/manage_global_prefix_lists/tasks/main.yml index 4191e3b5705dd262acf6217be8c76c96c1f024da..de3f336d5a91f7577b26533b20842d8d4a759e40 100644 --- a/geant/ops_ansible/roles/manage_global_prefix_lists/tasks/main.yml +++ b/geant/ops_ansible/roles/manage_global_prefix_lists/tasks/main.yml @@ -49,7 +49,7 @@ when: verb == "deploy" and ( dry_run | ansible.builtin.bool ) - name: Send an e-mail using Geant SMTP servers - community.general.notification.mail: + community.general.mail: host: "{{ cic_alerts_mail_host }}" port: "{{ cic_alerts_smtp_port }}" sender: "{{ cic_alerts_sender }}"