debops.netbase default variables

General configuration, APT packages

netbase__enabled

Enable or disable support for local host and network database management.

netbase__enabled: '{{ False
                      if (ansible_virtualization_type == "docker" and
                          ansible_virtualization_role == "guest")
                      else True }}'
netbase__base_packages

List of base APT packages to linstall for netbase support.

netbase__base_packages: [ 'netbase', 'libcap2-bin', 'dbus' ]
netbase__packages

List of additional APT packages to install for netbase support.

netbase__packages: []

Hostname and domain

netbase__hostname_config_enabled

Enable or disable configuration of the hostname based on presence of the cap_sys_admin POSIX capability. The role will also avoid configuring the hostname in containers, which usually cannot change their own hostname directory due to host restrictions. Hostname will still be defined in /etc/hosts if the local domain configuration is enabled.

netbase__hostname_config_enabled: '{{ True
                                      if ((((ansible_system_capabilities_enforced|d())|bool and
                                           "cap_sys_admin" in ansible_system_capabilities) or
                                          not (ansible_system_capabilities_enforced|d(True))|bool) and
                                          (ansible_virtualization_type is undefined or
                                           ansible_virtualization_type not in [ "lxc", "docker", "openvz" ]))
                                      else False }}'
netbase__hostname

Set a hostname for a given host. It should contain only characters supported in the DNS: alphanumeric, and a dash; no dots or other punctuation.

By default, the role will configure the hostname based on the Ansible inventory configuration. To preserve existing hostname, set the value to '{{ ansible_hostname }}'.

netbase__hostname: '{{ (inventory_hostname_short | d(inventory_hostname.split(".")[0]))
                       if (inventory_hostname_short | d(inventory_hostname.split(".")[0]) != "localhost")
                       else ansible_hostname }}'
netbase__domain

Define a local domain for a given host. If not changed, the DNS domain is defined based on the following rules:

If the host has been installed with a domain, and its FQDN points to the 127.0.1.1 address, the role will check on the remote host if a given FQDN exists in the DNS database. If the FQDN can be resolved, the 127.0.1.1 entry will be removed from the /etc/hosts file to allow the DNS database to provide the correct IP address. If the FQDN is not found in DNS database, the existing entry will be left intact.

If the host has been configured with a domain in /etc/hosts file which is also present in the DNS database, and its FQDN points to any other IP address than 127.0.1.1, the role will generate the IPv4 and IPv6 entries for this domain which should preserve the existing configuration.

If the host has been installed without a domain specified, a domain will be generated based on the ansible_host variable (if it's set to a FQDN address) and saved in the /etc/hosts database. The host's FQDN and hostname will point to the default IPv4 and IPv6 addresses of the host. If the Ansible inventory does not have a FQDN defined for a given host in the ansible_host variable, the host is assumed to be standalone and a domain will not be generated for it.

netbase__domain: '{{ ""
                     if (ansible_local|d() and ansible_local.netbase|d() and
                         (((ansible_local.netbase.self_address|d()) != "127.0.1.1" and
                           (not ansible_local.netbase.self_local_hostname|d())|bool) or
                          ((ansible_local.netbase.self_address|d()) == "127.0.1.1" and
                            ansible_local.netbase.self_domain|d() and
                            ansible_local.netbase.self_domain_source in [ "dns" ])))
                     else (ansible_local.netbase.self_domain
                           if (ansible_local|d() and ansible_local.netbase|d() and
                               (ansible_local.netbase.self_domain|d()) and
                               (ansible_local.netbase.self_local_hostname|d())|bool)
                           else ((ansible_host | d(ansible_ssh_host | d("0"))).split(".")[1:] | join(".")
                                 if (not (ansible_host | d(ansible_ssh_host | d("0"))) | ipaddr)
                                 else (inventory_hostname.split(".")[1:] | join(".")
                                       if (inventory_hostname.split(".") | count > 1)
                                       else ""))) }}'
netbase__aliases

List of additional alias names defined for the current host, including its hostname, in the /etc/hosts database. This list is automatically generated using the Ansible local facts. If you plan to change it, ensure that the hostname is specified first to avoid any issues with name resolution.

netbase__aliases: '{{ ([ netbase__hostname ]
                       + (ansible_local.netbase.self_aliases
                          if (ansible_local|d() and ansible_local.netbase|d() and
                              ansible_local.netbase.self_aliases|d())
                          else []) | unique) }}'
netbase__host_ipv4_address

The IPv4 address which will be used to create the host record in the /etc/hosts database with the FQDN and the hostname. If the host does not have a proper IPv4 address associated with it and you want to use IPv4 networking, you can use 127.0.1.1 to set the hostname.

netbase__host_ipv4_address: '{{ (ansible_default_ipv4.address | d())
                                if (ansible_domain|d() and
                                    ansible_local|d() and ansible_local.netbase|d() and
                                    ansible_local.netbase.self_domain_source in [ "dns" ])
                                else (ansible_local.netbase.self_address
                                      if (ansible_local|d() and ansible_local.netbase|d() and
                                          ansible_local.netbase.self_address|d())
                                      else "127.0.1.1") }}'
netbase__host_ipv6_address

The IPv6 address which will be used to create the host record in the /etc/hosts database with the FQDN and the hostname.

netbase__host_ipv6_address: '{{ ansible_default_ipv6.address | d() }}'
netbase__domain_host_entry

The actual /etc/hosts entry with the local domain definition. It will be set as the IPv4 and/or IPv6 addresses defined in above variables.

netbase__domain_host_entry: '{{ ([ netbase__hostname + "." + netbase__domain ] + netbase__aliases)
                                if netbase__domain|d()
                                else (netbase__hostname
                                      if (not ansible_domain|d())
                                      else []) }}'

Host database in /etc/hosts

The netbase__*_hosts variables below define the host records in the /etc/hosts database. See netbase__hosts for more details.

netbase__hosts_config_type

The host database configuration method used by the role.

If lineinfile, the configuration will be done using the lineinfile Ansible module. This allows the database to be updated by other mechanisms than Ansible, but the configuration is very slow. This is suitable for small number of host entries, otherwise you should think about setting up a local DNS server instead.

If template, the hosts database will be generated using the template Ansible module. This makes the configuration much faster, which is useful with large list of hosts, but the database cannot be modified by other tools, the changes will not be preserved by Ansible.

netbase__hosts_config_type: '{{ "template"
                                if ((netbase__hosts
                                     | combine(netbase__group_hosts, netbase__host_hosts)).keys()
                                    | count > 15)
                                else "lineinfile" }}'
netbase__default_hosts

The default set of host database entries, defined by the role.

netbase__default_hosts:

  - '127.0.0.1': [ 'localhost' ]
  - '127.0.1.1': []
  - '::1':       [ 'localhost', 'ip6-localhost', 'ip6-loopback' ]
  - 'ff02::1':   [ 'ip6-allnodes' ]
  - 'ff02::2':   [ 'ip6-allrouters' ]

  - name:  '{{ netbase__host_ipv4_address }}'
    value: '{{ netbase__domain_host_entry }}'
    separator: '{{ True
                   if (netbase__host_ipv4_address == "127.0.1.1" and
                       (ansible_local|d() and ansible_local.netbase|d() and
                        ansible_local.netbase.self_domain_source not in [ "dns" ]))
                   else False }}'

  - name:  '{{ netbase__host_ipv6_address }}'
    value: '{{ netbase__domain_host_entry }}'
netbase__hosts

YAML list of host entries which should be present on all hosts in the Ansible inventory.

Since the host database is supposed to be the same across all hosts, you should most likely stick to using this variable and define it for the all inventory group.

netbase__hosts: []
netbase__group_hosts

YAML list of host entries which should be present on hosts in a specific Ansible inventory group.

netbase__group_hosts: []
netbase__host_hosts

YAML list of host entries which should be present on specific hosts in the Ansible inventory.

netbase__host_hosts: []
netbase__combined_hosts

The variable which combines all other hosts lists and is used in the role tasks and templates.

netbase__combined_hosts: '{{ netbase__default_hosts
                            + netbase__hosts
                            + netbase__group_hosts
                            + netbase__host_hosts }}'

Network database in /etc/networks

These variables define what network entries should be present in the /etc/networks database. Each dictionary key is a network name and value should be a string or a YAML list of a class A, B or C network address and optional aliases. Example:

netbase__networks:
  'net.example.org': '192.0.2.0'

Entries with empty values will be removed from the database. See the networks(5) manual page for more details.

netbase__networks

YAML dictionary of network entries which should be present on all hosts in the Ansible inventory.

Since the network database is supposed to be the same across all hosts, you should most likely stick to using this variable and define it for the all inventory group.

netbase__networks: {}
netbase__group_networks

YAML dictionary of network entries which should be present on hosts in a specific Ansible inventory group.

netbase__group_networks: {}
netbase__host_networks

YAML dictionary of network entries which should be present on specific hosts in the Ansible inventory.

netbase__host_networks: {}

Configuration variables for other Ansible roles

netbase__python__dependent_packages3

Configuration for the debops.python Ansible role.

netbase__python__dependent_packages3:

  - 'python3-dnspython'
netbase__python__dependent_packages2

Configuration for the debops.python Ansible role.

netbase__python__dependent_packages2:

  - 'python-dnspython'