diff --git a/.gitignore b/.gitignore index a4c956ae..d6a0c8e7 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ +.venv/ target/ *.log diff --git a/metal/Makefile b/metal/Makefile new file mode 100644 index 00000000..70692535 --- /dev/null +++ b/metal/Makefile @@ -0,0 +1,13 @@ +.POSIX: + +default: init run + +init: + python3 -m venv .venv \ + && . .venv/bin/activate \ + && pip3 install --upgrade pip \ + && pip3 install -r requirements.txt + +run: + . .venv/bin/activate \ + && ansible-playbook --inventory hosts.ini playbook.yml diff --git a/metal/hosts.ini b/metal/hosts.ini new file mode 100644 index 00000000..54135cee --- /dev/null +++ b/metal/hosts.ini @@ -0,0 +1,5 @@ +[homelab] +192.168.1.110 mac='00:23:24:d1:f3:f0' ansible_user=root +192.168.1.111 mac='00:23:24:d1:f4:d6' ansible_user=root +192.168.1.112 mac='00:23:24:e7:04:60' ansible_user=root +192.168.1.113 mac='00:23:24:d1:f5:69' ansible_user=root diff --git a/metal/playbook.yml b/metal/playbook.yml new file mode 100644 index 00000000..442cd2d4 --- /dev/null +++ b/metal/playbook.yml @@ -0,0 +1,15 @@ +- name: Start PXE server on the controller + hosts: localhost + roles: + - { role: pxe, tag: pxe } + +- name: Wake all nodes up + hosts: homelab + gather_facts: no + roles: + - { role: wake, tag: wake } + +# - name: Shutdown all nodes +# hosts: homelab +# roles: +# - { role: shutdown, tag: shutdown } diff --git a/metal/requirements.txt b/metal/requirements.txt new file mode 100644 index 00000000..4d060b99 --- /dev/null +++ b/metal/requirements.txt @@ -0,0 +1,3 @@ +ansible +docker +docker-compose diff --git a/metal/roles/pxe/tasks/main.yml b/metal/roles/pxe/tasks/main.yml new file mode 100644 index 00000000..be49d667 --- /dev/null +++ b/metal/roles/pxe/tasks/main.yml @@ -0,0 +1,3 @@ +- name: Start PXE server + community.general.docker_compose: + project_src: /home/khuedoan/Documents/lab/homelab/infra/pxe-server diff --git a/metal/roles/shutdown/tasks/main.yml b/metal/roles/shutdown/tasks/main.yml new file mode 100644 index 00000000..2081effa --- /dev/null +++ b/metal/roles/shutdown/tasks/main.yml @@ -0,0 +1,3 @@ +- name: Unconditionally shut down the machine with all defaults + community.general.shutdown: + delay: 0 diff --git a/metal/roles/wake/tasks/main.yml b/metal/roles/wake/tasks/main.yml new file mode 100644 index 00000000..ebd8e736 --- /dev/null +++ b/metal/roles/wake/tasks/main.yml @@ -0,0 +1,8 @@ +- name: Send magic Wake-on-LAN packet + community.general.wakeonlan: + mac: "{{ hostvars[inventory_hostname]['mac'] }}" + delegate_to: localhost + +- name: Wait for the servers to comes up + wait_for_connection: + timeout: 600