bind9 ===== A feature-complete ansible role for installing and configuring bind9. The purpose of this role is to fully template out the entire official bind9 configuration file format. What the role does: - Fully configures named.conf - Checks that the config is valid - Loads the config into bind What the role does not do: - Manage your zones and records - Maintain every aspect of bind (rndc config, etc) - Auto-generate and manage your secrets Bugs ---- Or, as I call them "happy accidents". * If you need a variable to be 0 or null, you need to define it as `var: '0'` or `var: 'null'`, otherwise jinja will assume you want it to be empty/null. Normal integers would be defined as `var: 1`, letting jinja type it as an integer. * If a named configuration option has the name 'key' or 'keys', it will be referenced as 'keyname' or 'keylist' respectively. key/keys are reserved values in most languages. Configuration Grammar --------------------- The bind9 role tries to replicate the official ISC bind9 configuration format as close as possible, only re-implementing them in YAML format. This means that for the most part, section names are the same as in named.conf but kebab-case ('var-name') is replaced with snake_case ('var_name') If you are missing some statements in your resulting config, it is most likely because of this. The main configuration variable used are a series of bind_*_config variables (See [Role Variables]) that have the following syntax Every config starts by defining the file name. Each file can contain any amount of top-level statements, as permitted by named.conf ``` bind9_host_config: - name: FILENAME # The filename of your desired config file. # You also need to specify a corresponding `include:` for the file SECTION_NAME: # The section name of the bind config you want to define. # Can be 'acl', 'options', 'zone', etc. # See: https://bind9.readthedocs.io/en/v9_18_4/reference.html#configuration-file-grammar SECTION_2_NAME: # Every file can have as many sections as needed. Generally, try to keep # all definitions and references together in a file. ``` Any option that can be defined multiple times in a named.conf, must be defined as a list ``` bind9_host_config: - name: named.conf.local acl: - name: ELEMENT_NAME addresses: - 127.0.0.1 - 127.0.0.2 - name: ELEMENT_2_NAME addresses: - 127.0.0.3 ``` Simple options are defined just as that. ``` SIMPLE_OPTION: string, boolean or integer value ``` Some options have several optional parameters. For those, a somewhat flexible configuration format has been created ``` IP_PORT_DSCP_OPTION: # Any option that is defined as one of: #