summaryrefslogtreecommitdiffstats
path: root/molecule/raspberrypi/converge.yml
blob: 6c19f3c15f47e91d7ec897bba36f99c990cadcc6 (plain) (blame)
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
---
- name: "Discover test devices"
  hosts: localhost
  gather_facts: false
  tasks:
    - name: "Find loop device for vdd.img"
      become: true
      ansible.builtin.command:
        cmd: "losetup -j /opt/vdd.img"
      register: losetup_output
      changed_when: false

    - name: "Inject backup_device into raspberrypi host vars"
      ansible.builtin.add_host:
        name: "raspberrypi"
        backup_device: "{{ losetup_output.stdout.split(':')[0] }}"

- name: "Bootstrap"
  hosts: "raspberrypi"
  gather_facts: true
  vars:
    ansible_become_method: su
    user_public_keys:
      - "ssh-ed25519 AAAA...fMo"
      - "ssh-rsa AAAA...4I3"
    user_groups: ["wheel", "test_group"]
  roles:
    - role: "hostname"
    - role: "network"
    - role: "user"
    - role: "ssh"
    - role: "password_policy"
  pre_tasks:
    - name: "Update package cache"
      become: true
      ansible.builtin.package:
        update_cache: true
      async: 60
      poll: 5
      failed_when: false
      tags:
        - molecule-idempotence-notest
  tasks:
    - name: "Configure passwordless sudo for testing"
      ansible.builtin.copy:
        content: "%test_group ALL=(ALL) NOPASSWD: ALL\n"
        dest: "/etc/sudoers.d/test_group"
        mode: "0440"
        validate: 'visudo -cf %s'

- name: "Configure"
  hosts: "raspberrypi"
  gather_facts: true
  remote_user: "{{ username }}"
  vars:
    ansible_become_method: sudo
    locales:
      - "en_US.UTF-8 UTF-8"
    timezone: "GMT"
    pihole_interface: "eth0"
    pihole_domain: "pi.hole"
    pihole_totp_secret: "CHANGEME"
    pihole_password: "{{ ('changeme' | hash('sha256') | hash('sha256'))[:64] }}"
    pihole_dhcp_enabled: false
    wireguard_autostart_connection: ""
    proxy_type: "nginx"
    gateway_enabled: true
    gateway_local_ipv4_subnet: "10.0.0.0/24"
    grafana_dashboards:
      - name: "node-exporter-full"
        url: "https://grafana.com/api/dashboards/1860/revisions/45/download"
        datasource_mappings:
          - key: "000000001"
            value: "prometheus"
    vimrc_repo_url: "https://git.sr.ht/~a14m/.vim"
    password_store_repo_url: "https://github.com/octocat/Spoon-Knife"
    firefox_install_browserpass: true
    firefox_install_passff: true
  pre_tasks:
    - name: "Override is_chroot fact for container environment"
      ansible.builtin.set_fact:
        ansible_facts: "{{ ansible_facts | combine({'is_chroot': false}) }}"
  roles:
    - role: "locales"
    - role: "timezone"
    - role: "bash"
    - role: "man"
    - role: "jq"
    - role: "ag"
    - role: "libheif"
    - role: "tmux"
    - role: "python"
    - role: "go"
    - role: "rust"
    - role: "nodejs"
    - role: "zoxide"
    - role: "gum"
    - role: "usbutils"
    - role: "wireguard"
    - role: "gateway"
    - role: "proxy"
    - role: "wg_portal"
    - role: "pihole"
    - role: "prometheus"
    - role: "prometheus-node-exporter"
    - role: "grafana"
    - role: "gnome"
    - role: "gnome-calendar"
    - role: "gnome-loupe"
    - role: "gnome-papers"
    - role: "gnome-disk-utility"
    - role: "gnome-newsflash"
    - role: "gradia"
    - role: "rsync"
    - role: "gpg"
    - role: "dotfiles"
    - role: "vim"
    - role: "mise"
    - role: "neomutt"
    - role: "password_store"
    - role: "which"
    - role: "firefox"
    - role: "chromium"
    - role: "font"
    - role: "alacritty"
    - role: "btop"
    - role: "pipewire"
    - role: "claude"
    - role: "localsend"
    - role: "backup"
    - role: "garage"