diff --git a/roles/hosts/defaults/main.yml b/roles/hosts/defaults/main.yml deleted file mode 100644 index e6ff03b..0000000 --- a/roles/hosts/defaults/main.yml +++ /dev/null @@ -1,17 +0,0 @@ -hosts__role_enabled: false - -hosts__dir: /etc -hosts__file: "{{ hosts__dir }}/hosts" -hosts__template: etc/hosts.j2 -hosts__backup: true - -# If enabled, the ansible inventory will be collected automatically -# and will be appended to the list of hosts, when ansible_host (ip address) is defined. -# ip: ansible_host, hostname: inventory_hostname_short, fqdn: inventory_hostname -hosts__auto_discovery: false -# Consult https://docs.ansible.com/ansible/latest/inventory_guide/intro_patterns.html for more information -hosts__auto_discovery_inventories: 'webservers:&atlanta' - -hosts__default: [] -hosts__group: [] -hosts__host: [] \ No newline at end of file diff --git a/roles/hosts/tasks/main.yml b/roles/hosts/tasks/main.yml deleted file mode 100644 index 6a2b787..0000000 --- a/roles/hosts/tasks/main.yml +++ /dev/null @@ -1,11 +0,0 @@ ---- -- name: Apply hosts configuration - become: true - ansible.builtin.template: - src: "{{ hosts__template }}" - dest: "{{ hosts__file }}" - backup: "{{ hosts__backup | default(omit) | bool }}" - when: - - hosts__role_enabled | default(false) | bool - - (hosts__all_ipv4 | default([]) | length > 0) or (hosts__all_ipv6 | default([]) | length > 0) - register: hosts__apply diff --git a/roles/hosts/templates/etc/hosts.j2 b/roles/hosts/templates/etc/hosts.j2 deleted file mode 100644 index f7b03ec..0000000 --- a/roles/hosts/templates/etc/hosts.j2 +++ /dev/null @@ -1,15 +0,0 @@ -127.0.0.1 localhost.localdomain localhost -{% for ipv4_host in hosts__all_ipv4 %} -{{ ipv4_host.ip }} {{ ipv4_host.fqdn }} {{ ipv4_host.hostname }} -{% endfor %} - -# The following lines are desirable for IPv6 capable hosts -::1 ip6-localhost ip6-loopback -fe00::0 ip6-localnet -ff00::0 ip6-mcastprefix -ff02::1 ip6-allnodes -ff02::2 ip6-allrouters -ff02::3 ip6-allhosts -{% for ipv6_host in hosts__all_ipv6 %} -{{ ipv6_host.ip }} {{ ipv6_host.fqdn }} {{ ipv6_host.hostname }} -{% endfor %} \ No newline at end of file diff --git a/roles/hosts/vars/main.yml b/roles/hosts/vars/main.yml deleted file mode 100644 index a8e14e4..0000000 --- a/roles/hosts/vars/main.yml +++ /dev/null @@ -1,24 +0,0 @@ - -__hosts__auto_discovered: >- - {%- if (hosts__auto_discovery | default(false) | bool) and hosts__auto_discovery_inventories is defined and hosts__auto_discovery_inventories | length > 0 -%} - {%- set inventory_lookup = lookup('ansible.builtin.inventory_hostnames', hosts__auto_discovery_inventories) -%} - {%- if inventory_lookup | length > 0 -%} - {%- set inventory_hosts = inventory_lookup | split(',') -%} - {%- set discovered_hosts = dict(hostvars) | aybarsm.helper.only_with(inventory_hosts) | dict2items | selectattr('value.ansible_host', 'defined') -%} - {%- set ips = discovered_hosts | map(attribute='value.ansible_host') -%} - {%- set hostnames = discovered_hosts | map(attribute='value.inventory_hostname_short') -%} - {%- set fqdns = discovered_hosts | map(attribute='value.inventory_hostname') -%} - {%- set auto_discovered = {'ip': ips, 'hostname': hostnames, 'fqdn': fqdns} | aybarsm.helper.to_list_of_dicts -%} - {%- endif -%} - {%- else -%} - {%- set auto_discovered = [] -%} - {%- endif -%} - {{ auto_discovered }} - -hosts__all: "{{ (hosts__host + hosts__group + hosts__default + __hosts__auto_discovered) | - aybarsm.helper.replace_aliases({'fqdn': ['hostname']}) | - aybarsm.helper.selectattr([{'when': [['ip', 'defined'], ['hostname', 'defined'], ['fqdn', 'defined']]}]) | - aybarsm.helper.unique_recursive(['ip', 'hostname', 'fqdn']) | default([]) }}" - -hosts__all_ipv4: "{{ hosts__all | selectattr('ip', 'ansible.utils.ipv4') }}" -hosts__all_ipv6: "{{ hosts__all | selectattr('ip', 'ansible.utils.ipv6') }}" \ No newline at end of file diff --git a/roles/network_interfaces/defaults/main.yml b/roles/network_interfaces/defaults/main.yml deleted file mode 100644 index 119252a..0000000 --- a/roles/network_interfaces/defaults/main.yml +++ /dev/null @@ -1,117 +0,0 @@ ---- -# REVIEW: merge network_interfaces, systemd_network and posix_sysctl functionalities under single role as network? -network_interfaces__role_enabled: false - -# Leave empty not to apply changes -network_interfaces__change_strategy: '' - -# Example for apply changes via command strategy: -# network_interfaces__change_strategy: command -# network_interfaces__change: -# - cmd: ifreload -a - -# Example for apply changes via service strategy: -# network_interfaces__change_strategy: service -# network_interfaces__change: -# - name: networking -# state: restarted - -network_interfaces__dir: /etc/network -network_interfaces__file: interfaces -network_interfaces__file_destination: "{{ network_interfaces__dir + '/' + network_interfaces__file }}" - -# Seggrate network interfaces into separate files i.e. /etc/network/interfaces.d/eth0 -# This has not been implemented yet -# TODO: Implement this feature -network_interfaces__segregate: false -network_interfaces__seggregate_dir: "{{ network_interfaces__dir }}/interfaces.d" - -# Keep the lo interface in the file -network_interfaces__keep_lo: true -# The location of the source line in the file (controversial topic) -network_interfaces__source_position: bottom -network_interfaces__source_line: "source {{ network_interfaces__seggregate_dir }}/*" - -network_interfaces__backup: true -network_interfaces__template: network_interfaces.j2 -# This has not been implemented yet -# TODO: Implement this feature -network_interfaces__iface_template: network_interfaces.iface.j2 - -# iface XXX inet {manual|static|dhcp} -# Manual method only INCLUDES selected options whereas static and dhcp methods EXCLUDES selected options -network_interfaces__manual_includes: [] -network_interfaces__static_excludes: [] -network_interfaces__dhcp_excludes: [ - 'address', 'netmask', 'gateway', 'broadcast', 'network', 'dns-nameservers', 'dns-search', - 'dns-domain', 'dns-domain-search', 'dns-options', 'dns-sortlist', 'dns-opts'] - -network_interfaces__default: [] -network_interfaces__group: [] -network_interfaces__host: [] - -# The combination strategy below is highly nested hierarchy compliant and recommended (Example provided below) -# network_interfaces__host > network_interfaces__group > network_interfaces__default -network_interfaces__all: "{{ - [network_interfaces__default, network_interfaces__group, network_interfaces__host] | - community.general.lists_mergeby('name', recursive=true, list_merge='prepend') | - aybarsm.helper.unique_recursive(attributes='name', recurse='inet') | aybarsm.helper.unique_recursive(attributes='name', recurse='inet6') }}" - -# network_interfaces__default: -# - name: enp0s6 -# mount: auto -# - name: vmbr0 -# inet: -# - name: bridge-ports -# value: enp0s6 -# - name: bridge-stp -# value: "on" - -# network_interfaces__group: -# - name: vmbr0 -# mount: auto -# inet: -# - name: method -# value: dhcp -# - name: bridge-stp -# value: "off" -# - name: bridge-fd -# value: 0 - -# network_interfaces__host: -# - name: enp0s6 -# mount: None -# - name: vmbr0 -# inet: -# - name: method -# value: static -# - name: address -# value: 10.255.255.2/24 -# inet6: -# - name: method -# value: static -# - name: address -# value: fdff::1/64 - -# !!!!! RESULT: !!!!! -# network_interfaces__all: -# - name: enp0s6 -# mount: None # Replaced from default by host -# - name: vmbr0 -# mount: auto # Merged from group -# inet: -# - name: method # Replaced from group by host -# value: static -# - name: address # Replaced from group by host -# value: 10.255.255.2/24 -# - name: bridge-ports # Merged from default by group -# value: enp0s6 -# - name: bridge-stp # Replaced from default by group -# value: "off" -# - name: bridge-fd # Merged from group -# value: 0 -# inet6: -# - name: method # Merged from host -# value: static -# - name: address # Merged from host -# value: fdff::1/64 diff --git a/roles/network_interfaces/handlers/main.yml b/roles/network_interfaces/handlers/main.yml deleted file mode 100644 index 964a150..0000000 --- a/roles/network_interfaces/handlers/main.yml +++ /dev/null @@ -1,38 +0,0 @@ ---- -- name: Apply command(s) for network_interfaces_ changes - become: true - ansible.builtin.command: - chdir: "{{ item.chdir | default(omit) }}" - cmd: "{{ item.cmd }}" - creates: "{{ item.creates | default(omit) }}" - removes: "{{ item.removes | default(omit) }}" - stdin: "{{ item.stdin | default(omit) }}" - stdin_add_newline: "{{ item.stdin_add_newline | default(omit) }}" - strip_empty_ends: "{{ item.strip_empty_ends | default(omit) }}" - changed_when: true - loop: "{{ network_interfaces__change | selectattr('cmd', 'defined') }}" - register: network_interfaces__apply_changes_command - listen: "network_interfaces__apply_changes_by_command" - when: - - network_interfaces__change_strategy | default('') == 'command' - - network_interfaces__change | type_debug == 'list' - - network_interfaces__change | selectattr('cmd', 'defined') | length > 0 - -- name: Effect service(s) for network_interfaces_ changes - become: true - ansible.builtin.service: - arguments: "{{ item.arguments | default(omit) }}" - enabled: "{{ item.enabled | default(omit) }}" - name: "{{ item.name }}" - pattern: "{{ item.pattern | default(omit) }}" - runlevel: "{{ item.runlevel | default(omit) }}" - sleep: "{{ item.sleep | default(omit) }}" - state: "{{ item.state | default(omit) }}" - use: "{{ item.use | default(omit) }}" - loop: "{{ network_interfaces__change | selectattr('name', 'defined') }}" - register: network_interfaces__apply_changes_service - listen: "network_interfaces__apply_changes_by_service" - when: - - network_interfaces__change_strategy | default('') == 'service' - - network_interfaces__change | type_debug == 'list' - - network_interfaces__change | selectattr('name', 'defined') | length > 0 diff --git a/roles/network_interfaces/tasks/main.yml b/roles/network_interfaces/tasks/main.yml deleted file mode 100644 index e7bee7f..0000000 --- a/roles/network_interfaces/tasks/main.yml +++ /dev/null @@ -1,6 +0,0 @@ ---- -- name: Import network_interfaces tasks - ansible.builtin.import_tasks: - file: network_interfaces.yml - when: - - systemd_network__role_enabled | bool diff --git a/roles/network_interfaces/tasks/network_interfaces.yml b/roles/network_interfaces/tasks/network_interfaces.yml deleted file mode 100644 index b136bff..0000000 --- a/roles/network_interfaces/tasks/network_interfaces.yml +++ /dev/null @@ -1,15 +0,0 @@ ---- -- name: Deploy network interfaces configuration - become: true - ansible.builtin.template: - src: "{{ network_interfaces__template }}" - dest: "{{ network_interfaces__file_destination }}" - backup: "{{ network_interfaces__backup | default(omit) | bool }}" - mode: "0644" - when: - - network_interfaces__all | type_debug == 'list' - - network_interfaces__all | length > 0 - register: network_interfaces__deploy_file - notify: - - network_interfaces__apply_changes_by_command - - network_interfaces__apply_changes_by_service diff --git a/roles/network_interfaces/templates/network_interfaces.iface.j2 b/roles/network_interfaces/templates/network_interfaces.iface.j2 deleted file mode 100644 index ab0d77f..0000000 --- a/roles/network_interfaces/templates/network_interfaces.iface.j2 +++ /dev/null @@ -1,2 +0,0 @@ -# {{ ansible_managed }} - diff --git a/roles/network_interfaces/templates/network_interfaces.j2 b/roles/network_interfaces/templates/network_interfaces.j2 deleted file mode 100644 index b7e9b8c..0000000 --- a/roles/network_interfaces/templates/network_interfaces.j2 +++ /dev/null @@ -1,48 +0,0 @@ -# {{ ansible_managed }} - -{% if network_interfaces__source_position == 'top' %} -{{ network_interfaces__source_line }} - -{% endif %} -{% if network_interfaces__keep_lo | bool %} -# The loopback network interface -auto lo -iface lo inet loopback -{% endif %} - -{% for iface in network_interfaces__all %} -{% if 'mount' in iface and iface.mount != 'None' %} -{{ iface.mount }} {{ iface.name }} -{% endif %} -{% for addr_family in ['inet', 'inet6'] %} -{% if addr_family in iface %} -{% set ifaceMethod = iface[addr_family] | selectattr('name', 'equalto', 'method') | map(attribute='value') | first | default('') %} -{% if ifaceMethod in ['static', 'dhcp', 'manual'] %} -{% set ifaceParamsExclude = ['method'] %} -{% set ifaceParamsInclude = [] %} -{% if ifaceMethod == 'static' %} -{% set ifaceParamsExclude = ifaceParamsExclude + (network_interfaces__static_excludes | default([])) %} -{% elif ifaceMethod == 'dhcp' %} -{% set ifaceParamsExclude = ifaceParamsExclude + (network_interfaces__dhcp_excludes | default([])) %} -{% elif ifaceMethod == 'manual' %} -{% set ifaceParamsInclude = ifaceParamsInclude + (network_interfaces__manual_includes | default([])) %} -{% endif %} -{% set ifaceParams = iface[addr_family] %} -{% if ifaceParamsInclude | length > 0 %} -{% set ifaceParams = ifaceParams | selectattr('name', 'in', ifaceParamsInclude) %} -{% endif %} -{% if ifaceParamsExclude | length > 0 %} -{% set ifaceParams = ifaceParams | rejectattr('name', 'in', ifaceParamsExclude) %} -{% endif %} -iface {{ iface.name }} {{ addr_family }} {{ ifaceMethod }} -{% if ifaceParams | length > 0 %} -{{ ifaceParams | aybarsm.helper.to_querystring('name', 'value', ' ', '\n') | indent(4, true) }} -{% endif %} -{% endif %} - -{% endif %} -{% endfor %} -{% endfor %} -{% if network_interfaces__source_position != 'top' %} -{{ network_interfaces__source_line }} -{% endif %} \ No newline at end of file diff --git a/roles/posix/defaults/main.yml b/roles/posix/defaults/main.yml deleted file mode 100644 index a516566..0000000 --- a/roles/posix/defaults/main.yml +++ /dev/null @@ -1,8 +0,0 @@ -posix_sysctl__role_enabled: false - -posix__sysctl_default: [] -posix__sysctl_group: [] -posix__sysctl_host: [] -# The combination strategy below is highly nested hierarchy compliant and recommended. -# posix__sysctl_host > posix__sysctl_group > posix__sysctl_default -posix__sysctl_all: "{{ (posix__sysctl_host + posix__sysctl_group + posix__sysctl_default) | unique(attribute='name') }}" \ No newline at end of file diff --git a/roles/posix/tasks/main.yml b/roles/posix/tasks/main.yml deleted file mode 100644 index 92864b7..0000000 --- a/roles/posix/tasks/main.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -- name: Include posix sysctl tasks - ansible.builtin.include_tasks: - file: sysctl.yml - when: posix_sysctl__role_enabled | bool diff --git a/roles/posix/tasks/sysctl.yml b/roles/posix/tasks/sysctl.yml deleted file mode 100644 index b64f495..0000000 --- a/roles/posix/tasks/sysctl.yml +++ /dev/null @@ -1,16 +0,0 @@ ---- -# TODO: Implement handlers for sysctl -- name: Deploy posix sysctl settings - ansible.posix.sysctl: - name: "{{ item.name }}" - value: "{{ item.value }}" - ignoreerrors: "{{ item.ignoreerrors | default(omit) | bool }}" - reload: "{{ item.reload | default(omit) | bool }}" - state: "{{ item.state | default(omit) }}" - sysctl_file: "{{ item.sysctl_file | default(omit) }}" - sysctl_set: "{{ item.sysctl_set | default(omit) | bool }}" - loop: "{{ network__sysctl_all }}" - register: posix__sysctl_apply - when: - - posix__sysctl_all | type_debug == 'list' - - posix__sysctl_all | length > 0 diff --git a/roles/systemd/defaults/main.yml b/roles/systemd/defaults/main.yml deleted file mode 100644 index 80e70d6..0000000 --- a/roles/systemd/defaults/main.yml +++ /dev/null @@ -1,37 +0,0 @@ ---- -# Ensures system manager is systemd - ansible_service_mgr == "systemd" -systemd__ensure_service_manager: true -systemd_network__role_enabled: false - -systemd__network_apply_changes: false - -systemd__network_backup: true -systemd__network_cleanup: false -systemd__network_cleanup_patterns_use_regex: true - -# Consult: https://manpages.debian.org/bookworm/systemd/systemd.net-naming-scheme.7.en.html -systemd__network_naming_scheme: "v252" - -systemd__network_dir: /etc/systemd/network -systemd__network_template: network.j2 - -systemd__network_default: [] -systemd__network_group: [] -systemd__network_host: [] -# The combination strategy below is highly nested hierarchy compliant and recommended -# systemd__network_host > systemd__network_group > systemd__network_default -systemd__network_all: "{{ (systemd__network_host + systemd__network_group + systemd__network_default) | - selectattr('name', 'defined') | selectattr('name', 'search', '\\.(network|link|netdev)$') | - selectattr('config', 'defined') | unique(attribute='name') }}" - -systemd__network_names: "{{ systemd__network_all | map(attribute='name') }}" -# Escape file names defined in systemd__network_all -systemd__network_cleanup_regex: - - "^({{ systemd__network_names | select('match', '.*\\.link$') | map('replace', '.link', '') | join('|') }})\\.link$" - - "^({{ systemd__network_names | select('match', '.*\\.netdev$') | map('replace', '.netdev', '') | join('|') }})\\.netdev$" - - "^({{ systemd__network_names | select('match', '.*\\.network$') | map('replace', '.network', '') | join('|') }})\\.network$" -# Escape backup files: - - "^.*\\.\\d+\\.\\d{4}-\\d{2}-\\d{2}@\\d{2}:\\d{2}:\\d{2}~$" - -# Join regex expressions -systemd__network_cleanup_patterns: ["(?!{{ systemd__network_cleanup_regex | join('|') }})"] diff --git a/roles/systemd/handlers/main.yml b/roles/systemd/handlers/main.yml deleted file mode 100644 index fb8ba7c..0000000 --- a/roles/systemd/handlers/main.yml +++ /dev/null @@ -1,8 +0,0 @@ ---- -- name: Restart systemd-networkd service for systemd__network changes - become: true - ansible.builtin.service: - name: "systemd-networkd" - state: restarted - listen: "systemd__networkd_restart" - when: systemd__network_apply_changes | bool diff --git a/roles/systemd/tasks/main.yml b/roles/systemd/tasks/main.yml deleted file mode 100644 index cf2de08..0000000 --- a/roles/systemd/tasks/main.yml +++ /dev/null @@ -1,7 +0,0 @@ ---- -- name: Import systemd network tasks - ansible.builtin.import_tasks: - file: network.yml - when: - - systemd_network__role_enabled | bool - - not systemd__ensure_service_manager | bool or ansible_service_mgr == "systemd" diff --git a/roles/systemd/tasks/network.yml b/roles/systemd/tasks/network.yml deleted file mode 100644 index 17b7157..0000000 --- a/roles/systemd/tasks/network.yml +++ /dev/null @@ -1,35 +0,0 @@ ---- -- name: Find unexpected systemd-network files - become: true - ansible.builtin.find: - paths: "{{ systemd__network_dir }}" - patterns: "{{ systemd__network_cleanup_patterns }}" - use_regex: "{{ systemd__network_cleanup_patterns_use_regex | bool }}" - when: systemd__network_cleanup | bool - register: systemd__network_find_cleanup_files - -- name: Remove unexpected systemd-network files - become: true - ansible.builtin.file: - path: "{{ item }}" - state: absent - loop: "{{ systemd__network_find_cleanup_files.files | map(attribute='path') }}" - when: - - systemd__network_cleanup | bool - - systemd__network_find_cleanup_files.files | length > 0 - register: systemd__network_cleanup_files - notify: systemd__networkd_restart - -- name: Deploy systemd-network files - become: true - ansible.builtin.template: - src: "{{ systemd__network_template }}" - dest: "{{ systemd__network_dir }}/{{ item.name }}" - backup: "{{ systemd__network_backup | default(omit) | bool }}" - mode: "0644" - loop: "{{ systemd__network_all }}" - when: - - systemd__network_all | type_debug == 'list' - - systemd__network_all | length > 0 - register: systemd__network_deploy_files - notify: systemd__networkd_restart diff --git a/roles/systemd/templates/network.j2 b/roles/systemd/templates/network.j2 deleted file mode 100644 index 164634e..0000000 --- a/roles/systemd/templates/network.j2 +++ /dev/null @@ -1,13 +0,0 @@ -# {{ ansible_managed }} - -{% for section, parameters in item.config.items() %} -[{{ section }}] -{% if (parameters | type_debug) == 'dict' %} -{% for paramKey, paramVal in parameters.items() %} -{{ paramKey }}={{ paramVal }} -{% endfor %} -{% endif %} -{% if not loop.last %} - -{% endif %} -{% endfor %} \ No newline at end of file