aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.ansible-lint5
-rw-r--r--.yamllint7
l---------files/keys/git-internal/ws-think03.pub1
l---------files/keys/git/ws-think03.pub1
-rw-r--r--files/keys/ws-think03.pub1
-rw-r--r--group_vars/all.yml19
-rw-r--r--group_vars/workstations.yml3
-rw-r--r--host_vars/dc0.yml17
-rw-r--r--host_vars/localhost.yml2
-rw-r--r--host_vars/stack0-cld0.yml2
-rw-r--r--host_vars/stack0-dc1.yml2
-rw-r--r--host_vars/stack0-dev0.yml9
-rw-r--r--host_vars/stack0.yml2
-rw-r--r--host_vars/ws-bare01.yml2
-rw-r--r--host_vars/ws-think01.yml2
-rw-r--r--host_vars/ws-think02.yml2
-rw-r--r--host_vars/ws-think03.yml5
-rw-r--r--host_vars/ws-work01.yml7
-rw-r--r--host_vars/ws-xps01.yml2
-rw-r--r--inventory.ini5
-rw-r--r--poetry.lock798
-rw-r--r--pyproject.toml9
-rw-r--r--[-rwxr-xr-x]roles/_workstation/apm/files/hibernate (renamed from roles/workstation/templates/apm-hibernate)1
-rw-r--r--[-rwxr-xr-x]roles/_workstation/apm/files/resume (renamed from roles/workstation/templates/apm-resume)1
-rw-r--r--[-rwxr-xr-x]roles/_workstation/apm/files/suspend (renamed from roles/workstation/templates/apm-suspend)1
-rw-r--r--roles/_workstation/apm/tasks/main.yml21
-rw-r--r--roles/_workstation/basegroups/defaults/main.yml3
-rw-r--r--roles/_workstation/basegroups/tasks/main.yml11
-rw-r--r--roles/_workstation/basetools/defaults/main.yml (renamed from roles/workstation/defaults/main.yml)24
-rw-r--r--roles/_workstation/basetools/meta/main.yml21
-rw-r--r--roles/_workstation/basetools/tasks/install.yml22
-rw-r--r--roles/_workstation/basetools/tasks/main.yml21
-rw-r--r--roles/_workstation/basetools/vars/os_archlinux.yml (renamed from roles/workstation/vars/os_archlinux.yml)40
-rw-r--r--roles/_workstation/basetools/vars/os_openbsd.yml (renamed from roles/workstation/vars/os_openbsd.yml)7
-rw-r--r--roles/_workstation/cronie/tasks/main.yml12
-rw-r--r--roles/_workstation/doas/defaults/main.yml4
-rw-r--r--roles/_workstation/doas/tasks/main.yml36
-rw-r--r--roles/_workstation/dockerd/defaults/main.yml5
-rw-r--r--roles/_workstation/dockerd/files/daemon.json (renamed from roles/workstation/templates/docker-daemon.json.j2)0
-rw-r--r--roles/_workstation/dockerd/tasks/main.yml30
-rw-r--r--roles/_workstation/dotfiles.yml29
-rw-r--r--roles/_workstation/dotfiles/defaults/main.yml4
-rw-r--r--roles/_workstation/dotfiles/tasks/main.yml28
-rw-r--r--roles/_workstation/hosts/defaults/main.yml5
-rw-r--r--roles/_workstation/hosts/tasks/main.yml9
-rw-r--r--roles/_workstation/kernel/defaults/main.yml3
-rw-r--r--roles/_workstation/kernel/tasks/main.yml34
-rw-r--r--roles/_workstation/libvirt/defaults/main.yml3
-rw-r--r--roles/_workstation/libvirt/tasks/main.yml27
-rw-r--r--roles/_workstation/makepkg/defaults/main.yml4
-rw-r--r--roles/_workstation/makepkg/meta/main.yml22
-rw-r--r--roles/_workstation/makepkg/tasks/install.yml21
-rw-r--r--roles/_workstation/makepkg/tasks/main.yml16
-rw-r--r--roles/_workstation/pipewire/defaults/main.yml3
-rw-r--r--roles/_workstation/pipewire/tasks/main.yml24
-rw-r--r--roles/_workstation/resolv/defaults/main.yml9
-rw-r--r--roles/_workstation/resolv/tasks/main.yml10
-rw-r--r--roles/_workstation/shell/defaults/main.yml3
-rw-r--r--roles/_workstation/shell/tasks/main.yml16
-rw-r--r--roles/_workstation/smartcard/defaults/main.yml3
-rw-r--r--roles/_workstation/smartcard/tasks/main.yml16
-rw-r--r--roles/_workstation/smartcard/vars/os_archlinux.yml6
-rw-r--r--roles/_workstation/smartcard/vars/os_openbsd.yml5
-rw-r--r--roles/_workstation/syncthing/defaults/main.yml3
-rw-r--r--roles/_workstation/syncthing/tasks/main.yml21
-rw-r--r--roles/_workstation/tlp/tasks/main.yml (renamed from roles/workstation/tasks/tlp.yml)6
-rw-r--r--roles/_workstation/wscons/defaults/main.yml3
-rw-r--r--roles/_workstation/wscons/tasks/main.yml17
-rw-r--r--roles/_workstation/xorg/defaults/main.yml3
-rw-r--r--roles/_workstation/xorg/files/intel.conf (renamed from roles/workstation/templates/xorg-intel.conf)3
-rw-r--r--roles/_workstation/xorg/tasks/main.yml29
-rw-r--r--roles/_workstation/yay/defaults/main.yml5
-rw-r--r--roles/_workstation/yay/tasks/main.yml21
-rw-r--r--roles/acme/defaults/main.yml4
-rw-r--r--roles/acme/tasks/main.yml22
-rw-r--r--roles/acme/templates/acme-client.conf.j26
-rw-r--r--roles/cgit/defaults/main.yml2
-rw-r--r--roles/cgit/meta/main.yml2
-rw-r--r--roles/cgit/tasks/dependencies.yml12
-rw-r--r--roles/cgit/tasks/main.yml22
-rw-r--r--roles/git/defaults/main.yml2
-rw-r--r--roles/git/tasks/main.yml23
-rw-r--r--roles/grafana/defaults/main.yml2
-rw-r--r--roles/grafana/tasks/main.yml18
-rw-r--r--roles/httpd/defaults/main.yml2
-rw-r--r--roles/httpd/meta/main.yml2
-rw-r--r--roles/httpd/tasks/main.yml10
-rw-r--r--[l---------]roles/httpd_pre/defaults/main.yml9
-rw-r--r--roles/httpd_pre/tasks/main.yml12
-rw-r--r--[l---------]roles/httpd_site_healthcheck/defaults/main.yml9
-rw-r--r--roles/httpd_site_healthcheck/meta/main.yml2
-rw-r--r--roles/httpd_site_healthcheck/tasks/main.yml14
-rw-r--r--roles/loki/defaults/main.yml2
-rw-r--r--roles/loki/tasks/main.yml14
-rw-r--r--roles/miniflux/defaults/main.yml2
-rw-r--r--roles/miniflux/meta/main.yml2
-rw-r--r--roles/miniflux/tasks/main.yml26
-rw-r--r--roles/nfsclient/defaults/main.yml2
-rw-r--r--roles/nfsclient/handlers/main.yml4
-rw-r--r--roles/nfsclient/tasks/main.yml19
-rw-r--r--roles/nfsclient/tasks/os_alpine.yml6
-rw-r--r--roles/nfsd/defaults/main.yml2
-rw-r--r--roles/nfsd/tasks/main.yml20
-rw-r--r--roles/nfsd/tasks/os_freebsd.yml6
-rw-r--r--roles/pf/defaults/main.yml12
-rw-r--r--roles/pf/handlers/main.yml14
-rw-r--r--roles/pf/tasks/main.yml13
-rw-r--r--roles/pf/templates/pf.conf.j25
-rw-r--r--roles/postgres/defaults/main.yml2
-rw-r--r--roles/postgres/tasks/create_db.yml4
-rw-r--r--roles/postgres/tasks/create_user.yml4
-rw-r--r--roles/postgres/tasks/main.yml18
-rw-r--r--roles/prometheus/defaults/main.yml2
-rw-r--r--roles/prometheus/tasks/main.yml10
-rw-r--r--roles/rc/defaults/main.yml2
-rw-r--r--roles/rc/defaults/os_alpine.yml2
-rw-r--r--roles/rc/defaults/os_openbsd.yml2
-rw-r--r--roles/rc/tasks/main.yml10
-rw-r--r--roles/rc/vars/os_alpine.yml2
-rw-r--r--roles/rc/vars/os_openbsd.yml2
-rw-r--r--roles/relayd/defaults/main.yml4
-rw-r--r--roles/relayd/handlers/main.yml4
-rw-r--r--roles/relayd/tasks/main.yml11
-rw-r--r--roles/relayd/templates/relayd.conf.j220
-rw-r--r--roles/sshd/defaults/main.yml5
-rw-r--r--roles/sshd/tasks/main.yml21
-rw-r--r--roles/sshd/templates/sshd_config.j27
-rw-r--r--roles/sshd_keys/meta/main.yml5
-rw-r--r--roles/sshd_keys/tasks/main.yml (renamed from roles/sshd/tasks/synchronize_keys.yml)6
-rw-r--r--roles/vmm/.travis.yml29
-rw-r--r--roles/vmm/defaults/main.yml2
-rw-r--r--roles/vmm/handlers/main.yml4
-rw-r--r--roles/vmm/meta/main.yml2
-rw-r--r--roles/vmm/tasks/autoinstall_configuration.yml22
-rw-r--r--roles/vmm/tasks/disk.yml10
-rw-r--r--roles/vmm/tasks/facts.yml6
-rw-r--r--roles/vmm/tasks/iso.yml5
-rw-r--r--roles/vmm/tasks/main.yml22
-rw-r--r--roles/vmm/tasks/network.yml14
-rw-r--r--roles/wireguard/defaults/main.yml2
-rw-r--r--roles/wireguard/tasks/configuration.yml10
-rw-r--r--roles/wireguard/tasks/cron.yml2
-rw-r--r--roles/wireguard/tasks/keys.yml4
-rw-r--r--roles/wireguard/tasks/main.yml20
-rw-r--r--roles/wireguard/tasks/service.yml11
-rw-r--r--roles/workstation/tasks/doas.yml34
-rw-r--r--roles/workstation/tasks/dockerd.yml7
-rw-r--r--roles/workstation/tasks/libvirt.yml17
-rw-r--r--roles/workstation/tasks/main.yml48
-rw-r--r--roles/workstation/tasks/os_archlinux.yml51
-rw-r--r--roles/workstation/tasks/os_openbsd.yml72
-rw-r--r--roles/workstation/tasks/pkgs.yml7
-rw-r--r--roles/workstation/tasks/shell.yml8
-rw-r--r--roles/workstation/tasks/smartcard.yml5
-rw-r--r--roles/workstation/tasks/ssh.yml18
-rw-r--r--roles/workstation/tasks/yay.yml19
-rw-r--r--roles/workstation/templates/ssh.config.j217
-rw-r--r--roles/znc/defaults/main.yml2
-rw-r--r--roles/znc/tasks/main.yml12
-rw-r--r--site.all.yml26
-rw-r--r--site.prerequisites.yml4
-rw-r--r--site.workstation.yml74
162 files changed, 1729 insertions, 898 deletions
diff --git a/.ansible-lint b/.ansible-lint
index 4930268..6f10705 100644
--- a/.ansible-lint
+++ b/.ansible-lint
@@ -1,2 +1,7 @@
+---
+
skip_list:
+ - risky-shell-pipe
+ - name[casing]
- meta-no-info
+ - yaml[line-length]
diff --git a/.yamllint b/.yamllint
new file mode 100644
index 0000000..612177c
--- /dev/null
+++ b/.yamllint
@@ -0,0 +1,7 @@
+---
+
+extends: default
+
+rules:
+ line-length:
+ level: warning
diff --git a/files/keys/git-internal/ws-think03.pub b/files/keys/git-internal/ws-think03.pub
new file mode 120000
index 0000000..36354be
--- /dev/null
+++ b/files/keys/git-internal/ws-think03.pub
@@ -0,0 +1 @@
+../ws-think03.pub \ No newline at end of file
diff --git a/files/keys/git/ws-think03.pub b/files/keys/git/ws-think03.pub
new file mode 120000
index 0000000..36354be
--- /dev/null
+++ b/files/keys/git/ws-think03.pub
@@ -0,0 +1 @@
+../ws-think03.pub \ No newline at end of file
diff --git a/files/keys/ws-think03.pub b/files/keys/ws-think03.pub
new file mode 100644
index 0000000..3fce3d9
--- /dev/null
+++ b/files/keys/ws-think03.pub
@@ -0,0 +1 @@
+ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIGADzHHWo3+o9QohASmfCN+28VzZrgfwfr3JdOg5I82P qwd@ws-think03
diff --git a/group_vars/all.yml b/group_vars/all.yml
index 6a91b23..63697e8 100644
--- a/group_vars/all.yml
+++ b/group_vars/all.yml
@@ -1,11 +1,22 @@
+---
+
+# ansible overrides
+
ansible_hostname: "{{ ansible_host }}"
ansible_become_method: su
+# roles overrides
+
wireguard_domain_controller: "{{ __global_domain_controller }}"
relayd_domain_name: "{{ __global_domain_name }}"
acme_domain_name: "{{ __global_domain_name }}"
nfsclient_server: stack0
httpd_use_nfs: true
+relayd_rules: "{{ __services }}"
+pf_rules: "{{ __services }}"
+acme_rules: "{{ __services }}"
+
+# playbook specific
__is_vm: false
@@ -31,11 +42,3 @@ __global_services:
protocol: tcp
port: 8000
is_public: true
-
-# __services:
-# - domain: status.test
-# is_public: true
-# port: 120
-# protocols:
-# - tcp
-# - udp
diff --git a/group_vars/workstations.yml b/group_vars/workstations.yml
new file mode 100644
index 0000000..09a770c
--- /dev/null
+++ b/group_vars/workstations.yml
@@ -0,0 +1,3 @@
+---
+
+sshd_listen_port: 71
diff --git a/host_vars/dc0.yml b/host_vars/dc0.yml
index 511ffcc..80c7ef5 100644
--- a/host_vars/dc0.yml
+++ b/host_vars/dc0.yml
@@ -1,8 +1,11 @@
-httpd_use_nfs: false
-git_dir: /var/www/data/git
+---
ansible_port: 71
+httpd_use_nfs: false
+git_dir: /var/www/data/git
+sshd_listen_port: "{{ ansible_port }}"
+
__is_vm: true
__ip:
@@ -10,23 +13,23 @@ __ip:
internal: 10.10.0.1
__services:
- - name: ssh
+ ssh:
protocol: tcp
port: 22
- - name: wireguard
+ wireguard:
protocol: udp
port: 53
- - name: http
+ http:
protocol: tcp
port: 80
- - name: https
+ https:
protocol: tcp
port: 443
- - name: cgit
+ cgit:
domain: git
protocol: tcp
port: 1235
diff --git a/host_vars/localhost.yml b/host_vars/localhost.yml
index c212ded..2947445 100644
--- a/host_vars/localhost.yml
+++ b/host_vars/localhost.yml
@@ -1,3 +1,5 @@
+---
+
ansible_host: 127.0.0.1
ansible_connection: local
diff --git a/host_vars/stack0-cld0.yml b/host_vars/stack0-cld0.yml
index 62e282d..e99cdea 100644
--- a/host_vars/stack0-cld0.yml
+++ b/host_vars/stack0-cld0.yml
@@ -1,3 +1,5 @@
+---
+
__is_vm: true
__ip:
diff --git a/host_vars/stack0-dc1.yml b/host_vars/stack0-dc1.yml
index 30ec3e4..be8f1a3 100644
--- a/host_vars/stack0-dc1.yml
+++ b/host_vars/stack0-dc1.yml
@@ -1,3 +1,5 @@
+---
+
cgit_authenticate: true
cgit__root_desc: private - development hub
diff --git a/host_vars/stack0-dev0.yml b/host_vars/stack0-dev0.yml
index 550d25b..fe6204c 100644
--- a/host_vars/stack0-dev0.yml
+++ b/host_vars/stack0-dev0.yml
@@ -1,3 +1,5 @@
+---
+
__is_vm: true
__ip:
@@ -5,11 +7,6 @@ __ip:
internal: 10.10.0.61
__services:
- - name: ssh
+ ssh:
protocol: tcp
port: 22
-
-# - name: cgit
-# domain: git
-# protocol: tcp
-# port: 1235
diff --git a/host_vars/stack0.yml b/host_vars/stack0.yml
index 767ca93..4dd042f 100644
--- a/host_vars/stack0.yml
+++ b/host_vars/stack0.yml
@@ -1,3 +1,5 @@
+---
+
httpd_use_nfs: false
__ip:
diff --git a/host_vars/ws-bare01.yml b/host_vars/ws-bare01.yml
index dedc166..bec2b63 100644
--- a/host_vars/ws-bare01.yml
+++ b/host_vars/ws-bare01.yml
@@ -1,3 +1,5 @@
+---
+
__ip:
external: dhcp
internal: 10.10.0.80
diff --git a/host_vars/ws-think01.yml b/host_vars/ws-think01.yml
index 0fddec5..c1a5ef7 100644
--- a/host_vars/ws-think01.yml
+++ b/host_vars/ws-think01.yml
@@ -1,3 +1,5 @@
+---
+
__ip:
external: dhcp
internal: 10.10.0.82
diff --git a/host_vars/ws-think02.yml b/host_vars/ws-think02.yml
index 3665907..8e9ec79 100644
--- a/host_vars/ws-think02.yml
+++ b/host_vars/ws-think02.yml
@@ -1,3 +1,5 @@
+---
+
__ip:
external: dhcp
internal: 10.10.0.83
diff --git a/host_vars/ws-think03.yml b/host_vars/ws-think03.yml
new file mode 100644
index 0000000..faba6bb
--- /dev/null
+++ b/host_vars/ws-think03.yml
@@ -0,0 +1,5 @@
+---
+
+__ip:
+ external: dhcp
+ internal: 10.10.0.84
diff --git a/host_vars/ws-work01.yml b/host_vars/ws-work01.yml
new file mode 100644
index 0000000..fce88d3
--- /dev/null
+++ b/host_vars/ws-work01.yml
@@ -0,0 +1,7 @@
+---
+
+sshd_enable_x11_forwarding: true
+
+resolv_dns_servers:
+ - ip: 8.8.8.8
+ file: "{{ resolv_configuration_file }}.tail"
diff --git a/host_vars/ws-xps01.yml b/host_vars/ws-xps01.yml
index cda287c..bf2e0c8 100644
--- a/host_vars/ws-xps01.yml
+++ b/host_vars/ws-xps01.yml
@@ -1,3 +1,5 @@
+---
+
__ip:
external: dhcp
internal: 10.10.0.81
diff --git a/inventory.ini b/inventory.ini
index 748dafd..7d6fdc0 100644
--- a/inventory.ini
+++ b/inventory.ini
@@ -2,6 +2,7 @@
localhost
ws-think01
ws-think02
+ws-think03
ws-bare01
ws-xps01
@@ -16,3 +17,7 @@ stack0
stack0-dc1
stack0-cld0
stack0-dev0
+
+[workstations]
+ws-think03
+ws-work01
diff --git a/poetry.lock b/poetry.lock
index 1312869..c7c2689 100644
--- a/poetry.lock
+++ b/poetry.lock
@@ -1,17 +1,34 @@
[[package]]
name = "ansible"
-version = "5.1.0"
+version = "6.5.0"
description = "Radically simple IT automation"
category = "main"
optional = false
python-versions = ">=3.8"
[package.dependencies]
-ansible-core = ">=2.12.1,<2.13.0"
+ansible-core = ">=2.13.5,<2.14.0"
+
+[[package]]
+name = "ansible-compat"
+version = "2.2.1"
+description = "Ansible compatibility goodies"
+category = "dev"
+optional = false
+python-versions = ">=3.8"
+
+[package.dependencies]
+jsonschema = ">=4.6.0"
+PyYAML = "*"
+subprocess-tee = ">=0.3.5"
+
+[package.extras]
+docs = ["myst-parser", "sphinx (>=4.2.0,<5.0)", "sphinx-ansible-theme", "sphinx-autobuild (>=0.7.1,<1.0)"]
+test = ["coverage", "flaky", "pip-tools", "pytest", "pytest-markdown", "pytest-mock", "pytest-plus"]
[[package]]
name = "ansible-core"
-version = "2.12.1"
+version = "2.13.5"
description = "Radically simple IT automation"
category = "main"
optional = false
@@ -19,45 +36,83 @@ python-versions = ">=3.8"
[package.dependencies]
cryptography = "*"
-jinja2 = "*"
+jinja2 = ">=3.0.0"
packaging = "*"
-PyYAML = "*"
-resolvelib = ">=0.5.3,<0.6.0"
+PyYAML = ">=5.1"
+resolvelib = ">=0.5.3,<0.9.0"
[[package]]
name = "ansible-lint"
-version = "5.3.1"
-description = "Checks playbooks for practices and behaviour that could potentially be improved"
-category = "main"
+version = "6.8.2"
+description = "Checks playbooks for practices and behavior that could potentially be improved"
+category = "dev"
optional = false
-python-versions = ">=3.6"
+python-versions = ">=3.8"
[package.dependencies]
-enrich = ">=1.2.6"
+ansible-compat = ">=2.2.1"
+ansible-core = ">=2.12.0"
+black = ">=22.1.0"
+filelock = "*"
+jsonschema = ">=4.9.0"
packaging = "*"
pyyaml = "*"
rich = ">=9.5.1"
-"ruamel.yaml" = {version = ">=0.15.37,<1", markers = "python_version >= \"3.7\""}
-tenacity = "*"
+"ruamel.yaml" = ">=0.15.34,<0.18"
wcmatch = ">=7.0"
+yamllint = ">=1.25.0"
[package.extras]
-community = ["ansible (>=2.10)"]
-core = ["ansible-core (>=2.11.4)"]
-test = ["flaky (>=3.7.0)", "pytest (>=6.0.1)", "pytest-cov (>=2.10.1)", "pytest-xdist (>=2.1.0)", "psutil"]
-yamllint = ["yamllint (>=1.25.0)"]
+docs = ["myst-parser (>=0.16.1)", "pipdeptree (>=2.2.1)", "sphinx (>=4.4.0)", "sphinx-ansible-theme (>=0.9.1)", "sphinx-rtd-theme (>=1.0.0,<2.0.0)", "sphinxcontrib-apidoc (>=0.3.0)", "sphinxcontrib-programoutput2 (>=2.0a1)", "yamllint (>=1.26.3)"]
+test = ["black", "coverage-enable-subprocess", "coverage[toml] (>=6.4.4)", "flake8", "flake8-future-annotations", "flaky (>=3.7.0)", "mypy", "psutil", "pylint", "pytest (>=6.0.1)", "pytest-plus (>=0.2)", "pytest-xdist (>=2.1.0)"]
+
+[[package]]
+name = "attrs"
+version = "22.1.0"
+description = "Classes Without Boilerplate"
+category = "dev"
+optional = false
+python-versions = ">=3.5"
+
+[package.extras]
+dev = ["cloudpickle", "coverage[toml] (>=5.0.2)", "furo", "hypothesis", "mypy (>=0.900,!=0.940)", "pre-commit", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "sphinx", "sphinx-notfound-page", "zope.interface"]
+docs = ["furo", "sphinx", "sphinx-notfound-page", "zope.interface"]
+tests = ["cloudpickle", "coverage[toml] (>=5.0.2)", "hypothesis", "mypy (>=0.900,!=0.940)", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "zope.interface"]
+tests-no-zope = ["cloudpickle", "coverage[toml] (>=5.0.2)", "hypothesis", "mypy (>=0.900,!=0.940)", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins"]
+
+[[package]]
+name = "black"
+version = "22.10.0"
+description = "The uncompromising code formatter."
+category = "dev"
+optional = false
+python-versions = ">=3.7"
+
+[package.dependencies]
+click = ">=8.0.0"
+mypy-extensions = ">=0.4.3"
+pathspec = ">=0.9.0"
+platformdirs = ">=2"
+tomli = {version = ">=1.1.0", markers = "python_full_version < \"3.11.0a7\""}
+typing-extensions = {version = ">=3.10.0.0", markers = "python_version < \"3.10\""}
+
+[package.extras]
+colorama = ["colorama (>=0.4.3)"]
+d = ["aiohttp (>=3.7.4)"]
+jupyter = ["ipython (>=7.8.0)", "tokenize-rt (>=3.2.0)"]
+uvloop = ["uvloop (>=0.15.2)"]
[[package]]
name = "bracex"
-version = "2.2.1"
+version = "2.3.post1"
description = "Bash style brace expander."
-category = "main"
+category = "dev"
optional = false
-python-versions = ">=3.6"
+python-versions = ">=3.7"
[[package]]
name = "cffi"
-version = "1.15.0"
+version = "1.15.1"
description = "Foreign Function Interface for Python calling C code."
category = "main"
optional = false
@@ -67,10 +122,21 @@ python-versions = "*"
pycparser = "*"
[[package]]
+name = "click"
+version = "8.1.3"
+description = "Composable command line interface toolkit"
+category = "dev"
+optional = false
+python-versions = ">=3.7"
+
+[package.dependencies]
+colorama = {version = "*", markers = "platform_system == \"Windows\""}
+
+[[package]]
name = "colorama"
-version = "0.4.4"
+version = "0.4.5"
description = "Cross-platform colored terminal text."
-category = "main"
+category = "dev"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
@@ -78,7 +144,7 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
name = "commonmark"
version = "0.9.1"
description = "Python parser for the CommonMark Markdown spec"
-category = "main"
+category = "dev"
optional = false
python-versions = "*"
@@ -87,7 +153,7 @@ test = ["flake8 (==3.7.8)", "hypothesis (==3.55.3)"]
[[package]]
name = "cryptography"
-version = "36.0.1"
+version = "38.0.1"
description = "cryptography is a package which provides cryptographic recipes and primitives to Python developers."
category = "main"
optional = false
@@ -98,33 +164,31 @@ cffi = ">=1.12"
[package.extras]
docs = ["sphinx (>=1.6.5,!=1.8.0,!=3.1.0,!=3.1.1)", "sphinx-rtd-theme"]
-docstest = ["pyenchant (>=1.6.11)", "twine (>=1.12.0)", "sphinxcontrib-spelling (>=4.0.1)"]
+docstest = ["pyenchant (>=1.6.11)", "sphinxcontrib-spelling (>=4.0.1)", "twine (>=1.12.0)"]
pep8test = ["black", "flake8", "flake8-import-order", "pep8-naming"]
-sdist = ["setuptools_rust (>=0.11.4)"]
+sdist = ["setuptools-rust (>=0.11.4)"]
ssh = ["bcrypt (>=3.1.5)"]
-test = ["pytest (>=6.2.0)", "pytest-cov", "pytest-subtests", "pytest-xdist", "pretend", "iso8601", "pytz", "hypothesis (>=1.11.4,!=3.79.2)"]
+test = ["hypothesis (>=1.11.4,!=3.79.2)", "iso8601", "pretend", "pytest (>=6.2.0)", "pytest-benchmark", "pytest-cov", "pytest-subtests", "pytest-xdist", "pytz"]
[[package]]
-name = "enrich"
-version = "1.2.6"
-description = "enrich"
-category = "main"
+name = "filelock"
+version = "3.8.0"
+description = "A platform independent file lock."
+category = "dev"
optional = false
-python-versions = ">=3.6"
-
-[package.dependencies]
-rich = ">=9.5.1"
+python-versions = ">=3.7"
[package.extras]
-test = ["mock (>=3.0.5)", "pytest-cov (>=2.7.1)", "pytest-mock (>=3.3.1)", "pytest-plus", "pytest-xdist (>=1.29.0)", "pytest (>=5.4.0)"]
+docs = ["furo (>=2022.6.21)", "sphinx (>=5.1.1)", "sphinx-autodoc-typehints (>=1.19.1)"]
+testing = ["covdefaults (>=2.2)", "coverage (>=6.4.2)", "pytest (>=7.1.2)", "pytest-cov (>=3)", "pytest-timeout (>=2.1)"]
[[package]]
name = "jinja2"
-version = "3.0.3"
+version = "3.1.2"
description = "A very fast and expressive template engine."
category = "main"
optional = false
-python-versions = ">=3.6"
+python-versions = ">=3.7"
[package.dependencies]
MarkupSafe = ">=2.0"
@@ -133,27 +197,51 @@ MarkupSafe = ">=2.0"
i18n = ["Babel (>=2.7)"]
[[package]]
+name = "jsonschema"
+version = "4.16.0"
+description = "An implementation of JSON Schema validation for Python"
+category = "dev"
+optional = false
+python-versions = ">=3.7"
+
+[package.dependencies]
+attrs = ">=17.4.0"
+pyrsistent = ">=0.14.0,<0.17.0 || >0.17.0,<0.17.1 || >0.17.1,<0.17.2 || >0.17.2"
+
+[package.extras]
+format = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3987", "uri-template", "webcolors (>=1.11)"]
+format-nongpl = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3986-validator (>0.1.0)", "uri-template", "webcolors (>=1.11)"]
+
+[[package]]
name = "markupsafe"
-version = "2.0.1"
+version = "2.1.1"
description = "Safely add untrusted strings to HTML/XML markup."
category = "main"
optional = false
-python-versions = ">=3.6"
+python-versions = ">=3.7"
[[package]]
name = "mitogen"
-version = "0.3.1.dev0"
+version = "0.3.4.dev0"
description = "Library for writing distributed self-replicating programs."
category = "main"
optional = false
-python-versions = ">=2.4, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*, <4"
+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*"
develop = false
[package.source]
type = "git"
url = "https://github.com/mitogen-hq/mitogen"
reference = "master"
-resolved_reference = "5b505f524a7ae170fe68613841ab92b299613d3f"
+resolved_reference = "572636a9d3c5a4ac4e8591c42f29763cb56fe602"
+
+[[package]]
+name = "mypy-extensions"
+version = "0.4.3"
+description = "Experimental type system extensions for programs checked with the mypy typechecker."
+category = "dev"
+optional = false
+python-versions = "*"
[[package]]
name = "packaging"
@@ -167,6 +255,26 @@ python-versions = ">=3.6"
pyparsing = ">=2.0.2,<3.0.5 || >3.0.5"
[[package]]
+name = "pathspec"
+version = "0.10.1"
+description = "Utility library for gitignore style pattern matching of file paths."
+category = "dev"
+optional = false
+python-versions = ">=3.7"
+
+[[package]]
+name = "platformdirs"
+version = "2.5.2"
+description = "A small Python module for determining appropriate platform-specific dirs, e.g. a \"user data dir\"."
+category = "dev"
+optional = false
+python-versions = ">=3.7"
+
+[package.extras]
+docs = ["furo (>=2021.7.5b38)", "proselint (>=0.10.2)", "sphinx (>=4)", "sphinx-autodoc-typehints (>=1.12)"]
+test = ["appdirs (==1.4.4)", "pytest (>=6)", "pytest-cov (>=2.7)", "pytest-mock (>=3.6)"]
+
+[[package]]
name = "pycparser"
version = "2.21"
description = "C parser in Python"
@@ -176,24 +284,35 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
[[package]]
name = "pygments"
-version = "2.10.0"
+version = "2.13.0"
description = "Pygments is a syntax highlighting package written in Python."
-category = "main"
+category = "dev"
optional = false
-python-versions = ">=3.5"
+python-versions = ">=3.6"
+
+[package.extras]
+plugins = ["importlib-metadata"]
[[package]]
name = "pyparsing"
-version = "3.0.6"
-description = "Python parsing module"
+version = "3.0.9"
+description = "pyparsing module - Classes and methods to define and execute parsing grammars"
category = "main"
optional = false
-python-versions = ">=3.6"
+python-versions = ">=3.6.8"
[package.extras]
diagrams = ["jinja2", "railroad-diagrams"]
[[package]]
+name = "pyrsistent"
+version = "0.18.1"
+description = "Persistent/Functional/Immutable data structures"
+category = "dev"
+optional = false
+python-versions = ">=3.7"
+
+[[package]]
name = "pyyaml"
version = "6.0"
description = "YAML parser and emitter for Python"
@@ -203,7 +322,7 @@ python-versions = ">=3.6"
[[package]]
name = "resolvelib"
-version = "0.5.5"
+version = "0.8.1"
description = "Resolve abstract dependencies into concrete ones"
category = "main"
optional = false
@@ -211,20 +330,19 @@ python-versions = "*"
[package.extras]
examples = ["html5lib", "packaging", "pygraphviz", "requests"]
-lint = ["black", "flake8"]
-release = ["setl", "towncrier"]
+lint = ["black", "flake8", "isort", "mypy", "types-requests"]
+release = ["build", "towncrier", "twine"]
test = ["commentjson", "packaging", "pytest"]
[[package]]
name = "rich"
-version = "10.16.1"
+version = "12.6.0"
description = "Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminal"
-category = "main"
+category = "dev"
optional = false
-python-versions = ">=3.6.2,<4.0.0"
+python-versions = ">=3.6.3,<4.0.0"
[package.dependencies]
-colorama = ">=0.4.0,<0.5.0"
commonmark = ">=0.9.0,<0.10.0"
pygments = ">=2.6.0,<3.0.0"
@@ -232,10 +350,10 @@ pygments = ">=2.6.0,<3.0.0"
jupyter = ["ipywidgets (>=7.5.1,<8.0.0)"]
[[package]]
-name = "ruamel.yaml"
-version = "0.17.19"
+name = "ruamel-yaml"
+version = "0.17.21"
description = "ruamel.yaml is a YAML parser/emitter that supports roundtrip preservation of comments, seq/map flow style, and map key order"
-category = "main"
+category = "dev"
optional = false
python-versions = ">=3"
@@ -247,232 +365,341 @@ docs = ["ryd"]
jinja2 = ["ruamel.yaml.jinja2 (>=0.2)"]
[[package]]
-name = "ruamel.yaml.clib"
-version = "0.2.6"
+name = "ruamel-yaml-clib"
+version = "0.2.7"
description = "C version of reader, parser and emitter for ruamel.yaml derived from libyaml"
-category = "main"
+category = "dev"
optional = false
python-versions = ">=3.5"
[[package]]
-name = "tenacity"
-version = "8.0.1"
-description = "Retry code until it succeeds"
-category = "main"
+name = "setuptools"
+version = "65.5.0"
+description = "Easily download, build, install, upgrade, and uninstall Python packages"
+category = "dev"
+optional = false
+python-versions = ">=3.7"
+
+[package.extras]
+docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-hoverxref (<2)", "sphinx-inline-tabs", "sphinx-notfound-page (==0.8.3)", "sphinx-reredirects", "sphinxcontrib-towncrier"]
+testing = ["build[virtualenv]", "filelock (>=3.4.0)", "flake8 (<5)", "flake8-2020", "ini2toml[lite] (>=0.9)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "mock", "pip (>=19.1)", "pip-run (>=8.8)", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-flake8", "pytest-mypy (>=0.9.1)", "pytest-perf", "pytest-xdist", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"]
+testing-integration = ["build[virtualenv]", "filelock (>=3.4.0)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pytest", "pytest-enabler", "pytest-xdist", "tomli", "virtualenv (>=13.0.0)", "wheel"]
+
+[[package]]
+name = "subprocess-tee"
+version = "0.3.5"
+description = "subprocess-tee"
+category = "dev"
optional = false
python-versions = ">=3.6"
[package.extras]
-doc = ["reno", "sphinx", "tornado (>=4.5)"]
+test = ["enrich (>=1.2.6)", "mock (>=4.0.3)", "molecule (>=3.4.0)", "pytest (>=6.2.5)", "pytest-cov (>=2.12.1)", "pytest-plus (>=0.2)", "pytest-xdist (>=2.3.0)"]
+
+[[package]]
+name = "tomli"
+version = "2.0.1"
+description = "A lil' TOML parser"
+category = "dev"
+optional = false
+python-versions = ">=3.7"
+
+[[package]]
+name = "typing-extensions"
+version = "4.4.0"
+description = "Backported and Experimental Type Hints for Python 3.7+"
+category = "dev"
+optional = false
+python-versions = ">=3.7"
[[package]]
name = "wcmatch"
-version = "8.3"
+version = "8.4.1"
description = "Wildcard/glob file name matcher."
-category = "main"
+category = "dev"
optional = false
-python-versions = ">=3.6"
+python-versions = ">=3.7"
[package.dependencies]
bracex = ">=2.1.1"
+[[package]]
+name = "yamllint"
+version = "1.28.0"
+description = "A linter for YAML files."
+category = "dev"
+optional = false
+python-versions = ">=3.6"
+
+[package.dependencies]
+pathspec = ">=0.5.3"
+pyyaml = "*"
+setuptools = "*"
+
[metadata]
lock-version = "1.1"
python-versions = "^3.9"
-content-hash = "2ac6e5c214fd98e719ec10591f466f0b80d01e900c87642419216e23b02e5854"
+content-hash = "ba39ce14578cf8d3272655e58fd4ba40fa082fd0e4760571467376d86dea8916"
[metadata.files]
ansible = [
- {file = "ansible-5.1.0.tar.gz", hash = "sha256:7604f264f9bdf31442ea152fa4eb77fe700100ff5e54103822d284551b7524bc"},
+ {file = "ansible-6.5.0-py3-none-any.whl", hash = "sha256:2cc8c9faf9351dc46d92281eb28f21be3d2faa212b20bfc05afa98946cb788de"},
+ {file = "ansible-6.5.0.tar.gz", hash = "sha256:7c0cdcd1121a5f12ab2da4bdd2e14c2c153e01214bfc6a6bc156b61bd7401c5b"},
+]
+ansible-compat = [
+ {file = "ansible-compat-2.2.1.tar.gz", hash = "sha256:7a012753a0a02dab2f22b0e574e3e7b00399f660606154474ffe25621fa80d3b"},
+ {file = "ansible_compat-2.2.1-py3-none-any.whl", hash = "sha256:8857b317bf36a00dbb0b06640d19b68bb64f667bf2a5355189f3c5961f4b1c10"},
]
ansible-core = [
- {file = "ansible-core-2.12.1.tar.gz", hash = "sha256:a4508707262be11bb4dd98a006f1b14817879a055e6b6c46ad9fca8894fb3073"},
+ {file = "ansible-core-2.13.5.tar.gz", hash = "sha256:26dcd9218d5544cc15144f60bb5b634f2276e476c89f481b3f619c4f9def1588"},
+ {file = "ansible_core-2.13.5-py3-none-any.whl", hash = "sha256:3d2503ede324e0e73051b14e77f732a3cb0aed2437f94608af53929d2d1d54c8"},
]
ansible-lint = [
- {file = "ansible-lint-5.3.1.tar.gz", hash = "sha256:7d7bc74b9b90c5982be5c274c2afcba5b8073ec88cce793fab463fe6418a25f6"},
- {file = "ansible_lint-5.3.1-py3-none-any.whl", hash = "sha256:4793ce6862ef7f85b3aaa7fa21887fd3e45bae43505640523c9b25928ac992de"},
+ {file = "ansible-lint-6.8.2.tar.gz", hash = "sha256:17dfacb0d9139a435ccf2095234e20491d556f7adb97dedd891b40566e316553"},
+ {file = "ansible_lint-6.8.2-py3-none-any.whl", hash = "sha256:dbfcf94ae4ed7c3b1747c5e4cbb8d9ba094821f28fee3d82f0ba06ef96bfccac"},
+]
+attrs = [
+ {file = "attrs-22.1.0-py2.py3-none-any.whl", hash = "sha256:86efa402f67bf2df34f51a335487cf46b1ec130d02b8d39fd248abfd30da551c"},
+ {file = "attrs-22.1.0.tar.gz", hash = "sha256:29adc2665447e5191d0e7c568fde78b21f9672d344281d0c6e1ab085429b22b6"},
+]
+black = [
+ {file = "black-22.10.0-1fixedarch-cp310-cp310-macosx_11_0_x86_64.whl", hash = "sha256:5cc42ca67989e9c3cf859e84c2bf014f6633db63d1cbdf8fdb666dcd9e77e3fa"},
+ {file = "black-22.10.0-1fixedarch-cp311-cp311-macosx_11_0_x86_64.whl", hash = "sha256:5d8f74030e67087b219b032aa33a919fae8806d49c867846bfacde57f43972ef"},
+ {file = "black-22.10.0-1fixedarch-cp37-cp37m-macosx_10_16_x86_64.whl", hash = "sha256:197df8509263b0b8614e1df1756b1dd41be6738eed2ba9e9769f3880c2b9d7b6"},
+ {file = "black-22.10.0-1fixedarch-cp38-cp38-macosx_10_16_x86_64.whl", hash = "sha256:2644b5d63633702bc2c5f3754b1b475378fbbfb481f62319388235d0cd104c2d"},
+ {file = "black-22.10.0-1fixedarch-cp39-cp39-macosx_11_0_x86_64.whl", hash = "sha256:e41a86c6c650bcecc6633ee3180d80a025db041a8e2398dcc059b3afa8382cd4"},
+ {file = "black-22.10.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2039230db3c6c639bd84efe3292ec7b06e9214a2992cd9beb293d639c6402edb"},
+ {file = "black-22.10.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:14ff67aec0a47c424bc99b71005202045dc09270da44a27848d534600ac64fc7"},
+ {file = "black-22.10.0-cp310-cp310-win_amd64.whl", hash = "sha256:819dc789f4498ecc91438a7de64427c73b45035e2e3680c92e18795a839ebb66"},
+ {file = "black-22.10.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:5b9b29da4f564ba8787c119f37d174f2b69cdfdf9015b7d8c5c16121ddc054ae"},
+ {file = "black-22.10.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b8b49776299fece66bffaafe357d929ca9451450f5466e997a7285ab0fe28e3b"},
+ {file = "black-22.10.0-cp311-cp311-win_amd64.whl", hash = "sha256:21199526696b8f09c3997e2b4db8d0b108d801a348414264d2eb8eb2532e540d"},
+ {file = "black-22.10.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1e464456d24e23d11fced2bc8c47ef66d471f845c7b7a42f3bd77bf3d1789650"},
+ {file = "black-22.10.0-cp37-cp37m-win_amd64.whl", hash = "sha256:9311e99228ae10023300ecac05be5a296f60d2fd10fff31cf5c1fa4ca4b1988d"},
+ {file = "black-22.10.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:fba8a281e570adafb79f7755ac8721b6cf1bbf691186a287e990c7929c7692ff"},
+ {file = "black-22.10.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:915ace4ff03fdfff953962fa672d44be269deb2eaf88499a0f8805221bc68c87"},
+ {file = "black-22.10.0-cp38-cp38-win_amd64.whl", hash = "sha256:444ebfb4e441254e87bad00c661fe32df9969b2bf224373a448d8aca2132b395"},
+ {file = "black-22.10.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:974308c58d057a651d182208a484ce80a26dac0caef2895836a92dd6ebd725e0"},
+ {file = "black-22.10.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:72ef3925f30e12a184889aac03d77d031056860ccae8a1e519f6cbb742736383"},
+ {file = "black-22.10.0-cp39-cp39-win_amd64.whl", hash = "sha256:432247333090c8c5366e69627ccb363bc58514ae3e63f7fc75c54b1ea80fa7de"},
+ {file = "black-22.10.0-py3-none-any.whl", hash = "sha256:c957b2b4ea88587b46cf49d1dc17681c1e672864fd7af32fc1e9664d572b3458"},
+ {file = "black-22.10.0.tar.gz", hash = "sha256:f513588da599943e0cde4e32cc9879e825d58720d6557062d1098c5ad80080e1"},
]
bracex = [
- {file = "bracex-2.2.1-py3-none-any.whl", hash = "sha256:096c4b788bf492f7af4e90ef8b5bcbfb99759ae3415ea1b83c9d29a5ed8f9a94"},
- {file = "bracex-2.2.1.tar.gz", hash = "sha256:1c8d1296e00ad9a91030ccb4c291f9e4dc7c054f12c707ba3c5ff3e9a81bcd21"},
+ {file = "bracex-2.3.post1-py3-none-any.whl", hash = "sha256:351b7f20d56fb9ea91f9b9e9e7664db466eb234188c175fd943f8f755c807e73"},
+ {file = "bracex-2.3.post1.tar.gz", hash = "sha256:e7b23fc8b2cd06d3dec0692baabecb249dda94e06a617901ff03a6c56fd71693"},
]
cffi = [
- {file = "cffi-1.15.0-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:c2502a1a03b6312837279c8c1bd3ebedf6c12c4228ddbad40912d671ccc8a962"},
- {file = "cffi-1.15.0-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:23cfe892bd5dd8941608f93348c0737e369e51c100d03718f108bf1add7bd6d0"},
- {file = "cffi-1.15.0-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:41d45de54cd277a7878919867c0f08b0cf817605e4eb94093e7516505d3c8d14"},
- {file = "cffi-1.15.0-cp27-cp27m-win32.whl", hash = "sha256:4a306fa632e8f0928956a41fa8e1d6243c71e7eb59ffbd165fc0b41e316b2474"},
- {file = "cffi-1.15.0-cp27-cp27m-win_amd64.whl", hash = "sha256:e7022a66d9b55e93e1a845d8c9eba2a1bebd4966cd8bfc25d9cd07d515b33fa6"},
- {file = "cffi-1.15.0-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:14cd121ea63ecdae71efa69c15c5543a4b5fbcd0bbe2aad864baca0063cecf27"},
- {file = "cffi-1.15.0-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:d4d692a89c5cf08a8557fdeb329b82e7bf609aadfaed6c0d79f5a449a3c7c023"},
- {file = "cffi-1.15.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0104fb5ae2391d46a4cb082abdd5c69ea4eab79d8d44eaaf79f1b1fd806ee4c2"},
- {file = "cffi-1.15.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:91ec59c33514b7c7559a6acda53bbfe1b283949c34fe7440bcf917f96ac0723e"},
- {file = "cffi-1.15.0-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:f5c7150ad32ba43a07c4479f40241756145a1f03b43480e058cfd862bf5041c7"},
- {file = "cffi-1.15.0-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:00c878c90cb53ccfaae6b8bc18ad05d2036553e6d9d1d9dbcf323bbe83854ca3"},
- {file = "cffi-1.15.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:abb9a20a72ac4e0fdb50dae135ba5e77880518e742077ced47eb1499e29a443c"},
- {file = "cffi-1.15.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a5263e363c27b653a90078143adb3d076c1a748ec9ecc78ea2fb916f9b861962"},
- {file = "cffi-1.15.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f54a64f8b0c8ff0b64d18aa76675262e1700f3995182267998c31ae974fbc382"},
- {file = "cffi-1.15.0-cp310-cp310-win32.whl", hash = "sha256:c21c9e3896c23007803a875460fb786118f0cdd4434359577ea25eb556e34c55"},
- {file = "cffi-1.15.0-cp310-cp310-win_amd64.whl", hash = "sha256:5e069f72d497312b24fcc02073d70cb989045d1c91cbd53979366077959933e0"},
- {file = "cffi-1.15.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:64d4ec9f448dfe041705426000cc13e34e6e5bb13736e9fd62e34a0b0c41566e"},
- {file = "cffi-1.15.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2756c88cbb94231c7a147402476be2c4df2f6078099a6f4a480d239a8817ae39"},
- {file = "cffi-1.15.0-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3b96a311ac60a3f6be21d2572e46ce67f09abcf4d09344c49274eb9e0bf345fc"},
- {file = "cffi-1.15.0-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:75e4024375654472cc27e91cbe9eaa08567f7fbdf822638be2814ce059f58032"},
- {file = "cffi-1.15.0-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:59888172256cac5629e60e72e86598027aca6bf01fa2465bdb676d37636573e8"},
- {file = "cffi-1.15.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:27c219baf94952ae9d50ec19651a687b826792055353d07648a5695413e0c605"},
- {file = "cffi-1.15.0-cp36-cp36m-win32.whl", hash = "sha256:4958391dbd6249d7ad855b9ca88fae690783a6be9e86df65865058ed81fc860e"},
- {file = "cffi-1.15.0-cp36-cp36m-win_amd64.whl", hash = "sha256:f6f824dc3bce0edab5f427efcfb1d63ee75b6fcb7282900ccaf925be84efb0fc"},
- {file = "cffi-1.15.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:06c48159c1abed75c2e721b1715c379fa3200c7784271b3c46df01383b593636"},
- {file = "cffi-1.15.0-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:c2051981a968d7de9dd2d7b87bcb9c939c74a34626a6e2f8181455dd49ed69e4"},
- {file = "cffi-1.15.0-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:fd8a250edc26254fe5b33be00402e6d287f562b6a5b2152dec302fa15bb3e997"},
- {file = "cffi-1.15.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:91d77d2a782be4274da750752bb1650a97bfd8f291022b379bb8e01c66b4e96b"},
- {file = "cffi-1.15.0-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:45db3a33139e9c8f7c09234b5784a5e33d31fd6907800b316decad50af323ff2"},
- {file = "cffi-1.15.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:263cc3d821c4ab2213cbe8cd8b355a7f72a8324577dc865ef98487c1aeee2bc7"},
- {file = "cffi-1.15.0-cp37-cp37m-win32.whl", hash = "sha256:17771976e82e9f94976180f76468546834d22a7cc404b17c22df2a2c81db0c66"},
- {file = "cffi-1.15.0-cp37-cp37m-win_amd64.whl", hash = "sha256:3415c89f9204ee60cd09b235810be700e993e343a408693e80ce7f6a40108029"},
- {file = "cffi-1.15.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:4238e6dab5d6a8ba812de994bbb0a79bddbdf80994e4ce802b6f6f3142fcc880"},
- {file = "cffi-1.15.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:0808014eb713677ec1292301ea4c81ad277b6cdf2fdd90fd540af98c0b101d20"},
- {file = "cffi-1.15.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:57e9ac9ccc3101fac9d6014fba037473e4358ef4e89f8e181f8951a2c0162024"},
- {file = "cffi-1.15.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8b6c2ea03845c9f501ed1313e78de148cd3f6cad741a75d43a29b43da27f2e1e"},
- {file = "cffi-1.15.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:10dffb601ccfb65262a27233ac273d552ddc4d8ae1bf93b21c94b8511bffe728"},
- {file = "cffi-1.15.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:786902fb9ba7433aae840e0ed609f45c7bcd4e225ebb9c753aa39725bb3e6ad6"},
- {file = "cffi-1.15.0-cp38-cp38-win32.whl", hash = "sha256:da5db4e883f1ce37f55c667e5c0de439df76ac4cb55964655906306918e7363c"},
- {file = "cffi-1.15.0-cp38-cp38-win_amd64.whl", hash = "sha256:181dee03b1170ff1969489acf1c26533710231c58f95534e3edac87fff06c443"},
- {file = "cffi-1.15.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:45e8636704eacc432a206ac7345a5d3d2c62d95a507ec70d62f23cd91770482a"},
- {file = "cffi-1.15.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:31fb708d9d7c3f49a60f04cf5b119aeefe5644daba1cd2a0fe389b674fd1de37"},
- {file = "cffi-1.15.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:6dc2737a3674b3e344847c8686cf29e500584ccad76204efea14f451d4cc669a"},
- {file = "cffi-1.15.0-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:74fdfdbfdc48d3f47148976f49fab3251e550a8720bebc99bf1483f5bfb5db3e"},
- {file = "cffi-1.15.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ffaa5c925128e29efbde7301d8ecaf35c8c60ffbcd6a1ffd3a552177c8e5e796"},
- {file = "cffi-1.15.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3f7d084648d77af029acb79a0ff49a0ad7e9d09057a9bf46596dac9514dc07df"},
- {file = "cffi-1.15.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ef1f279350da2c586a69d32fc8733092fd32cc8ac95139a00377841f59a3f8d8"},
- {file = "cffi-1.15.0-cp39-cp39-win32.whl", hash = "sha256:2a23af14f408d53d5e6cd4e3d9a24ff9e05906ad574822a10563efcef137979a"},
- {file = "cffi-1.15.0-cp39-cp39-win_amd64.whl", hash = "sha256:3773c4d81e6e818df2efbc7dd77325ca0dcb688116050fb2b3011218eda36139"},
- {file = "cffi-1.15.0.tar.gz", hash = "sha256:920f0d66a896c2d99f0adbb391f990a84091179542c205fa53ce5787aff87954"},
+ {file = "cffi-1.15.1-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:a66d3508133af6e8548451b25058d5812812ec3798c886bf38ed24a98216fab2"},
+ {file = "cffi-1.15.1-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:470c103ae716238bbe698d67ad020e1db9d9dba34fa5a899b5e21577e6d52ed2"},
+ {file = "cffi-1.15.1-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:9ad5db27f9cabae298d151c85cf2bad1d359a1b9c686a275df03385758e2f914"},
+ {file = "cffi-1.15.1-cp27-cp27m-win32.whl", hash = "sha256:b3bbeb01c2b273cca1e1e0c5df57f12dce9a4dd331b4fa1635b8bec26350bde3"},
+ {file = "cffi-1.15.1-cp27-cp27m-win_amd64.whl", hash = "sha256:e00b098126fd45523dd056d2efba6c5a63b71ffe9f2bbe1a4fe1716e1d0c331e"},
+ {file = "cffi-1.15.1-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:d61f4695e6c866a23a21acab0509af1cdfd2c013cf256bbf5b6b5e2695827162"},
+ {file = "cffi-1.15.1-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:ed9cb427ba5504c1dc15ede7d516b84757c3e3d7868ccc85121d9310d27eed0b"},
+ {file = "cffi-1.15.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:39d39875251ca8f612b6f33e6b1195af86d1b3e60086068be9cc053aa4376e21"},
+ {file = "cffi-1.15.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:285d29981935eb726a4399badae8f0ffdff4f5050eaa6d0cfc3f64b857b77185"},
+ {file = "cffi-1.15.1-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3eb6971dcff08619f8d91607cfc726518b6fa2a9eba42856be181c6d0d9515fd"},
+ {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:21157295583fe8943475029ed5abdcf71eb3911894724e360acff1d61c1d54bc"},
+ {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5635bd9cb9731e6d4a1132a498dd34f764034a8ce60cef4f5319c0541159392f"},
+ {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2012c72d854c2d03e45d06ae57f40d78e5770d252f195b93f581acf3ba44496e"},
+ {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd86c085fae2efd48ac91dd7ccffcfc0571387fe1193d33b6394db7ef31fe2a4"},
+ {file = "cffi-1.15.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:fa6693661a4c91757f4412306191b6dc88c1703f780c8234035eac011922bc01"},
+ {file = "cffi-1.15.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:59c0b02d0a6c384d453fece7566d1c7e6b7bae4fc5874ef2ef46d56776d61c9e"},
+ {file = "cffi-1.15.1-cp310-cp310-win32.whl", hash = "sha256:cba9d6b9a7d64d4bd46167096fc9d2f835e25d7e4c121fb2ddfc6528fb0413b2"},
+ {file = "cffi-1.15.1-cp310-cp310-win_amd64.whl", hash = "sha256:ce4bcc037df4fc5e3d184794f27bdaab018943698f4ca31630bc7f84a7b69c6d"},
+ {file = "cffi-1.15.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3d08afd128ddaa624a48cf2b859afef385b720bb4b43df214f85616922e6a5ac"},
+ {file = "cffi-1.15.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:3799aecf2e17cf585d977b780ce79ff0dc9b78d799fc694221ce814c2c19db83"},
+ {file = "cffi-1.15.1-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a591fe9e525846e4d154205572a029f653ada1a78b93697f3b5a8f1f2bc055b9"},
+ {file = "cffi-1.15.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3548db281cd7d2561c9ad9984681c95f7b0e38881201e157833a2342c30d5e8c"},
+ {file = "cffi-1.15.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:91fc98adde3d7881af9b59ed0294046f3806221863722ba7d8d120c575314325"},
+ {file = "cffi-1.15.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:94411f22c3985acaec6f83c6df553f2dbe17b698cc7f8ae751ff2237d96b9e3c"},
+ {file = "cffi-1.15.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:03425bdae262c76aad70202debd780501fabeaca237cdfddc008987c0e0f59ef"},
+ {file = "cffi-1.15.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:cc4d65aeeaa04136a12677d3dd0b1c0c94dc43abac5860ab33cceb42b801c1e8"},
+ {file = "cffi-1.15.1-cp311-cp311-win32.whl", hash = "sha256:a0f100c8912c114ff53e1202d0078b425bee3649ae34d7b070e9697f93c5d52d"},
+ {file = "cffi-1.15.1-cp311-cp311-win_amd64.whl", hash = "sha256:04ed324bda3cda42b9b695d51bb7d54b680b9719cfab04227cdd1e04e5de3104"},
+ {file = "cffi-1.15.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:50a74364d85fd319352182ef59c5c790484a336f6db772c1a9231f1c3ed0cbd7"},
+ {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e263d77ee3dd201c3a142934a086a4450861778baaeeb45db4591ef65550b0a6"},
+ {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cec7d9412a9102bdc577382c3929b337320c4c4c4849f2c5cdd14d7368c5562d"},
+ {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4289fc34b2f5316fbb762d75362931e351941fa95fa18789191b33fc4cf9504a"},
+ {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:173379135477dc8cac4bc58f45db08ab45d228b3363adb7af79436135d028405"},
+ {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:6975a3fac6bc83c4a65c9f9fcab9e47019a11d3d2cf7f3c0d03431bf145a941e"},
+ {file = "cffi-1.15.1-cp36-cp36m-win32.whl", hash = "sha256:2470043b93ff09bf8fb1d46d1cb756ce6132c54826661a32d4e4d132e1977adf"},
+ {file = "cffi-1.15.1-cp36-cp36m-win_amd64.whl", hash = "sha256:30d78fbc8ebf9c92c9b7823ee18eb92f2e6ef79b45ac84db507f52fbe3ec4497"},
+ {file = "cffi-1.15.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:198caafb44239b60e252492445da556afafc7d1e3ab7a1fb3f0584ef6d742375"},
+ {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5ef34d190326c3b1f822a5b7a45f6c4535e2f47ed06fec77d3d799c450b2651e"},
+ {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8102eaf27e1e448db915d08afa8b41d6c7ca7a04b7d73af6514df10a3e74bd82"},
+ {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5df2768244d19ab7f60546d0c7c63ce1581f7af8b5de3eb3004b9b6fc8a9f84b"},
+ {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a8c4917bd7ad33e8eb21e9a5bbba979b49d9a97acb3a803092cbc1133e20343c"},
+ {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0e2642fe3142e4cc4af0799748233ad6da94c62a8bec3a6648bf8ee68b1c7426"},
+ {file = "cffi-1.15.1-cp37-cp37m-win32.whl", hash = "sha256:e229a521186c75c8ad9490854fd8bbdd9a0c9aa3a524326b55be83b54d4e0ad9"},
+ {file = "cffi-1.15.1-cp37-cp37m-win_amd64.whl", hash = "sha256:a0b71b1b8fbf2b96e41c4d990244165e2c9be83d54962a9a1d118fd8657d2045"},
+ {file = "cffi-1.15.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:320dab6e7cb2eacdf0e658569d2575c4dad258c0fcc794f46215e1e39f90f2c3"},
+ {file = "cffi-1.15.1-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1e74c6b51a9ed6589199c787bf5f9875612ca4a8a0785fb2d4a84429badaf22a"},
+ {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a5c84c68147988265e60416b57fc83425a78058853509c1b0629c180094904a5"},
+ {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3b926aa83d1edb5aa5b427b4053dc420ec295a08e40911296b9eb1b6170f6cca"},
+ {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:87c450779d0914f2861b8526e035c5e6da0a3199d8f1add1a665e1cbc6fc6d02"},
+ {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4f2c9f67e9821cad2e5f480bc8d83b8742896f1242dba247911072d4fa94c192"},
+ {file = "cffi-1.15.1-cp38-cp38-win32.whl", hash = "sha256:8b7ee99e510d7b66cdb6c593f21c043c248537a32e0bedf02e01e9553a172314"},
+ {file = "cffi-1.15.1-cp38-cp38-win_amd64.whl", hash = "sha256:00a9ed42e88df81ffae7a8ab6d9356b371399b91dbdf0c3cb1e84c03a13aceb5"},
+ {file = "cffi-1.15.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:54a2db7b78338edd780e7ef7f9f6c442500fb0d41a5a4ea24fff1c929d5af585"},
+ {file = "cffi-1.15.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:fcd131dd944808b5bdb38e6f5b53013c5aa4f334c5cad0c72742f6eba4b73db0"},
+ {file = "cffi-1.15.1-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7473e861101c9e72452f9bf8acb984947aa1661a7704553a9f6e4baa5ba64415"},
+ {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6c9a799e985904922a4d207a94eae35c78ebae90e128f0c4e521ce339396be9d"},
+ {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3bcde07039e586f91b45c88f8583ea7cf7a0770df3a1649627bf598332cb6984"},
+ {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:33ab79603146aace82c2427da5ca6e58f2b3f2fb5da893ceac0c42218a40be35"},
+ {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5d598b938678ebf3c67377cdd45e09d431369c3b1a5b331058c338e201f12b27"},
+ {file = "cffi-1.15.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:db0fbb9c62743ce59a9ff687eb5f4afbe77e5e8403d6697f7446e5f609976f76"},
+ {file = "cffi-1.15.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:98d85c6a2bef81588d9227dde12db8a7f47f639f4a17c9ae08e773aa9c697bf3"},
+ {file = "cffi-1.15.1-cp39-cp39-win32.whl", hash = "sha256:40f4774f5a9d4f5e344f31a32b5096977b5d48560c5592e2f3d2c4374bd543ee"},
+ {file = "cffi-1.15.1-cp39-cp39-win_amd64.whl", hash = "sha256:70df4e3b545a17496c9b3f41f5115e69a4f2e77e94e1d2a8e1070bc0c38c8a3c"},
+ {file = "cffi-1.15.1.tar.gz", hash = "sha256:d400bfb9a37b1351253cb402671cea7e89bdecc294e8016a707f6d1d8ac934f9"},
+]
+click = [
+ {file = "click-8.1.3-py3-none-any.whl", hash = "sha256:bb4d8133cb15a609f44e8213d9b391b0809795062913b383c62be0ee95b1db48"},
+ {file = "click-8.1.3.tar.gz", hash = "sha256:7682dc8afb30297001674575ea00d1814d808d6a36af415a82bd481d37ba7b8e"},
]
colorama = [
- {file = "colorama-0.4.4-py2.py3-none-any.whl", hash = "sha256:9f47eda37229f68eee03b24b9748937c7dc3868f906e8ba69fbcbdd3bc5dc3e2"},
- {file = "colorama-0.4.4.tar.gz", hash = "sha256:5941b2b48a20143d2267e95b1c2a7603ce057ee39fd88e7329b0c292aa16869b"},
+ {file = "colorama-0.4.5-py2.py3-none-any.whl", hash = "sha256:854bf444933e37f5824ae7bfc1e98d5bce2ebe4160d46b5edf346a89358e99da"},
+ {file = "colorama-0.4.5.tar.gz", hash = "sha256:e6c6b4334fc50988a639d9b98aa429a0b57da6e17b9a44f0451f930b6967b7a4"},
]
commonmark = [
{file = "commonmark-0.9.1-py2.py3-none-any.whl", hash = "sha256:da2f38c92590f83de410ba1a3cbceafbc74fee9def35f9251ba9a971d6d66fd9"},
{file = "commonmark-0.9.1.tar.gz", hash = "sha256:452f9dc859be7f06631ddcb328b6919c67984aca654e5fefb3914d54691aed60"},
]
cryptography = [
- {file = "cryptography-36.0.1-cp36-abi3-macosx_10_10_universal2.whl", hash = "sha256:73bc2d3f2444bcfeac67dd130ff2ea598ea5f20b40e36d19821b4df8c9c5037b"},
- {file = "cryptography-36.0.1-cp36-abi3-macosx_10_10_x86_64.whl", hash = "sha256:2d87cdcb378d3cfed944dac30596da1968f88fb96d7fc34fdae30a99054b2e31"},
- {file = "cryptography-36.0.1-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:74d6c7e80609c0f4c2434b97b80c7f8fdfaa072ca4baab7e239a15d6d70ed73a"},
- {file = "cryptography-36.0.1-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:6c0c021f35b421ebf5976abf2daacc47e235f8b6082d3396a2fe3ccd537ab173"},
- {file = "cryptography-36.0.1-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5d59a9d55027a8b88fd9fd2826c4392bd487d74bf628bb9d39beecc62a644c12"},
- {file = "cryptography-36.0.1-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0a817b961b46894c5ca8a66b599c745b9a3d9f822725221f0e0fe49dc043a3a3"},
- {file = "cryptography-36.0.1-cp36-abi3-manylinux_2_24_x86_64.whl", hash = "sha256:94ae132f0e40fe48f310bba63f477f14a43116f05ddb69d6fa31e93f05848ae2"},
- {file = "cryptography-36.0.1-cp36-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:7be0eec337359c155df191d6ae00a5e8bbb63933883f4f5dffc439dac5348c3f"},
- {file = "cryptography-36.0.1-cp36-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:e0344c14c9cb89e76eb6a060e67980c9e35b3f36691e15e1b7a9e58a0a6c6dc3"},
- {file = "cryptography-36.0.1-cp36-abi3-win32.whl", hash = "sha256:4caa4b893d8fad33cf1964d3e51842cd78ba87401ab1d2e44556826df849a8ca"},
- {file = "cryptography-36.0.1-cp36-abi3-win_amd64.whl", hash = "sha256:391432971a66cfaf94b21c24ab465a4cc3e8bf4a939c1ca5c3e3a6e0abebdbcf"},
- {file = "cryptography-36.0.1-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:bb5829d027ff82aa872d76158919045a7c1e91fbf241aec32cb07956e9ebd3c9"},
- {file = "cryptography-36.0.1-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ebc15b1c22e55c4d5566e3ca4db8689470a0ca2babef8e3a9ee057a8b82ce4b1"},
- {file = "cryptography-36.0.1-pp37-pypy37_pp73-manylinux_2_24_x86_64.whl", hash = "sha256:596f3cd67e1b950bc372c33f1a28a0692080625592ea6392987dba7f09f17a94"},
- {file = "cryptography-36.0.1-pp38-pypy38_pp73-macosx_10_10_x86_64.whl", hash = "sha256:30ee1eb3ebe1644d1c3f183d115a8c04e4e603ed6ce8e394ed39eea4a98469ac"},
- {file = "cryptography-36.0.1-pp38-pypy38_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:ec63da4e7e4a5f924b90af42eddf20b698a70e58d86a72d943857c4c6045b3ee"},
- {file = "cryptography-36.0.1-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ca238ceb7ba0bdf6ce88c1b74a87bffcee5afbfa1e41e173b1ceb095b39add46"},
- {file = "cryptography-36.0.1-pp38-pypy38_pp73-manylinux_2_24_x86_64.whl", hash = "sha256:ca28641954f767f9822c24e927ad894d45d5a1e501767599647259cbf030b903"},
- {file = "cryptography-36.0.1-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:39bdf8e70eee6b1c7b289ec6e5d84d49a6bfa11f8b8646b5b3dfe41219153316"},
- {file = "cryptography-36.0.1.tar.gz", hash = "sha256:53e5c1dc3d7a953de055d77bef2ff607ceef7a2aac0353b5d630ab67f7423638"},
-]
-enrich = [
- {file = "enrich-1.2.6-py3-none-any.whl", hash = "sha256:ed0b3ac33495cc95f1ccafaf6c7ec0a0fcabb20f7f7a90121f37eb83a85bf82b"},
- {file = "enrich-1.2.6.tar.gz", hash = "sha256:0e99ff57d87f7b5def0ca79917e88fb9351aa0d52e228ee38bff7cd858315fe4"},
+ {file = "cryptography-38.0.1-cp36-abi3-macosx_10_10_universal2.whl", hash = "sha256:10d1f29d6292fc95acb597bacefd5b9e812099d75a6469004fd38ba5471a977f"},
+ {file = "cryptography-38.0.1-cp36-abi3-macosx_10_10_x86_64.whl", hash = "sha256:3fc26e22840b77326a764ceb5f02ca2d342305fba08f002a8c1f139540cdfaad"},
+ {file = "cryptography-38.0.1-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:3b72c360427889b40f36dc214630e688c2fe03e16c162ef0aa41da7ab1455153"},
+ {file = "cryptography-38.0.1-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:194044c6b89a2f9f169df475cc167f6157eb9151cc69af8a2a163481d45cc407"},
+ {file = "cryptography-38.0.1-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ca9f6784ea96b55ff41708b92c3f6aeaebde4c560308e5fbbd3173fbc466e94e"},
+ {file = "cryptography-38.0.1-cp36-abi3-manylinux_2_24_x86_64.whl", hash = "sha256:16fa61e7481f4b77ef53991075de29fc5bacb582a1244046d2e8b4bb72ef66d0"},
+ {file = "cryptography-38.0.1-cp36-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:d4ef6cc305394ed669d4d9eebf10d3a101059bdcf2669c366ec1d14e4fb227bd"},
+ {file = "cryptography-38.0.1-cp36-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:3261725c0ef84e7592597606f6583385fed2a5ec3909f43bc475ade9729a41d6"},
+ {file = "cryptography-38.0.1-cp36-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:0297ffc478bdd237f5ca3a7dc96fc0d315670bfa099c04dc3a4a2172008a405a"},
+ {file = "cryptography-38.0.1-cp36-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:89ed49784ba88c221756ff4d4755dbc03b3c8d2c5103f6d6b4f83a0fb1e85294"},
+ {file = "cryptography-38.0.1-cp36-abi3-win32.whl", hash = "sha256:ac7e48f7e7261207d750fa7e55eac2d45f720027d5703cd9007e9b37bbb59ac0"},
+ {file = "cryptography-38.0.1-cp36-abi3-win_amd64.whl", hash = "sha256:ad7353f6ddf285aeadfaf79e5a6829110106ff8189391704c1d8801aa0bae45a"},
+ {file = "cryptography-38.0.1-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:896dd3a66959d3a5ddcfc140a53391f69ff1e8f25d93f0e2e7830c6de90ceb9d"},
+ {file = "cryptography-38.0.1-pp37-pypy37_pp73-manylinux_2_24_x86_64.whl", hash = "sha256:d3971e2749a723e9084dd507584e2a2761f78ad2c638aa31e80bc7a15c9db4f9"},
+ {file = "cryptography-38.0.1-pp37-pypy37_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:79473cf8a5cbc471979bd9378c9f425384980fcf2ab6534b18ed7d0d9843987d"},
+ {file = "cryptography-38.0.1-pp38-pypy38_pp73-macosx_10_10_x86_64.whl", hash = "sha256:d9e69ae01f99abe6ad646947bba8941e896cb3aa805be2597a0400e0764b5818"},
+ {file = "cryptography-38.0.1-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5067ee7f2bce36b11d0e334abcd1ccf8c541fc0bbdaf57cdd511fdee53e879b6"},
+ {file = "cryptography-38.0.1-pp38-pypy38_pp73-manylinux_2_24_x86_64.whl", hash = "sha256:3e3a2599e640927089f932295a9a247fc40a5bdf69b0484532f530471a382750"},
+ {file = "cryptography-38.0.1-pp38-pypy38_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:c2e5856248a416767322c8668ef1845ad46ee62629266f84a8f007a317141013"},
+ {file = "cryptography-38.0.1-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:64760ba5331e3f1794d0bcaabc0d0c39e8c60bf67d09c93dc0e54189dfd7cfe5"},
+ {file = "cryptography-38.0.1-pp39-pypy39_pp73-macosx_10_10_x86_64.whl", hash = "sha256:b6c9b706316d7b5a137c35e14f4103e2115b088c412140fdbd5f87c73284df61"},
+ {file = "cryptography-38.0.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b0163a849b6f315bf52815e238bc2b2346604413fa7c1601eea84bcddb5fb9ac"},
+ {file = "cryptography-38.0.1-pp39-pypy39_pp73-manylinux_2_24_x86_64.whl", hash = "sha256:d1a5bd52d684e49a36582193e0b89ff267704cd4025abefb9e26803adeb3e5fb"},
+ {file = "cryptography-38.0.1-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:765fa194a0f3372d83005ab83ab35d7c5526c4e22951e46059b8ac678b44fa5a"},
+ {file = "cryptography-38.0.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:52e7bee800ec869b4031093875279f1ff2ed12c1e2f74923e8f49c916afd1d3b"},
+ {file = "cryptography-38.0.1.tar.gz", hash = "sha256:1db3d807a14931fa317f96435695d9ec386be7b84b618cc61cfa5d08b0ae33d7"},
+]
+filelock = [
+ {file = "filelock-3.8.0-py3-none-any.whl", hash = "sha256:617eb4e5eedc82fc5f47b6d61e4d11cb837c56cb4544e39081099fa17ad109d4"},
+ {file = "filelock-3.8.0.tar.gz", hash = "sha256:55447caa666f2198c5b6b13a26d2084d26fa5b115c00d065664b2124680c4edc"},
]
jinja2 = [
- {file = "Jinja2-3.0.3-py3-none-any.whl", hash = "sha256:077ce6014f7b40d03b47d1f1ca4b0fc8328a692bd284016f806ed0eaca390ad8"},
- {file = "Jinja2-3.0.3.tar.gz", hash = "sha256:611bb273cd68f3b993fabdc4064fc858c5b47a973cb5aa7999ec1ba405c87cd7"},
+ {file = "Jinja2-3.1.2-py3-none-any.whl", hash = "sha256:6088930bfe239f0e6710546ab9c19c9ef35e29792895fed6e6e31a023a182a61"},
+ {file = "Jinja2-3.1.2.tar.gz", hash = "sha256:31351a702a408a9e7595a8fc6150fc3f43bb6bf7e319770cbc0db9df9437e852"},
+]
+jsonschema = [
+ {file = "jsonschema-4.16.0-py3-none-any.whl", hash = "sha256:9e74b8f9738d6a946d70705dc692b74b5429cd0960d58e79ffecfc43b2221eb9"},
+ {file = "jsonschema-4.16.0.tar.gz", hash = "sha256:165059f076eff6971bae5b742fc029a7b4ef3f9bcf04c14e4776a7605de14b23"},
]
markupsafe = [
- {file = "MarkupSafe-2.0.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:d8446c54dc28c01e5a2dbac5a25f071f6653e6e40f3a8818e8b45d790fe6ef53"},
- {file = "MarkupSafe-2.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:36bc903cbb393720fad60fc28c10de6acf10dc6cc883f3e24ee4012371399a38"},
- {file = "MarkupSafe-2.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2d7d807855b419fc2ed3e631034685db6079889a1f01d5d9dac950f764da3dad"},
- {file = "MarkupSafe-2.0.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:add36cb2dbb8b736611303cd3bfcee00afd96471b09cda130da3581cbdc56a6d"},
- {file = "MarkupSafe-2.0.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:168cd0a3642de83558a5153c8bd34f175a9a6e7f6dc6384b9655d2697312a646"},
- {file = "MarkupSafe-2.0.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:4dc8f9fb58f7364b63fd9f85013b780ef83c11857ae79f2feda41e270468dd9b"},
- {file = "MarkupSafe-2.0.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:20dca64a3ef2d6e4d5d615a3fd418ad3bde77a47ec8a23d984a12b5b4c74491a"},
- {file = "MarkupSafe-2.0.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:cdfba22ea2f0029c9261a4bd07e830a8da012291fbe44dc794e488b6c9bb353a"},
- {file = "MarkupSafe-2.0.1-cp310-cp310-win32.whl", hash = "sha256:99df47edb6bda1249d3e80fdabb1dab8c08ef3975f69aed437cb69d0a5de1e28"},
- {file = "MarkupSafe-2.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:e0f138900af21926a02425cf736db95be9f4af72ba1bb21453432a07f6082134"},
- {file = "MarkupSafe-2.0.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:f9081981fe268bd86831e5c75f7de206ef275defcb82bc70740ae6dc507aee51"},
- {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:0955295dd5eec6cb6cc2fe1698f4c6d84af2e92de33fbcac4111913cd100a6ff"},
- {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:0446679737af14f45767963a1a9ef7620189912317d095f2d9ffa183a4d25d2b"},
- {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux2010_i686.whl", hash = "sha256:f826e31d18b516f653fe296d967d700fddad5901ae07c622bb3705955e1faa94"},
- {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:fa130dd50c57d53368c9d59395cb5526eda596d3ffe36666cd81a44d56e48872"},
- {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:905fec760bd2fa1388bb5b489ee8ee5f7291d692638ea5f67982d968366bef9f"},
- {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bf5d821ffabf0ef3533c39c518f3357b171a1651c1ff6827325e4489b0e46c3c"},
- {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:0d4b31cc67ab36e3392bbf3862cfbadac3db12bdd8b02a2731f509ed5b829724"},
- {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:baa1a4e8f868845af802979fcdbf0bb11f94f1cb7ced4c4b8a351bb60d108145"},
- {file = "MarkupSafe-2.0.1-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:deb993cacb280823246a026e3b2d81c493c53de6acfd5e6bfe31ab3402bb37dd"},
- {file = "MarkupSafe-2.0.1-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:63f3268ba69ace99cab4e3e3b5840b03340efed0948ab8f78d2fd87ee5442a4f"},
- {file = "MarkupSafe-2.0.1-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:8d206346619592c6200148b01a2142798c989edcb9c896f9ac9722a99d4e77e6"},
- {file = "MarkupSafe-2.0.1-cp36-cp36m-win32.whl", hash = "sha256:6c4ca60fa24e85fe25b912b01e62cb969d69a23a5d5867682dd3e80b5b02581d"},
- {file = "MarkupSafe-2.0.1-cp36-cp36m-win_amd64.whl", hash = "sha256:b2f4bf27480f5e5e8ce285a8c8fd176c0b03e93dcc6646477d4630e83440c6a9"},
- {file = "MarkupSafe-2.0.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:0717a7390a68be14b8c793ba258e075c6f4ca819f15edfc2a3a027c823718567"},
- {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:6557b31b5e2c9ddf0de32a691f2312a32f77cd7681d8af66c2692efdbef84c18"},
- {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:49e3ceeabbfb9d66c3aef5af3a60cc43b85c33df25ce03d0031a608b0a8b2e3f"},
- {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux2010_i686.whl", hash = "sha256:d7f9850398e85aba693bb640262d3611788b1f29a79f0c93c565694658f4071f"},
- {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:6a7fae0dd14cf60ad5ff42baa2e95727c3d81ded453457771d02b7d2b3f9c0c2"},
- {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:b7f2d075102dc8c794cbde1947378051c4e5180d52d276987b8d28a3bd58c17d"},
- {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e9936f0b261d4df76ad22f8fee3ae83b60d7c3e871292cd42f40b81b70afae85"},
- {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:2a7d351cbd8cfeb19ca00de495e224dea7e7d919659c2841bbb7f420ad03e2d6"},
- {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:60bf42e36abfaf9aff1f50f52644b336d4f0a3fd6d8a60ca0d054ac9f713a864"},
- {file = "MarkupSafe-2.0.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:d6c7ebd4e944c85e2c3421e612a7057a2f48d478d79e61800d81468a8d842207"},
- {file = "MarkupSafe-2.0.1-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:f0567c4dc99f264f49fe27da5f735f414c4e7e7dd850cfd8e69f0862d7c74ea9"},
- {file = "MarkupSafe-2.0.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:89c687013cb1cd489a0f0ac24febe8c7a666e6e221b783e53ac50ebf68e45d86"},
- {file = "MarkupSafe-2.0.1-cp37-cp37m-win32.whl", hash = "sha256:a30e67a65b53ea0a5e62fe23682cfe22712e01f453b95233b25502f7c61cb415"},
- {file = "MarkupSafe-2.0.1-cp37-cp37m-win_amd64.whl", hash = "sha256:611d1ad9a4288cf3e3c16014564df047fe08410e628f89805e475368bd304914"},
- {file = "MarkupSafe-2.0.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:5bb28c636d87e840583ee3adeb78172efc47c8b26127267f54a9c0ec251d41a9"},
- {file = "MarkupSafe-2.0.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:be98f628055368795d818ebf93da628541e10b75b41c559fdf36d104c5787066"},
- {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux1_i686.whl", hash = "sha256:1d609f577dc6e1aa17d746f8bd3c31aa4d258f4070d61b2aa5c4166c1539de35"},
- {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:7d91275b0245b1da4d4cfa07e0faedd5b0812efc15b702576d103293e252af1b"},
- {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux2010_i686.whl", hash = "sha256:01a9b8ea66f1658938f65b93a85ebe8bc016e6769611be228d797c9d998dd298"},
- {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:47ab1e7b91c098ab893b828deafa1203de86d0bc6ab587b160f78fe6c4011f75"},
- {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:97383d78eb34da7e1fa37dd273c20ad4320929af65d156e35a5e2d89566d9dfb"},
- {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6fcf051089389abe060c9cd7caa212c707e58153afa2c649f00346ce6d260f1b"},
- {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:5855f8438a7d1d458206a2466bf82b0f104a3724bf96a1c781ab731e4201731a"},
- {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:3dd007d54ee88b46be476e293f48c85048603f5f516008bee124ddd891398ed6"},
- {file = "MarkupSafe-2.0.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:aca6377c0cb8a8253e493c6b451565ac77e98c2951c45f913e0b52facdcff83f"},
- {file = "MarkupSafe-2.0.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:04635854b943835a6ea959e948d19dcd311762c5c0c6e1f0e16ee57022669194"},
- {file = "MarkupSafe-2.0.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:6300b8454aa6930a24b9618fbb54b5a68135092bc666f7b06901f897fa5c2fee"},
- {file = "MarkupSafe-2.0.1-cp38-cp38-win32.whl", hash = "sha256:023cb26ec21ece8dc3907c0e8320058b2e0cb3c55cf9564da612bc325bed5e64"},
- {file = "MarkupSafe-2.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:984d76483eb32f1bcb536dc27e4ad56bba4baa70be32fa87152832cdd9db0833"},
- {file = "MarkupSafe-2.0.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:2ef54abee730b502252bcdf31b10dacb0a416229b72c18b19e24a4509f273d26"},
- {file = "MarkupSafe-2.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3c112550557578c26af18a1ccc9e090bfe03832ae994343cfdacd287db6a6ae7"},
- {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux1_i686.whl", hash = "sha256:53edb4da6925ad13c07b6d26c2a852bd81e364f95301c66e930ab2aef5b5ddd8"},
- {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:f5653a225f31e113b152e56f154ccbe59eeb1c7487b39b9d9f9cdb58e6c79dc5"},
- {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux2010_i686.whl", hash = "sha256:4efca8f86c54b22348a5467704e3fec767b2db12fc39c6d963168ab1d3fc9135"},
- {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:ab3ef638ace319fa26553db0624c4699e31a28bb2a835c5faca8f8acf6a5a902"},
- {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:f8ba0e8349a38d3001fae7eadded3f6606f0da5d748ee53cc1dab1d6527b9509"},
- {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c47adbc92fc1bb2b3274c4b3a43ae0e4573d9fbff4f54cd484555edbf030baf1"},
- {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:37205cac2a79194e3750b0af2a5720d95f786a55ce7df90c3af697bfa100eaac"},
- {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:1f2ade76b9903f39aa442b4aadd2177decb66525062db244b35d71d0ee8599b6"},
- {file = "MarkupSafe-2.0.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:4296f2b1ce8c86a6aea78613c34bb1a672ea0e3de9c6ba08a960efe0b0a09047"},
- {file = "MarkupSafe-2.0.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:9f02365d4e99430a12647f09b6cc8bab61a6564363f313126f775eb4f6ef798e"},
- {file = "MarkupSafe-2.0.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:5b6d930f030f8ed98e3e6c98ffa0652bdb82601e7a016ec2ab5d7ff23baa78d1"},
- {file = "MarkupSafe-2.0.1-cp39-cp39-win32.whl", hash = "sha256:10f82115e21dc0dfec9ab5c0223652f7197feb168c940f3ef61563fc2d6beb74"},
- {file = "MarkupSafe-2.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:693ce3f9e70a6cf7d2fb9e6c9d8b204b6b39897a2c4a1aa65728d5ac97dcc1d8"},
- {file = "MarkupSafe-2.0.1.tar.gz", hash = "sha256:594c67807fb16238b30c44bdf74f36c02cdf22d1c8cda91ef8a0ed8dabf5620a"},
+ {file = "MarkupSafe-2.1.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:86b1f75c4e7c2ac2ccdaec2b9022845dbb81880ca318bb7a0a01fbf7813e3812"},
+ {file = "MarkupSafe-2.1.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:f121a1420d4e173a5d96e47e9a0c0dcff965afdf1626d28de1460815f7c4ee7a"},
+ {file = "MarkupSafe-2.1.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a49907dd8420c5685cfa064a1335b6754b74541bbb3706c259c02ed65b644b3e"},
+ {file = "MarkupSafe-2.1.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:10c1bfff05d95783da83491be968e8fe789263689c02724e0c691933c52994f5"},
+ {file = "MarkupSafe-2.1.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b7bd98b796e2b6553da7225aeb61f447f80a1ca64f41d83612e6139ca5213aa4"},
+ {file = "MarkupSafe-2.1.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:b09bf97215625a311f669476f44b8b318b075847b49316d3e28c08e41a7a573f"},
+ {file = "MarkupSafe-2.1.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:694deca8d702d5db21ec83983ce0bb4b26a578e71fbdbd4fdcd387daa90e4d5e"},
+ {file = "MarkupSafe-2.1.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:efc1913fd2ca4f334418481c7e595c00aad186563bbc1ec76067848c7ca0a933"},
+ {file = "MarkupSafe-2.1.1-cp310-cp310-win32.whl", hash = "sha256:4a33dea2b688b3190ee12bd7cfa29d39c9ed176bda40bfa11099a3ce5d3a7ac6"},
+ {file = "MarkupSafe-2.1.1-cp310-cp310-win_amd64.whl", hash = "sha256:dda30ba7e87fbbb7eab1ec9f58678558fd9a6b8b853530e176eabd064da81417"},
+ {file = "MarkupSafe-2.1.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:671cd1187ed5e62818414afe79ed29da836dde67166a9fac6d435873c44fdd02"},
+ {file = "MarkupSafe-2.1.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3799351e2336dc91ea70b034983ee71cf2f9533cdff7c14c90ea126bfd95d65a"},
+ {file = "MarkupSafe-2.1.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e72591e9ecd94d7feb70c1cbd7be7b3ebea3f548870aa91e2732960fa4d57a37"},
+ {file = "MarkupSafe-2.1.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6fbf47b5d3728c6aea2abb0589b5d30459e369baa772e0f37a0320185e87c980"},
+ {file = "MarkupSafe-2.1.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:d5ee4f386140395a2c818d149221149c54849dfcfcb9f1debfe07a8b8bd63f9a"},
+ {file = "MarkupSafe-2.1.1-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:bcb3ed405ed3222f9904899563d6fc492ff75cce56cba05e32eff40e6acbeaa3"},
+ {file = "MarkupSafe-2.1.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:e1c0b87e09fa55a220f058d1d49d3fb8df88fbfab58558f1198e08c1e1de842a"},
+ {file = "MarkupSafe-2.1.1-cp37-cp37m-win32.whl", hash = "sha256:8dc1c72a69aa7e082593c4a203dcf94ddb74bb5c8a731e4e1eb68d031e8498ff"},
+ {file = "MarkupSafe-2.1.1-cp37-cp37m-win_amd64.whl", hash = "sha256:97a68e6ada378df82bc9f16b800ab77cbf4b2fada0081794318520138c088e4a"},
+ {file = "MarkupSafe-2.1.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:e8c843bbcda3a2f1e3c2ab25913c80a3c5376cd00c6e8c4a86a89a28c8dc5452"},
+ {file = "MarkupSafe-2.1.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0212a68688482dc52b2d45013df70d169f542b7394fc744c02a57374a4207003"},
+ {file = "MarkupSafe-2.1.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8e576a51ad59e4bfaac456023a78f6b5e6e7651dcd383bcc3e18d06f9b55d6d1"},
+ {file = "MarkupSafe-2.1.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4b9fe39a2ccc108a4accc2676e77da025ce383c108593d65cc909add5c3bd601"},
+ {file = "MarkupSafe-2.1.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:96e37a3dc86e80bf81758c152fe66dbf60ed5eca3d26305edf01892257049925"},
+ {file = "MarkupSafe-2.1.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:6d0072fea50feec76a4c418096652f2c3238eaa014b2f94aeb1d56a66b41403f"},
+ {file = "MarkupSafe-2.1.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:089cf3dbf0cd6c100f02945abeb18484bd1ee57a079aefd52cffd17fba910b88"},
+ {file = "MarkupSafe-2.1.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:6a074d34ee7a5ce3effbc526b7083ec9731bb3cbf921bbe1d3005d4d2bdb3a63"},
+ {file = "MarkupSafe-2.1.1-cp38-cp38-win32.whl", hash = "sha256:421be9fbf0ffe9ffd7a378aafebbf6f4602d564d34be190fc19a193232fd12b1"},
+ {file = "MarkupSafe-2.1.1-cp38-cp38-win_amd64.whl", hash = "sha256:fc7b548b17d238737688817ab67deebb30e8073c95749d55538ed473130ec0c7"},
+ {file = "MarkupSafe-2.1.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:e04e26803c9c3851c931eac40c695602c6295b8d432cbe78609649ad9bd2da8a"},
+ {file = "MarkupSafe-2.1.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b87db4360013327109564f0e591bd2a3b318547bcef31b468a92ee504d07ae4f"},
+ {file = "MarkupSafe-2.1.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:99a2a507ed3ac881b975a2976d59f38c19386d128e7a9a18b7df6fff1fd4c1d6"},
+ {file = "MarkupSafe-2.1.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:56442863ed2b06d19c37f94d999035e15ee982988920e12a5b4ba29b62ad1f77"},
+ {file = "MarkupSafe-2.1.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3ce11ee3f23f79dbd06fb3d63e2f6af7b12db1d46932fe7bd8afa259a5996603"},
+ {file = "MarkupSafe-2.1.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:33b74d289bd2f5e527beadcaa3f401e0df0a89927c1559c8566c066fa4248ab7"},
+ {file = "MarkupSafe-2.1.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:43093fb83d8343aac0b1baa75516da6092f58f41200907ef92448ecab8825135"},
+ {file = "MarkupSafe-2.1.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:8e3dcf21f367459434c18e71b2a9532d96547aef8a871872a5bd69a715c15f96"},
+ {file = "MarkupSafe-2.1.1-cp39-cp39-win32.whl", hash = "sha256:d4306c36ca495956b6d568d276ac11fdd9c30a36f1b6eb928070dc5360b22e1c"},
+ {file = "MarkupSafe-2.1.1-cp39-cp39-win_amd64.whl", hash = "sha256:46d00d6cfecdde84d40e572d63735ef81423ad31184100411e6e3388d405e247"},
+ {file = "MarkupSafe-2.1.1.tar.gz", hash = "sha256:7f91197cc9e48f989d12e4e6fbc46495c446636dfc81b9ccf50bb0ec74b91d4b"},
]
mitogen = []
+mypy-extensions = [
+ {file = "mypy_extensions-0.4.3-py2.py3-none-any.whl", hash = "sha256:090fedd75945a69ae91ce1303b5824f428daf5a028d2f6ab8a299250a846f15d"},
+ {file = "mypy_extensions-0.4.3.tar.gz", hash = "sha256:2d82818f5bb3e369420cb3c4060a7970edba416647068eb4c5343488a6c604a8"},
+]
packaging = [
{file = "packaging-21.3-py3-none-any.whl", hash = "sha256:ef103e05f519cdc783ae24ea4e2e0f508a9c99b2d4969652eed6a2e1ea5bd522"},
{file = "packaging-21.3.tar.gz", hash = "sha256:dd47c42927d89ab911e606518907cc2d3a1f38bbd026385970643f9c5b8ecfeb"},
]
+pathspec = [
+ {file = "pathspec-0.10.1-py3-none-any.whl", hash = "sha256:46846318467efc4556ccfd27816e004270a9eeeeb4d062ce5e6fc7a87c573f93"},
+ {file = "pathspec-0.10.1.tar.gz", hash = "sha256:7ace6161b621d31e7902eb6b5ae148d12cfd23f4a249b9ffb6b9fee12084323d"},
+]
+platformdirs = [
+ {file = "platformdirs-2.5.2-py3-none-any.whl", hash = "sha256:027d8e83a2d7de06bbac4e5ef7e023c02b863d7ea5d079477e722bb41ab25788"},
+ {file = "platformdirs-2.5.2.tar.gz", hash = "sha256:58c8abb07dcb441e6ee4b11d8df0ac856038f944ab98b7be6b27b2a3c7feef19"},
+]
pycparser = [
{file = "pycparser-2.21-py2.py3-none-any.whl", hash = "sha256:8ee45429555515e1f6b185e78100aea234072576aa43ab53aefcae078162fca9"},
{file = "pycparser-2.21.tar.gz", hash = "sha256:e644fdec12f7872f86c58ff790da456218b10f863970249516d60a5eaca77206"},
]
pygments = [
- {file = "Pygments-2.10.0-py3-none-any.whl", hash = "sha256:b8e67fe6af78f492b3c4b3e2970c0624cbf08beb1e493b2c99b9fa1b67a20380"},
- {file = "Pygments-2.10.0.tar.gz", hash = "sha256:f398865f7eb6874156579fdf36bc840a03cab64d1cde9e93d68f46a425ec52c6"},
+ {file = "Pygments-2.13.0-py3-none-any.whl", hash = "sha256:f643f331ab57ba3c9d89212ee4a2dabc6e94f117cf4eefde99a0574720d14c42"},
+ {file = "Pygments-2.13.0.tar.gz", hash = "sha256:56a8508ae95f98e2b9bdf93a6be5ae3f7d8af858b43e02c5a2ff083726be40c1"},
]
pyparsing = [
- {file = "pyparsing-3.0.6-py3-none-any.whl", hash = "sha256:04ff808a5b90911829c55c4e26f75fa5ca8a2f5f36aa3a51f68e27033341d3e4"},
- {file = "pyparsing-3.0.6.tar.gz", hash = "sha256:d9bdec0013ef1eb5a84ab39a3b3868911598afa494f5faa038647101504e2b81"},
+ {file = "pyparsing-3.0.9-py3-none-any.whl", hash = "sha256:5026bae9a10eeaefb61dab2f09052b9f4307d44aee4eda64b309723d8d206bbc"},
+ {file = "pyparsing-3.0.9.tar.gz", hash = "sha256:2b020ecf7d21b687f219b71ecad3631f644a47f01403fa1d1036b0c6416d70fb"},
+]
+pyrsistent = [
+ {file = "pyrsistent-0.18.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:df46c854f490f81210870e509818b729db4488e1f30f2a1ce1698b2295a878d1"},
+ {file = "pyrsistent-0.18.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5d45866ececf4a5fff8742c25722da6d4c9e180daa7b405dc0a2a2790d668c26"},
+ {file = "pyrsistent-0.18.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4ed6784ceac462a7d6fcb7e9b663e93b9a6fb373b7f43594f9ff68875788e01e"},
+ {file = "pyrsistent-0.18.1-cp310-cp310-win32.whl", hash = "sha256:e4f3149fd5eb9b285d6bfb54d2e5173f6a116fe19172686797c056672689daf6"},
+ {file = "pyrsistent-0.18.1-cp310-cp310-win_amd64.whl", hash = "sha256:636ce2dc235046ccd3d8c56a7ad54e99d5c1cd0ef07d9ae847306c91d11b5fec"},
+ {file = "pyrsistent-0.18.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:e92a52c166426efbe0d1ec1332ee9119b6d32fc1f0bbfd55d5c1088070e7fc1b"},
+ {file = "pyrsistent-0.18.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d7a096646eab884bf8bed965bad63ea327e0d0c38989fc83c5ea7b8a87037bfc"},
+ {file = "pyrsistent-0.18.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cdfd2c361b8a8e5d9499b9082b501c452ade8bbf42aef97ea04854f4a3f43b22"},
+ {file = "pyrsistent-0.18.1-cp37-cp37m-win32.whl", hash = "sha256:7ec335fc998faa4febe75cc5268a9eac0478b3f681602c1f27befaf2a1abe1d8"},
+ {file = "pyrsistent-0.18.1-cp37-cp37m-win_amd64.whl", hash = "sha256:6455fc599df93d1f60e1c5c4fe471499f08d190d57eca040c0ea182301321286"},
+ {file = "pyrsistent-0.18.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:fd8da6d0124efa2f67d86fa70c851022f87c98e205f0594e1fae044e7119a5a6"},
+ {file = "pyrsistent-0.18.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7bfe2388663fd18bd8ce7db2c91c7400bf3e1a9e8bd7d63bf7e77d39051b85ec"},
+ {file = "pyrsistent-0.18.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0e3e1fcc45199df76053026a51cc59ab2ea3fc7c094c6627e93b7b44cdae2c8c"},
+ {file = "pyrsistent-0.18.1-cp38-cp38-win32.whl", hash = "sha256:b568f35ad53a7b07ed9b1b2bae09eb15cdd671a5ba5d2c66caee40dbf91c68ca"},
+ {file = "pyrsistent-0.18.1-cp38-cp38-win_amd64.whl", hash = "sha256:d1b96547410f76078eaf66d282ddca2e4baae8964364abb4f4dcdde855cd123a"},
+ {file = "pyrsistent-0.18.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:f87cc2863ef33c709e237d4b5f4502a62a00fab450c9e020892e8e2ede5847f5"},
+ {file = "pyrsistent-0.18.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6bc66318fb7ee012071b2792024564973ecc80e9522842eb4e17743604b5e045"},
+ {file = "pyrsistent-0.18.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:914474c9f1d93080338ace89cb2acee74f4f666fb0424896fcfb8d86058bf17c"},
+ {file = "pyrsistent-0.18.1-cp39-cp39-win32.whl", hash = "sha256:1b34eedd6812bf4d33814fca1b66005805d3640ce53140ab8bbb1e2651b0d9bc"},
+ {file = "pyrsistent-0.18.1-cp39-cp39-win_amd64.whl", hash = "sha256:e24a828f57e0c337c8d8bb9f6b12f09dfdf0273da25fda9e314f0b684b415a07"},
+ {file = "pyrsistent-0.18.1.tar.gz", hash = "sha256:d4d61f8b993a7255ba714df3aca52700f8125289f84f704cf80916517c46eb96"},
]
pyyaml = [
{file = "PyYAML-6.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d4db7c7aef085872ef65a8fd7d6d09a14ae91f691dec3e87ee5ee0539d516f53"},
@@ -482,6 +709,13 @@ pyyaml = [
{file = "PyYAML-6.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:f84fbc98b019fef2ee9a1cb3ce93e3187a6df0b2538a651bfb890254ba9f90b5"},
{file = "PyYAML-6.0-cp310-cp310-win32.whl", hash = "sha256:2cd5df3de48857ed0544b34e2d40e9fac445930039f3cfe4bcc592a1f836d513"},
{file = "PyYAML-6.0-cp310-cp310-win_amd64.whl", hash = "sha256:daf496c58a8c52083df09b80c860005194014c3698698d1a57cbcfa182142a3a"},
+ {file = "PyYAML-6.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:d4b0ba9512519522b118090257be113b9468d804b19d63c71dbcf4a48fa32358"},
+ {file = "PyYAML-6.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:81957921f441d50af23654aa6c5e5eaf9b06aba7f0a19c18a538dc7ef291c5a1"},
+ {file = "PyYAML-6.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:afa17f5bc4d1b10afd4466fd3a44dc0e245382deca5b3c353d8b757f9e3ecb8d"},
+ {file = "PyYAML-6.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:dbad0e9d368bb989f4515da330b88a057617d16b6a8245084f1b05400f24609f"},
+ {file = "PyYAML-6.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:432557aa2c09802be39460360ddffd48156e30721f5e8d917f01d31694216782"},
+ {file = "PyYAML-6.0-cp311-cp311-win32.whl", hash = "sha256:bfaef573a63ba8923503d27530362590ff4f576c626d86a9fed95822a8255fd7"},
+ {file = "PyYAML-6.0-cp311-cp311-win_amd64.whl", hash = "sha256:01b45c0191e6d66c470b6cf1b9531a771a83c1c4208272ead47a3ae4f2f603bf"},
{file = "PyYAML-6.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:897b80890765f037df3403d22bab41627ca8811ae55e9a722fd0392850ec4d86"},
{file = "PyYAML-6.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:50602afada6d6cbfad699b0c7bb50d5ccffa7e46a3d738092afddc1f9758427f"},
{file = "PyYAML-6.0-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:48c346915c114f5fdb3ead70312bd042a953a8ce5c7106d5bfb1a5254e47da92"},
@@ -510,49 +744,73 @@ pyyaml = [
{file = "PyYAML-6.0.tar.gz", hash = "sha256:68fb519c14306fec9720a2a5b45bc9f0c8d1b9c72adf45c37baedfcd949c35a2"},
]
resolvelib = [
- {file = "resolvelib-0.5.5-py2.py3-none-any.whl", hash = "sha256:b0143b9d074550a6c5163a0f587e49c49017434e3cdfe853941725f5455dd29c"},
- {file = "resolvelib-0.5.5.tar.gz", hash = "sha256:123de56548c90df85137425a3f51eb93df89e2ba719aeb6a8023c032758be950"},
+ {file = "resolvelib-0.8.1-py2.py3-none-any.whl", hash = "sha256:d9b7907f055c3b3a2cfc56c914ffd940122915826ff5fb5b1de0c99778f4de98"},
+ {file = "resolvelib-0.8.1.tar.gz", hash = "sha256:c6ea56732e9fb6fca1b2acc2ccc68a0b6b8c566d8f3e78e0443310ede61dbd37"},
]
rich = [
- {file = "rich-10.16.1-py3-none-any.whl", hash = "sha256:bbe04dd6ac09e4b00d22cb1051aa127beaf6e16c3d8687b026e96d3fca6aad52"},
- {file = "rich-10.16.1.tar.gz", hash = "sha256:4949e73de321784ef6664ebbc854ac82b20ff60b2865097b93f3b9b41e30da27"},
-]
-"ruamel.yaml" = [
- {file = "ruamel.yaml-0.17.19-py3-none-any.whl", hash = "sha256:92ac00b312c9a83ff3253a8f7b86dfe6f9996b4082b103af84b8df99175945bc"},
- {file = "ruamel.yaml-0.17.19.tar.gz", hash = "sha256:b9ce9a925d0f0c35a1dbba56b40f253c53cd526b0fa81cf7b1d24996f28fb1d7"},
-]
-"ruamel.yaml.clib" = [
- {file = "ruamel.yaml.clib-0.2.6-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:6e7be2c5bcb297f5b82fee9c665eb2eb7001d1050deaba8471842979293a80b0"},
- {file = "ruamel.yaml.clib-0.2.6-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:221eca6f35076c6ae472a531afa1c223b9c29377e62936f61bc8e6e8bdc5f9e7"},
- {file = "ruamel.yaml.clib-0.2.6-cp310-cp310-win32.whl", hash = "sha256:1070ba9dd7f9370d0513d649420c3b362ac2d687fe78c6e888f5b12bf8bc7bee"},
- {file = "ruamel.yaml.clib-0.2.6-cp310-cp310-win_amd64.whl", hash = "sha256:77df077d32921ad46f34816a9a16e6356d8100374579bc35e15bab5d4e9377de"},
- {file = "ruamel.yaml.clib-0.2.6-cp35-cp35m-macosx_10_6_intel.whl", hash = "sha256:cfdb9389d888c5b74af297e51ce357b800dd844898af9d4a547ffc143fa56751"},
- {file = "ruamel.yaml.clib-0.2.6-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:7b2927e92feb51d830f531de4ccb11b320255ee95e791022555971c466af4527"},
- {file = "ruamel.yaml.clib-0.2.6-cp35-cp35m-win32.whl", hash = "sha256:ada3f400d9923a190ea8b59c8f60680c4ef8a4b0dfae134d2f2ff68429adfab5"},
- {file = "ruamel.yaml.clib-0.2.6-cp35-cp35m-win_amd64.whl", hash = "sha256:de9c6b8a1ba52919ae919f3ae96abb72b994dd0350226e28f3686cb4f142165c"},
- {file = "ruamel.yaml.clib-0.2.6-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:d67f273097c368265a7b81e152e07fb90ed395df6e552b9fa858c6d2c9f42502"},
- {file = "ruamel.yaml.clib-0.2.6-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:72a2b8b2ff0a627496aad76f37a652bcef400fd861721744201ef1b45199ab78"},
- {file = "ruamel.yaml.clib-0.2.6-cp36-cp36m-win32.whl", hash = "sha256:9efef4aab5353387b07f6b22ace0867032b900d8e91674b5d8ea9150db5cae94"},
- {file = "ruamel.yaml.clib-0.2.6-cp36-cp36m-win_amd64.whl", hash = "sha256:846fc8336443106fe23f9b6d6b8c14a53d38cef9a375149d61f99d78782ea468"},
- {file = "ruamel.yaml.clib-0.2.6-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:0847201b767447fc33b9c235780d3aa90357d20dd6108b92be544427bea197dd"},
- {file = "ruamel.yaml.clib-0.2.6-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:78988ed190206672da0f5d50c61afef8f67daa718d614377dcd5e3ed85ab4a99"},
- {file = "ruamel.yaml.clib-0.2.6-cp37-cp37m-win32.whl", hash = "sha256:a49e0161897901d1ac9c4a79984b8410f450565bbad64dbfcbf76152743a0cdb"},
- {file = "ruamel.yaml.clib-0.2.6-cp37-cp37m-win_amd64.whl", hash = "sha256:bf75d28fa071645c529b5474a550a44686821decebdd00e21127ef1fd566eabe"},
- {file = "ruamel.yaml.clib-0.2.6-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:a32f8d81ea0c6173ab1b3da956869114cae53ba1e9f72374032e33ba3118c233"},
- {file = "ruamel.yaml.clib-0.2.6-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:7f7ecb53ae6848f959db6ae93bdff1740e651809780822270eab111500842a84"},
- {file = "ruamel.yaml.clib-0.2.6-cp38-cp38-win32.whl", hash = "sha256:89221ec6d6026f8ae859c09b9718799fea22c0e8da8b766b0b2c9a9ba2db326b"},
- {file = "ruamel.yaml.clib-0.2.6-cp38-cp38-win_amd64.whl", hash = "sha256:31ea73e564a7b5fbbe8188ab8b334393e06d997914a4e184975348f204790277"},
- {file = "ruamel.yaml.clib-0.2.6-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:dc6a613d6c74eef5a14a214d433d06291526145431c3b964f5e16529b1842bed"},
- {file = "ruamel.yaml.clib-0.2.6-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:1866cf2c284a03b9524a5cc00daca56d80057c5ce3cdc86a52020f4c720856f0"},
- {file = "ruamel.yaml.clib-0.2.6-cp39-cp39-win32.whl", hash = "sha256:3fb9575a5acd13031c57a62cc7823e5d2ff8bc3835ba4d94b921b4e6ee664104"},
- {file = "ruamel.yaml.clib-0.2.6-cp39-cp39-win_amd64.whl", hash = "sha256:825d5fccef6da42f3c8eccd4281af399f21c02b32d98e113dbc631ea6a6ecbc7"},
- {file = "ruamel.yaml.clib-0.2.6.tar.gz", hash = "sha256:4ff604ce439abb20794f05613c374759ce10e3595d1867764dd1ae675b85acbd"},
-]
-tenacity = [
- {file = "tenacity-8.0.1-py3-none-any.whl", hash = "sha256:f78f4ea81b0fabc06728c11dc2a8c01277bfc5181b321a4770471902e3eb844a"},
- {file = "tenacity-8.0.1.tar.gz", hash = "sha256:43242a20e3e73291a28bcbcacfd6e000b02d3857a9a9fff56b297a27afdc932f"},
+ {file = "rich-12.6.0-py3-none-any.whl", hash = "sha256:a4eb26484f2c82589bd9a17c73d32a010b1e29d89f1604cd9bf3a2097b81bb5e"},
+ {file = "rich-12.6.0.tar.gz", hash = "sha256:ba3a3775974105c221d31141f2c116f4fd65c5ceb0698657a11e9f295ec93fd0"},
+]
+ruamel-yaml = [
+ {file = "ruamel.yaml-0.17.21-py3-none-any.whl", hash = "sha256:742b35d3d665023981bd6d16b3d24248ce5df75fdb4e2924e93a05c1f8b61ca7"},
+ {file = "ruamel.yaml-0.17.21.tar.gz", hash = "sha256:8b7ce697a2f212752a35c1ac414471dc16c424c9573be4926b56ff3f5d23b7af"},
+]
+ruamel-yaml-clib = [
+ {file = "ruamel.yaml.clib-0.2.7-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:d5859983f26d8cd7bb5c287ef452e8aacc86501487634573d260968f753e1d71"},
+ {file = "ruamel.yaml.clib-0.2.7-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:debc87a9516b237d0466a711b18b6ebeb17ba9f391eb7f91c649c5c4ec5006c7"},
+ {file = "ruamel.yaml.clib-0.2.7-cp310-cp310-manylinux2014_aarch64.whl", hash = "sha256:df5828871e6648db72d1c19b4bd24819b80a755c4541d3409f0f7acd0f335c80"},
+ {file = "ruamel.yaml.clib-0.2.7-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:efa08d63ef03d079dcae1dfe334f6c8847ba8b645d08df286358b1f5293d24ab"},
+ {file = "ruamel.yaml.clib-0.2.7-cp310-cp310-win32.whl", hash = "sha256:763d65baa3b952479c4e972669f679fe490eee058d5aa85da483ebae2009d231"},
+ {file = "ruamel.yaml.clib-0.2.7-cp310-cp310-win_amd64.whl", hash = "sha256:d000f258cf42fec2b1bbf2863c61d7b8918d31ffee905da62dede869254d3b8a"},
+ {file = "ruamel.yaml.clib-0.2.7-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:045e0626baf1c52e5527bd5db361bc83180faaba2ff586e763d3d5982a876a9e"},
+ {file = "ruamel.yaml.clib-0.2.7-cp311-cp311-macosx_12_6_arm64.whl", hash = "sha256:721bc4ba4525f53f6a611ec0967bdcee61b31df5a56801281027a3a6d1c2daf5"},
+ {file = "ruamel.yaml.clib-0.2.7-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:4b3a93bb9bc662fc1f99c5c3ea8e623d8b23ad22f861eb6fce9377ac07ad6072"},
+ {file = "ruamel.yaml.clib-0.2.7-cp36-cp36m-macosx_12_0_arm64.whl", hash = "sha256:a234a20ae07e8469da311e182e70ef6b199d0fbeb6c6cc2901204dd87fb867e8"},
+ {file = "ruamel.yaml.clib-0.2.7-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:15910ef4f3e537eea7fe45f8a5d19997479940d9196f357152a09031c5be59f3"},
+ {file = "ruamel.yaml.clib-0.2.7-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:370445fd795706fd291ab00c9df38a0caed0f17a6fb46b0f607668ecb16ce763"},
+ {file = "ruamel.yaml.clib-0.2.7-cp36-cp36m-win32.whl", hash = "sha256:ecdf1a604009bd35c674b9225a8fa609e0282d9b896c03dd441a91e5f53b534e"},
+ {file = "ruamel.yaml.clib-0.2.7-cp36-cp36m-win_amd64.whl", hash = "sha256:f34019dced51047d6f70cb9383b2ae2853b7fc4dce65129a5acd49f4f9256646"},
+ {file = "ruamel.yaml.clib-0.2.7-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:2aa261c29a5545adfef9296b7e33941f46aa5bbd21164228e833412af4c9c75f"},
+ {file = "ruamel.yaml.clib-0.2.7-cp37-cp37m-macosx_12_0_arm64.whl", hash = "sha256:f01da5790e95815eb5a8a138508c01c758e5f5bc0ce4286c4f7028b8dd7ac3d0"},
+ {file = "ruamel.yaml.clib-0.2.7-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:40d030e2329ce5286d6b231b8726959ebbe0404c92f0a578c0e2482182e38282"},
+ {file = "ruamel.yaml.clib-0.2.7-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:c3ca1fbba4ae962521e5eb66d72998b51f0f4d0f608d3c0347a48e1af262efa7"},
+ {file = "ruamel.yaml.clib-0.2.7-cp37-cp37m-win32.whl", hash = "sha256:7bdb4c06b063f6fd55e472e201317a3bb6cdeeee5d5a38512ea5c01e1acbdd93"},
+ {file = "ruamel.yaml.clib-0.2.7-cp37-cp37m-win_amd64.whl", hash = "sha256:be2a7ad8fd8f7442b24323d24ba0b56c51219513cfa45b9ada3b87b76c374d4b"},
+ {file = "ruamel.yaml.clib-0.2.7-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:91a789b4aa0097b78c93e3dc4b40040ba55bef518f84a40d4442f713b4094acb"},
+ {file = "ruamel.yaml.clib-0.2.7-cp38-cp38-macosx_12_0_arm64.whl", hash = "sha256:99e77daab5d13a48a4054803d052ff40780278240a902b880dd37a51ba01a307"},
+ {file = "ruamel.yaml.clib-0.2.7-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:3243f48ecd450eddadc2d11b5feb08aca941b5cd98c9b1db14b2fd128be8c697"},
+ {file = "ruamel.yaml.clib-0.2.7-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:8831a2cedcd0f0927f788c5bdf6567d9dc9cc235646a434986a852af1cb54b4b"},
+ {file = "ruamel.yaml.clib-0.2.7-cp38-cp38-win32.whl", hash = "sha256:3110a99e0f94a4a3470ff67fc20d3f96c25b13d24c6980ff841e82bafe827cac"},
+ {file = "ruamel.yaml.clib-0.2.7-cp38-cp38-win_amd64.whl", hash = "sha256:92460ce908546ab69770b2e576e4f99fbb4ce6ab4b245345a3869a0a0410488f"},
+ {file = "ruamel.yaml.clib-0.2.7-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5bc0667c1eb8f83a3752b71b9c4ba55ef7c7058ae57022dd9b29065186a113d9"},
+ {file = "ruamel.yaml.clib-0.2.7-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:4a4d8d417868d68b979076a9be6a38c676eca060785abaa6709c7b31593c35d1"},
+ {file = "ruamel.yaml.clib-0.2.7-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:bf9a6bc4a0221538b1a7de3ed7bca4c93c02346853f44e1cd764be0023cd3640"},
+ {file = "ruamel.yaml.clib-0.2.7-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:a7b301ff08055d73223058b5c46c55638917f04d21577c95e00e0c4d79201a6b"},
+ {file = "ruamel.yaml.clib-0.2.7-cp39-cp39-win32.whl", hash = "sha256:d5e51e2901ec2366b79f16c2299a03e74ba4531ddcfacc1416639c557aef0ad8"},
+ {file = "ruamel.yaml.clib-0.2.7-cp39-cp39-win_amd64.whl", hash = "sha256:184faeaec61dbaa3cace407cffc5819f7b977e75360e8d5ca19461cd851a5fc5"},
+ {file = "ruamel.yaml.clib-0.2.7.tar.gz", hash = "sha256:1f08fd5a2bea9c4180db71678e850b995d2a5f4537be0e94557668cf0f5f9497"},
+]
+setuptools = [
+ {file = "setuptools-65.5.0-py3-none-any.whl", hash = "sha256:f62ea9da9ed6289bfe868cd6845968a2c854d1427f8548d52cae02a42b4f0356"},
+ {file = "setuptools-65.5.0.tar.gz", hash = "sha256:512e5536220e38146176efb833d4a62aa726b7bbff82cfbc8ba9eaa3996e0b17"},
+]
+subprocess-tee = [
+ {file = "subprocess-tee-0.3.5.tar.gz", hash = "sha256:ff5cced589a4b8ac973276ca1ba21bb6e3de600cde11a69947ff51f696efd577"},
+ {file = "subprocess_tee-0.3.5-py3-none-any.whl", hash = "sha256:d34186c639aa7f8013b5dfba80e17f52589539137c9d9205f2ae1c1bd03549e1"},
+]
+tomli = [
+ {file = "tomli-2.0.1-py3-none-any.whl", hash = "sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc"},
+ {file = "tomli-2.0.1.tar.gz", hash = "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f"},
+]
+typing-extensions = [
+ {file = "typing_extensions-4.4.0-py3-none-any.whl", hash = "sha256:16fa4864408f655d35ec496218b85f79b3437c829e93320c7c9215ccfd92489e"},
+ {file = "typing_extensions-4.4.0.tar.gz", hash = "sha256:1511434bb92bf8dd198c12b1cc812e800d4181cfcb867674e0f8279cc93087aa"},
]
wcmatch = [
- {file = "wcmatch-8.3-py3-none-any.whl", hash = "sha256:7141d2c85314253f16b38cb3d6cc0fb612918d407e1df3ccc2be7c86cc259c22"},
- {file = "wcmatch-8.3.tar.gz", hash = "sha256:371072912398af61d1e4e78609e18801c6faecd3cb36c54c82556a60abc965db"},
+ {file = "wcmatch-8.4.1-py3-none-any.whl", hash = "sha256:3476cd107aba7b25ba1d59406938a47dc7eec6cfd0ad09ff77193f21a964dee7"},
+ {file = "wcmatch-8.4.1.tar.gz", hash = "sha256:b1f042a899ea4c458b7321da1b5e3331e3e0ec781583434de1301946ceadb943"},
+]
+yamllint = [
+ {file = "yamllint-1.28.0-py2.py3-none-any.whl", hash = "sha256:89bb5b5ac33b1ade059743cf227de73daa34d5e5a474b06a5e17fc16583b0cf2"},
+ {file = "yamllint-1.28.0.tar.gz", hash = "sha256:9e3d8ddd16d0583214c5fdffe806c9344086721f107435f68bad990e5a88826b"},
]
diff --git a/pyproject.toml b/pyproject.toml
index 4083b78..f59e797 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -2,15 +2,18 @@
name = "infrastructure"
version = "0.1.0"
description = ""
-authors = ["Romain Gonçalves <commit@rgoncalves.se>"]
+authors = ["Romain Gonçalves <me@rgoncalves.se>"]
[tool.poetry.dependencies]
python = "^3.9"
-ansible = "^5.0.1"
-ansible-lint = "^5.3.0"
+ansible = "^6.5.0"
mitogen = { git = "https://github.com/mitogen-hq/mitogen", branch = "master" }
[tool.poetry.dev-dependencies]
+ansible-lint = "^6.8.2"
+
+[tool.poetry.group.dev.dependencies]
+yamllint = "^1.28.0"
[build-system]
requires = ["poetry-core>=1.0.0"]
diff --git a/roles/workstation/templates/apm-hibernate b/roles/_workstation/apm/files/hibernate
index ef90fed..c625aee 100755..100644
--- a/roles/workstation/templates/apm-hibernate
+++ b/roles/_workstation/apm/files/hibernate
@@ -1,4 +1,5 @@
#!/bin/sh
+# Managed by Ansible
set -x -e
diff --git a/roles/workstation/templates/apm-resume b/roles/_workstation/apm/files/resume
index 18397b4..686f7e1 100755..100644
--- a/roles/workstation/templates/apm-resume
+++ b/roles/_workstation/apm/files/resume
@@ -1,4 +1,5 @@
#!/bin/sh
+# Managed by Ansible
set -x -e
diff --git a/roles/workstation/templates/apm-suspend b/roles/_workstation/apm/files/suspend
index ef90fed..c625aee 100755..100644
--- a/roles/workstation/templates/apm-suspend
+++ b/roles/_workstation/apm/files/suspend
@@ -1,4 +1,5 @@
#!/bin/sh
+# Managed by Ansible
set -x -e
diff --git a/roles/_workstation/apm/tasks/main.yml b/roles/_workstation/apm/tasks/main.yml
new file mode 100644
index 0000000..f2f9ebf
--- /dev/null
+++ b/roles/_workstation/apm/tasks/main.yml
@@ -0,0 +1,21 @@
+---
+
+- name: create apm configuration directory
+ ansible.builtin.file:
+ path: "{{ apm_configuration_dir }}"
+ state: directory
+ owner: 0
+ group: 0
+ mode: "0755"
+
+- name: copy apm configurations
+ ansible.builtin.copy:
+ src: "{{ item }}"
+ dest: "{{ apm_configuration_dir }}/{{ item }}"
+ mode: "0755"
+ owner: 0
+ group: 0
+ loop:
+ - hibernate
+ - suspend
+ - resume
diff --git a/roles/_workstation/basegroups/defaults/main.yml b/roles/_workstation/basegroups/defaults/main.yml
new file mode 100644
index 0000000..40644c5
--- /dev/null
+++ b/roles/_workstation/basegroups/defaults/main.yml
@@ -0,0 +1,3 @@
+---
+
+basegroups_workstation_user: null
diff --git a/roles/_workstation/basegroups/tasks/main.yml b/roles/_workstation/basegroups/tasks/main.yml
new file mode 100644
index 0000000..a52899e
--- /dev/null
+++ b/roles/_workstation/basegroups/tasks/main.yml
@@ -0,0 +1,11 @@
+---
+
+- name: append current user to system groups
+ ansible.builtin.user:
+ name: "{{ basegroups_workstation_user }}"
+ groups: "{{ item }}"
+ append: true
+ loop:
+ - wheel
+ - video
+ - audio
diff --git a/roles/workstation/defaults/main.yml b/roles/_workstation/basetools/defaults/main.yml
index a1b1ed2..e0f553c 100644
--- a/roles/workstation/defaults/main.yml
+++ b/roles/_workstation/basetools/defaults/main.yml
@@ -1,15 +1,22 @@
-workstation_user: qwd
+---
-workstation_yay_repo: https://aur.archlinux.org/yay-bin.git
-workstation_yay_dir: /tmp/yay
-
-workstation_pkgs: []
-workstation_pkgs_common:
+basetools_distribution_packages:
+basetools_makepkg_packages:
+ - buf-bin
+ - conftest
+ - dive-bin
+ - pandoc-bin
+ - pipewatch-git
+ - wkhtmltopdf
+ - yay-bin
+basetools_common_packages:
- ansible
- ansible-lint
- calcurse
- cmus
- dmenu
+ - dunst
+ - entr
- feh
- fzf
- git
@@ -22,13 +29,17 @@ workstation_pkgs_common:
- httpie
- inotify-tools
- ipmitool
+ - ipython
+ - isync
- jq
- lowdown
+ - lynx
- mpv
- neomutt
- neovim
- newsboat
- nmap
+ - parallel
- qutebrowser
- rsync
- rtorrent
@@ -38,6 +49,7 @@ workstation_pkgs_common:
- terminus-font
- tig
- tor
+ - tree
- unzip
- vlc
- weechat
diff --git a/roles/_workstation/basetools/meta/main.yml b/roles/_workstation/basetools/meta/main.yml
new file mode 100644
index 0000000..f4acc42
--- /dev/null
+++ b/roles/_workstation/basetools/meta/main.yml
@@ -0,0 +1,21 @@
+---
+
+argument_specs:
+ main:
+ short_description: basetools main entrypoint.
+ options:
+ basetools_common_packages:
+ type: list
+ elements: str
+ required: true
+ description: Common packages accross all operating system
+ basetools_distribution_packages:
+ type: list
+ elements: str
+ required: true
+ description: Operating system specific packages
+ basetools_makepkg_packages:
+ type: list
+ elements: str
+ required: true
+ description: Makepkg specific packages
diff --git a/roles/_workstation/basetools/tasks/install.yml b/roles/_workstation/basetools/tasks/install.yml
new file mode 100644
index 0000000..5e24f4e
--- /dev/null
+++ b/roles/_workstation/basetools/tasks/install.yml
@@ -0,0 +1,22 @@
+---
+
+- name: install distribution packages
+ ansible.builtin.package:
+ name: "{{ item }}"
+ state: present
+ loop:
+ - "{{ basetools_common_packages }}"
+ - "{{ basetools_distribution_packages }}"
+
+- name: install community package
+ ansible.builtin.include_role:
+ name: _workstation/makepkg
+ vars:
+ makepkg_package_name: "{{ item }}"
+ loop:
+ - conftest
+ - dive-bin
+ - pandoc-bin
+ - pipewatch-git
+ - wkhtmltopdf
+ when: ansible_distribution in ["Archlinux"]
diff --git a/roles/_workstation/basetools/tasks/main.yml b/roles/_workstation/basetools/tasks/main.yml
new file mode 100644
index 0000000..6b8e1cd
--- /dev/null
+++ b/roles/_workstation/basetools/tasks/main.yml
@@ -0,0 +1,21 @@
+---
+
+- name: include per-os vars
+ ansible.builtin.include_vars:
+ file: "os_{{ ansible_distribution | lower }}.yml"
+
+- name: install distribution packages
+ ansible.builtin.package:
+ name: "{{ item }}"
+ state: present
+ loop:
+ - "{{ basetools_common_packages }}"
+ - "{{ basetools_distribution_packages }}"
+
+- name: install community package
+ ansible.builtin.include_role:
+ name: _workstation/makepkg
+ vars:
+ makepkg_package_name: "{{ item }}"
+ loop: "{{ basetools_makepkg_packages }}"
+ when: ansible_distribution in ["Archlinux"]
diff --git a/roles/workstation/vars/os_archlinux.yml b/roles/_workstation/basetools/vars/os_archlinux.yml
index 6fdc7db..24bc290 100644
--- a/roles/workstation/vars/os_archlinux.yml
+++ b/roles/_workstation/basetools/vars/os_archlinux.yml
@@ -1,29 +1,40 @@
-workstation_pkgs:
+---
+
+basetools_distribution_packages:
- acpi
+ - alsa-tools
- base-devel
+ - bc
- bind
+ - diffoscope
- clang
- - docker
- - docker-compose
- easyeffects
+ - entr
- firefox
+ - fq
+ - go
+ - go-tools
+ - gopls
+ - httpie
+ - imagemagick
+ - inetutils
- libvirt
- light
+ - luarocks
- man-db
- nfs-utils
+ - nix
+ - noto-fonts-emoji
- npm
- obs-studio
- openbsd-netcat
- opendoas
- pamixer
- pavucontrol
- - pcsc-tools
- - pdfjs
- - pipewire
- - pipewire-alsa
- - pipewire-pulse
+ - pdfjs-legacy
- postgresql
- pyenv
+ - python-debugpy
- python-netaddr
- python-nodeenv
- python-pip
@@ -32,22 +43,21 @@ workstation_pkgs:
- python-pynvim
- python-qrencode
- qemu
+ - shellcheck
- signify
+ - sshuttle
- strace
+ - stylua
- tar
- tmux
- torbrowser-launcher
- traceroute
+ - unrar
- vi
- wireguard-tools
- - xf86-input-synaptics
- - xorg-apps
- - xorg-server
- - xorg-xinit
- - xorg-xwayland
- - xsecurelock
+ - wireplumber
- yadm
- - yubikey-manager
- yarn
- yt-dlp
- zathura-pdf-mupdf
+ - zk
diff --git a/roles/workstation/vars/os_openbsd.yml b/roles/_workstation/basetools/vars/os_openbsd.yml
index 4c3dc8b..e8623c5 100644
--- a/roles/workstation/vars/os_openbsd.yml
+++ b/roles/_workstation/basetools/vars/os_openbsd.yml
@@ -1,9 +1,10 @@
-workstation_pkgs:
+---
+
+basetools_distribution_packages:
- docker-cli
- gomuks
- mozilla-firefox
- - pcsc-lite
- - pcsc-tools
+ - py-httpie
- py3-neovim
- py3-netaddr
- py3-pip
diff --git a/roles/_workstation/cronie/tasks/main.yml b/roles/_workstation/cronie/tasks/main.yml
new file mode 100644
index 0000000..28d2e6f
--- /dev/null
+++ b/roles/_workstation/cronie/tasks/main.yml
@@ -0,0 +1,12 @@
+---
+
+- name: install cronie
+ ansible.builtin.package:
+ name: cronie
+ state: present
+
+- name: enable and start cronie
+ ansible.builtin.service:
+ name: cronie
+ state: started
+ enabled: true
diff --git a/roles/_workstation/doas/defaults/main.yml b/roles/_workstation/doas/defaults/main.yml
new file mode 100644
index 0000000..9585cd1
--- /dev/null
+++ b/roles/_workstation/doas/defaults/main.yml
@@ -0,0 +1,4 @@
+---
+
+doas_workstation_user: null
+doas_configuration_file: /etc/doas.conf
diff --git a/roles/_workstation/doas/tasks/main.yml b/roles/_workstation/doas/tasks/main.yml
new file mode 100644
index 0000000..4f22fe5
--- /dev/null
+++ b/roles/_workstation/doas/tasks/main.yml
@@ -0,0 +1,36 @@
+---
+
+- name: generate doas configuration
+ ansible.builtin.lineinfile:
+ path: "{{ doas_configuration_file }}"
+ regexp: "^permit persist keepenv {{ doas_workstation_user }} as root"
+ line: "permit persist keepenv {{ doas_workstation_user }} as root"
+ create: true
+ mode: "0644"
+ owner: 0
+ group: 0
+
+- name: allow reboot/shutdown/hibernate with doas
+ ansible.builtin.lineinfile:
+ path: "{{ doas_configuration_file }}"
+ regexp: "^permit nopass {{ doas_workstation_user }} as root cmd {{ item }}"
+ line: "permit nopass {{ doas_workstation_user }} as root cmd {{ item }}"
+ loop:
+ - ZZZ
+ - mount
+ - reboot
+ - shutdown
+ - zzz
+
+- name: check sudo binary path # noqa no-changed-when
+ ansible.builtin.command: command -v sudo
+ register: result
+ failed_when: false
+
+- name: uninstall sudo binary
+ ansible.builtin.package:
+ name: sudo
+ state: absent
+ when: result.rc == 0
+ register: sudo
+ ignore_errors: true
diff --git a/roles/_workstation/dockerd/defaults/main.yml b/roles/_workstation/dockerd/defaults/main.yml
new file mode 100644
index 0000000..d9ac1e8
--- /dev/null
+++ b/roles/_workstation/dockerd/defaults/main.yml
@@ -0,0 +1,5 @@
+---
+
+dockerd_workstation_user: null
+dockerd_group: docker
+dockerd_configuration_dir: /etc/docker
diff --git a/roles/workstation/templates/docker-daemon.json.j2 b/roles/_workstation/dockerd/files/daemon.json
index 2952d24..2952d24 100644
--- a/roles/workstation/templates/docker-daemon.json.j2
+++ b/roles/_workstation/dockerd/files/daemon.json
diff --git a/roles/_workstation/dockerd/tasks/main.yml b/roles/_workstation/dockerd/tasks/main.yml
new file mode 100644
index 0000000..82b2cac
--- /dev/null
+++ b/roles/_workstation/dockerd/tasks/main.yml
@@ -0,0 +1,30 @@
+---
+
+- name: install docker
+ ansible.builtin.package:
+ name:
+ - docker
+ - docker-compose
+ state: present
+
+- name: append current user to docker group
+ ansible.builtin.user:
+ name: "{{ dockerd_workstation_user }}"
+ groups: "{{ dockerd_group }}"
+ append: true
+
+- name: create docker directory
+ ansible.builtin.file:
+ path: "{{ dockerd_configuration_dir }}"
+ state: directory
+ owner: 0
+ group: 0
+ mode: "0755"
+
+- name: configure default network for docker containers
+ ansible.builtin.copy:
+ src: daemon.json
+ dest: "{{ dockerd_configuration_dir }}/daemon.json"
+ owner: 0
+ group: 0
+ mode: "0600"
diff --git a/roles/_workstation/dotfiles.yml b/roles/_workstation/dotfiles.yml
new file mode 100644
index 0000000..d3e7855
--- /dev/null
+++ b/roles/_workstation/dotfiles.yml
@@ -0,0 +1,29 @@
+---
+
+- name: install yadm
+ ansible.builtin.package:
+ name: yadm
+ state: present
+
+- name: retrieve yadm path # noqa no-changed-when command-instead-of-shell
+ ansible.builtin.shell: yes n | yadm clone "{{ workstation_dotfiles_repo }}"
+ register: workstation_dotfiles_clone_result
+ changed_when:
+ - workstation_dotfiles_clone_result.rc != 0
+ - "'Git repo already exists' not in
+ workstation_dotfiles_clone_result.stderr"
+ failed_when:
+ - workstation_dotfiles_clone_result.rc != 0
+ - "'Git repo already exists' not in
+ workstation_dotfiles_clone_result.stderr"
+
+- name: check that yadm bootstrap script exists
+ ansible.builtin.stat:
+ path: "/home/{{ workstation_user }}/.config/yadm/bootstrap"
+ register: workstation_dotfiles_bootstrap_result
+
+- name: execute yadm bootstrap
+ ansible.builtin.command: yadm bootstrap
+ when:
+ - workstation_dotfiles_bootstrap_result.stat.exists
+ - workstation_dotfiles_bootstrap_result.stat.executable
diff --git a/roles/_workstation/dotfiles/defaults/main.yml b/roles/_workstation/dotfiles/defaults/main.yml
new file mode 100644
index 0000000..fdf9e39
--- /dev/null
+++ b/roles/_workstation/dotfiles/defaults/main.yml
@@ -0,0 +1,4 @@
+---
+
+dotfiles_repo_url: ssh://git-internal@rgoncalves.se:71/~/_/dots
+dotfiles_workstation_user: null
diff --git a/roles/_workstation/dotfiles/tasks/main.yml b/roles/_workstation/dotfiles/tasks/main.yml
new file mode 100644
index 0000000..50f8d54
--- /dev/null
+++ b/roles/_workstation/dotfiles/tasks/main.yml
@@ -0,0 +1,28 @@
+---
+
+- name: install yadm
+ ansible.builtin.package:
+ name: yadm
+ state: present
+
+- name: clone repository
+ ansible.builtin.shell: yes n | yadm clone "{{ dotfiles_repo_url }}"
+ register: dotfiles_clone_result
+ changed_when:
+ - dotfiles_clone_result.rc != 0
+ - "'Git repo already exists' not in dotfiles_clone_result.stderr"
+ failed_when:
+ - dotfiles_clone_result.rc != 0
+ - "'Git repo already exists' not in dotfiles_clone_result.stderr"
+
+- name: check that yadm bootstrap script exists
+ ansible.builtin.stat:
+ path: "/home/{{ dotfiles_workstation_user }}/.config/yadm/bootstrap"
+ register: dotfiles_bootstrap_result
+
+- name: execute yadm bootstrap
+ ansible.builtin.command: yadm bootstrap
+ when:
+ - dotfiles_bootstrap_result.stat.exists
+ - dotfiles_bootstrap_result.stat.executable
+ changed_when: false
diff --git a/roles/_workstation/hosts/defaults/main.yml b/roles/_workstation/hosts/defaults/main.yml
new file mode 100644
index 0000000..64ae72d
--- /dev/null
+++ b/roles/_workstation/hosts/defaults/main.yml
@@ -0,0 +1,5 @@
+---
+
+hosts_file: /etc/hosts
+hosts_url: https://raw.githubusercontent.com/StevenBlack/hosts/master/alternates/fakenews-gambling-porn/hosts
+# hosts_url: http://sbc.io/hosts/alternates/fakenews-gambling-porn/hosts
diff --git a/roles/_workstation/hosts/tasks/main.yml b/roles/_workstation/hosts/tasks/main.yml
new file mode 100644
index 0000000..920fbf8
--- /dev/null
+++ b/roles/_workstation/hosts/tasks/main.yml
@@ -0,0 +1,9 @@
+---
+
+- name: retrieve hosts file
+ ansible.builtin.get_url:
+ url: "{{ hosts_url }}"
+ dest: "{{ hosts_file }}"
+ mode: "0644"
+ owner: 0
+ group: 0
diff --git a/roles/_workstation/kernel/defaults/main.yml b/roles/_workstation/kernel/defaults/main.yml
new file mode 100644
index 0000000..6ef2ad2
--- /dev/null
+++ b/roles/_workstation/kernel/defaults/main.yml
@@ -0,0 +1,3 @@
+---
+
+kernel_sysctl_configuration_file: /etc/sysctl.conf
diff --git a/roles/_workstation/kernel/tasks/main.yml b/roles/_workstation/kernel/tasks/main.yml
new file mode 100644
index 0000000..f711428
--- /dev/null
+++ b/roles/_workstation/kernel/tasks/main.yml
@@ -0,0 +1,34 @@
+---
+
+- name: create sysctl configuration file
+ ansible.builtin.file:
+ path: "{{ kernel_sysctl_configuration_file }}"
+ owner: 0
+ group: 0
+ mode: "0644"
+
+- name: apply memory optimizations
+ ansible.builtin.blockinfile:
+ path: "{{ kernel_sysctl_configuration_file }}"
+ block: |
+ kern.shminfo.shmall=3145728
+ kern.shminfo.shmmax=1073741823
+ kern.shminfo.shmmni=1024
+ kern.shminfo.shmseg=1024
+ kern.seminfo.semmns=4096
+ kern.seminfo.semmni=1024
+ marker_begin: "memory - BEGIN"
+ marker_end: "memory - END"
+
+- name: apply process optimizations
+ ansible.builtin.blockinfile:
+ path: "{{ kernel_sysctl_configuration_file }}"
+ block: |
+ kern.maxfiles=102400
+ kern.maxproc=32768
+ kern.maxfiles=65535
+ kern.bufcachepercent=90
+ kern.maxvnodes=262144
+ kern.somaxconn=2048
+ marker_begin: "process - BEGIN"
+ marker_end: "process - END"
diff --git a/roles/_workstation/libvirt/defaults/main.yml b/roles/_workstation/libvirt/defaults/main.yml
new file mode 100644
index 0000000..0eae412
--- /dev/null
+++ b/roles/_workstation/libvirt/defaults/main.yml
@@ -0,0 +1,3 @@
+---
+
+libvirt_workstation_user: null
diff --git a/roles/_workstation/libvirt/tasks/main.yml b/roles/_workstation/libvirt/tasks/main.yml
new file mode 100644
index 0000000..0563d83
--- /dev/null
+++ b/roles/_workstation/libvirt/tasks/main.yml
@@ -0,0 +1,27 @@
+---
+
+- name: install iptables-nft
+ ansible.builtin.shell: yes
+ | pacman --noprogressbar --needed --sync iptables-nft
+ when: ansible_distribution == "Archlinux"
+ register: libvirt_result_install_iptables
+ changed_when: "'there is nothing to do'
+ not in libvirt_result_install_iptables.stdout"
+
+- name: install libvirt
+ ansible.builtin.package:
+ name:
+ - cdrtools
+ - dnsmasq
+ - ebtables
+ - libvirt
+ state: present
+
+- name: append current user to virt groups
+ ansible.builtin.user:
+ name: "{{ libvirt_workstation_user }}"
+ groups: "{{ item }}"
+ append: true
+ loop:
+ - kvm
+ - libvirt
diff --git a/roles/_workstation/makepkg/defaults/main.yml b/roles/_workstation/makepkg/defaults/main.yml
new file mode 100644
index 0000000..96e3521
--- /dev/null
+++ b/roles/_workstation/makepkg/defaults/main.yml
@@ -0,0 +1,4 @@
+---
+
+makepkg_mirror_url: https://aur.archlinux.org
+makepkg_root_build_dir: /tmp/makepkg
diff --git a/roles/_workstation/makepkg/meta/main.yml b/roles/_workstation/makepkg/meta/main.yml
new file mode 100644
index 0000000..07c1a64
--- /dev/null
+++ b/roles/_workstation/makepkg/meta/main.yml
@@ -0,0 +1,22 @@
+---
+
+argument_specs:
+ main:
+ short_description: makepkg main entrypoint.
+ options:
+ makepkg_root_build_dir:
+ type: path
+ required: true
+ description: Local build directory
+ makepkg_package_name:
+ type: str
+ required: true
+ description: Package name (from the AUR)
+ makepkg_user:
+ type: str
+ required: true
+ description: User for building the package
+ makepkg_mirror_url:
+ type: str
+ required: true
+ description: Mirror url (usually the AUR)
diff --git a/roles/_workstation/makepkg/tasks/install.yml b/roles/_workstation/makepkg/tasks/install.yml
new file mode 100644
index 0000000..b9caeef
--- /dev/null
+++ b/roles/_workstation/makepkg/tasks/install.yml
@@ -0,0 +1,21 @@
+---
+
+- name: clone repository # noqa: latest[git]
+ ansible.builtin.git:
+ repo: "{{ makepkg_mirror_url }}/{{ makepkg_package_name }}.git"
+ dest: "{{ makepkg_root_build_dir }}/{{ makepkg_package_name }}"
+ force: true
+ become: true
+ become_user: "{{ makepkg_user }}"
+
+- name: make package # noqa: no-changed-when
+ ansible.builtin.command:
+ cmd: makepkg -fs
+ chdir: "{{ makepkg_root_build_dir }}/{{ makepkg_package_name }}"
+ become: true
+ become_user: "{{ makepkg_user }}"
+
+- name: install package # noqa: no-changed-when
+ ansible.builtin.shell:
+ cmd: pacman --noconfirm -U *.zst
+ chdir: "{{ makepkg_root_build_dir }}/{{ makepkg_package_name }}"
diff --git a/roles/_workstation/makepkg/tasks/main.yml b/roles/_workstation/makepkg/tasks/main.yml
new file mode 100644
index 0000000..1a31fd9
--- /dev/null
+++ b/roles/_workstation/makepkg/tasks/main.yml
@@ -0,0 +1,16 @@
+---
+
+- name: "check that package is present: {{ makepkg_package_name }}"
+ ansible.builtin.command:
+ cmd: pacman -Q {{ makepkg_package_name }}
+ register: makepkg_result_check_package
+ changed_when:
+ - makepkg_result_check_package.rc != 0
+ failed_when:
+ - makepkg_result_check_package.rc == 1
+ - "'was not found' not in makepkg_result_check_package.stderr"
+
+- name: include install task # noqa: no-handler
+ ansible.builtin.include_tasks:
+ file: install.yml
+ when: makepkg_result_check_package.changed
diff --git a/roles/_workstation/pipewire/defaults/main.yml b/roles/_workstation/pipewire/defaults/main.yml
new file mode 100644
index 0000000..ab0e912
--- /dev/null
+++ b/roles/_workstation/pipewire/defaults/main.yml
@@ -0,0 +1,3 @@
+---
+
+pipewire_workstation_user: null
diff --git a/roles/_workstation/pipewire/tasks/main.yml b/roles/_workstation/pipewire/tasks/main.yml
new file mode 100644
index 0000000..6465e18
--- /dev/null
+++ b/roles/_workstation/pipewire/tasks/main.yml
@@ -0,0 +1,24 @@
+---
+
+- name: install pipewire
+ ansible.builtin.package:
+ name:
+ - pipewire
+ - pipewire-alsa
+ - pipewire-pulse
+ - mda.lv2
+ state: present
+
+- name: enable and start pipewire
+ ansible.builtin.systemd:
+ name: "{{ item }}"
+ scope: user
+ enabled: true
+ state: started
+ become: true
+ become_method: su
+ become_user: "{{ pipewire_workstation_user }}"
+ loop:
+ - pipewire
+ - pipewire-pulse
+ when: ansible_service_mgr == "systemd"
diff --git a/roles/_workstation/resolv/defaults/main.yml b/roles/_workstation/resolv/defaults/main.yml
new file mode 100644
index 0000000..72733be
--- /dev/null
+++ b/roles/_workstation/resolv/defaults/main.yml
@@ -0,0 +1,9 @@
+---
+
+resolv_configuration_file: /etc/resolv.conf
+
+resolv_dns_servers:
+ - ip: 1.1.1.1
+ file: "{{ resolv_configuration_file }}.head"
+ - ip: 8.8.8.8
+ file: "{{ resolv_configuration_file }}.tail"
diff --git a/roles/_workstation/resolv/tasks/main.yml b/roles/_workstation/resolv/tasks/main.yml
new file mode 100644
index 0000000..41d3216
--- /dev/null
+++ b/roles/_workstation/resolv/tasks/main.yml
@@ -0,0 +1,10 @@
+---
+
+- name: generate configuration files
+ ansible.builtin.copy:
+ content: "nameserver {{ item.ip }}\n"
+ dest: "{{ item.file }}"
+ mode: "0644"
+ owner: 0
+ group: 0
+ loop: "{{ resolv_dns_servers }}"
diff --git a/roles/_workstation/shell/defaults/main.yml b/roles/_workstation/shell/defaults/main.yml
new file mode 100644
index 0000000..9863165
--- /dev/null
+++ b/roles/_workstation/shell/defaults/main.yml
@@ -0,0 +1,3 @@
+---
+
+shell_workstation_user: null
diff --git a/roles/_workstation/shell/tasks/main.yml b/roles/_workstation/shell/tasks/main.yml
new file mode 100644
index 0000000..3d99574
--- /dev/null
+++ b/roles/_workstation/shell/tasks/main.yml
@@ -0,0 +1,16 @@
+---
+
+- name: install zsh
+ ansible.builtin.package:
+ name: zsh
+ state: present
+
+- name: retrieve zsh path # noqa no-changed-when command-instead-of-shell
+ ansible.builtin.shell: command -v zsh
+ register: shell_zsh_path
+ changed_when: false
+
+- name: ensure zsh is used for workstation user
+ ansible.builtin.user:
+ name: "{{ shell_workstation_user }}"
+ shell: "{{ shell_zsh_path.stdout_lines[0] }}"
diff --git a/roles/_workstation/smartcard/defaults/main.yml b/roles/_workstation/smartcard/defaults/main.yml
new file mode 100644
index 0000000..013489e
--- /dev/null
+++ b/roles/_workstation/smartcard/defaults/main.yml
@@ -0,0 +1,3 @@
+---
+
+smartcard_packages: null
diff --git a/roles/_workstation/smartcard/tasks/main.yml b/roles/_workstation/smartcard/tasks/main.yml
new file mode 100644
index 0000000..7e85436
--- /dev/null
+++ b/roles/_workstation/smartcard/tasks/main.yml
@@ -0,0 +1,16 @@
+---
+
+- name: include per-os vars
+ ansible.builtin.include_vars:
+ file: "os_{{ ansible_distribution | lower }}.yml"
+
+- name: install pcsc package
+ ansible.builtin.package:
+ name: "{{ smartcard_packages }}"
+ state: present
+
+- name: start and enable pcscd service
+ ansible.builtin.service:
+ name: pcscd
+ state: started
+ enabled: true
diff --git a/roles/_workstation/smartcard/vars/os_archlinux.yml b/roles/_workstation/smartcard/vars/os_archlinux.yml
new file mode 100644
index 0000000..2f121b6
--- /dev/null
+++ b/roles/_workstation/smartcard/vars/os_archlinux.yml
@@ -0,0 +1,6 @@
+---
+
+smartcard_packages:
+ - pcsclite
+ - pcsc-tools
+ - yubikey-manager
diff --git a/roles/_workstation/smartcard/vars/os_openbsd.yml b/roles/_workstation/smartcard/vars/os_openbsd.yml
new file mode 100644
index 0000000..de37248
--- /dev/null
+++ b/roles/_workstation/smartcard/vars/os_openbsd.yml
@@ -0,0 +1,5 @@
+---
+
+smartcard_packages:
+ - pcsc-lite
+ - pcsc-tools
diff --git a/roles/_workstation/syncthing/defaults/main.yml b/roles/_workstation/syncthing/defaults/main.yml
new file mode 100644
index 0000000..5546e71
--- /dev/null
+++ b/roles/_workstation/syncthing/defaults/main.yml
@@ -0,0 +1,3 @@
+---
+
+syncthing_workstation_user: null
diff --git a/roles/_workstation/syncthing/tasks/main.yml b/roles/_workstation/syncthing/tasks/main.yml
new file mode 100644
index 0000000..45a97a2
--- /dev/null
+++ b/roles/_workstation/syncthing/tasks/main.yml
@@ -0,0 +1,21 @@
+---
+
+- name: install syncthing
+ ansible.builtin.package:
+ name: syncthing
+ state: present
+
+- name: get syncthing user id
+ ansible.builtin.getent:
+ database: passwd
+
+- name: enable and start syncthing
+ ansible.builtin.systemd:
+ name: syncthing
+ state: started
+ enabled: true
+ scope: user
+ environment:
+ XDG_RUNTIME_DIR: "/run/user/{{ ansible_facts.getent_passwd[syncthing_workstation_user][1] }}"
+ become: true
+ become_user: "{{ dotfiles_workstation_user }}"
diff --git a/roles/workstation/tasks/tlp.yml b/roles/_workstation/tlp/tasks/main.yml
index 788f523..60b2fc0 100644
--- a/roles/workstation/tasks/tlp.yml
+++ b/roles/_workstation/tlp/tasks/main.yml
@@ -1,10 +1,12 @@
+---
+
- name: install tlp
- package:
+ ansible.builtin.package:
name: tlp
state: present
- name: enable and start tlp
- service:
+ ansible.builtin.service:
name: tlp
state: started
enabled: true
diff --git a/roles/_workstation/wscons/defaults/main.yml b/roles/_workstation/wscons/defaults/main.yml
new file mode 100644
index 0000000..04f1b30
--- /dev/null
+++ b/roles/_workstation/wscons/defaults/main.yml
@@ -0,0 +1,3 @@
+---
+
+wscons_configuration_file: /etc/wsconsctl.conf
diff --git a/roles/_workstation/wscons/tasks/main.yml b/roles/_workstation/wscons/tasks/main.yml
new file mode 100644
index 0000000..67296f0
--- /dev/null
+++ b/roles/_workstation/wscons/tasks/main.yml
@@ -0,0 +1,17 @@
+---
+
+- name: append configuration to wsconsctl
+ ansible.builtin.lineinfile:
+ path: "{{ wscons_configuration_file }}"
+ regexp: "^{{ item[0] }}"
+ line: "{{ item[0] }}={{ item[1] }}"
+ create: true
+ owner: 0
+ group: 0
+ mode: "0644"
+ loop:
+ - [screen.brightness, 80]
+ - [keyboard.repeat.del1, 180]
+ - [keyboard.repeat.deln, 50]
+ - [keyboard.bell.volume, 0]
+ - [mouse.tp.tapping, 1]
diff --git a/roles/_workstation/xorg/defaults/main.yml b/roles/_workstation/xorg/defaults/main.yml
new file mode 100644
index 0000000..0378393
--- /dev/null
+++ b/roles/_workstation/xorg/defaults/main.yml
@@ -0,0 +1,3 @@
+---
+
+xorg_configuration_dir: /etc/X11/xorg.conf.d
diff --git a/roles/workstation/templates/xorg-intel.conf b/roles/_workstation/xorg/files/intel.conf
index 5d73c65..bb2f490 100644
--- a/roles/workstation/templates/xorg-intel.conf
+++ b/roles/_workstation/xorg/files/intel.conf
@@ -1,6 +1,5 @@
-
-# disable tearscreen for Xenocara on OpenBSD
# managed by Ansible
+# disable tearscreen for Xenocara on OpenBSD
Section "Device"
Identifier "drm"
diff --git a/roles/_workstation/xorg/tasks/main.yml b/roles/_workstation/xorg/tasks/main.yml
new file mode 100644
index 0000000..ed183a7
--- /dev/null
+++ b/roles/_workstation/xorg/tasks/main.yml
@@ -0,0 +1,29 @@
+---
+
+- name: install xorg and X11 packages
+ ansible.builtin.package:
+ name:
+ - xf86-input-synaptics
+ - xorg-apps
+ - xorg-server
+ - xorg-xinit
+ - xorg-xwayland
+ - xsecurelock
+ state: present
+ when: ansible_distribution in ["Archlinux"]
+
+- name: create Xorg configuration subdirectory
+ ansible.builtin.file:
+ path: "{{ xorg_configuration_dir }}"
+ owner: 0
+ group: 0
+ mode: "0644"
+ state: directory
+
+- name: copy xorg configuration
+ ansible.builtin.copy:
+ src: intel.conf
+ dest: "{{ xorg_configuration_dir }}/"
+ mode: "0644"
+ owner: 0
+ group: 0
diff --git a/roles/_workstation/yay/defaults/main.yml b/roles/_workstation/yay/defaults/main.yml
new file mode 100644
index 0000000..0c26b92
--- /dev/null
+++ b/roles/_workstation/yay/defaults/main.yml
@@ -0,0 +1,5 @@
+---
+
+yay_repository_url: https://aur.archlinux.org/yay-bin.git
+yay_repository_local_dir: /tmp/yay
+yay_workstation_user: null
diff --git a/roles/_workstation/yay/tasks/main.yml b/roles/_workstation/yay/tasks/main.yml
new file mode 100644
index 0000000..30f67f2
--- /dev/null
+++ b/roles/_workstation/yay/tasks/main.yml
@@ -0,0 +1,21 @@
+---
+
+- name: clone yay repository
+ ansible.builtin.git:
+ repo: "{{ yay_repository_url }}"
+ dest: "{{ yay_repository_local_dir }}"
+ version: origin/master
+ become: true
+ become_user: "{{ yay_workstation_user }}"
+
+- name: make yay package # noqa: no-changed-when
+ ansible.builtin.command:
+ cmd: makepkg -fs
+ chdir: "{{ yay_repository_local_dir }}"
+ become: true
+ become_user: "{{ yay_workstation_user }}"
+
+- name: install yay package # noqa: no-changed-when
+ ansible.builtin.shell:
+ cmd: pacman --noconfirm -U *.zst
+ chdir: "{{ yay_repository_local_dir }}"
diff --git a/roles/acme/defaults/main.yml b/roles/acme/defaults/main.yml
index 80c091a..66ca704 100644
--- a/roles/acme/defaults/main.yml
+++ b/roles/acme/defaults/main.yml
@@ -1,2 +1,6 @@
+---
+
+acme_rules: {}
+
acme_configuration_file: /etc/acme-client.conf
acme_domain_name: null
diff --git a/roles/acme/tasks/main.yml b/roles/acme/tasks/main.yml
index 5834cb5..f2d4ba3 100644
--- a/roles/acme/tasks/main.yml
+++ b/roles/acme/tasks/main.yml
@@ -1,31 +1,33 @@
+---
+
- name: generate acme-client configuration
- template:
+ ansible.builtin.template:
src: acme-client.conf.j2
dest: "{{ acme_configuration_file }}"
owner: 0
group: 0
- mode: 0644
+ mode: "0644"
- name: retrieve enabled domains # noqa: no-changed-when
- shell: |
+ ansible.builtin.shell: |
set -o pipefail
grep "^domain" /etc/acme-client.conf | cut -d " " -f 2
register: subdomains
- name: generate acme certificates # noqa: no-changed-when
- command: acme-client -v {{ item }}
+ ansible.builtin.command: acme-client -v {{ item }}
loop: "{{ subdomains.stdout_lines }}"
- register: result
+ register: acme_result_generation
failed_when:
- - result.rc != 0
- - "'certificate valid' not in result.stderr"
+ - acme_result_generation.rc != 0
+ - "'certificate valid' not in acme_result_generation.stderr"
- name: display registered certificates
- debug:
- var: result
+ ansible.builtin.debug:
+ msg: "{{ acme_result_generation.results | map(attribute='stderr') }}"
- name: enable automatic acme certificates update
- cron:
+ ansible.builtin.cron:
name: "automatic acme certificates update for subdomain : {{ item }}"
minute: 0
hour: 6,18
diff --git a/roles/acme/templates/acme-client.conf.j2 b/roles/acme/templates/acme-client.conf.j2
index 3792009..583c3d5 100644
--- a/roles/acme/templates/acme-client.conf.j2
+++ b/roles/acme/templates/acme-client.conf.j2
@@ -14,9 +14,9 @@ domain {{ acme_domain_name }} {
}
{% call(h) macros.loop_valid_hosts("servers") -%}
-{% for service in h.__services if service.domain is defined %}
-domain {{ service.domain }}.{{ acme_domain_name }} {
- {% set domain = service.domain ~ "." ~ acme_domain_name %}
+{% for name, rules in h.acme_rules.items() if rules.domain is defined %}
+domain {{ rules.domain }}.{{ acme_domain_name }} {
+ {% set domain = rules.domain ~ "." ~ acme_domain_name %}
alternative names { www.{{ domain }} }
domain key "/etc/ssl/private/{{ domain }}.key"
domain full chain certificate "/etc/ssl/{{ domain }}.crt"
diff --git a/roles/cgit/defaults/main.yml b/roles/cgit/defaults/main.yml
index 47d312a..cf70c5b 100644
--- a/roles/cgit/defaults/main.yml
+++ b/roles/cgit/defaults/main.yml
@@ -1,3 +1,5 @@
+---
+
cgit_instance: cgit
cgit_git_dir: /data/git
cgit_chroot_dir: /var/www
diff --git a/roles/cgit/meta/main.yml b/roles/cgit/meta/main.yml
index a25f289..bd45503 100644
--- a/roles/cgit/meta/main.yml
+++ b/roles/cgit/meta/main.yml
@@ -1,3 +1,5 @@
+---
+
dependencies:
- role: git
tags: dependency
diff --git a/roles/cgit/tasks/dependencies.yml b/roles/cgit/tasks/dependencies.yml
index c0439e8..a0d4d65 100644
--- a/roles/cgit/tasks/dependencies.yml
+++ b/roles/cgit/tasks/dependencies.yml
@@ -1,20 +1,22 @@
+---
+
- name: retrieve dependencies for lowdown # noqa: no-changed-when
- shell: |
+ ansible.builtin.shell: |
set -o pipefail
ldd /usr/local/bin/lowdown | tr -s " " | grep "0 1 0" | cut -d " " -f 7
register: result
- name: create dependencies directories in chroot
- file:
+ ansible.builtin.file:
path: "{{ cgit_chroot_dir }}{{ item | dirname }}"
owner: 0
group: 0
- mode: 0755
+ mode: "0755"
state: directory
loop: "{{ result.stdout_lines }}"
- name: copy dependencies for lowdown
- copy:
+ ansible.builtin.copy:
src: "{{ item }}"
dest: "{{ cgit_chroot_dir }}/{{ item }}"
mode: preserve
@@ -22,7 +24,7 @@
loop: "{{ result.stdout_lines }}"
- name: copy utilities in httpd chroot
- copy:
+ ansible.builtin.copy:
src: "{{ item }}"
dest: "{{ cgit_chroot_dir }}/bin"
mode: preserve
diff --git a/roles/cgit/tasks/main.yml b/roles/cgit/tasks/main.yml
index 4559708..64452f8 100644
--- a/roles/cgit/tasks/main.yml
+++ b/roles/cgit/tasks/main.yml
@@ -1,25 +1,27 @@
+---
+
- name: install cgit packages
- package:
+ ansible.builtin.package:
name:
- cgit
- lowdown
state: present
- name: create cgit cache directory
- file:
+ ansible.builtin.file:
path: "{{ cgit_chroot_dir }}/cache/cgit"
owner: www
group: www
- mode: 0750
+ mode: "0750"
state: directory
- name: generate cgit configuration files
- template:
+ ansible.builtin.template:
src: "{{ item.template }}"
dest: "{{ item.file }}"
owner: 0
group: 0
- mode: 0644
+ mode: "0644"
loop:
- template: cgitrc.j2
file: "{{ cgit_chroot_dir }}/conf/cgitrc"
@@ -29,24 +31,24 @@
file: /etc/httpd.d/cgit.conf
- name: include dependencies for lowdown
- include_tasks: dependencies.yml
+ ansible.builtin.include_tasks: dependencies.yml
- name: copy about-filter generator
- copy:
+ ansible.builtin.copy:
src: about-filter.sh
dest: "{{ cgit_chroot_dir }}/bin/about-filter.sh"
owner: 0
group: 0
- mode: 0755
+ mode: "0755"
- name: start and enable slowcgi service
- service:
+ ansible.builtin.service:
name: slowcgi
state: restarted
enabled: true
- name: httpd password information
- debug:
+ ansible.builtin.debug:
msg: |
Please provide a password using htpasswd,
in "{{ cgit_chroot_dir }}/htpasswd/cgit"
diff --git a/roles/git/defaults/main.yml b/roles/git/defaults/main.yml
index f99dec3..436c46b 100644
--- a/roles/git/defaults/main.yml
+++ b/roles/git/defaults/main.yml
@@ -1,3 +1,5 @@
+---
+
git_user: git
git_group: git
git_dir: /data/git
diff --git a/roles/git/tasks/main.yml b/roles/git/tasks/main.yml
index 851287e..1f9d3d1 100644
--- a/roles/git/tasks/main.yml
+++ b/roles/git/tasks/main.yml
@@ -1,15 +1,17 @@
+---
+
- name: install git package
- package:
+ ansible.builtin.package:
name: git
state: present
- name: create git group
- group:
+ ansible.builtin.group:
name: "{{ git_group }}"
state: present
- name: create git user
- user:
+ ansible.builtin.user:
name: "{{ git_user }}"
group: "{{ git_group }}"
shell: "{{ git_shell }}"
@@ -17,18 +19,18 @@
create_home: false
- name: create git directories
- file:
+ ansible.builtin.file:
path: "{{ item }}"
owner: "{{ git_user }}"
group: "{{ git_group }}"
state: directory
- mode: 0755
+ mode: "0755"
loop:
- "{{ git_dir }}"
- "{{ git_dir }}/git-shell-commands"
- name: generate git-shell no-login prompt
- template:
+ ansible.builtin.template:
src: no-interactive-login.j2
dest: "{{ git_dir }}/git-shell-commands/no-interactive-login"
owner: "{{ git_user }}"
@@ -37,14 +39,13 @@
when: not git_allow_ssh_login
- name: generate gitconfig
- template:
+ ansible.builtin.template:
src: gitconfig.j2
dest: "{{ git_dir }}/.gitconfig"
owner: "{{ git_user }}"
group: "{{ git_group }}"
- mode: 0644
+ mode: "0644"
- name: include ssh key synchronization
- include_role:
- name: sshd
- tasks_from: synchronize_keys.yml
+ ansible.builtin.include_role:
+ name: sshd_keys
diff --git a/roles/grafana/defaults/main.yml b/roles/grafana/defaults/main.yml
index 32309e9..425c0d9 100644
--- a/roles/grafana/defaults/main.yml
+++ b/roles/grafana/defaults/main.yml
@@ -1,3 +1,5 @@
+---
+
grafana_dir: /data/grafana
grafana_port: 3001
grafana_port_out: 3000
diff --git a/roles/grafana/tasks/main.yml b/roles/grafana/tasks/main.yml
index 7c1a19c..1044119 100644
--- a/roles/grafana/tasks/main.yml
+++ b/roles/grafana/tasks/main.yml
@@ -1,14 +1,16 @@
+---
+
- name: install grafana
- package:
+ ansible.builtin.package:
name: grafana
state: present
- name: create grafana directory
- file:
+ ansible.builtin.file:
path: "{{ grafana_dir }}/{{ item }}"
owner: "{{ grafana_user }}"
group: "{{ grafana_group }}"
- mode: 0640
+ mode: "0640"
state: directory
loop:
- ""
@@ -17,23 +19,23 @@
- plugins
- name: generate grafana configuration
- template:
+ ansible.builtin.template:
src: grafana.ini.j2
dest: "{{ grafana_configuration_file }}"
owner: 0
group: 0
- mode: 0644
+ mode: "0644"
- name: generate grafana data sources
- template:
+ ansible.builtin.template:
src: datasources-default.yml.j2
dest: /etc/grafana/provisioning/datasources/default.yml
owner: "{{ grafana_user }}"
group: "{{ grafana_group }}"
- mode: 0640
+ mode: "0640"
- name: start and enable grafana service
- service:
+ ansible.builtin.service:
name: grafana
state: restarted
enabled: true
diff --git a/roles/httpd/defaults/main.yml b/roles/httpd/defaults/main.yml
index ce189c2..3b0acd0 100644
--- a/roles/httpd/defaults/main.yml
+++ b/roles/httpd/defaults/main.yml
@@ -1,3 +1,5 @@
+---
+
httpd_configuration_file: /etc/httpd.conf
httpd_configuration_dir: /etc/httpd.d
httpd_chroot: /var/www
diff --git a/roles/httpd/meta/main.yml b/roles/httpd/meta/main.yml
index 20728a9..161e3b8 100644
--- a/roles/httpd/meta/main.yml
+++ b/roles/httpd/meta/main.yml
@@ -1,3 +1,5 @@
+---
+
dependencies:
- role: httpd_pre
tags: dependency
diff --git a/roles/httpd/tasks/main.yml b/roles/httpd/tasks/main.yml
index a272afa..f946044 100644
--- a/roles/httpd/tasks/main.yml
+++ b/roles/httpd/tasks/main.yml
@@ -1,19 +1,21 @@
+---
+
- name: retrieve all configuration files
- find:
+ ansible.builtin.find:
path: "{{ httpd_configuration_dir }}"
patterns: "*.conf"
register: configuration_files
- name: generate httpd configuration
- template:
+ ansible.builtin.template:
src: httpd.conf.j2
dest: "{{ httpd_configuration_file }}"
owner: 0
group: 0
- mode: 0644
+ mode: "0644"
- name: enable and restart httpd
- service:
+ ansible.builtin.service:
name: httpd
state: restarted
enabled: true
diff --git a/roles/httpd_pre/defaults/main.yml b/roles/httpd_pre/defaults/main.yml
index 52d65d9..3b0acd0 120000..100644
--- a/roles/httpd_pre/defaults/main.yml
+++ b/roles/httpd_pre/defaults/main.yml
@@ -1 +1,8 @@
-../../httpd/defaults/main.yml \ No newline at end of file
+---
+
+httpd_configuration_file: /etc/httpd.conf
+httpd_configuration_dir: /etc/httpd.d
+httpd_chroot: /var/www
+
+httpd_user: www
+httpd_group: www
diff --git a/roles/httpd_pre/tasks/main.yml b/roles/httpd_pre/tasks/main.yml
index 0209a84..acc6673 100644
--- a/roles/httpd_pre/tasks/main.yml
+++ b/roles/httpd_pre/tasks/main.yml
@@ -1,21 +1,23 @@
+---
+
- name: create httpd directory
- file:
+ ansible.builtin.file:
path: /etc/httpd.d
state: directory
owner: 0
group: 0
- mode: 0644
+ mode: "0644"
- name: create htpasswd directory
- file:
+ ansible.builtin.file:
path: /var/www/htpasswd
state: directory
owner: "www"
group: "www"
- mode: 0700
+ mode: "0700"
- name: mount nfs in chroot
- include_role:
+ ansible.builtin.include_role:
name: nfsclient
vars:
nfsclient_dir: "{{ httpd_chroot }}/data"
diff --git a/roles/httpd_site_healthcheck/defaults/main.yml b/roles/httpd_site_healthcheck/defaults/main.yml
index 52d65d9..3b0acd0 120000..100644
--- a/roles/httpd_site_healthcheck/defaults/main.yml
+++ b/roles/httpd_site_healthcheck/defaults/main.yml
@@ -1 +1,8 @@
-../../httpd/defaults/main.yml \ No newline at end of file
+---
+
+httpd_configuration_file: /etc/httpd.conf
+httpd_configuration_dir: /etc/httpd.d
+httpd_chroot: /var/www
+
+httpd_user: www
+httpd_group: www
diff --git a/roles/httpd_site_healthcheck/meta/main.yml b/roles/httpd_site_healthcheck/meta/main.yml
index 6b163d1..dd93239 100644
--- a/roles/httpd_site_healthcheck/meta/main.yml
+++ b/roles/httpd_site_healthcheck/meta/main.yml
@@ -1,3 +1,5 @@
+---
+
dependencies:
- role: httpd_pre
tags: dependency
diff --git a/roles/httpd_site_healthcheck/tasks/main.yml b/roles/httpd_site_healthcheck/tasks/main.yml
index 10cd3c8..7cb2edb 100644
--- a/roles/httpd_site_healthcheck/tasks/main.yml
+++ b/roles/httpd_site_healthcheck/tasks/main.yml
@@ -1,23 +1,25 @@
+---
+
- name: create httpd healthcheck directory
- file:
+ ansible.builtin.file:
path: "{{ httpd_chroot }}/htdocs/healthcheck"
owner: "{{ httpd_user }}"
group: "{{ httpd_group }}"
- mode: 0550
+ mode: "0550"
state: directory
- name: generate generate httpd healthcheck html index
- template:
+ ansible.builtin.template:
src: index.html.j2
dest: "{{ httpd_chroot }}/htdocs/healthcheck/index.html"
owner: "{{ httpd_user }}"
group: "{{ httpd_group }}"
- mode: 0440
+ mode: "0440"
- name: generate httpd healthcheck configuration
- template:
+ ansible.builtin.template:
src: httpd.conf.j2
dest: "{{ httpd_configuration_dir }}/healthcheck.conf"
owner: 0
group: 0
- mode: 0644
+ mode: "0644"
diff --git a/roles/loki/defaults/main.yml b/roles/loki/defaults/main.yml
index 6808f54..21d7a77 100644
--- a/roles/loki/defaults/main.yml
+++ b/roles/loki/defaults/main.yml
@@ -1,3 +1,5 @@
+---
+
loki_configuration_file: /etc/loki/loki-config.yaml
loki_promtail_configuration_file: /etc/promtail/promtail-config.yaml
loki_user: _loki
diff --git a/roles/loki/tasks/main.yml b/roles/loki/tasks/main.yml
index 4584da1..f2659d2 100644
--- a/roles/loki/tasks/main.yml
+++ b/roles/loki/tasks/main.yml
@@ -1,24 +1,26 @@
+---
+
- name: install loki
- package:
+ ansible.builtin.package:
name: loki
state: present
- name: generate loki configuration
- template: &config_gen
+ ansible.builtin.template: &config_gen
src: loki.yml.j2
dest: "{{ loki_configuration_file }}"
owner: 0
group: 0
- mode: 0644
+ mode: "0644"
- name: generate promtail configuration
- template:
+ ansible.builtin.template:
<<: *config_gen
src: promtail.yml.j2
dest: "{{ loki_promtail_configuration_file }}"
- name: add loki user to wheel group
- user:
+ ansible.builtin.user:
name: "{{ loki_user }}"
groups:
- 0
@@ -26,7 +28,7 @@
append: true
- name: enable and restart loki daemons
- service:
+ ansible.builtin.service:
name: "{{ item }}"
state: restarted
enabled: true
diff --git a/roles/miniflux/defaults/main.yml b/roles/miniflux/defaults/main.yml
index 2fd6108..7c92963 100644
--- a/roles/miniflux/defaults/main.yml
+++ b/roles/miniflux/defaults/main.yml
@@ -1,3 +1,5 @@
+---
+
miniflux_user: _miniflux
miniflux_group: _miniflux
miniflux_db_user: miniflux
diff --git a/roles/miniflux/meta/main.yml b/roles/miniflux/meta/main.yml
index 3ffef7b..1fc1aee 100644
--- a/roles/miniflux/meta/main.yml
+++ b/roles/miniflux/meta/main.yml
@@ -1,3 +1,5 @@
+---
+
dependencies:
- role: postgres
tags: dependency
diff --git a/roles/miniflux/tasks/main.yml b/roles/miniflux/tasks/main.yml
index 3964835..2e8003c 100644
--- a/roles/miniflux/tasks/main.yml
+++ b/roles/miniflux/tasks/main.yml
@@ -1,47 +1,49 @@
+---
+
- name: install miniflux
- package:
+ ansible.builtin.package:
name: miniflux
state: present
- name: include postgres user
- include_role:
+ ansible.builtin.include_role:
name: postgres
tasks_from: create_user
vars:
postgres_db_user: "{{ miniflux_db_user }}"
- name: include postgres db
- include_role:
+ ansible.builtin.include_role:
name: postgres
tasks_from: create_db
vars:
postgres_db_user: "{{ miniflux_db_user }}"
- postgres_db_name: "{{ miniflux_db_name}}{{ item }}"
+ postgres_db_name: "{{ miniflux_db_name }}{{ item }}"
loop:
- ""
- 2
-- name: enable hstore extension for postgres
- command: psql -U postgres miniflux -c "create extension hstore"
+- name: enable hstore extension for postgres # noqa: no-changed-when
+ ansible.builtin.command: >
+ psql -U postgres miniflux -c "create extension hstore"
register: result
failed_when: result.rc != 0 and "already exists" not in result.stderr
- name: generate configuration
- template:
+ ansible.builtin.template:
src: miniflux.conf.j2
dest: /etc/miniflux.conf
owner: "{{ miniflux_user }}"
- owner: "{{ miniflux_group }}"
- mode: 0640
+ mode: "0640"
-- name: run postgres migrations
- shell: |
+- name: run postgres migrations # noqa: no-changed-when
+ ansible.builtin.shell: |
psql -U postgres -c "ALTER USER miniflux WITH SUPERUSER"
miniflux -c /etc/miniflux.conf -migrate
psql -U postgres -c "ALTER USER miniflux WITH NOSUPERUSER"
- name: restart and enable miniflux
- service:
+ ansible.builtin.service:
name: miniflux
state: restarted
enabled: true
diff --git a/roles/nfsclient/defaults/main.yml b/roles/nfsclient/defaults/main.yml
index d0ca08e..0fa26b2 100644
--- a/roles/nfsclient/defaults/main.yml
+++ b/roles/nfsclient/defaults/main.yml
@@ -1,3 +1,5 @@
+---
+
nfsclient_dir: /data
nfsclient_fstab_path: /etc/fstab
nfsclient_server_dir: /data/nfs
diff --git a/roles/nfsclient/handlers/main.yml b/roles/nfsclient/handlers/main.yml
index e6bc07e..3593da0 100644
--- a/roles/nfsclient/handlers/main.yml
+++ b/roles/nfsclient/handlers/main.yml
@@ -1,3 +1,5 @@
+---
+
- name: reload fstab # noqa: command-instead-of-module ignore-errors
- command: mount -a
+ ansible.builtin.command: mount -a
ignore_errors: true
diff --git a/roles/nfsclient/tasks/main.yml b/roles/nfsclient/tasks/main.yml
index 0c1f75e..beb4a4d 100644
--- a/roles/nfsclient/tasks/main.yml
+++ b/roles/nfsclient/tasks/main.yml
@@ -1,29 +1,32 @@
+---
+
- name: translate server string to server dict
- set_fact:
+ ansible.builtin.set_fact:
nfsclient_server_ip: "{{ hostvars[nfsclient_server].__ip.external }}"
when: not nfsclient_server_ip
-- name: include distribution specific prerequisites
- include_tasks: "os_{{ ansible_distribution | lower }}.yml"
+- name: include distribution specific prerequisites # noqa: ignore-errors
+ ansible.builtin.include_tasks: "os_{{ ansible_distribution | lower }}.yml"
ignore_errors: true
- name: create directory on client
- file:
+ ansible.builtin.file:
path: "{{ nfsclient_dir }}"
owner: 0
group: 0
- mode: 0755
+ mode: "0755"
state: directory
- name: cleanup fstab with previous nfs setup
- lineinfile:
+ ansible.builtin.lineinfile:
path: "{{ nfsclient_fstab_path }}"
regexp: ^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}:/.* {{ nfsclient_dir }} nfs
state: absent
register: result
- name: complete fstab with nfs
- lineinfile:
+ ansible.builtin.lineinfile:
path: "{{ nfsclient_fstab_path }}"
line: "{{ nfsclient_server_ip }}:{{ nfsclient_server_dir }}/{{ inventory_hostname }} {{ nfsclient_dir }} nfs rw,nodev,nosuid 0 0"
- notify: reload fstab
+ notify:
+ - reload fstab
diff --git a/roles/nfsclient/tasks/os_alpine.yml b/roles/nfsclient/tasks/os_alpine.yml
index 62d8f70..1199dc8 100644
--- a/roles/nfsclient/tasks/os_alpine.yml
+++ b/roles/nfsclient/tasks/os_alpine.yml
@@ -1,10 +1,12 @@
+---
+
- name: install nfs-utils
- package:
+ ansible.builtin.package:
name: nfs-utils
state: present
- name: restart and enable nfsmount
- service:
+ ansible.builtin.service:
name: nfsmount
state: restarted
enabled: true
diff --git a/roles/nfsd/defaults/main.yml b/roles/nfsd/defaults/main.yml
index b214a7c..60fafc9 100644
--- a/roles/nfsd/defaults/main.yml
+++ b/roles/nfsd/defaults/main.yml
@@ -1,3 +1,5 @@
+---
+
nfsd_dir: /data/nfs
nfsd_shared_dirs: "{{ vmm_vms | map(attribute='name') | list }}"
nfsd_configuration_file: /etc/exports
diff --git a/roles/nfsd/tasks/main.yml b/roles/nfsd/tasks/main.yml
index a8cabcf..9d71a10 100644
--- a/roles/nfsd/tasks/main.yml
+++ b/roles/nfsd/tasks/main.yml
@@ -1,43 +1,45 @@
+---
+
- name: create nfsd data directory
- file:
+ ansible.builtin.file:
path: "{{ nfsd_dir }}"
owner: 0
group: 0
- mode: 0700
+ mode: "0700"
state: directory
- name: create hosts directories
- file:
+ ansible.builtin.file:
path: "{{ nfsd_dir }}/{{ item }}"
owner: 0
group: 0
- mode: 0777
+ mode: "0777"
state: directory
loop: "{{ nfsd_shared_dirs }}"
- name: generate nfsd configuration
- template:
+ ansible.builtin.template:
src: exports.j2
dest: /etc/exports
owner: 0
group: 0
- mode: 0640
+ mode: "0640"
register: result
- name: enable and restart portmap
- service: &enable_and_restart
+ ansible.builtin.service: &enable_and_restart
name: portmap
state: restarted
enabled: true
- name: enable and reload/restart mountd
- service:
+ ansible.builtin.service:
<<: *enable_and_restart
name: mountd
state: reloaded
- name: enable and restart nfsd
- service:
+ ansible.builtin.service:
<<: *enable_and_restart
name: nfsd
state: restarted
diff --git a/roles/nfsd/tasks/os_freebsd.yml b/roles/nfsd/tasks/os_freebsd.yml
index 2a8a8cd..1bb7fa3 100644
--- a/roles/nfsd/tasks/os_freebsd.yml
+++ b/roles/nfsd/tasks/os_freebsd.yml
@@ -1,5 +1,7 @@
+---
+
- name: edit daemons flags
- lineinfile:
+ ansible.builtin.lineinfile:
path: /etc/rc.conf
regexp: "^{{ item[0] }}="
line: "{{ item[0] }}=\"{{ item[1] }}\""
@@ -9,7 +11,7 @@
- ["mountd_flags", "-r"]
- name: enable and restart rpcbind
- service:
+ ansible.builtin.service:
name: rpcbind
state: restarted
enabled: true
diff --git a/roles/pf/defaults/main.yml b/roles/pf/defaults/main.yml
index 777717d..29a53f8 100644
--- a/roles/pf/defaults/main.yml
+++ b/roles/pf/defaults/main.yml
@@ -1 +1,13 @@
+---
+
+pf_rules: null
+# name: ...
+# protocol: ...
+# port: ...
+# name: ...
+# protocol: ...
+# port: ...
+
pf_configuration_file: /etc/pf.conf
+pf_test_ports:
+ - "{{ ansible_port }}"
diff --git a/roles/pf/handlers/main.yml b/roles/pf/handlers/main.yml
index 5d75a1a..2d518eb 100644
--- a/roles/pf/handlers/main.yml
+++ b/roles/pf/handlers/main.yml
@@ -1,12 +1,14 @@
+---
+
- name: lint pf configuration
- command: "pfctl -nf {{ pf_configuration_file }}"
+ ansible.builtin.command: "pfctl -nf {{ pf_configuration_file }}"
- name: enable pf
- command: pfctl -e
- register: result
+ ansible.builtin.command: pfctl -e
+ register: pf_result_enable
failed_when:
- - result.rc != 0
- - "'already enabled' not in result.stderr"
+ - pf_result_enable.result.rc != 0
+ - "'already enabled' not in pf_result_enabled.result.stderr"
- name: restart pf
- command: pfctl -f "{{ pf_configuration_file }}"
+ ansible.builtin.command: pfctl -f "{{ pf_configuration_file }}"
diff --git a/roles/pf/tasks/main.yml b/roles/pf/tasks/main.yml
index e5b8af8..8e81e1c 100644
--- a/roles/pf/tasks/main.yml
+++ b/roles/pf/tasks/main.yml
@@ -1,17 +1,20 @@
+---
+
- name: generate pf configuration
- template:
+ ansible.builtin.template:
src: pf.conf.j2
dest: "{{ pf_configuration_file }}"
owner: 0
group: 0
- mode: 0600
+ mode: "0600"
notify:
- lint pf configuration
- enable pf
- restart pf
-- name: test ssh connection on new pf rule
- wait_for:
- port: "{{ ansible_port }}"
+- name: test pf rules
+ ansible.builtin.wait_for:
+ port: "{{ item }}"
delay: 2
state: started
+ loop: "{{ pf_test_ports }}"
diff --git a/roles/pf/templates/pf.conf.j2 b/roles/pf/templates/pf.conf.j2
index 1b51fe7..e60b4a6 100644
--- a/roles/pf/templates/pf.conf.j2
+++ b/roles/pf/templates/pf.conf.j2
@@ -11,8 +11,9 @@ block all
pass in quick on egress proto tcp to port {{ ansible_port }}
# host services
-{% for service in __services %}
-pass in quick on egress proto {{ service["protocol"] }} to port {{ service["port"] }}
+{% for name, rules in pf_rules.items() %}
+# {{ name }}
+pass in quick on egress proto {{ rules.protocol }} to port {{ rules.port }}
{% endfor %}
# wireguard
diff --git a/roles/postgres/defaults/main.yml b/roles/postgres/defaults/main.yml
index 963e594..856ac50 100644
--- a/roles/postgres/defaults/main.yml
+++ b/roles/postgres/defaults/main.yml
@@ -1,3 +1,5 @@
+---
+
postgres_dir: /data/postgresql
postgres_default_dir: /var/postgresql
postgres_user: _postgresql
diff --git a/roles/postgres/tasks/create_db.yml b/roles/postgres/tasks/create_db.yml
index 7a4fe6e..d2f3676 100644
--- a/roles/postgres/tasks/create_db.yml
+++ b/roles/postgres/tasks/create_db.yml
@@ -1,4 +1,6 @@
+---
+
- name: create database # noqa: no-changed-when
- command: createdb -U postgres -O "{{ postgres_db_user }}" "{{ postgres_db_name }}"
+ ansible.builtin.command: createdb -U postgres -O "{{ postgres_db_user }}" "{{ postgres_db_name }}"
register: result
failed_when: result.rc != 0 and "already exists" not in result.stderr
diff --git a/roles/postgres/tasks/create_user.yml b/roles/postgres/tasks/create_user.yml
index 4716939..793676e 100644
--- a/roles/postgres/tasks/create_user.yml
+++ b/roles/postgres/tasks/create_user.yml
@@ -1,4 +1,6 @@
+---
+
- name: create database user # noqa: no-changed-when
- command: createuser -U postgres "{{ postgres_db_user }}"
+ ansible.builtin.command: createuser -U postgres "{{ postgres_db_user }}"
register: result
failed_when: result.rc != 0 and "already exists" not in result.stderr
diff --git a/roles/postgres/tasks/main.yml b/roles/postgres/tasks/main.yml
index a203574..f3d24da 100644
--- a/roles/postgres/tasks/main.yml
+++ b/roles/postgres/tasks/main.yml
@@ -1,40 +1,42 @@
+---
+
- name: install postgres
- package:
+ ansible.builtin.package:
name:
- postgresql-server
- postgresql-contrib
state: present
- name: create postgres directories
- file:
+ ansible.builtin.file:
path: "{{ postgres_dir }}/{{ item }}"
owner: "{{ postgres_user }}"
group: "{{ postgres_group }}"
- mode: 0750
+ mode: "0750"
state: directory
loop:
- ""
- "data"
- name: delete default data dir if exists
- file:
+ ansible.builtin.file:
path: "{{ postgres_default_dir }}"
state: absent
when: postgres_dir != "/var/postgresql"
- name: link postgres directory to default one
- file:
+ ansible.builtin.file:
src: "{{ postgres_dir }}"
dest: "{{ postgres_default_dir }}"
owner: "{{ postgres_user }}"
group: "{{ postgres_group }}"
state: link
- mode: 0750
+ mode: "0750"
follow: false
when: postgres_dir != "/var/postgresql"
- name: init postgres database # noqa: no-changed-when
- shell:
+ ansible.builtin.shell:
cmd: |
su "{{ postgres_user }}" \
-c 'initdb -D "{{ postgres_dir }}/data/" -U "{{ postgres_db_user }}" --encoding=UTF-8 --locale=en_US.UTF-8'
@@ -45,7 +47,7 @@
- "'exists but is not empty' not in result.stderr"
- name: enable and restart postgres service
- service:
+ ansible.builtin.service:
name: postgresql
state: restarted
enabled: true
diff --git a/roles/prometheus/defaults/main.yml b/roles/prometheus/defaults/main.yml
index fa8c55f..74252b8 100644
--- a/roles/prometheus/defaults/main.yml
+++ b/roles/prometheus/defaults/main.yml
@@ -1 +1,3 @@
+---
+
prometheus_configuration_file: /etc/prometheus/prometheus.yml
diff --git a/roles/prometheus/tasks/main.yml b/roles/prometheus/tasks/main.yml
index 5d5c1f3..27e4fda 100644
--- a/roles/prometheus/tasks/main.yml
+++ b/roles/prometheus/tasks/main.yml
@@ -1,20 +1,22 @@
+---
+
- name: install prometheus
- package:
+ ansible.builtin.package:
name:
- prometheus
- node_exporter
state: present
- name: generate prometheus configuration
- template:
+ ansible.builtin.template:
src: prometheus.conf.j2
dest: "{{ prometheus_configuration_file }}"
owner: 0
group: 0
- mode: 0644
+ mode: "0644"
- name: enable and restart prometheus services
- service:
+ ansible.builtin.service:
name: "{{ item }}"
state: restarted
enabled: true
diff --git a/roles/rc/defaults/main.yml b/roles/rc/defaults/main.yml
index f189142..5692a78 100644
--- a/roles/rc/defaults/main.yml
+++ b/roles/rc/defaults/main.yml
@@ -1,3 +1,5 @@
+---
+
rc_dir: null
rc_name: null
diff --git a/roles/rc/defaults/os_alpine.yml b/roles/rc/defaults/os_alpine.yml
index 5b87a57..8ae11ed 100644
--- a/roles/rc/defaults/os_alpine.yml
+++ b/roles/rc/defaults/os_alpine.yml
@@ -1 +1,3 @@
+---
+
rc_dir: /etc/init.d
diff --git a/roles/rc/defaults/os_openbsd.yml b/roles/rc/defaults/os_openbsd.yml
index 345a648..257bd1c 100644
--- a/roles/rc/defaults/os_openbsd.yml
+++ b/roles/rc/defaults/os_openbsd.yml
@@ -1 +1,3 @@
+---
+
rc_dir: /etc/rc.d
diff --git a/roles/rc/tasks/main.yml b/roles/rc/tasks/main.yml
index c691aae..642ded7 100644
--- a/roles/rc/tasks/main.yml
+++ b/roles/rc/tasks/main.yml
@@ -1,16 +1,18 @@
+---
+
- name: check required variables
- fail:
+ ansible.builtin.fail:
when: >
rc_name is none or
rc_user is none
- name: include rc task per-system
- include_vars: "os_{{ ansible_distribution | lower }}.yml"
+ ansible.builtin.include_vars: "os_{{ ansible_distribution | lower }}.yml"
- name: generate rc script for desired service
- template:
+ ansible.builtin.template:
src: "os_{{ ansible_distribution | lower }}.j2"
dest: "{{ rc_dir }}/{{ rc_name }}"
owner: 0
group: 0
- mode: 0755
+ mode: "0755"
diff --git a/roles/rc/vars/os_alpine.yml b/roles/rc/vars/os_alpine.yml
index 5b87a57..8ae11ed 100644
--- a/roles/rc/vars/os_alpine.yml
+++ b/roles/rc/vars/os_alpine.yml
@@ -1 +1,3 @@
+---
+
rc_dir: /etc/init.d
diff --git a/roles/rc/vars/os_openbsd.yml b/roles/rc/vars/os_openbsd.yml
index 345a648..257bd1c 100644
--- a/roles/rc/vars/os_openbsd.yml
+++ b/roles/rc/vars/os_openbsd.yml
@@ -1 +1,3 @@
+---
+
rc_dir: /etc/rc.d
diff --git a/roles/relayd/defaults/main.yml b/roles/relayd/defaults/main.yml
index 174a889..66eef3b 100644
--- a/roles/relayd/defaults/main.yml
+++ b/roles/relayd/defaults/main.yml
@@ -1,3 +1,7 @@
+---
+
+relayd_rules: {}
+
relayd_configuration_file: /etc/relayd.conf
relayd_domain_name: example.com
relayd_transparent: true
diff --git a/roles/relayd/handlers/main.yml b/roles/relayd/handlers/main.yml
index 82be0a8..58e1171 100644
--- a/roles/relayd/handlers/main.yml
+++ b/roles/relayd/handlers/main.yml
@@ -1,2 +1,4 @@
+---
+
- name: lint relayd configuration
- command: "relayd -nf {{ relayd_configuration_file }}"
+ ansible.builtin.command: "relayd -nf {{ relayd_configuration_file }}"
diff --git a/roles/relayd/tasks/main.yml b/roles/relayd/tasks/main.yml
index 3af5756..e8e18a3 100644
--- a/roles/relayd/tasks/main.yml
+++ b/roles/relayd/tasks/main.yml
@@ -1,14 +1,17 @@
+---
+
- name: generate relayd configuration
- template:
+ ansible.builtin.template:
src: relayd.conf.j2
dest: "{{ relayd_configuration_file }}"
owner: 0
group: 0
- mode: 0640
- notify: lint relayd configuration
+ mode: "0640"
+ notify:
+ - lint relayd configuration
- name: enable and restart relayd
- service:
+ ansible.builtin.service:
name: relayd
state: restarted
enabled: true
diff --git a/roles/relayd/templates/relayd.conf.j2 b/roles/relayd/templates/relayd.conf.j2
index c97e9da..b66ffa7 100644
--- a/roles/relayd/templates/relayd.conf.j2
+++ b/roles/relayd/templates/relayd.conf.j2
@@ -8,8 +8,8 @@ log connection errors
table <local> { 127.0.0.1 }
{% call(h) macros.loop_valid_hosts("servers") -%}
table <{{ h.inventory_hostname }}> { {{ h.__ip.internal }} }
-{% for service in h.__services if service.domain is defined %}
-table <{{ h.inventory_hostname }}_{{ service.domain }}> { {{ h.__ip.internal }} }
+{% for name, rules in h.relayd_rules.items() if rules.domain is defined %}
+table <{{ h.inventory_hostname }}_{{ rules.domain }}> { {{ h.__ip.internal }} }
{% endfor %}
{%- endcall %}
@@ -34,10 +34,10 @@ http protocol "https" {
tls keypair "{{ relayd_domain_name }}"
pass request quick header "Host" value "{{ relayd_domain_name }}" forward to <local>
{% call(h) macros.loop_valid_hosts("servers") -%}
-{% for service in h.__services if service.domain is defined %}
- {% set domain_name = service.domain ~ "." ~ relayd_domain_name -%}
+{% for name, rules in h.relayd_rules.items() if rules.domain is defined %}
+ {% set domain_name = rules.domain ~ "." ~ relayd_domain_name -%}
tls keypair "{{ domain_name }}"
- pass request quick header "Host" value "{{ domain_name }}" forward to <{{ h.inventory_hostname }}_{{ service.domain }}>
+ pass request quick header "Host" value "{{ domain_name }}" forward to <{{ h.inventory_hostname }}_{{ rules.domain }}>
{% endfor %}
{%- endcall %}
@@ -52,9 +52,9 @@ http protocol "http" {
pass request quick header "Host" value "{{ relayd_domain_name }}" forward to <local>
{% call(h) macros.loop_valid_hosts("servers") -%}
-{% for service in h.__services if service.domain is defined %}
- {% set domain_name = service.domain ~ "." ~ relayd_domain_name -%}
- pass request quick header "Host" value "{{ domain_name }}" forward to <{{ h.inventory_hostname }}_{{ service.domain }}>
+{% for name, rules in h.relayd_rules.items() if rules.domain is defined %}
+ {% set domain_name = rules.domain ~ "." ~ relayd_domain_name -%}
+ pass request quick header "Host" value "{{ domain_name }}" forward to <{{ h.inventory_hostname }}_{{ rules.domain }}>
{% endfor %}
{%- endcall %}
@@ -75,8 +75,8 @@ relay "wwwtls" {
protocol "https"
forward to <local> port 80 check http "/" code 200
{% call(h) macros.loop_valid_hosts("servers") -%}
-{% for service in h.__services if service.domain is defined %}
- forward to <{{ h.inventory_hostname }}_{{ service.domain }}> port {{ service.port }} check tcp
+{% for name, rules in h.relayd_rules.items() if rules.domain is defined %}
+ forward to <{{ h.inventory_hostname }}_{{ rules.domain }}> port {{ rules.port }} check tcp
{% endfor %}
{%- endcall %}
}
diff --git a/roles/sshd/defaults/main.yml b/roles/sshd/defaults/main.yml
new file mode 100644
index 0000000..87933b9
--- /dev/null
+++ b/roles/sshd/defaults/main.yml
@@ -0,0 +1,5 @@
+---
+
+sshd_configuration_file: /etc/ssh/sshd_config
+sshd_listen_port: 22
+sshd_enable_x11_forwarding: false
diff --git a/roles/sshd/tasks/main.yml b/roles/sshd/tasks/main.yml
index f1af386..b895958 100644
--- a/roles/sshd/tasks/main.yml
+++ b/roles/sshd/tasks/main.yml
@@ -1,22 +1,27 @@
+---
+
+- name: install openssh
+ ansible.builtin.package:
+ name: openssh
+ state: present
+ when: ansible_distribution in ["Archlinux"]
+
- name: generate sshd configuration
- template:
+ ansible.builtin.template:
src: sshd_config.j2
dest: /etc/ssh/sshd_config
owner: 0
group: 0
- mode: 0644
-
-- name: include key synchronization tasks
- include_tasks: synchronize_keys.yml
+ mode: "0644"
- name: enable and restart sshd
- service:
+ ansible.builtin.service:
name: sshd
state: restarted
enabled: true
- name: check ssh connection
- wait_for:
- port: "{{ ansible_port }}"
+ ansible.builtin.wait_for:
+ port: "{{ sshd_listen_port }}"
delay: 1
state: started
diff --git a/roles/sshd/templates/sshd_config.j2 b/roles/sshd/templates/sshd_config.j2
index f40e160..b8affa8 100644
--- a/roles/sshd/templates/sshd_config.j2
+++ b/roles/sshd/templates/sshd_config.j2
@@ -1,7 +1,7 @@
# managed by Ansible
# network
-Port {{ ansible_port }}
+Port {{ sshd_listen_port }}
# security
PermitRootLogin yes
@@ -13,13 +13,16 @@ AuthorizedKeysFile .ssh/authorized_keys
PasswordAuthentication no
PermitEmptyPasswords no
ClientAliveInterval 180
+X11Forwarding {{ "yes" if sshd_enable_x11_forwarding else "no" }}
-{% if ansible_facts["os_family"] == "Debian" %}
+{% if ansible_distribution == "Debian" %}
Subsystem sftp /usr/lib/openssh/sftp-server
ChallengeResponseAuthentication no
UsePAM yes
PrintMotd no
UsePrivilegeSeparation sandbox
+{% elif ansible_distribution == "Archlinux" %}
+Subsystem sftp /usr/lib/ssh/sftp-server
{% else %}
Subsystem sftp /usr/libexec/sftp-server
{% endif %}
diff --git a/roles/sshd_keys/meta/main.yml b/roles/sshd_keys/meta/main.yml
new file mode 100644
index 0000000..46c62ed
--- /dev/null
+++ b/roles/sshd_keys/meta/main.yml
@@ -0,0 +1,5 @@
+---
+
+dependencies:
+ - role: sshd
+ tags: dependency
diff --git a/roles/sshd/tasks/synchronize_keys.yml b/roles/sshd_keys/tasks/main.yml
index 722fdfa..32f6b5a 100644
--- a/roles/sshd/tasks/synchronize_keys.yml
+++ b/roles/sshd_keys/tasks/main.yml
@@ -1,5 +1,7 @@
+---
+
- name: get ssh keys for all users
- find:
+ ansible.builtin.find:
paths: files/keys
file_type: link
recurse: true
@@ -8,7 +10,7 @@
register: result
- name: synchronize ssh keys
- authorized_key:
+ ansible.posix.authorized_key:
user: "{{ item.path | dirname | basename }}"
state: present
key: "{{ lookup('file', item.path) }}"
diff --git a/roles/vmm/.travis.yml b/roles/vmm/.travis.yml
deleted file mode 100644
index 36bbf62..0000000
--- a/roles/vmm/.travis.yml
+++ /dev/null
@@ -1,29 +0,0 @@
----
-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/vmm/defaults/main.yml b/roles/vmm/defaults/main.yml
index 91bae08..1eaf736 100644
--- a/roles/vmm/defaults/main.yml
+++ b/roles/vmm/defaults/main.yml
@@ -1,3 +1,5 @@
+---
+
vmm_root_dir: /data/vmm
vmm_autoinstall_dir: /var/www/htdocs/autoinstall
vmm_iso_dir: /data/vmm/iso.d
diff --git a/roles/vmm/handlers/main.yml b/roles/vmm/handlers/main.yml
index e1ce00c..00bb0ad 100644
--- a/roles/vmm/handlers/main.yml
+++ b/roles/vmm/handlers/main.yml
@@ -1,2 +1,4 @@
+---
+
- name: lint vmm configuration
- command: "vmd -nf {{ vmm_configuration_file }}"
+ ansible.builtin.command: "vmd -nf {{ vmm_configuration_file }}"
diff --git a/roles/vmm/meta/main.yml b/roles/vmm/meta/main.yml
index 6b163d1..dd93239 100644
--- a/roles/vmm/meta/main.yml
+++ b/roles/vmm/meta/main.yml
@@ -1,3 +1,5 @@
+---
+
dependencies:
- role: httpd_pre
tags: dependency
diff --git a/roles/vmm/tasks/autoinstall_configuration.yml b/roles/vmm/tasks/autoinstall_configuration.yml
index 1f8cf07..4901b61 100644
--- a/roles/vmm/tasks/autoinstall_configuration.yml
+++ b/roles/vmm/tasks/autoinstall_configuration.yml
@@ -1,33 +1,35 @@
+---
+
- name: include httpd role variables
- include_vars: "{{ inventory_dir }}/roles/httpd/defaults/main.yml"
+ ansible.builtin.include_vars: "{{ inventory_dir }}/roles/httpd/defaults/main.yml"
- name: create autoinstall directory
- file:
+ ansible.builtin.file:
path: "{{ vmm_autoinstall_dir }}"
owner: www
group: www
- mode: 0700
+ mode: "0700"
state: directory
- name: generate autoinstall configurations
- template: &generation_steps
+ ansible.builtin.template: &generation_steps
src: autoinstall.conf.j2
dest: "{{ vmm_autoinstall_dir }}/{{ item.lladdr }}-install.conf"
owner: www
group: www
- mode: 0640
+ mode: "0640"
when: item.image == "openbsd"
loop: "{{ vmm_vms }}"
- name: generate autoupgrade configurations
- template:
+ ansible.builtin.template:
<<: *generation_steps
dest: "{{ vmm_autoinstall_dir }}/{{ item.lladdr }}-upgrade.conf"
when: item.image == "openbsd"
loop: "{{ vmm_vms }}"
- name: generate disklabel configurations
- template:
+ ansible.builtin.template:
<<: *generation_steps
src: disklabel.j2
dest: "{{ vmm_autoinstall_dir }}/{{ item.lladdr }}-disklabel.conf"
@@ -35,7 +37,7 @@
loop: "{{ vmm_vms }}"
- name: generate httpd configuration
- template:
+ ansible.builtin.template:
<<: *generation_steps
src: httpd.conf.j2
dest: "{{ httpd_configuration_dir }}/autoinstall.conf"
@@ -43,12 +45,12 @@
group: 0
- name: link openbsd vm kernel to host kernel
- file:
+ ansible.builtin.file:
src: /bsd.sp
dest: "{{ vmm_image_openbsd_kernel_prefix }}.{{ item.name }}"
owner: 0
group: 0
- mode: 0600
+ mode: "0600"
state: hard
force: true
when: item.image == "openbsd"
diff --git a/roles/vmm/tasks/disk.yml b/roles/vmm/tasks/disk.yml
index 95427c6..5883402 100644
--- a/roles/vmm/tasks/disk.yml
+++ b/roles/vmm/tasks/disk.yml
@@ -1,5 +1,7 @@
+---
+
- name: create disks
- command:
+ ansible.builtin.command:
cmd: vmctl create -s "{{ item.size }}" "{{ item.name }}.{{ vmm_disk_format }}"
chdir: "{{ vmm_disk_dir }}"
loop: "{{ vmm_vms }}"
@@ -10,13 +12,13 @@
- "'File exists' not in result.stderr"
- name: retrieve existing disks
- find:
+ ansible.builtin.find:
path: "{{ vmm_disk_dir }}"
patterns: "*.{{ vmm_disk_format }}"
register: result
- name: append disks informations to vms facts
- set_fact:
+ ansible.builtin.set_fact:
vmm_vms_tmp: >
{{ vmm_vms_tmp | default([]) + [ item | combine({
"disk": result.files
@@ -25,5 +27,5 @@
loop: "{{ vmm_vms }}"
- name: save variables
- set_fact:
+ ansible.builtin.set_fact:
vmm_vms: "{{ vmm_vms_tmp }}"
diff --git a/roles/vmm/tasks/facts.yml b/roles/vmm/tasks/facts.yml
index 8362afb..ef1bfa6 100644
--- a/roles/vmm/tasks/facts.yml
+++ b/roles/vmm/tasks/facts.yml
@@ -1,5 +1,7 @@
+---
+
- name: generate lladdr variable for virtual machines
- set_fact:
+ ansible.builtin.set_fact:
vmm_vms_tmp: >
{{ vmm_vms_tmp | default([]) + [ item | combine({
"lladdr": item.name
@@ -11,5 +13,5 @@
loop: "{{ vmm_vms }}"
- name: save variables
- set_fact:
+ ansible.builtin.set_fact:
vmm_vms: "{{ vmm_vms_tmp }}"
diff --git a/roles/vmm/tasks/iso.yml b/roles/vmm/tasks/iso.yml
index 0811ac1..a9cc38d 100644
--- a/roles/vmm/tasks/iso.yml
+++ b/roles/vmm/tasks/iso.yml
@@ -1,7 +1,10 @@
+---
+
- name: download latest iso files
- get_url:
+ ansible.builtin.get_url:
url: "{{ item.url }}"
dest: "{{ vmm_iso_dir }}/{{ item.name }}-latest.iso"
checksum: "{{ item.checksum }}"
+ mode: "0644"
tags: task_iso
loop: "{{ vmm_iso }}"
diff --git a/roles/vmm/tasks/main.yml b/roles/vmm/tasks/main.yml
index bb0d501..d12cadb 100644
--- a/roles/vmm/tasks/main.yml
+++ b/roles/vmm/tasks/main.yml
@@ -1,9 +1,11 @@
+---
+
- name: create vmm directories
- file:
+ ansible.builtin.file:
path: "{{ item }}"
owner: 0
group: 0
- mode: 0770
+ mode: "0770"
state: directory
loop:
- "{{ vmm_root_dir }}"
@@ -11,36 +13,36 @@
- "{{ vmm_disk_dir }}"
- name: include facts generation
- include_tasks: facts.yml
+ ansible.builtin.include_tasks: facts.yml
- name: include autoinstall generation
- include_tasks: autoinstall_configuration.yml
+ ansible.builtin.include_tasks: autoinstall_configuration.yml
tags: task_autoinstall_configuration
- name: include iso management
- include_tasks: iso.yml
+ ansible.builtin.include_tasks: iso.yml
tags: task_iso
- name: include disk management
- include_tasks: disk.yml
+ ansible.builtin.include_tasks: disk.yml
tags: task_disk
- name: include network management
- include_tasks: network.yml
+ ansible.builtin.include_tasks: network.yml
tags: task_network
- name: generate vmm configuration
- template:
+ ansible.builtin.template:
src: vm.conf.j2
dest: "{{ vmm_configuration_file }}"
owner: 0
group: 0
- mode: 0640
+ mode: "0640"
notify:
- lint vmm configuration
- name: restart and enable vmd
- service:
+ ansible.builtin.service:
name: vmd
state: restarted
enabled: true
diff --git a/roles/vmm/tasks/network.yml b/roles/vmm/tasks/network.yml
index 9886e59..b5ac4db 100644
--- a/roles/vmm/tasks/network.yml
+++ b/roles/vmm/tasks/network.yml
@@ -1,29 +1,31 @@
+---
+
- name: start ip forwarding
- command: sysctl net.inet.ip{{ item }}.forwarding=1
+ ansible.builtin.command: sysctl net.inet.ip{{ item }}.forwarding=1
loop: "{{ vmm_network_forwarded_ips }}"
register: result
changed_when: item ~ "->" ~ item not in result.stdout_lines
- name: enable ip forwarding
- lineinfile:
+ ansible.builtin.lineinfile:
path: /etc/sysctl.conf
regexp: "^net.inet.ip{{ item }}.forwarding="
line: "net.inet.ip{{ item }}.forwarding=1"
owner: 0
group: 0
- mode: 0640
+ mode: "0640"
create: true
loop: "{{ vmm_network_forwarded_ips }}"
- name: create network switch
- lineinfile:
+ ansible.builtin.lineinfile:
path: "/etc/hostname.{{ vmm_network_switch.interface }}"
regexp: &network_line "add {{ ansible_default_ipv4.interface }}"
line: *network_line
owner: 0
group: 0
- mode: 0640
+ mode: "0640"
create: true
- name: start network switch # noqa: no-changed-when
- command: "sh /etc/netstart {{ vmm_network_switch.interface }}"
+ ansible.builtin.command: "sh /etc/netstart {{ vmm_network_switch.interface }}"
diff --git a/roles/wireguard/defaults/main.yml b/roles/wireguard/defaults/main.yml
index 2275c05..72cc66d 100644
--- a/roles/wireguard/defaults/main.yml
+++ b/roles/wireguard/defaults/main.yml
@@ -1,3 +1,5 @@
+---
+
wireguard_dir: /etc/wireguard
wireguard_local_dir: "{{ inventory_dir }}/files/secrets/wireguard"
wireguard_local_keys: "{{ inventory_hostname }}.keys"
diff --git a/roles/wireguard/tasks/configuration.yml b/roles/wireguard/tasks/configuration.yml
index efb8008..0a2009e 100644
--- a/roles/wireguard/tasks/configuration.yml
+++ b/roles/wireguard/tasks/configuration.yml
@@ -1,8 +1,10 @@
+---
+
- name: generate wireguard configuration
- template:
+ ansible.builtin.template:
src: wireguard.conf.j2
dest: "{{ wireguard_local_dir }}/{{ item }}.conf"
- mode: 0600
+ mode: "0600"
vars:
host: "{{ hostvars[item] }}"
run_once: true
@@ -10,9 +12,9 @@
loop: "{{ groups.all }}"
- name: copy wireguard configuration
- copy:
+ ansible.builtin.copy:
src: "{{ wireguard_local_dir }}/{{ wireguard_local_configuration }}"
dest: "{{ wireguard_dir }}/{{ wireguard_domain_controller }}.conf"
owner: 0
group: 0
- mode: 0600
+ mode: "0600"
diff --git a/roles/wireguard/tasks/cron.yml b/roles/wireguard/tasks/cron.yml
index 482b34f..dd70e5c 100644
--- a/roles/wireguard/tasks/cron.yml
+++ b/roles/wireguard/tasks/cron.yml
@@ -1,3 +1,5 @@
+---
+
- name: add cronjob for keepalive
ansible.builtin.cron:
name: keepalive network traffic to domain controller
diff --git a/roles/wireguard/tasks/keys.yml b/roles/wireguard/tasks/keys.yml
index 7a89010..ee42408 100644
--- a/roles/wireguard/tasks/keys.yml
+++ b/roles/wireguard/tasks/keys.yml
@@ -1,5 +1,7 @@
+---
+
- name: generate hosts keys
- shell: |
+ ansible.builtin.shell: |
set -o pipefail
ls "{{ wireguard_local_dir }}/{{ item }}.keys" && exit 0
umask 077
diff --git a/roles/wireguard/tasks/main.yml b/roles/wireguard/tasks/main.yml
index d1ff496..31b3655 100644
--- a/roles/wireguard/tasks/main.yml
+++ b/roles/wireguard/tasks/main.yml
@@ -1,36 +1,38 @@
+---
+
- name: create local wireguard directory
- file:
+ ansible.builtin.file:
path: "{{ wireguard_local_dir }}"
state: directory
- mode: 0700
+ mode: "0700"
run_once: true
delegate_to: localhost
- name: create wireguard directory
- file:
+ ansible.builtin.file:
path: "{{ wireguard_dir }}"
owner: 0
group: 0
- mode: 0700
+ mode: "0700"
state: directory
- name: include key generation
- include_tasks: keys.yml
+ ansible.builtin.include_tasks: keys.yml
- name: include configuration generation
- include_tasks: configuration.yml
+ ansible.builtin.include_tasks: configuration.yml
- name: install wireguard on remote host
- package:
+ ansible.builtin.package:
name: wireguard-tools
state: present
- name: include service configuration for hosts
- include_tasks: service.yml
+ ansible.builtin.include_tasks: service.yml
when: inventory_hostname == wireguard_domain_controller
- name: include service configuration for server
- include_tasks: "{{ task }}"
+ ansible.builtin.include_tasks: "{{ task }}"
when: inventory_hostname != wireguard_domain_controller
loop_control:
loop_var: task
diff --git a/roles/wireguard/tasks/service.yml b/roles/wireguard/tasks/service.yml
index 37f3cec..85849ee 100644
--- a/roles/wireguard/tasks/service.yml
+++ b/roles/wireguard/tasks/service.yml
@@ -1,16 +1,17 @@
+---
+
- name: enable wireguard interface for OpenBSD
- lineinfile:
+ ansible.builtin.lineinfile:
path: /etc/rc.local
regexp: "^/usr/local/bin/wg-quick up {{ wireguard_domain_controller }}$"
line: "/usr/local/bin/wg-quick up {{ wireguard_domain_controller }}"
owner: 0
- owner: 0
create: true
- mode: 0644
+ mode: "0644"
when: ansible_distribution == "OpenBSD"
- name: restart wireguard interface
- raw: |
+ ansible.builtin.raw: |
wg-quick down {{ wireguard_domain_controller }}
sleep {{ 10 | random(start=1) }}
wg-quick up {{ wireguard_domain_controller }}
@@ -18,5 +19,5 @@
register: result
- name: show wireguard output
- debug:
+ ansible.builtin.debug:
var: result
diff --git a/roles/workstation/tasks/doas.yml b/roles/workstation/tasks/doas.yml
deleted file mode 100644
index bc72d7f..0000000
--- a/roles/workstation/tasks/doas.yml
+++ /dev/null
@@ -1,34 +0,0 @@
-- name: generate doas configuration
- lineinfile:
- path: /etc/doas.conf
- regexp: "^permit persist keepenv {{ workstation_user }} as root"
- line: "permit persist keepenv {{ workstation_user }} as root"
- create: true
- mode: 0644
- owner: 0
- group: 0
-
-- name: allow reboot/shutdown/hibernate with doas
- lineinfile:
- path: /etc/doas.conf
- regexp: "^permit nopass {{ workstation_user }} as root cmd {{ item }}"
- line: "permit nopass {{ workstation_user }} as root cmd {{ item }}"
- loop:
- - ZZZ
- - mount
- - reboot
- - shutdown
- - zzz
-
-- name: check sudo binary path # noqa no-changed-when
- command: command -v sudo
- register: result
- failed_when: false
-
-- name: uninstall sudo binary
- package:
- name: sudo
- state: absent
- when: result.rc == 0
- register: sudo
- ignore_errors: true
diff --git a/roles/workstation/tasks/dockerd.yml b/roles/workstation/tasks/dockerd.yml
deleted file mode 100644
index f3ace56..0000000
--- a/roles/workstation/tasks/dockerd.yml
+++ /dev/null
@@ -1,7 +0,0 @@
-- name: configure default network for docker containers
- template:
- src: docker-daemon.json.j2
- dest: /etc/docker/daemon.json
- owner: 0
- group: 0
- mode: 0600
diff --git a/roles/workstation/tasks/libvirt.yml b/roles/workstation/tasks/libvirt.yml
deleted file mode 100644
index 36d3fa5..0000000
--- a/roles/workstation/tasks/libvirt.yml
+++ /dev/null
@@ -1,17 +0,0 @@
-- name: install libvirt
- package:
- name:
- - cdrtools
- - dnsmasq
- - ebtables
- - libvirt
- state: present
-
-- name: append current user to virt groups
- user:
- name: "{{ workstation_user }}"
- groups: "{{ item }}"
- append: true
- loop:
- - kvm
- - libvirt
diff --git a/roles/workstation/tasks/main.yml b/roles/workstation/tasks/main.yml
deleted file mode 100644
index 0e4a9c2..0000000
--- a/roles/workstation/tasks/main.yml
+++ /dev/null
@@ -1,48 +0,0 @@
-- name: include specific distribution variables
- include_vars: "os_{{ ansible_distribution | lower }}.yml"
-
-- name: include packages
- tags: always
- include_tasks:
- file: pkgs.yml
- apply:
- tags: task_pkgs
-
-- name: include operating system setup
- tags: always
- include_tasks:
- file: "os_{{ ansible_distribution | lower }}.yml"
- apply:
- tags: task_system
-
-- name: include shell setup
- tags: always
- include_tasks:
- file: shell.yml
- apply:
- tags: task_shell
-
-- name: include doas setup
- tags: always
- include_tasks:
- file: doas.yml
- apply:
- tags: task_doas
-
-- name: include smartcard setup
- tags: always
- include_tasks:
- file: smartcard.yml
- apply:
- tags: task_smartcard
-
-- name: include ssh setup
- tags: always
- include_tasks:
- file: ssh.yml
- apply:
- tags: task_ssh
- args:
- apply:
- become: true
- become_user: "{{ workstation_user }}"
diff --git a/roles/workstation/tasks/os_archlinux.yml b/roles/workstation/tasks/os_archlinux.yml
deleted file mode 100644
index 912d938..0000000
--- a/roles/workstation/tasks/os_archlinux.yml
+++ /dev/null
@@ -1,51 +0,0 @@
-- name: append current user to system groups
- user:
- name: "{{ workstation_user }}"
- groups: "{{ item }}"
- append: true
- loop:
- - docker
- - wheel
- - video
- - audio
-
-- name: enable and start pipewire
- systemd:
- name: "{{ item }}"
- scope: user
- enabled: true
- state: started
- become: true
- become_method: su
- become_user: "{{ workstation_user }}"
- loop:
- - pipewire
- - pipewire-pulse
- - pipewire-media-session
- when: ansible_service_mgr == "systemd"
-
-- name: ensure that dhcpcd is started
- service:
- name: dhcpcd
- state: started
- enabled: true
-
-- name: enable battery optimization
- include_tasks: tlp.yml
- when: ansible_form_factor in ["Laptop", "Notebook"]
-
-- name: include virtualization setup
- include_tasks: libvirt.yml
-
-- name: include dockerd setup
- include_tasks: dockerd.yml
-
-- name: retrieve installed packages
- package_facts:
- register: package_facts
-
-- name: install yay
- include_tasks: yay.yml
- when:
- - "'yay' not in package_facts.ansible_facts.packages"
- - "'yay-bin' not in package_facts.ansible_facts.packages"
diff --git a/roles/workstation/tasks/os_openbsd.yml b/roles/workstation/tasks/os_openbsd.yml
deleted file mode 100644
index d007263..0000000
--- a/roles/workstation/tasks/os_openbsd.yml
+++ /dev/null
@@ -1,72 +0,0 @@
-- name: ensure wsconsctl config file exists
- file:
- path: /etc/wsconsctl.conf
- state: touch
- owner: 0
- group: 0
- mode: 0644
-
-- name: append configuration to wsconsctl
- lineinfile:
- path: /etc/wsconsctl.conf
- regexp: "^{{ item[0] }}"
- line: "{{ item[0] }}={{ item[1] }}"
- create: true
- owner: 0
- group: 0
- mode: 0644
- loop:
- - [screen.brightness, 80]
- - [keyboard.repeat.del1, 180]
- - [keyboard.repeat.deln, 50]
- - [keyboard.bell.volume, 0]
- - [mouse.tp.tapping, 1]
-
-- name: ensure Xorg subdirectory for configuration exists
- file:
- path: /etc/X11/xorg.conf.d
- owner: 0
- group: 0
- mode: 0644
- state: directory
-
-- name: generate system wide configurations
- template:
- src: "{{ item[0] }}"
- dest: "{{ item[1] }}"
- mode: preserve
- loop:
- - [xorg-intel.conf, /etc/X11/xorg.conf.d]
- - [apm-hibernate, /etc/apm/hibernate]
- - [apm-suspend, /etc/apm/suspend]
- - [apm-resume, /etc/apm/resume]
-
-- name: ensure sysctl configuration file exists
- file:
- path: /etc/sysctl.conf
- owner: root
- mode: 0644
-
-- name: ensure sysctl memory optimizations
- blockinfile:
- path: /etc/sysctl.conf
- block: |
- kern.shminfo.shmall=3145728
- kern.shminfo.shmmax=1073741823
- kern.shminfo.shmmni=1024
- kern.shminfo.shmseg=1024
- kern.seminfo.semmns=4096
- kern.seminfo.semmni=1024
- marker: "# memory {mark} - managed by Ansible"
-
-- name: ensure sysctl process optimizations
- blockinfile:
- path: /etc/sysctl.conf
- block: |
- kern.maxfiles=102400
- kern.maxproc=32768
- kern.maxfiles=65535
- kern.bufcachepercent=90
- kern.maxvnodes=262144
- kern.somaxconn=2048
- marker: "# process - {mark} managed by Ansible"
diff --git a/roles/workstation/tasks/pkgs.yml b/roles/workstation/tasks/pkgs.yml
deleted file mode 100644
index f4f2f44..0000000
--- a/roles/workstation/tasks/pkgs.yml
+++ /dev/null
@@ -1,7 +0,0 @@
-- name: install distribution packages
- package:
- name: "{{ item }}"
- state: present
- loop:
- - "{{ workstation_pkgs_common }}"
- - "{{ workstation_pkgs }}"
diff --git a/roles/workstation/tasks/shell.yml b/roles/workstation/tasks/shell.yml
deleted file mode 100644
index 42b134c..0000000
--- a/roles/workstation/tasks/shell.yml
+++ /dev/null
@@ -1,8 +0,0 @@
-- name: retrieve zsh path # noqa no-changed-when command-instead-of-shell
- shell: command -v zsh
- register: zsh_path
-
-- name: ensure zsh is used for workstation user
- user:
- name: "{{ workstation_user }}"
- shell: "{{ zsh_path.stdout_lines[0] }}"
diff --git a/roles/workstation/tasks/smartcard.yml b/roles/workstation/tasks/smartcard.yml
deleted file mode 100644
index ed79c92..0000000
--- a/roles/workstation/tasks/smartcard.yml
+++ /dev/null
@@ -1,5 +0,0 @@
-- name: start and enable pcscd service
- service:
- name: pcscd
- state: started
- enabled: true
diff --git a/roles/workstation/tasks/ssh.yml b/roles/workstation/tasks/ssh.yml
deleted file mode 100644
index 318198e..0000000
--- a/roles/workstation/tasks/ssh.yml
+++ /dev/null
@@ -1,18 +0,0 @@
-- name: create ssh directory
- file:
- path: "/home/{{ workstation_user }}/{{ item }}"
- owner: "{{ workstation_user }}"
- group: "{{ workstation_user }}"
- state: directory
- mode: 0700
- loop:
- - .ssh
- - .ssh/config.d
-
-- name: generate ssh configuration
- template:
- src: ssh.config.j2
- dest: "/home/{{ workstation_user }}/.ssh/config.d/dns.config"
- owner: "{{ workstation_user }}"
- group: "{{ workstation_user }}"
- mode: 0600
diff --git a/roles/workstation/tasks/yay.yml b/roles/workstation/tasks/yay.yml
deleted file mode 100644
index cafbc9c..0000000
--- a/roles/workstation/tasks/yay.yml
+++ /dev/null
@@ -1,19 +0,0 @@
-- name: clone yay repository
- git:
- repo: "{{ workstation_yay_repo }}"
- dest: "{{ workstation_yay_dir }}"
- version: origin/master
- become: true
- become_user: "{{ workstation_user }}"
-
-- name: make yay package # noqa: no-changed-when
- command:
- cmd: makepkg -fs
- chdir: "{{ workstation_yay_dir }}"
- become: true
- become_user: "{{ workstation_user }}"
-
-- name: install yay package # noqa: no-changed-when
- shell:
- cmd: pacman --noconfirm -U *.zst
- chdir: "{{ workstation_yay_dir }}"
diff --git a/roles/workstation/templates/ssh.config.j2 b/roles/workstation/templates/ssh.config.j2
deleted file mode 100644
index 2a3a903..0000000
--- a/roles/workstation/templates/ssh.config.j2
+++ /dev/null
@@ -1,17 +0,0 @@
-# managed by Ansible
-{% import 'macros.j2' as macros with context %}
-
-{% call(h) macros.loop_valid_hosts("all") %}
-{% set command = "pgrep wg && ! ping -c 1 -w 1 %s" % h.__ip.external %}
-Match originalHost {{ h.inventory_hostname }} exec "{{ command }}"
- HostName {{ h.__ip.internal }}
-{% if h.ansible_port is defined %}
- Port {{ h.ansible_port }}
-{% endif %}
-Match originalHost {{ h.inventory_hostname }}
- HostName {{ h.__ip.external }}
-{% if h.ansible_port is defined %}
- Port {{ h.ansible_port }}
-{% endif %}
-
-{% endcall %}
diff --git a/roles/znc/defaults/main.yml b/roles/znc/defaults/main.yml
index 879ed75..7d7b965 100644
--- a/roles/znc/defaults/main.yml
+++ b/roles/znc/defaults/main.yml
@@ -1,2 +1,4 @@
+---
+
znc_user: _znc
znc_group: _znc
diff --git a/roles/znc/tasks/main.yml b/roles/znc/tasks/main.yml
index a1ccf3d..df9a092 100644
--- a/roles/znc/tasks/main.yml
+++ b/roles/znc/tasks/main.yml
@@ -1,22 +1,24 @@
+---
+
- name: install znc
- package:
+ ansible.builtin.package:
name: znc
state: present
- name: create znc group
- group:
+ ansible.builtin.group:
name: "{{ znc_group }}"
state: present
- name: create znc user
- user:
+ ansible.builtin.user:
name: "{{ znc_user }}"
group: "{{ znc_group }}"
system: true
create_home: true
- name: generate and enable znc service
- include_role:
+ ansible.builtin.include_role:
name: rc
vars:
rc_cmd: /usr/local/bin/znc
@@ -24,7 +26,7 @@
rc_name: znc
- name: enable and start znc
- service:
+ ansible.builtin.service:
name: znc
state: restarted
enabled: true
diff --git a/site.all.yml b/site.all.yml
index 01b825b..761c0f7 100644
--- a/site.all.yml
+++ b/site.all.yml
@@ -1,70 +1,54 @@
+---
+
- hosts: all
roles:
- role: wireguard
- tags:
- - role_wireguard
- - never
- hosts: servers
roles:
- role: sshd
- tags: role_sshd
+
+- hosts: servers:!dc0
+ roles:
- role: prometheus
- tags: role_prometheus
- role: loki
- tags: role_loki
- hosts: dc0
roles:
- role: pf
- tags: role_pf
- role: relayd
- tags: role_relayd
- role: acme
- tags: role_acme
- role: cgit
- tags: role_cgit
- role: znc
- tags: role_znc
# internal git user and directory - different than the public one for cgit
- role: git
git_dir: /data/git-internal
git_user: git-internal
- tags: role_git
- hosts: stack0
roles:
- role: nfsd
- tags: role_nfsd
- hosts: stack0-*
roles:
- role: nfsclient
- tags: role_nfsclient
- hosts: stack0-dc1
roles:
- role: grafana
- tags: role_grafana
- hosts: stack0-dev0,stack0-dc1
roles:
- role: cgit
- tags: role_cgit
- hosts: stack0-cld0
roles:
- role: miniflux
- tags: role_miniflux
- hosts: servers
roles:
- role: httpd
- tags: role_httpd
- hosts: stack0
roles:
- role: vmm
- tags:
- - role_vmm
- - never
diff --git a/site.prerequisites.yml b/site.prerequisites.yml
index 3178164..5495522 100644
--- a/site.prerequisites.yml
+++ b/site.prerequisites.yml
@@ -1,8 +1,10 @@
+---
+
- hosts: all
gather_facts: false
tasks:
- name: bruteforce python installation with all packages possiblity # noqa: no-changed-when
- raw: |
+ ansible.builtin.raw: |
! pkg_add python3 &&
! pkg install python3 &&
apk add python
diff --git a/site.workstation.yml b/site.workstation.yml
index 65caed7..387b684 100644
--- a/site.workstation.yml
+++ b/site.workstation.yml
@@ -1,10 +1,80 @@
+---
+
- hosts: localhost
+ vars:
+ _workstation_user: qwd
+ basegroups_workstation_user: "{{_workstation_user }}"
+ doas_workstation_user: "{{ _workstation_user }}"
+ dockerd_workstation_user: "{{ _workstation_user }}"
+ dotfiles_workstation_user: "{{ _workstation_user }}"
+ libvirt_workstation_user: "{{ _workstation_user }}"
+ pipewire_workstation_user: "{{ _workstation_user }}"
+ shell_workstation_user: "{{ _workstation_user }}"
+ syncthing_workstation_user: "{{ _workstation_user }}"
+ yay_workstation_user: "{{ _workstation_user }}"
+ makepkg_user: "{{ _workstation_user }}"
+
pre_tasks:
- name: verify running as root
- fail:
+ ansible.builtin.fail:
when: ansible_user_id != "root"
tags: always
+ - name: retrieve installed packages
+ ansible.builtin.package_facts:
+ register: package_facts
+ - name: include localhost variable
+ ansible.builtin.include_vars:
+ file: "host_vars/{{ ansible_hostname }}.yml"
roles:
- - role: workstation
+ - role: _workstation/basetools
+ when: ansible_distribution in ["Archlinux", "OpenBSD"]
+ - role: _workstation/basegroups
+ when: ansible_distribution in ["Archlinux"]
+ - role: _workstation/wscons
+ when: ansible_distribution in ["OpenBSD"]
+
+ - role: _workstation/shell
+ - role: _workstation/hosts
+ - role: _workstation/doas
+
+ - role: _workstation/yay
+ when:
+ - ansible_distribution in ["Archlinux"]
+ - "'yay' not in package_facts.ansible_facts.packages"
+ - "'yay-bin' not in package_facts.ansible_facts.packages"
+
+ - role: _workstation/xorg
+ when: ansible_distribution in ["Archlinux", "OpenBSD"]
+
+ - role: sshd
+ when: '"work" in ansible_hostname'
+
+ - role: _workstation/smartcard
+ when: ansible_distribution in ["Archlinux", "OpenBSD"]
+ - role: _workstation/pipewire
+ when: ansible_distribution in ["Archlinux"]
+ - role: _workstation/cronie
+ when: ansible_distribution in ["Archlinux"]
+ - role: _workstation/libvirt
+ when: ansible_distribution in ["Archlinux"]
+ - role: _workstation/dockerd
+ when: ansible_distribution in ["Archlinux"]
+ - role: _workstation/resolv
+ when: ansible_distribution in ["Archlinux"]
+ - role: _workstation/syncthing
+ when: ansible_distribution in ["Archlinux"]
+
+ - role: _workstation/tlp
+ when:
+ - ansible_distribution in ["Archlinux"]
+ - ansible_form_factor in ["Laptop", "Notebook"]
+ - role: _workstation/apm
+ when: ansible_distribution in ["OpenBSD"]
+ - role: _workstation/kernel
+ when: ansible_distribution in ["OpenBSD"]
+
+ - role: _workstation/dotfiles
+ become: true
+ become_user: "{{ dotfiles_workstation_user }}"
remember that computers suck.