first commit

This commit is contained in:
Annika Merris 2025-04-30 11:51:18 +00:00
commit 5816898404
50 changed files with 1031 additions and 0 deletions

View file

@ -0,0 +1,80 @@
# Adhdgirl Minilab Collection
This repository contains the `adhdgirl.minilab` Ansible Collection.
## Tested with Ansible
Tested with ansible-core >=2.14 releases and the current development version of
ansible-core.
## External requirements
Some modules and plugins require external libraries. Please check the
requirements for each plugin or module you use in the documentation to find out
which requirements are needed.
## Included content
Please check the included content on the
[Ansible Galaxy page for this collection](https://galaxy.ansible.com/adhdgirl/minilab).
## Using this collection
```
ansible-galaxy collection install adhdgirl.minilab
```
You can also include it in a `requirements.yml` file and install it via
`ansible-galaxy collection install -r requirements.yml` using the format:
```yaml
collections:
- name: adhdgirl.minilab
```
To upgrade the collection to the latest available version, run the following
command:
```bash
ansible-galaxy collection install adhdgirl.minilab --upgrade
```
You can also install a specific version of the collection, for example, if you
need to downgrade when something is broken in the latest version (please report
an issue in this repository). Use the following syntax where `X.Y.Z` can be any
[available version](https://galaxy.ansible.com/adhdgirl/minilab):
```bash
ansible-galaxy collection install adhdgirl.minilab:==X.Y.Z
```
See
[Ansible Using Collections](https://docs.ansible.com/ansible/latest/user_guide/collections_using.html)
for more details.
## Release notes
See the
[changelog](https://github.com/ansible-collections/adhdgirl.minilab/tree/main/CHANGELOG.rst).
## Roadmap
<!-- Optional. Include the roadmap for this collection, and the proposed release/versioning strategy so users can anticipate the upgrade/update cycle. -->
## More information
<!-- List out where the user can find additional information, such as working group meeting times, slack/Matrix channels, or documentation for the product this collection automates. At a minimum, link to: -->
- [Ansible collection development forum](https://forum.ansible.com/c/project/collection-development/27)
- [Ansible User guide](https://docs.ansible.com/ansible/devel/user_guide/index.html)
- [Ansible Developer guide](https://docs.ansible.com/ansible/devel/dev_guide/index.html)
- [Ansible Collections Checklist](https://docs.ansible.com/ansible/devel/community/collection_contributors/collection_requirements.html)
- [Ansible Community code of conduct](https://docs.ansible.com/ansible/devel/community/code_of_conduct.html)
- [The Bullhorn (the Ansible Contributor newsletter)](https://docs.ansible.com/ansible/devel/community/communication.html#the-bullhorn)
- [News for Maintainers](https://forum.ansible.com/tag/news-for-maintainers)
## Licensing
GNU General Public License v3.0 or later.
See [LICENSE](https://www.gnu.org/licenses/gpl-3.0.txt) to see the full text.

View file

@ -0,0 +1,10 @@
---
services:
adguard:
image: adguard/adguardhome:v0.107.59
container_name: adguardhome
volumes:
- /opt/adguard/workdir:/opt/adguardhome/work
- /opt/adguard/confdir:/opt/adguardhome/conf
network_mode: "host"
restart: unless-stopped

View file

@ -0,0 +1,40 @@
---
- name: Load distro-specific variables
ansible.builtin.include_vars: '{{ item }}'
tags: always
with_first_found:
- files:
- "{{ ansible_distribution }}.yaml"
skip: true
- name: Ensure AdGuard Home is running on this device
block:
- name: Ensure presense of folders for AdGuard Home
tags: packages,docker,adguard
ansible.builtin.file:
path: "/opt/adguard/{{ item }}"
state: directory
recurse: true
owner: root
group: root
loop:
- "workdir"
- "confdir"
- name: Ensure compose file is available on the server
tags: docker,adguard,settings
ansible.builtin.copy:
src: docker-compose.yaml
dest: /opt/adguard/docker-compose.yaml
owner: root
group: root
mode: u=rw,g=r,o=r
- name: Ensure docker containers are pulled and running
tags: docker,adguard
community.docker.docker_compose_v2:
project_src: /opt/adguard
pull: always
rescue:
- name: Set that this task failed
ansible.builtin.set_fact:
task_failed: true

View file

@ -0,0 +1 @@
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIEUrVjr7OOouXuax/peH72TgWiVaE1hacB65lXRUQdmP annika@ansible

View file

@ -0,0 +1 @@
permit nopass ansible

View file

@ -0,0 +1 @@
ansible ALL=(ALL) NOPASSWD: ALL

View file

@ -0,0 +1 @@
permit persist annika

View file

@ -0,0 +1 @@
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIE1XzepIOOXlSAjVTVKXlCYiPD4gtlt4/1ky9UWaB/2f annika@ansible

View file

@ -0,0 +1 @@
annika ALL=(ALL) ALL

View file

@ -0,0 +1 @@
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIGJ3/ZWJHbXEu5+nPvaNfPQraxy2ThXQlNB/u99nr8ci annika@wallace.local.merr.is

View file

@ -0,0 +1 @@
permit persist moosetheory

View file

@ -0,0 +1 @@
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIE1XzepIOOXlSAjVTVKXlCYiPD4gtlt4/1ky9UWaB/2f annika@ansible

View file

@ -0,0 +1 @@
moosetheory ALL=(ALL) ALL

View file

@ -0,0 +1 @@
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIGJ3/ZWJHbXEu5+nPvaNfPQraxy2ThXQlNB/u99nr8ci annika@wallace.local.merr.is

View file

@ -0,0 +1,36 @@
---
- name: Make sure aptitude is available
tags: packages,system,settings,debian
ansible.builtin.apt:
name: aptitude
state: present
when: ansible_distribution in debian_derivatives
- name: Make sure sudo and ssh are available
tags: packages,system,settings
ansible.builtin.package:
name:
- "{{ common_elevate_package }}"
- "{{ common_ssh_package }}"
state: present
- name: Make sure python3 is available (Alpine)
tags: packages,system,settings
ansible.builtin.package:
name:
- python3
state: present
when: ansible_distribution == 'Alpine'
- name: Ensure ssh is starting at boot (Alpine)
tags: packages,system,settings
ansible.builtin.service:
name: sshd
state: started
enabled: true
when: ansible_distribution == 'Alpine'
- name: Ensure ssh is starting at boot (Debian)
tags: package,system,settings
ansible.builtin.systemd_service:
name: ssh
state: started
enabled: true
when: ansible_distribution in debian_derivatives
# code: language=ansible

View file

@ -0,0 +1,31 @@
---
- name: Make sure ansible user exists
tags: users,system,ansible
ansible.builtin.user:
name: ansible
password: "*"
- name: Add sudoers file
tags: moosetheory,settings,sudo,system,users
ansible.builtin.copy:
src: ansible/sudoers
dest: /etc/sudoers.d/ansible
owner: root
group: root
mode: u=r,g=r,o-rwx
when: ansible_distribution in debian_derivatives
- name: Add doas file
tags: ansible,settings,doas,system,users
ansible.builtin.copy:
src: ansible/doas.conf
dest: /etc/doas.d/ansible.conf
owner: root
group: root
mode: u=r,g=r,o-rwx
when: ansible_distribution == "Alpine"
- name: Set authorized key for ansible user
tags: users,system,ansible
ansible.posix.authorized_key:
user: ansible
state: present
key: "{{ lookup('file', './files/ansible/ansible_ed25519.pub') }}"
# code: language=ansible

View file

@ -0,0 +1,36 @@
---
- name: Load distro-specific variables
ansible.builtin.include_vars: '{{ item }}'
tags: always
with_first_found:
- files:
- "{{ ansible_distribution }}.yaml"
skip: true
- name: Set up common functionality
block:
# Make sure ansible related stuff exists
- name: Ensure presense of software needed by later tasks
ansible.builtin.import_tasks: ansible/software.yaml
- name: Ensure user exists for future runs of Ansible
ansible.builtin.import_tasks: ansible/user.yaml
# Create users
- name: Create users
ansible.builtin.include_tasks: users.yaml
loop:
- annika
- moosetheory
loop_control:
loop_var: user_name
# Install software not specific to Ansible
# - name: Ensure software wanted on all hosts is installed
# ansible.builtin.import_tasks: general/software.yaml
rescue:
- name: Set that this task failed
ansible.builtin.set_fact:
task_failed: true
# code: language=ansible

View file

@ -0,0 +1,57 @@
---
- name: Load user-specific variables
tags: groups,users
ansible.builtin.include_vars:
file: "users/{{ user_name }}.yaml"
- name: Ensure group exists
tags: groups,users
ansible.builtin.group:
name: "{{ user_name }}"
state: present
- name: Ensure user exists
tags: users
ansible.builtin.user:
name: "{{ user_name }}"
group: "{{ user_name }}"
groups: "adm,{{ common_sudo_group }}"
state: present
password: "{{ common_user_password | string | password_hash('sha512') }}"
- name: Adjust shell for Debian hosts
tags: settings,users,debian
ansible.builtin.user:
name: "{{ user_name }}"
shell: /bin/bash
when: ansible_distribution in debian_derivatives
- name: Adjust shell for Ansible hosts
tags: settings,users,alpine
ansible.builtin.user:
name: "{{ user_name }}"
shell: /bin/ash
when: ansible_distribution == "Alpine"
- name: Ensure user sudoers file is in place for Debian hosts
tags: settings,users,debian
ansible.builtin.copy:
src: "users/{{ user_name }}/sudoers"
dest: "/etc/sudoers.d/{{ user_name }}"
owner: root
group: root
mode: u=r,g=r,o-rwx
when: ansible_distribution in debian_derivatives
- name: Ensure user doas config is in place for Alpine hosts
tags: settings,users,alpine
ansible.builtin.copy:
src: "users/{{ user_name }}/doas.conf"
dest: "/etc/doas.d/{{ user_name }}.conf"
owner: root
group: root
mode: u=r,g=r,o-rwx
when: ansible_distribution == "Alpine"
- name: Ensure public keys are available for this user
tags: settings,users,ssh
ansible.posix.authorized_key:
user: "{{ user_name }}"
state: present
key: "{{ lookup('file', item) }}"
with_fileglob:
- "users/{{ user_name }}/*.pub"
# code: language=ansible

View file

@ -0,0 +1,5 @@
---
common_sudo_group: wheel
common_ssh_package: openssh
common_elevate_package: doas
# code: language=ansible

View file

@ -0,0 +1,5 @@
---
common_sudo_group: sudo
common_ssh_package: ssh
common_elevate_package: sudo
# code: language=ansible

View file

@ -0,0 +1,18 @@
---
common_interactive_users:
- annika
- moosetheory
common_annika_passwd: !vault |
$ANSIBLE_VAULT;1.1;AES256
31376262376236616461656131623338386564396462663662363934663065333335373338366166
3133373464376565393339323461313837363463353636300a653738616137316261656665323835
30356563646237653533303832623433343831346234333965623532363565346633313437353865
3333366534323032390a643536643361356532666333306635653634373938613134353565643961
6665
common_moosetheory_passwd: !vault |
$ANSIBLE_VAULT;1.1;AES256
37633433626261666330346536356463303431396662333334643633393632383731343037353038
3462366461343964386535356239353034323638363937380a633238343839363433356338663632
66363663356162666437343863663837346430653665356636356565306263646137383438333233
3062313935383164650a626365363362326238386137336538323831373430653366383139326365
3961

View file

@ -0,0 +1,9 @@
---
common_user_password: !vault |
$ANSIBLE_VAULT;1.1;AES256
39313537373231343839663162373238343837626266323631316234333034343536636664336433
3531626364383166383165613563373435623663366461360a613731663639633966353239303933
63353537626461383332656265653634656530326133646361643365366665353562396536373834
3866343531323237360a353737303766393338353436353864336538373166366637663566363166
6364
# code: language=ansible

View file

@ -0,0 +1,9 @@
---
common_user_password: !vault |
$ANSIBLE_VAULT;1.1;AES256
39313537373231343839663162373238343837626266323631316234333034343536636664336433
3531626364383166383165613563373435623663366461360a613731663639633966353239303933
63353537626461383332656265653634656530326133646361643365366665353562396536373834
3866343531323237360a353737303766393338353436353864336538373166366637663566363166
6364
# code: language=ansible

View file

@ -0,0 +1,18 @@
---
- name: Ensure docker is installed
tags: alpine,docker,software
community.general.apk:
name: "{{ item }}"
state: present
loop:
- docker
- docker-compose
- py3-pip
- py3-docker-py
- name: Start Docker and add to autostart on Alpine
tags: alpine,docker,software
ansible.builtin.service:
name: docker
state: started
enabled: true
# code: language=ansible

View file

@ -0,0 +1,102 @@
---
- name: Ensure python dependencies are installed
ansible.builtin.apt:
name: "{{ item }}"
state: present
update_cache: true
loop:
- python3-debian
- python3-pip
- name: Ensure no unofficial Docker packages are installed on Debian hosts
ansible.builtin.apt:
name: "{{ item }}"
state: absent
update_cache: false
loop:
- docker.io
- docker-compose
- docker-doc
- podman-docker
- name: Ensure Docker repositories are available on Debian hosts
ansible.builtin.deb822_repository:
name: docker
types: deb
uris: https://download.docker.com/linux/debian
suites: "{{ ansible_distribution_release }}"
components:
- stable
signed_by: |-
-----BEGIN PGP PUBLIC KEY BLOCK-----
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
YT90qFF93M3v01BbxP+EIY2/9tiIPbrd
=0YYh
-----END PGP PUBLIC KEY BLOCK-----
- name: Ensure Docker dependencies are available on Debian hosts
ansible.builtin.apt:
name: "{{ item }}"
state: present
update_cache: true
loop:
- docker-ce
- docker-ce-cli
- containerd.io
- docker-buildx-plugin
- docker-compose-plugin
# code: language=ansible

View file

@ -0,0 +1,23 @@
---
- name: Fetch distro-specific variables
ansible.builtin.include_vars: '{{ item }}'
tags: always
with_first_found:
- files:
- "vars/{{ ansible_distribution }}.yaml"
skip: true
- name: Ensure dependencies for docker module are installed
block:
- name: Ensure debian hosts are properly configured
ansible.builtin.import_tasks: ./debian.yaml
when: ansible_distribution in debian_derivatives
- name: Ensure alpine hosts are properly configured
ansible.builtin.import_tasks: ./alpine.yaml
when: ansible_distribution == 'Alpine'
rescue:
- name: Set that this task failed
ansible.builtin.set_fact:
task_failed: true
# code: language=ansible

View file

@ -0,0 +1,57 @@
Adhdgirl.Minilab Run Role
========================
A brief description of the role is here.
Requirements
------------
Any prerequisites that may not be covered by Ansible itself or the role should be mentioned here. For instance, if the role uses the EC2 module, it may be a good idea to mention in this section that the boto package is required.
Role Variables
--------------
A description of the settable variables for this role should go here, including any variables that are in defaults/main.yml, vars/main.yml, and any variables that can/should be set via parameters to the role. Any variables that are read from other roles and/or the global scope (ie. host vars, group vars, etc.) should be mentioned here as well.
Dependencies
------------
A list of other roles hosted on Galaxy should go here, plus any details in regards to parameters that may need to be set for other roles, or variables that are used from other roles.
Example Playbook
----------------
Including an example of how to use your role (for instance, with variables passed in as parameters) is always nice for users too:
```yaml
- name: Execute tasks on servers
hosts: servers
roles:
- role: adhdgirl.minilab.run
run_x: 42
```
Another way to consume this role would be:
```yaml
- name: Initialize the run role from adhdgirl.minilab
hosts: servers
gather_facts: false
tasks:
- name: Trigger invocation of run role
ansible.builtin.include_role:
name: adhdgirl.minilab.run
vars:
run_x: 42
```
License
-------
# TO-DO: Update the license to the one you want to use (delete this line after setting the license)
BSD
Author Information
------------------
An optional section for the role authors to include contact information, or a website (HTML is not allowed).

View file

@ -0,0 +1,12 @@
---
- name: Debug print task-1
ansible.builtin.debug:
msg: "This is task-1"
- name: Debug print task-2
ansible.builtin.debug:
msg: "This is task-2"
- name: Debug print task-3
ansible.builtin.debug:
msg: "This is task-3"

View file

@ -0,0 +1,7 @@
---
collections:
- name: community.general
- name: ansible.posix
# - name: ansibleguy.nftables
# version: 1.0.3
- name: community.docker