aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristian Segundo2023-05-06 23:59:06 +0200
committerChristian Segundo2023-05-06 23:59:06 +0200
commit2a5f2a08c80ca142e9a7c3cec8cb4ce88ab6ae1c (patch)
treeaf5e4ee713eabec2cb3e3f5107607c7c66278629
downloadavahi-2a5f2a08c80ca142e9a7c3cec8cb4ce88ab6ae1c.tar.gz
First commit
-rw-r--r--defaults/main.yml2
-rw-r--r--handlers/main.yml5
-rw-r--r--tasks/main.yml15
-rw-r--r--tasks/service-group.yml92
4 files changed, 114 insertions, 0 deletions
diff --git a/defaults/main.yml b/defaults/main.yml
new file mode 100644
index 0000000..fa38906
--- /dev/null
+++ b/defaults/main.yml
@@ -0,0 +1,2 @@
+---
+avahi_service_groups: {}
diff --git a/handlers/main.yml b/handlers/main.yml
new file mode 100644
index 0000000..f8a986b
--- /dev/null
+++ b/handlers/main.yml
@@ -0,0 +1,5 @@
+---
+- name: restart avahi
+ systemd:
+ name: avahi-daemon
+ state: restarted
diff --git a/tasks/main.yml b/tasks/main.yml
new file mode 100644
index 0000000..6c08fb3
--- /dev/null
+++ b/tasks/main.yml
@@ -0,0 +1,15 @@
+---
+- name: Install daemon
+ apt:
+ name: avahi-daemon
+
+- name: Enable and start avahi-daemon
+ systemd:
+ name: avahi-daemon
+ state: started
+ enabled: true
+
+- include_tasks: service-group.yml
+ loop: "{{ avahi_service_groups }}"
+ loop_control:
+ loop_var: avahi_service_group
diff --git a/tasks/service-group.yml b/tasks/service-group.yml
new file mode 100644
index 0000000..dd661b0
--- /dev/null
+++ b/tasks/service-group.yml
@@ -0,0 +1,92 @@
+---
+- name: Create base config
+ copy:
+ dest: /tmp/{{ avahi_service_group.filename }}.service-tmp
+ content: |
+ <?xml version="1.0" standalone='no'?>
+ <!DOCTYPE service-group SYSTEM "avahi-service.dtd">
+ <service-group>
+ </service-group>
+ changed_when: false
+
+- name: Create service definition
+ file:
+ path: /etc/avahi/services/{{ avahi_service_group.filename }}.service
+ state: touch
+ modification_time: preserve
+ owner: root
+ group: root
+ mode: u=rw,g=r,o=r
+ changed_when: false
+
+- name: Create base config
+ copy:
+ dest: /tmp/{{ avahi_service_group.filename }}.service-tmp
+ content: |
+ <?xml version="1.0" standalone='no'?>
+ <!DOCTYPE service-group SYSTEM "avahi-service.dtd">
+ <service-group>
+ </service-group>
+ changed_when: false
+
+- name: Set service name
+ community.general.xml:
+ path: /tmp/{{ avahi_service_group.filename }}.service-tmp
+ xpath: /service-group/name
+ value: "{{ avahi_service_group.name }}"
+ changed_when: false
+
+- name: Set service attributes
+ community.general.xml:
+ path: /tmp/{{ avahi_service_group.filename }}.service-tmp
+ xpath: "/service-group/name"
+ value: "{{ item.value }}"
+ attribute: "{{ item.key }}"
+ loop: "{{ avahi_service_group.attributes | dict2items }}"
+ changed_when: false
+
+- name: Add services
+ community.general.xml:
+ path: /tmp/{{ avahi_service_group.filename }}.service-tmp
+ xpath: "/service-group"
+ add_children:
+ - service:
+ protocol: "{{ item.protocol | default('any') }}"
+ _:
+ - type: "{{ item.type }}"
+ - port: "{{ item.port | default(0) }}"
+ loop: "{{ avahi_service_group.services }}"
+ changed_when: false
+
+- name: Add service txt-records
+ community.general.xml:
+ path: /tmp/{{ avahi_service_group.filename }}.service-tmp
+ xpath: "/service-group/service[./type='{{ item.0.type }}']"
+ add_children:
+ - txt-record: "{{ item.1.value }}"
+ loop: "{{ avahi_service_group.services | subelements('txt-records', 'skip_missing=True') }}"
+ changed_when: false
+
+- name: Add value format to txt-records
+ community.general.xml:
+ path: /tmp/{{ avahi_service_group.filename }}.service-tmp
+ xpath: "/service-group/service[./type='{{ item.0.type }}']/txt-record[text()='{{ item.1.value }}']"
+ attribute: value-format
+ value: "{{ item.1['value-format'] | default('text') }}"
+ loop: "{{ avahi_service_group.services | subelements('txt-records', 'skip_missing=True') }}"
+ changed_when: false
+
+- stat:
+ path: "{{ item }}"
+ loop:
+ - "/tmp/{{ avahi_service_group.filename }}.service-tmp"
+ - "/etc/avahi/services/{{ avahi_service_group.filename }}.service"
+ register: avahi_service_group_stat
+
+- ansible.builtin.copy:
+ src: "/tmp/{{ avahi_service_group.filename }}.service-tmp"
+ dest: "/etc/avahi/services/{{ avahi_service_group.filename }}.service"
+ mode: preserve
+ remote_src: true
+ when: avahi_service_group_stat.results[0].stat.checksum != avahi_service_group_stat.results[0].stat.checksum
+ notify: ["restart avahi"]