diff --git a/.kitchen.yml b/.kitchen.yml index 8ba672e..6147cf6 100644 --- a/.kitchen.yml +++ b/.kitchen.yml @@ -62,3 +62,10 @@ suites: verifier: name: shell command: rspec -c -f d -I tests/serverspec tests/serverspec/default_spec.rb + - name: options + provisioner: + name: ansible_playbook + playbook: tests/serverspec/options.yml + verifier: + name: shell + command: rspec -c -f d -I tests/serverspec tests/serverspec/options_spec.rb diff --git a/README.md b/README.md index 387440e..4958b7e 100644 --- a/README.md +++ b/README.md @@ -24,6 +24,7 @@ None | Variable | Description | Default | |----------|-------------|---------| | `resolver_nameservers` | list of resolvers | `[]` | +| `resolver_options` | list of options | `[]` | # Dependencies @@ -41,6 +42,10 @@ None - 192.168.1.2 - 192.168.1.3 resolver_nameservers: "{{ nameservers | predictable_shuffle(ansible_fqdn) | list }}" + resolver_options: + - timeout:1 + - attempts:1 + - rotate ``` # License diff --git a/defaults/main.yml b/defaults/main.yml index 98adf14..8587d69 100644 --- a/defaults/main.yml +++ b/defaults/main.yml @@ -1 +1,2 @@ resolver_nameservers: [] +resolver_options: [] diff --git a/templates/resolv.conf.j2 b/templates/resolv.conf.j2 index 19501fb..f04bddb 100644 --- a/templates/resolv.conf.j2 +++ b/templates/resolv.conf.j2 @@ -1,3 +1,6 @@ {% for n in resolver_nameservers %} nameserver {{ n }} {% endfor %} +{% if resolver_options | length %} +options {{ resolver_options | join(' ') }} +{% endif %} diff --git a/templates/resolvconf.conf.j2 b/templates/resolvconf.conf.j2 index d8c78d2..59db5f5 100644 --- a/templates/resolvconf.conf.j2 +++ b/templates/resolvconf.conf.j2 @@ -1 +1,4 @@ name_servers="{{ resolver_nameservers | join(' ') }}" +{% if resolver_options | length %} +resolv_conf_options="{{ resolver_options | join(' ') }}" +{% endif %} diff --git a/tests/serverspec/default.yml b/tests/serverspec/default.yml index 0199e43..4cea4d3 100644 --- a/tests/serverspec/default.yml +++ b/tests/serverspec/default.yml @@ -3,9 +3,9 @@ - shell: dhclient -x changed_when: false ignore_errors: true # so that "kitchen converge && kitchen converge" works - when: "{{ ansible_os_family == 'RedHat' or ansible_os_family == 'Debian' }}" + when: ansible_os_family == 'RedHat' or ansible_os_family == 'Debian' - shell: echo pkill dhclient - when: "{{ ansible_os_family == 'OpenBSD' }}" + when: ansible_os_family == 'OpenBSD' changed_when: false ignore_errors: true - service: @@ -13,7 +13,7 @@ state: stopped changed_when: false ignore_errors: true - when: "{{ ansible_os_family == 'FreeBSD' }}" + when: ansible_os_family == 'FreeBSD' roles: - ansible-role-resolver diff --git a/tests/serverspec/options.yml b/tests/serverspec/options.yml new file mode 100644 index 0000000..e891db6 --- /dev/null +++ b/tests/serverspec/options.yml @@ -0,0 +1,28 @@ +- hosts: localhost + pre_tasks: + - shell: dhclient -x + changed_when: false + ignore_errors: true # so that "kitchen converge && kitchen converge" works + when: ansible_os_family == 'RedHat' or ansible_os_family == 'Debian' + - shell: echo pkill dhclient + when: ansible_os_family == 'OpenBSD' + changed_when: false + ignore_errors: true + - service: + name: dhclient + state: stopped + changed_when: false + ignore_errors: true + when: ansible_os_family == 'FreeBSD' + + roles: + - ansible-role-resolver + vars: + nameservers: + - 192.168.1.1 + - 192.168.1.2 + - 192.168.1.3 + resolver_nameservers: "{{ nameservers | predictable_shuffle(ansible_fqdn) | list }}" + resolver_options: + - timeout:1 + - rotate diff --git a/tests/serverspec/options_spec.rb b/tests/serverspec/options_spec.rb new file mode 100644 index 0000000..161f4d4 --- /dev/null +++ b/tests/serverspec/options_spec.rb @@ -0,0 +1,25 @@ +require "spec_helper" + +case os[:family] +when "freebsd" + describe file("/etc/resolvconf.conf") do + its(:content) { should match(/name_servers="192\.168\.1\.2 192\.168\.1\.3 192\.168\.1\.1"\nresolv_conf_options="timeout:1 rotate"/) } + end +end + +describe file("/etc/resolv.conf") do + its(:content) { should_not match(/nameserver\s+#{ Regexp.escape('10.0.2.3') }/) } + case host_inventory["fqdn"] + when "default-freebsd-103-amd64" + its(:content) { should match(/nameserver 192\.168\.1\.2\nnameserver 192\.168\.1\.3\nnameserver 192\.168\.1\.1\noptions timeout:1 rotate/) } + when "default-openbsd-60-amd64" + its(:content) { should match(/nameserver 192\.168\.1\.2\nnameserver 192\.168\.1\.1\nnameserver 192\.168\.1\.3\noptions timeout:1 rotate/) } + when "default-ubuntu-1404-amd64" + its(:content) { should match(/nameserver 192\.168\.1\.3\nnameserver 192\.168\.1\.2\nnameserver 192\.168\.1\.1\noptions timeout:1 rotate/) } + when "default-centos-73-x86-64" + its(:content) { should match(/nameserver 192\.168\.1\.3\nnameserver 192\.168\.1\.1\nnameserver 192\.168\.1\.2\noptions timeout:1 rotate/) } + else + its(:content) { should match(/nameserver 192\.168\.1\.2\nnameserver 192\.168\.1\.3\nnameserver 192\.168\.1\.1\noptions timeout:1 rotate/) } + end +end +# 2 1 3