-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathplaybook.yaml
More file actions
146 lines (129 loc) · 3.83 KB
/
playbook.yaml
File metadata and controls
146 lines (129 loc) · 3.83 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
- hosts: all
vars:
required_packages:
Debian:
- usbip
- usbutils
- python3-pyudev
- python3-flask
Ubuntu:
- linux-tools-generic
- usbutils
- python3-pyudev
- python3-flask
Raspbian:
- usbip
- usbutils
- python3-pyudev
- python3-flask
Fedora:
- usbip
- usbutils
- python3-pyudev
- python3-flask
Rocky:
- usbip
- usbutils
- python3-pyudev
- python3-flask
Centos:
- usbip
- usbutils
- python3-pyudev
- python3-flask
# Required packages
tasks:
- name: Abort if distribution not supported
fail:
msg: >
Distribution {{ ansible_facts['distribution'] }} is not supported.
Please add it to the `required_packages` map in the playbook.
when: ansible_facts['distribution'] not in required_packages
- name: Enable EPEL repo on Rocky
ansible.builtin.dnf:
name: epel-release
state: present
when: ansible_facts['distribution'] == "Rocky"
- name: Install usbip and other required packages
package:
name: "{{ required_packages[ansible_facts['distribution']] }}"
state: present
# Main files copy
- name: Ensure /opt/usbip-server exists
ansible.builtin.file:
path: /opt/usbip-server
state: directory
mode: '0755'
- name: Install tools into /opt
ansible.builtin.copy:
src: "templates/{{ item }}"
dest: "/opt/usbip-server/{{ item }}"
mode: '0755'
loop:
- ls_usbids.py
- bind_usbids.py
- autobind-job.sh
- name: Install data into /opt
ansible.builtin.copy:
src: "templates/{{ item }}"
dest: "/opt/usbip-server/{{ item }}"
mode: '0644'
force: no
loop:
- auto_usbids.txt
# Systemd services
- name: place usbipd systemd service file
ansible.builtin.template:
src: templates/usbipd.service
dest: /etc/systemd/system/usbipd.service
mode: '0644'
register: usbipd_unit
- name: place usbip-autobind@ systemd service file
ansible.builtin.template:
src: templates/usbip-autobind@.service
dest: /etc/systemd/system/usbip-autobind@.service
mode: '0644'
register: usbip_autobind_unit
- name: Reload systemd
ansible.builtin.systemd:
daemon_reload: yes
- name: Enable and start usbipd
ansible.builtin.systemd:
name: usbipd
enabled: yes
state: started
# udev rules
- name: Deploy udev rule to trigger auto bind
ansible.builtin.copy:
dest: /etc/udev/rules.d/99-usbip.rules
#content: 'ACTION=="add", SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", RUN+="/opt/usbip-server/autobind-job.sh"'
mode: '0644'
content: 'ACTION=="add", SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", TAG+="systemd", ENV{SYSTEMD_WANTS}="usbip-autobind@%k.service"'
- name: Reload udev rules
ansible.builtin.command: udevadm control --reload-rules
become: yes
# Web interface
- name: Copy web application files
tags: web
ansible.builtin.copy:
src: ./web/
dest: /opt/usbip-server/web/
owner: root
group: root
mode: '0755'
- name: place usbipd-web systemd service
ansible.builtin.template:
src: templates/usbip-web.service
dest: /etc/systemd/system/usbip-web.service
mode: '0644'
register: usbip_web_unit
- name: Reload systemd if unit file changed
ansible.builtin.systemd:
daemon_reload: yes
when: usbip_web_unit.changed
- name: Enable and start usbip-web
tags: web
ansible.builtin.systemd:
name: usbip-web
enabled: yes
state: restarted