diff --git a/handbook.yml b/handbook.yml index 53cb9f7..c245d0d 100644 --- a/handbook.yml +++ b/handbook.yml @@ -16,6 +16,7 @@ # --- Sysadmin --- - { role: sysadmin-tools, tags: [sysadmin] } + - { role: wakeonlan, tags: [wol] } # --- Services --- # Role relative to services, applications and so on diff --git a/roles/wakeonlan/.travis.yml b/roles/wakeonlan/.travis.yml new file mode 100644 index 0000000..36bbf62 --- /dev/null +++ b/roles/wakeonlan/.travis.yml @@ -0,0 +1,29 @@ +--- +language: python +python: "2.7" + +# Use the new container infrastructure +sudo: false + +# Install ansible +addons: + apt: + packages: + - python-pip + +install: + # Install ansible + - pip install ansible + + # Check ansible version + - ansible --version + + # Create ansible.cfg with correct roles_path + - printf '[defaults]\nroles_path=../' >ansible.cfg + +script: + # Basic role syntax check + - ansible-playbook tests/test.yml -i tests/inventory --syntax-check + +notifications: + webhooks: https://galaxy.ansible.com/api/v1/notifications/ \ No newline at end of file diff --git a/roles/wakeonlan/README.md b/roles/wakeonlan/README.md new file mode 100644 index 0000000..8505d1e --- /dev/null +++ b/roles/wakeonlan/README.md @@ -0,0 +1,37 @@ +wakeonlan +========= + +This role install/ uninstall Wake on LAN support for target + +Requirements +------------ + +. + +Role Variables +-------------- + +Respond to: +- **wakeonlan_enabled** (boolean): If true install and configure WoL +- **wakeonlan_interface** (string): the interface to setup for WoL +- **wakeonlan_mode** (string): the mode selected for WoL, default to `g` + +Dependencies +------------ + +- ethtool + +Example Playbook +---------------- + +`ansible-playbook -i inventory/example.yml handbook.yml --extra-vars="target=example_target" --tags wol` + +License +------- + +GPLv3 + +Author Information +------------------ + +- [Claudio Maradonna](https://social.unitoo.it/claudio) diff --git a/roles/wakeonlan/defaults/main.yml b/roles/wakeonlan/defaults/main.yml new file mode 100644 index 0000000..0eb554b --- /dev/null +++ b/roles/wakeonlan/defaults/main.yml @@ -0,0 +1,6 @@ +--- +# defaults file for wakeonlan + +wakeonlan_enabled: false +wakeonlan_interface: enp2s0 +wakeonlan_mode: g diff --git a/roles/wakeonlan/handlers/main.yml b/roles/wakeonlan/handlers/main.yml new file mode 100644 index 0000000..fc4012b --- /dev/null +++ b/roles/wakeonlan/handlers/main.yml @@ -0,0 +1,2 @@ +--- +# handlers file for wakeonlan diff --git a/roles/wakeonlan/meta/main.yml b/roles/wakeonlan/meta/main.yml new file mode 100644 index 0000000..c572acc --- /dev/null +++ b/roles/wakeonlan/meta/main.yml @@ -0,0 +1,52 @@ +galaxy_info: + author: your name + description: your role description + company: your company (optional) + + # If the issue tracker for your role is not on github, uncomment the + # next line and provide a value + # issue_tracker_url: http://example.com/issue/tracker + + # Choose a valid license ID from https://spdx.org - some suggested licenses: + # - BSD-3-Clause (default) + # - MIT + # - GPL-2.0-or-later + # - GPL-3.0-only + # - Apache-2.0 + # - CC-BY-4.0 + license: license (GPL-2.0-or-later, MIT, etc) + + min_ansible_version: 2.1 + + # If this a Container Enabled role, provide the minimum Ansible Container version. + # min_ansible_container_version: + + # + # Provide a list of supported platforms, and for each platform a list of versions. + # If you don't wish to enumerate all versions for a particular platform, use 'all'. + # To view available platforms and versions (or releases), visit: + # https://galaxy.ansible.com/api/v1/platforms/ + # + # platforms: + # - name: Fedora + # versions: + # - all + # - 25 + # - name: SomePlatform + # versions: + # - all + # - 1.0 + # - 7 + # - 99.99 + + galaxy_tags: [] + # List tags for your role here, one per line. A tag is a keyword that describes + # and categorizes the role. Users find roles by searching for tags. Be sure to + # remove the '[]' above, if you add tags to this list. + # + # NOTE: A tag is limited to a single word comprised of alphanumeric characters. + # Maximum 20 tags per role. + +dependencies: [] + # List your role dependencies here, one per line. Be sure to remove the '[]' above, + # if you add dependencies to this list. diff --git a/roles/wakeonlan/tasks/install_Debian.yml b/roles/wakeonlan/tasks/install_Debian.yml new file mode 100644 index 0000000..edbb0f0 --- /dev/null +++ b/roles/wakeonlan/tasks/install_Debian.yml @@ -0,0 +1,3 @@ +- name: Install ethtool + ansible.builtin.package: + name: ethtool diff --git a/roles/wakeonlan/tasks/install_systemd_service.yml b/roles/wakeonlan/tasks/install_systemd_service.yml new file mode 100644 index 0000000..953c9fc --- /dev/null +++ b/roles/wakeonlan/tasks/install_systemd_service.yml @@ -0,0 +1,19 @@ +- name: Setup systemd + when: 'is_docker is not true' + block: + - name: Install systemd files + ansible.builtin.template: + src: '{{ item.src }}' + dest: '/{{ item.path }}' + with_community.general.filetree: '../templates/systemd/' + vars: + interface: "{{ wakeonlan_interface }}" + mode: "{{ wakeonlan_mode }}" + when: item.state == 'file' + + - name: Enable service + ansible.builtin.systemd: + name: wol-enable + state: started + enabled: true + daemon_reload: yes diff --git a/roles/wakeonlan/tasks/main.yml b/roles/wakeonlan/tasks/main.yml new file mode 100644 index 0000000..205b3a6 --- /dev/null +++ b/roles/wakeonlan/tasks/main.yml @@ -0,0 +1,18 @@ +--- +# tasks file for wakeonlan + +- name: Install and configure wakeonlan + when: + - "wakeonlan_enabled is true" + block: + - name: Gather package facts + package_facts: + manager: auto + + - name: Install yggdrasil if not present + when: "'ethtool' not in ansible_facts.packages" + block: + - include_tasks: "install_{{ ansible_os_family }}.yml" + + - include_tasks: "install_{{ ansible_service_mgr }}_service.yml" + ignore_errors: true diff --git a/roles/wakeonlan/templates/systemd/etc/systemd/system/wol-enable.service b/roles/wakeonlan/templates/systemd/etc/systemd/system/wol-enable.service new file mode 100644 index 0000000..00a5ce8 --- /dev/null +++ b/roles/wakeonlan/templates/systemd/etc/systemd/system/wol-enable.service @@ -0,0 +1,9 @@ +[Unit] +Description=Enable Wake-up on LAN + +[Service] +Type=oneshot +ExecStart=/sbin/ethtool -s {{ interface }} wol {{ mode }} + +[Install] +WantedBy=basic.target diff --git a/roles/wakeonlan/tests/inventory b/roles/wakeonlan/tests/inventory new file mode 100644 index 0000000..878877b --- /dev/null +++ b/roles/wakeonlan/tests/inventory @@ -0,0 +1,2 @@ +localhost + diff --git a/roles/wakeonlan/tests/test.yml b/roles/wakeonlan/tests/test.yml new file mode 100644 index 0000000..2ea1839 --- /dev/null +++ b/roles/wakeonlan/tests/test.yml @@ -0,0 +1,5 @@ +--- +- hosts: localhost + remote_user: root + roles: + - wakeonlan diff --git a/roles/wakeonlan/vars/main.yml b/roles/wakeonlan/vars/main.yml new file mode 100644 index 0000000..b4879b8 --- /dev/null +++ b/roles/wakeonlan/vars/main.yml @@ -0,0 +1,2 @@ +--- +# vars file for wakeonlan