diff --git a/meta/attitude-adjuster/Dockerfile.ddclient b/meta/attitude-adjuster/Dockerfile.ddclient
deleted file mode 100644
index 4beab932..00000000
--- a/meta/attitude-adjuster/Dockerfile.ddclient
+++ /dev/null
@@ -1,23 +0,0 @@
-# vim: ft=dockerfile
-FROM armhf/alpine
-
-# https://wiki.alpinelinux.org/wiki/Ddclient
-
-RUN apk update && apk upgrade && \
- apk add \
- curl \
- make \
- perl \
- perl-io-socket-ssl
-RUN cpan install Test::Requires && cpan Data::Validate::IP
-
-RUN cd tmp && \
- curl --location https://github.com/ddclient/ddclient/archive/v3.9.0.tar.gz > ddclient-3.9.0.tar.gz && \
- tar xvz < ddclient-3.9.0.tar.gz && \
- cp ddclient-3.9.0/ddclient /usr/sbin && \
- mkdir /etc/ddclient && \
- mkdir -p /var/cache/ddclient
-
-VOLUME /etc/ddclient
-
-ENTRYPOINT [ "ddclient", "-daemon", "300", "-foreground", "-verbose" ]
diff --git a/meta/attitude-adjuster/README.md b/meta/attitude-adjuster/README.md
deleted file mode 100644
index 1c08245a..00000000
--- a/meta/attitude-adjuster/README.md
+++ /dev/null
@@ -1,22 +0,0 @@
-# Attitude Adjuster
-
-## Installation notes
-
-1. [Download Raspberian Stretch Lite](https://www.raspberrypi.org/downloads/raspbian/)
-1. Install Etcher: `brew cask install balenaetcher`
-1. [Flash the SD card](https://www.raspberrypi.org/documentation/installation/installing-images/README.md)
-
-1. [Enable SSH](https://www.raspberrypi.org/documentation/remote-access/ssh/)
-
-1. Run the Ansible playbooks
- - `ansible-playbook --extra-vars "ansible_user=pi" --ask-pass attitude-adjuster/bootstrap.yml`
- - `ansible-playbook attitude-adjuster/main.yml`
-
-## Optional
-
-1. Use `raspi-config` to set up the WiFi
- - [Additional setup](https://www.raspberrypi.org/documentation/configuration/wireless/wireless-cli.md)
- - Add `scan_ssid=1` to `/etc/wpa_supplicant/wpa_supplicant.conf`
- - Restart WiFi: `wpa_cli -i wlan0 reconfigure`
-1. Use `raspi-config` to set the keyboard layout
-
diff --git a/meta/attitude-adjuster/bootstrap.yml b/meta/attitude-adjuster/bootstrap.yml
deleted file mode 100644
index 154c0dc9..00000000
--- a/meta/attitude-adjuster/bootstrap.yml
+++ /dev/null
@@ -1,46 +0,0 @@
-- hosts: attitude-adjuster
- become: yes
- vars_files:
- - vars.yml.private
- tasks:
-
- - name: change hostname to {{ ansible_hostname }}
- hostname:
- name: "{{ ansible_hostname }}"
- notify: reboot
-
- - name: update hostname in /etc/hosts
- replace:
- path: /etc/hosts
- regexp: '(\s+)raspberrypi(\s+.*)?$'
- replace: '\{{ ansible_hostname }}\2'
- notify: reboot
-
- - name: disable wifi
- lineinfile:
- path: /boot/config.txt
- insertafter: dtoverlay
- line: dtoverlay=pi3-disable-wifi
- notify: reboot
-
- - name: create user
- user:
- name: alpha
- password: "{{ password | password_hash('sha512') }}"
- shell: /bin/bash
-
- - name: give user sudo access
- lineinfile:
- path: /etc/sudoers.d/alpha
- line: "alpha ALL=(ALL) NOPASSWD: ALL"
- create: yes
- validate: visudo -cf %s
-
- - name: add ssh keys
- authorized_key:
- user: alpha
- key: https://github.com/kejadlen.keys
-
- handlers:
- - name: reboot
- reboot:
diff --git a/meta/attitude-adjuster/ddclient.yml b/meta/attitude-adjuster/ddclient.yml
deleted file mode 100644
index fc11b0f4..00000000
--- a/meta/attitude-adjuster/ddclient.yml
+++ /dev/null
@@ -1,66 +0,0 @@
-- hosts: attitude-adjuster
- vars_files:
- - vars.yml.private
- become: yes
- tasks:
-
- - name: configure ddclient
- copy:
- content: |
- use=web
- ssl=yes
- protocol=googledomains
- login={{ home.ddclient.login }}
- password={{ home.ddclient.password }}
- {{ home.host }}
-
- use=web
- ssl=yes
- protocol=googledomains
- login={{ home_assistant.ddclient.login }}
- password={{ home_assistant.ddclient.password }}
- {{ home_assistant.host }}
-
- use=web
- ssl=yes
- protocol=googledomains
- login={{ homebridge.ddclient.login }}
- password={{ homebridge.ddclient.password }}
- {{ homebridge.host }}
-
- use=web
- ssl=yes
- protocol=googledomains
- login={{ pihole.ddclient.login }}
- password={{ pihole.ddclient.password }}
- {{ pihole.host }}
-
- use=web
- ssl=yes
- protocol=googledomains
- login={{ traefik.ddclient.login }}
- password={{ traefik.ddclient.password }}
- {{ traefik.host }}
- dest: /etc/ddclient/ddclient.conf
- mode: 0600
- notify: restart ddclient
-
- - name: build docker image
- docker_image:
- build:
- path: .
- dockerfile: Dockerfile.ddclient
- pull: yes
- name: kejadlen/ddclient
- repository: kejadlen/ddclient
- push: yes
- source: build
-
- handlers:
-
- - name: restart ddclient
- docker_container:
- name: ddclient
- restart: yes
- ignore_errors: yes
-
diff --git a/meta/attitude-adjuster/docker.yml b/meta/attitude-adjuster/docker.yml
deleted file mode 100644
index f823f1ed..00000000
--- a/meta/attitude-adjuster/docker.yml
+++ /dev/null
@@ -1,51 +0,0 @@
-# https://docs.docker.com/install/linux/docker-ce/debian/#install-using-the-repository
-
-- hosts: attitude-adjuster
- vars_files:
- - vars.yml.private
- become: yes
- tasks:
-
- - name: install dependencies
- package:
- name: "{{ item }}"
- state: present
- with_items:
- - apt-transport-https
- - ca-certificates
- - gnupg2
-
- - name: add docker apt key
- apt_key:
- url: https://download.docker.com/linux/debian/gpg
-
- # https://github.com/moby/moby/issues/31405#issuecomment-501494874
- - name: add docker apt repository
- apt_repository:
- repo: deb [arch=armhf] https://download.docker.com/linux/raspbian stretch stable
- state: present
- filename: docker
-
- - name: install docker
- package:
- name: "{{ item }}"
- state: present
- with_items:
- - docker-ce
- - docker-ce-cli
- - containerd.io
-
- - name: add myself to docker group
- user:
- name: alpha
- groups: docker
- append: yes
-
- - name: install dependencies
- package:
- name: "{{ item }}"
- state: present
- with_items:
- - docker-compose
- - python-docker
-
diff --git a/meta/attitude-adjuster/home-assistant.yml b/meta/attitude-adjuster/home-assistant.yml
deleted file mode 100644
index 5d48cf49..00000000
--- a/meta/attitude-adjuster/home-assistant.yml
+++ /dev/null
@@ -1,39 +0,0 @@
-- hosts: attitude-adjuster
- vars_files:
- - vars.yml.private
- become: yes
- tasks:
-
- - name: configure home assistant
- copy:
- content: |
- default_config:
- http:
- base_url: https://{{ home_assistant.host }}
- tts: # Text to speech
- - platform: google_translate
- homekit:
- group: !include groups.yaml
- automation: !include automations.yaml
- script: !include scripts.yaml
- dest: /etc/homeassistant/configuration.yaml
- notify: restart home assistant
-
- - name: allow access to homekit
- ufw:
- rule: allow
- proto: "{{ item.proto }}"
- port: "{{ item.port }}"
- state: reloaded
- with_items:
- - { proto: tcp, port: 51827 }
- - { proto: udp, port: 5353 }
-
- handlers:
-
- - name: restart home assistant
- docker_container:
- name: home-assistant
- restart: yes
- ignore_errors: yes
-
diff --git a/meta/attitude-adjuster/main.yml b/meta/attitude-adjuster/main.yml
deleted file mode 100644
index 911f9158..00000000
--- a/meta/attitude-adjuster/main.yml
+++ /dev/null
@@ -1,107 +0,0 @@
-- hosts: attitude-adjuster
- become: yes
- tasks:
-
- - name: install dependencies
- package:
- name: "{{ item }}"
- state: present
- with_items:
- - git
- - vim
-
-- import_playbook: security.yml
-
-- import_playbook: docker.yml
-- import_playbook: ddclient.yml
-- import_playbook: home-assistant.yml
-- import_playbook: pihole.yml
-- import_playbook: traefik.yml
-
-- hosts: attitude-adjuster
- vars_files:
- - vars.yml.private
- tasks:
- - name: docker compose
- docker_compose:
- project_name: attitude-adjuster
- definition:
- version: '2'
- services:
-
- ddclient:
- image: kejadlen/ddclient
- container_name: ddclient
- environment:
- TZ: America/Los_Angeles
- volumes:
- - /etc/ddclient:/etc/ddclient
- networks:
- - bridge
- restart: always
-
- home_assistant:
- container_name: home-assistant
- image: homeassistant/raspberrypi3-homeassistant
- environment:
- TZ: America/Los_Angeles
- volumes:
- - /etc/homeassistant:/config
- network_mode: host
- restart: always
-
- pihole:
- container_name: pihole
- image: pihole/pihole:latest
- ports:
- - 53:53/tcp
- - 53:53/udp
- environment:
- ServerIP: 192.168.1.101
- TZ: America/Los_Angeles
- VIRTUAL_HOST: "{{ pihole.host }}"
- WEBPASSWORD: "{{ pihole.password }}"
- volumes:
- - /etc/pihole:/etc/pihole
- - /etc/dnsmasq.d:/etc/dnsmasq.d
- dns:
- - 127.0.0.1
- - 1.1.1.1
- cap_add:
- - NET_ADMIN
- networks:
- - bridge
- restart: always
- labels:
- - traefik.enable=true
- - traefik.frontend.rule=Host:{{ pihole.host }}
- - traefik.basic.port=80
- - traefik.basic.protocol=http
-
- traefik:
- container_name: traefik
- image: traefik
- command: --api --docker
- ports:
- - 80:80
- - 443:443
- volumes:
- - /var/run/docker.sock:/var/run/docker.sock
- - /opt/traefik/traefik.toml:/traefik.toml
- - /opt/traefik/acme.json:/acme.json
- networks:
- - bridge
- restart: always
- labels:
- - traefik.enable=true
- - traefik.frontend.rule=Host:{{ traefik.host }}
- - traefik.frontend.auth.basic.users=alpha:{{ traefik.password | password_hash('md5') | replace('$', '$$') }}
- - traefik.basic.port=8080
- - traefik.basic.protocol=http
-
- networks:
- bridge:
-
- state: present
- pull: yes
-
diff --git a/meta/attitude-adjuster/pihole.yml b/meta/attitude-adjuster/pihole.yml
deleted file mode 100644
index fe96c24f..00000000
--- a/meta/attitude-adjuster/pihole.yml
+++ /dev/null
@@ -1,18 +0,0 @@
-- hosts: attitude-adjuster
- become: yes
- tasks:
-
- - name: allow access to dns
- ufw:
- rule: allow
- name: DNS
- notify: restart pihole
-
- handlers:
-
- - name: restart pihole
- docker_container:
- name: pihole
- restart: yes
- ignore_errors: yes
-
diff --git a/meta/attitude-adjuster/security.yml b/meta/attitude-adjuster/security.yml
deleted file mode 100644
index a6030683..00000000
--- a/meta/attitude-adjuster/security.yml
+++ /dev/null
@@ -1,63 +0,0 @@
-# https://www.raspberrypi.org/documentation/configuration/security.md
-
-- hosts: attitude-adjuster
- become: yes
- tasks:
-
- - name: disable ssh password logins
- lineinfile:
- path: /etc/ssh/sshd_config
- regexp: '^(#\s*)?{{ item }} '
- line: "{{ item }} no"
- notify: reload ssh
- with_items:
- - ChallengeResponseAuthentication
- - PasswordAuthentication
- - UsePAM
-
- - name: disable pi user
- user:
- name: pi
- password: !
-
- - name: install ufw and fail2ban
- package:
- name: "{{ item }}"
- state: present
- with_items:
- - ufw
- - fail2ban
-
- - name: allow access to http, and https
- ufw:
- rule: allow
- name: WWW Full
-
- - name: limit ssh access
- ufw:
- rule: limit
- name: OpenSSH
-
- - name: enable ufw
- ufw:
- state: enabled
-
- - name: create jail.local
- copy:
- content: |
- [sshd]
- enabled = true
- dest: /etc/fail2ban/jail.local
- notify: reload fail2ban
-
- handlers:
-
- - name: reload ssh
- service:
- name: ssh
- state: reloaded
-
- - name: reload fail2ban
- service:
- name: fail2ban
- state: reloaded
diff --git a/meta/attitude-adjuster/traefik.yml b/meta/attitude-adjuster/traefik.yml
deleted file mode 100644
index e3accef1..00000000
--- a/meta/attitude-adjuster/traefik.yml
+++ /dev/null
@@ -1,76 +0,0 @@
-# https://docs.traefik.io/user-guide/docker-and-lets-encrypt/
-
-- hosts: attitude-adjuster
- vars_files:
- - vars.yml.private
- become: yes
- tasks:
-
- - name: get docker ip
- shell: ip -4 addr show docker0 | grep -Po 'inet \K[\d.]+'
- register: docker_ip
-
- - name: traefik.toml
- copy:
- content: |
- debug = false
- insecureSkipVerify = true
-
- logLevel = "INFO" # "ERROR"
- defaultEntryPoints = ["https","http"]
-
- [entryPoints]
- [entryPoints.http]
- address = ":80"
- [entryPoints.http.redirect]
- entryPoint = "https"
- [entryPoints.https]
- address = ":443"
- [entryPoints.https.tls]
-
- [retry]
-
- [file]
-
- [frontends]
- [frontends.homeassistant]
- backend = "homeassistant"
- [frontends.homeassistant.routes.test_1]
- rule = "Host:{{ home_assistant.host }}"
-
- [backends]
- [backends.homeassistant]
- [backends.homeassistant.servers.server1]
- url = "http://{{ docker_ip.stdout | trim }}:8123"
-
- [docker]
- endpoint = "unix:///var/run/docker.sock"
- domain = "{{ traefik.domain }}"
- watch = true
- exposedByDefault = false
- network = "attitudeadjuster_bridge"
-
- [acme]
- email = "{{ traefik.email }}"
- storage = "acme.json"
- entryPoint = "https"
- onHostRule = true
- [acme.httpChallenge]
- entryPoint = "http"
- dest: /opt/traefik/traefik.toml
- notify: restart traefik
-
- - name: acme.json
- file:
- name: /opt/traefik/acme.json
- mode: 0600
- state: touch
-
- handlers:
-
- - name: restart traefik
- docker_container:
- name: traefik
- restart: yes
- ignore_errors: yes
-