aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.ansible-lint5
-rw-r--r--.yamllint7
-rw-r--r--ansible.cfg2
-rw-r--r--group_vars/all.yml41
-rw-r--r--group_vars/all/main.yml57
l---------group_vars/all/secrets.yml1
-rw-r--r--group_vars/workstations/main.yml3
-rw-r--r--host_vars/dc0.yml32
-rw-r--r--host_vars/dc0/main.yml46
-rw-r--r--host_vars/localhost/main.yml (renamed from host_vars/localhost.yml)2
-rw-r--r--host_vars/stack0-cld0/main.yml (renamed from host_vars/stack0-cld0.yml)2
-rw-r--r--host_vars/stack0-dc1/main.yml (renamed from host_vars/stack0-dc1.yml)3
-rw-r--r--host_vars/stack0-dev0/main.yml (renamed from host_vars/stack0-dev0.yml)9
-rw-r--r--host_vars/stack0/main.yml (renamed from host_vars/stack0.yml)2
-rw-r--r--host_vars/ws-bare01/main.yml (renamed from host_vars/ws-bare01.yml)2
-rw-r--r--host_vars/ws-think01/main.yml (renamed from host_vars/ws-think01.yml)2
-rw-r--r--host_vars/ws-think02/main.yml (renamed from host_vars/ws-think02.yml)2
-rw-r--r--host_vars/ws-think03/main.yml (renamed from host_vars/ws-think03.yml)2
-rw-r--r--host_vars/ws-work01/main.yml7
-rw-r--r--host_vars/ws-xps01/main.yml (renamed from host_vars/ws-xps01.yml)2
-rw-r--r--inventory.ini4
-rw-r--r--poetry.lock1261
-rw-r--r--pyproject.toml10
-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)28
-rw-r--r--roles/_workstation/basetools/meta/main.yml21
-rw-r--r--roles/_workstation/basetools/tasks/install.yml17
-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)37
-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.yml10
-rw-r--r--roles/acme/meta/main.yml53
-rw-r--r--roles/acme/tasks/main.yml35
-rw-r--r--roles/acme/templates/acme-client.conf.j227
-rw-r--r--roles/cgit/defaults/main.yml40
-rw-r--r--roles/cgit/meta/main.yml75
-rw-r--r--roles/cgit/tasks/dependencies.yml33
-rw-r--r--roles/cgit/tasks/main.yml80
-rw-r--r--roles/cgit/templates/cgitrc.j224
-rw-r--r--roles/cgit/templates/httpd.conf.j25
-rw-r--r--roles/git/defaults/main.yml3
-rw-r--r--roles/git/meta/main.yml41
-rw-r--r--roles/git/tasks/main.yml30
-rw-r--r--roles/git/templates/gitconfig.j22
-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.yml7
-rw-r--r--roles/pf/handlers/main.yml12
-rw-r--r--roles/pf/meta/main.yml42
-rw-r--r--roles/pf/tasks/main.yml40
-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.yml16
-rw-r--r--roles/relayd/handlers/main.yml2
-rw-r--r--roles/relayd/meta/main.yml45
-rw-r--r--roles/relayd/tasks/main.yml25
-rw-r--r--roles/relayd/templates/relayd.conf.j238
-rw-r--r--roles/sshd/defaults/main.yml5
-rw-r--r--roles/sshd/meta/main.yml21
-rw-r--r--roles/sshd/tasks/main.yml34
-rw-r--r--roles/sshd/tasks/synchronize_keys.yml18
-rw-r--r--roles/sshd/templates/sshd_config.j27
-rw-r--r--roles/sshd_keys/defaults/main.yml13
-rw-r--r--roles/sshd_keys/meta/main.yml27
-rw-r--r--roles/sshd_keys/tasks/main.yml41
-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.yml15
-rw-r--r--roles/workstation/tasks/hosts.yml7
-rw-r--r--roles/workstation/tasks/libvirt.yml17
-rw-r--r--roles/workstation/tasks/main.yml52
-rw-r--r--roles/workstation/tasks/os_archlinux.yml50
-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.yml23
-rw-r--r--site.prerequisites.yml4
-rw-r--r--site.workstation.yml74
-rwxr-xr-xvault.sh16
175 files changed, 2689 insertions, 1200 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/ansible.cfg b/ansible.cfg
index 411b602..1207e7b 100644
--- a/ansible.cfg
+++ b/ansible.cfg
@@ -20,6 +20,8 @@ duplicate_dict_key = ignore
remote_user = root
remote_port = 22
+vault_identity_list = default@vault.sh
+
[ssh_connection]
pipelining = True
scp_if_ssh = True
diff --git a/group_vars/all.yml b/group_vars/all.yml
deleted file mode 100644
index 6a91b23..0000000
--- a/group_vars/all.yml
+++ /dev/null
@@ -1,41 +0,0 @@
-ansible_hostname: "{{ ansible_host }}"
-ansible_become_method: su
-
-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
-
-__is_vm: false
-
-__ip:
- external:
- internal:
-
-__services: {}
-
-__global_domain_controller: dc0
-__global_domain_name: rgoncalves.se
-__global_domain_name_hosts: owo
-__global_domain_name_servers:
- - 8.8.8.8
- - 1.1.1.1
-
-__global_services:
- - name: ssh
- protocol: tcp
- port: 22
-
- - name: healthcheck
- protocol: tcp
- port: 8000
- is_public: true
-
-# __services:
-# - domain: status.test
-# is_public: true
-# port: 120
-# protocols:
-# - tcp
-# - udp
diff --git a/group_vars/all/main.yml b/group_vars/all/main.yml
new file mode 100644
index 0000000..35abefd
--- /dev/null
+++ b/group_vars/all/main.yml
@@ -0,0 +1,57 @@
+---
+
+# ansible overrides
+
+ansible_hostname: "{{ ansible_host }}"
+ansible_become_method: su
+
+# roles overrides
+
+wireguard_domain_controller: "{{ __global_domain_controller }}"
+relayd_domain_name: "{{ __domain_name }}"
+nfsclient_server: stack0
+httpd_use_nfs: true
+acme_rules: "[
+ {% for rule in __services if 'domain' in rule %}
+ {{ {'domain': rule.domain} }},
+ {% endfor %}
+ ]"
+pf_rules: "[
+ {% for rule in __services if
+ 'port' in rule and 'protocol' in rule and 'name' in rule %}
+ {{ {'name': rule.name, 'port': rule.port, 'protocol': rule.protocol} }},
+ {% endfor %}
+ ]"
+relayd_rules: "[
+ {% for rule in __services if
+ 'domain' in rule and 'port' in rule %}
+ {{ {'name': rule.name, 'domain': rule.domain, 'port': rule.port} }},
+ {% endfor %}
+ ]"
+
+# playbook specific
+
+__is_vm: false
+
+__ip:
+ external:
+ internal:
+
+__services: {}
+__domain_name: rgoncalves.se
+
+__global_domain_controller: dc0
+__global_domain_name_hosts: owo
+__global_domain_name_servers:
+ - 8.8.8.8
+ - 1.1.1.1
+
+__global_services:
+ - name: ssh
+ protocol: tcp
+ port: 22
+
+ - name: healthcheck
+ protocol: tcp
+ port: 8000
+ is_public: true
diff --git a/group_vars/all/secrets.yml b/group_vars/all/secrets.yml
new file mode 120000
index 0000000..6ea8863
--- /dev/null
+++ b/group_vars/all/secrets.yml
@@ -0,0 +1 @@
+../../../secrets/ansible/group_vars/all.yml \ No newline at end of file
diff --git a/group_vars/workstations/main.yml b/group_vars/workstations/main.yml
new file mode 100644
index 0000000..09a770c
--- /dev/null
+++ b/group_vars/workstations/main.yml
@@ -0,0 +1,3 @@
+---
+
+sshd_listen_port: 71
diff --git a/host_vars/dc0.yml b/host_vars/dc0.yml
deleted file mode 100644
index 511ffcc..0000000
--- a/host_vars/dc0.yml
+++ /dev/null
@@ -1,32 +0,0 @@
-httpd_use_nfs: false
-git_dir: /var/www/data/git
-
-ansible_port: 71
-
-__is_vm: true
-
-__ip:
- external: 185.203.114.234
- internal: 10.10.0.1
-
-__services:
- - name: ssh
- protocol: tcp
- port: 22
-
- - name: wireguard
- protocol: udp
- port: 53
-
- - name: http
- protocol: tcp
- port: 80
-
- - name: https
- protocol: tcp
- port: 443
-
- - name: cgit
- domain: git
- protocol: tcp
- port: 1235
diff --git a/host_vars/dc0/main.yml b/host_vars/dc0/main.yml
new file mode 100644
index 0000000..2c7461a
--- /dev/null
+++ b/host_vars/dc0/main.yml
@@ -0,0 +1,46 @@
+---
+
+ansible_port: 71
+
+httpd_use_nfs: false
+git_dir: /var/www/data/git
+sshd_listen_port: "{{ ansible_port }}"
+relayd_connected_hosts: servers
+acme_connected_hosts: servers
+
+cgit_listen_port: 1235
+cgit_domain_name: git.rgoncalves.se
+cgit_favicon_url: "https://{{ __domain_name }}/img/favicon.ico"
+cgit_logo_url: "https://{{ __domain_name }}/img/favicon.ico"
+cgit_css_url: "https://{{ __domain_name }}/style/cgit.css"
+cgit_description: development hub
+cgit_readme_url: https://{{ __domain_name }}"
+
+__is_vm: true
+
+__ip:
+ external: 185.203.114.234
+ internal: 10.10.0.1
+
+__services:
+ - name: ssh
+ protocol: tcp
+ port: 22
+
+ - name: wireguard
+ protocol: udp
+ port: 53
+
+ - name: http
+ domain: rgoncalves.se
+ protocol: tcp
+ port: 80
+
+ - name: https
+ protocol: tcp
+ port: 443
+
+ - name: git
+ domain: "{{ cgit_domain_name }}"
+ protocol: tcp
+ port: "{{ cgit_listen_port }}"
diff --git a/host_vars/localhost.yml b/host_vars/localhost/main.yml
index c212ded..2947445 100644
--- a/host_vars/localhost.yml
+++ b/host_vars/localhost/main.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/main.yml
index 62e282d..e99cdea 100644
--- a/host_vars/stack0-cld0.yml
+++ b/host_vars/stack0-cld0/main.yml
@@ -1,3 +1,5 @@
+---
+
__is_vm: true
__ip:
diff --git a/host_vars/stack0-dc1.yml b/host_vars/stack0-dc1/main.yml
index 30ec3e4..5971323 100644
--- a/host_vars/stack0-dc1.yml
+++ b/host_vars/stack0-dc1/main.yml
@@ -1,4 +1,5 @@
-cgit_authenticate: true
+---
+
cgit__root_desc: private - development hub
__is_vm: true
diff --git a/host_vars/stack0-dev0.yml b/host_vars/stack0-dev0/main.yml
index 550d25b..fe6204c 100644
--- a/host_vars/stack0-dev0.yml
+++ b/host_vars/stack0-dev0/main.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/main.yml
index 767ca93..4dd042f 100644
--- a/host_vars/stack0.yml
+++ b/host_vars/stack0/main.yml
@@ -1,3 +1,5 @@
+---
+
httpd_use_nfs: false
__ip:
diff --git a/host_vars/ws-bare01.yml b/host_vars/ws-bare01/main.yml
index dedc166..bec2b63 100644
--- a/host_vars/ws-bare01.yml
+++ b/host_vars/ws-bare01/main.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/main.yml
index 0fddec5..c1a5ef7 100644
--- a/host_vars/ws-think01.yml
+++ b/host_vars/ws-think01/main.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/main.yml
index 3665907..8e9ec79 100644
--- a/host_vars/ws-think02.yml
+++ b/host_vars/ws-think02/main.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/main.yml
index c9d2956..faba6bb 100644
--- a/host_vars/ws-think03.yml
+++ b/host_vars/ws-think03/main.yml
@@ -1,3 +1,5 @@
+---
+
__ip:
external: dhcp
internal: 10.10.0.84
diff --git a/host_vars/ws-work01/main.yml b/host_vars/ws-work01/main.yml
new file mode 100644
index 0000000..fce88d3
--- /dev/null
+++ b/host_vars/ws-work01/main.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/main.yml
index cda287c..bf2e0c8 100644
--- a/host_vars/ws-xps01.yml
+++ b/host_vars/ws-xps01/main.yml
@@ -1,3 +1,5 @@
+---
+
__ip:
external: dhcp
internal: 10.10.0.81
diff --git a/inventory.ini b/inventory.ini
index 1c5f66d..7d6fdc0 100644
--- a/inventory.ini
+++ b/inventory.ini
@@ -17,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..a3318ab 100644
--- a/poetry.lock
+++ b/poetry.lock
@@ -1,130 +1,497 @@
+# This file is automatically @generated by Poetry and should not be changed by hand.
+
[[package]]
name = "ansible"
-version = "5.1.0"
+version = "6.5.0"
description = "Radically simple IT automation"
category = "main"
optional = false
python-versions = ">=3.8"
+files = [
+ {file = "ansible-6.5.0-py3-none-any.whl", hash = "sha256:2cc8c9faf9351dc46d92281eb28f21be3d2faa212b20bfc05afa98946cb788de"},
+ {file = "ansible-6.5.0.tar.gz", hash = "sha256:7c0cdcd1121a5f12ab2da4bdd2e14c2c153e01214bfc6a6bc156b61bd7401c5b"},
+]
+
+[package.dependencies]
+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"
+files = [
+ {file = "ansible-compat-2.2.1.tar.gz", hash = "sha256:7a012753a0a02dab2f22b0e574e3e7b00399f660606154474ffe25621fa80d3b"},
+ {file = "ansible_compat-2.2.1-py3-none-any.whl", hash = "sha256:8857b317bf36a00dbb0b06640d19b68bb64f667bf2a5355189f3c5961f4b1c10"},
+]
[package.dependencies]
-ansible-core = ">=2.12.1,<2.13.0"
+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
python-versions = ">=3.8"
+files = [
+ {file = "ansible-core-2.13.5.tar.gz", hash = "sha256:26dcd9218d5544cc15144f60bb5b634f2276e476c89f481b3f619c4f9def1588"},
+ {file = "ansible_core-2.13.5-py3-none-any.whl", hash = "sha256:3d2503ede324e0e73051b14e77f732a3cb0aed2437f94608af53929d2d1d54c8"},
+]
[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"
+files = [
+ {file = "ansible-lint-6.8.2.tar.gz", hash = "sha256:17dfacb0d9139a435ccf2095234e20491d556f7adb97dedd891b40566e316553"},
+ {file = "ansible_lint-6.8.2-py3-none-any.whl", hash = "sha256:dbfcf94ae4ed7c3b1747c5e4cbb8d9ba094821f28fee3d82f0ba06ef96bfccac"},
+]
[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"
+files = [
+ {file = "attrs-22.1.0-py2.py3-none-any.whl", hash = "sha256:86efa402f67bf2df34f51a335487cf46b1ec130d02b8d39fd248abfd30da551c"},
+ {file = "attrs-22.1.0.tar.gz", hash = "sha256:29adc2665447e5191d0e7c568fde78b21f9672d344281d0c6e1ab085429b22b6"},
+]
+
+[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"
+files = [
+ {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"},
+]
+
+[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 = "dev"
+optional = false
+python-versions = ">=3.7"
+files = [
+ {file = "bracex-2.3.post1-py3-none-any.whl", hash = "sha256:351b7f20d56fb9ea91f9b9e9e7664db466eb234188c175fd943f8f755c807e73"},
+ {file = "bracex-2.3.post1.tar.gz", hash = "sha256:e7b23fc8b2cd06d3dec0692baabecb249dda94e06a617901ff03a6c56fd71693"},
+]
+
+[[package]]
+name = "certifi"
+version = "2022.12.7"
+description = "Python package for providing Mozilla's CA Bundle."
category = "main"
optional = false
python-versions = ">=3.6"
+files = [
+ {file = "certifi-2022.12.7-py3-none-any.whl", hash = "sha256:4ad3232f5e926d6718ec31cfc1fcadfde020920e278684144551c91769c7bc18"},
+ {file = "certifi-2022.12.7.tar.gz", hash = "sha256:35824b4c3a97115964b408844d64aa14db1cc518f6562e8d7261699d1350a9e3"},
+]
[[package]]
name = "cffi"
-version = "1.15.0"
+version = "1.15.1"
description = "Foreign Function Interface for Python calling C code."
category = "main"
optional = false
python-versions = "*"
+files = [
+ {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"},
+]
[package.dependencies]
pycparser = "*"
[[package]]
+name = "charset-normalizer"
+version = "3.0.1"
+description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet."
+category = "main"
+optional = false
+python-versions = "*"
+files = [
+ {file = "charset-normalizer-3.0.1.tar.gz", hash = "sha256:ebea339af930f8ca5d7a699b921106c6e29c617fe9606fa7baa043c1cdae326f"},
+ {file = "charset_normalizer-3.0.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:88600c72ef7587fe1708fd242b385b6ed4b8904976d5da0893e31df8b3480cb6"},
+ {file = "charset_normalizer-3.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c75ffc45f25324e68ab238cb4b5c0a38cd1c3d7f1fb1f72b5541de469e2247db"},
+ {file = "charset_normalizer-3.0.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:db72b07027db150f468fbada4d85b3b2729a3db39178abf5c543b784c1254539"},
+ {file = "charset_normalizer-3.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:62595ab75873d50d57323a91dd03e6966eb79c41fa834b7a1661ed043b2d404d"},
+ {file = "charset_normalizer-3.0.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ff6f3db31555657f3163b15a6b7c6938d08df7adbfc9dd13d9d19edad678f1e8"},
+ {file = "charset_normalizer-3.0.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:772b87914ff1152b92a197ef4ea40efe27a378606c39446ded52c8f80f79702e"},
+ {file = "charset_normalizer-3.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:70990b9c51340e4044cfc394a81f614f3f90d41397104d226f21e66de668730d"},
+ {file = "charset_normalizer-3.0.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:292d5e8ba896bbfd6334b096e34bffb56161c81408d6d036a7dfa6929cff8783"},
+ {file = "charset_normalizer-3.0.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:2edb64ee7bf1ed524a1da60cdcd2e1f6e2b4f66ef7c077680739f1641f62f555"},
+ {file = "charset_normalizer-3.0.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:31a9ddf4718d10ae04d9b18801bd776693487cbb57d74cc3458a7673f6f34639"},
+ {file = "charset_normalizer-3.0.1-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:44ba614de5361b3e5278e1241fda3dc1838deed864b50a10d7ce92983797fa76"},
+ {file = "charset_normalizer-3.0.1-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:12db3b2c533c23ab812c2b25934f60383361f8a376ae272665f8e48b88e8e1c6"},
+ {file = "charset_normalizer-3.0.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:c512accbd6ff0270939b9ac214b84fb5ada5f0409c44298361b2f5e13f9aed9e"},
+ {file = "charset_normalizer-3.0.1-cp310-cp310-win32.whl", hash = "sha256:502218f52498a36d6bf5ea77081844017bf7982cdbe521ad85e64cabee1b608b"},
+ {file = "charset_normalizer-3.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:601f36512f9e28f029d9481bdaf8e89e5148ac5d89cffd3b05cd533eeb423b59"},
+ {file = "charset_normalizer-3.0.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:0298eafff88c99982a4cf66ba2efa1128e4ddaca0b05eec4c456bbc7db691d8d"},
+ {file = "charset_normalizer-3.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:a8d0fc946c784ff7f7c3742310cc8a57c5c6dc31631269876a88b809dbeff3d3"},
+ {file = "charset_normalizer-3.0.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:87701167f2a5c930b403e9756fab1d31d4d4da52856143b609e30a1ce7160f3c"},
+ {file = "charset_normalizer-3.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:14e76c0f23218b8f46c4d87018ca2e441535aed3632ca134b10239dfb6dadd6b"},
+ {file = "charset_normalizer-3.0.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0c0a590235ccd933d9892c627dec5bc7511ce6ad6c1011fdf5b11363022746c1"},
+ {file = "charset_normalizer-3.0.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8c7fe7afa480e3e82eed58e0ca89f751cd14d767638e2550c77a92a9e749c317"},
+ {file = "charset_normalizer-3.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:79909e27e8e4fcc9db4addea88aa63f6423ebb171db091fb4373e3312cb6d603"},
+ {file = "charset_normalizer-3.0.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8ac7b6a045b814cf0c47f3623d21ebd88b3e8cf216a14790b455ea7ff0135d18"},
+ {file = "charset_normalizer-3.0.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:72966d1b297c741541ca8cf1223ff262a6febe52481af742036a0b296e35fa5a"},
+ {file = "charset_normalizer-3.0.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:f9d0c5c045a3ca9bedfc35dca8526798eb91a07aa7a2c0fee134c6c6f321cbd7"},
+ {file = "charset_normalizer-3.0.1-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:5995f0164fa7df59db4746112fec3f49c461dd6b31b841873443bdb077c13cfc"},
+ {file = "charset_normalizer-3.0.1-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:4a8fcf28c05c1f6d7e177a9a46a1c52798bfe2ad80681d275b10dcf317deaf0b"},
+ {file = "charset_normalizer-3.0.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:761e8904c07ad053d285670f36dd94e1b6ab7f16ce62b9805c475b7aa1cffde6"},
+ {file = "charset_normalizer-3.0.1-cp311-cp311-win32.whl", hash = "sha256:71140351489970dfe5e60fc621ada3e0f41104a5eddaca47a7acb3c1b851d6d3"},
+ {file = "charset_normalizer-3.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:9ab77acb98eba3fd2a85cd160851816bfce6871d944d885febf012713f06659c"},
+ {file = "charset_normalizer-3.0.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:84c3990934bae40ea69a82034912ffe5a62c60bbf6ec5bc9691419641d7d5c9a"},
+ {file = "charset_normalizer-3.0.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:74292fc76c905c0ef095fe11e188a32ebd03bc38f3f3e9bcb85e4e6db177b7ea"},
+ {file = "charset_normalizer-3.0.1-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c95a03c79bbe30eec3ec2b7f076074f4281526724c8685a42872974ef4d36b72"},
+ {file = "charset_normalizer-3.0.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f4c39b0e3eac288fedc2b43055cfc2ca7a60362d0e5e87a637beac5d801ef478"},
+ {file = "charset_normalizer-3.0.1-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:df2c707231459e8a4028eabcd3cfc827befd635b3ef72eada84ab13b52e1574d"},
+ {file = "charset_normalizer-3.0.1-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:93ad6d87ac18e2a90b0fe89df7c65263b9a99a0eb98f0a3d2e079f12a0735837"},
+ {file = "charset_normalizer-3.0.1-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:59e5686dd847347e55dffcc191a96622f016bc0ad89105e24c14e0d6305acbc6"},
+ {file = "charset_normalizer-3.0.1-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:cd6056167405314a4dc3c173943f11249fa0f1b204f8b51ed4bde1a9cd1834dc"},
+ {file = "charset_normalizer-3.0.1-cp36-cp36m-musllinux_1_1_ppc64le.whl", hash = "sha256:083c8d17153ecb403e5e1eb76a7ef4babfc2c48d58899c98fcaa04833e7a2f9a"},
+ {file = "charset_normalizer-3.0.1-cp36-cp36m-musllinux_1_1_s390x.whl", hash = "sha256:f5057856d21e7586765171eac8b9fc3f7d44ef39425f85dbcccb13b3ebea806c"},
+ {file = "charset_normalizer-3.0.1-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:7eb33a30d75562222b64f569c642ff3dc6689e09adda43a082208397f016c39a"},
+ {file = "charset_normalizer-3.0.1-cp36-cp36m-win32.whl", hash = "sha256:95dea361dd73757c6f1c0a1480ac499952c16ac83f7f5f4f84f0658a01b8ef41"},
+ {file = "charset_normalizer-3.0.1-cp36-cp36m-win_amd64.whl", hash = "sha256:eaa379fcd227ca235d04152ca6704c7cb55564116f8bc52545ff357628e10602"},
+ {file = "charset_normalizer-3.0.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:3e45867f1f2ab0711d60c6c71746ac53537f1684baa699f4f668d4c6f6ce8e14"},
+ {file = "charset_normalizer-3.0.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cadaeaba78750d58d3cc6ac4d1fd867da6fc73c88156b7a3212a3cd4819d679d"},
+ {file = "charset_normalizer-3.0.1-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:911d8a40b2bef5b8bbae2e36a0b103f142ac53557ab421dc16ac4aafee6f53dc"},
+ {file = "charset_normalizer-3.0.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:503e65837c71b875ecdd733877d852adbc465bd82c768a067badd953bf1bc5a3"},
+ {file = "charset_normalizer-3.0.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a60332922359f920193b1d4826953c507a877b523b2395ad7bc716ddd386d866"},
+ {file = "charset_normalizer-3.0.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:16a8663d6e281208d78806dbe14ee9903715361cf81f6d4309944e4d1e59ac5b"},
+ {file = "charset_normalizer-3.0.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:a16418ecf1329f71df119e8a65f3aa68004a3f9383821edcb20f0702934d8087"},
+ {file = "charset_normalizer-3.0.1-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:9d9153257a3f70d5f69edf2325357251ed20f772b12e593f3b3377b5f78e7ef8"},
+ {file = "charset_normalizer-3.0.1-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:02a51034802cbf38db3f89c66fb5d2ec57e6fe7ef2f4a44d070a593c3688667b"},
+ {file = "charset_normalizer-3.0.1-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:2e396d70bc4ef5325b72b593a72c8979999aa52fb8bcf03f701c1b03e1166918"},
+ {file = "charset_normalizer-3.0.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:11b53acf2411c3b09e6af37e4b9005cba376c872503c8f28218c7243582df45d"},
+ {file = "charset_normalizer-3.0.1-cp37-cp37m-win32.whl", hash = "sha256:0bf2dae5291758b6f84cf923bfaa285632816007db0330002fa1de38bfcb7154"},
+ {file = "charset_normalizer-3.0.1-cp37-cp37m-win_amd64.whl", hash = "sha256:2c03cc56021a4bd59be889c2b9257dae13bf55041a3372d3295416f86b295fb5"},
+ {file = "charset_normalizer-3.0.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:024e606be3ed92216e2b6952ed859d86b4cfa52cd5bc5f050e7dc28f9b43ec42"},
+ {file = "charset_normalizer-3.0.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:4b0d02d7102dd0f997580b51edc4cebcf2ab6397a7edf89f1c73b586c614272c"},
+ {file = "charset_normalizer-3.0.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:358a7c4cb8ba9b46c453b1dd8d9e431452d5249072e4f56cfda3149f6ab1405e"},
+ {file = "charset_normalizer-3.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:81d6741ab457d14fdedc215516665050f3822d3e56508921cc7239f8c8e66a58"},
+ {file = "charset_normalizer-3.0.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8b8af03d2e37866d023ad0ddea594edefc31e827fee64f8de5611a1dbc373174"},
+ {file = "charset_normalizer-3.0.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9cf4e8ad252f7c38dd1f676b46514f92dc0ebeb0db5552f5f403509705e24753"},
+ {file = "charset_normalizer-3.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e696f0dd336161fca9adbb846875d40752e6eba585843c768935ba5c9960722b"},
+ {file = "charset_normalizer-3.0.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c22d3fe05ce11d3671297dc8973267daa0f938b93ec716e12e0f6dee81591dc1"},
+ {file = "charset_normalizer-3.0.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:109487860ef6a328f3eec66f2bf78b0b72400280d8f8ea05f69c51644ba6521a"},
+ {file = "charset_normalizer-3.0.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:37f8febc8ec50c14f3ec9637505f28e58d4f66752207ea177c1d67df25da5aed"},
+ {file = "charset_normalizer-3.0.1-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:f97e83fa6c25693c7a35de154681fcc257c1c41b38beb0304b9c4d2d9e164479"},
+ {file = "charset_normalizer-3.0.1-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:a152f5f33d64a6be73f1d30c9cc82dfc73cec6477ec268e7c6e4c7d23c2d2291"},
+ {file = "charset_normalizer-3.0.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:39049da0ffb96c8cbb65cbf5c5f3ca3168990adf3551bd1dee10c48fce8ae820"},
+ {file = "charset_normalizer-3.0.1-cp38-cp38-win32.whl", hash = "sha256:4457ea6774b5611f4bed5eaa5df55f70abde42364d498c5134b7ef4c6958e20e"},
+ {file = "charset_normalizer-3.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:e62164b50f84e20601c1ff8eb55620d2ad25fb81b59e3cd776a1902527a788af"},
+ {file = "charset_normalizer-3.0.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:8eade758719add78ec36dc13201483f8e9b5d940329285edcd5f70c0a9edbd7f"},
+ {file = "charset_normalizer-3.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:8499ca8f4502af841f68135133d8258f7b32a53a1d594aa98cc52013fff55678"},
+ {file = "charset_normalizer-3.0.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:3fc1c4a2ffd64890aebdb3f97e1278b0cc72579a08ca4de8cd2c04799a3a22be"},
+ {file = "charset_normalizer-3.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:00d3ffdaafe92a5dc603cb9bd5111aaa36dfa187c8285c543be562e61b755f6b"},
+ {file = "charset_normalizer-3.0.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c2ac1b08635a8cd4e0cbeaf6f5e922085908d48eb05d44c5ae9eabab148512ca"},
+ {file = "charset_normalizer-3.0.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f6f45710b4459401609ebebdbcfb34515da4fc2aa886f95107f556ac69a9147e"},
+ {file = "charset_normalizer-3.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3ae1de54a77dc0d6d5fcf623290af4266412a7c4be0b1ff7444394f03f5c54e3"},
+ {file = "charset_normalizer-3.0.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3b590df687e3c5ee0deef9fc8c547d81986d9a1b56073d82de008744452d6541"},
+ {file = "charset_normalizer-3.0.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:ab5de034a886f616a5668aa5d098af2b5385ed70142090e2a31bcbd0af0fdb3d"},
+ {file = "charset_normalizer-3.0.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:9cb3032517f1627cc012dbc80a8ec976ae76d93ea2b5feaa9d2a5b8882597579"},
+ {file = "charset_normalizer-3.0.1-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:608862a7bf6957f2333fc54ab4399e405baad0163dc9f8d99cb236816db169d4"},
+ {file = "charset_normalizer-3.0.1-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:0f438ae3532723fb6ead77e7c604be7c8374094ef4ee2c5e03a3a17f1fca256c"},
+ {file = "charset_normalizer-3.0.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:356541bf4381fa35856dafa6a965916e54bed415ad8a24ee6de6e37deccf2786"},
+ {file = "charset_normalizer-3.0.1-cp39-cp39-win32.whl", hash = "sha256:39cf9ed17fe3b1bc81f33c9ceb6ce67683ee7526e65fde1447c772afc54a1bb8"},
+ {file = "charset_normalizer-3.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:0a11e971ed097d24c534c037d298ad32c6ce81a45736d31e0ff0ad37ab437d59"},
+ {file = "charset_normalizer-3.0.1-py3-none-any.whl", hash = "sha256:7e189e2e1d3ed2f4aebabd2d5b0f931e883676e51c7624826e0a4e5fe8a0bf24"},
+]
+
+[[package]]
+name = "click"
+version = "8.1.3"
+description = "Composable command line interface toolkit"
+category = "dev"
+optional = false
+python-versions = ">=3.7"
+files = [
+ {file = "click-8.1.3-py3-none-any.whl", hash = "sha256:bb4d8133cb15a609f44e8213d9b391b0809795062913b383c62be0ee95b1db48"},
+ {file = "click-8.1.3.tar.gz", hash = "sha256:7682dc8afb30297001674575ea00d1814d808d6a36af415a82bd481d37ba7b8e"},
+]
+
+[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.*"
+files = [
+ {file = "colorama-0.4.5-py2.py3-none-any.whl", hash = "sha256:854bf444933e37f5824ae7bfc1e98d5bce2ebe4160d46b5edf346a89358e99da"},
+ {file = "colorama-0.4.5.tar.gz", hash = "sha256:e6c6b4334fc50988a639d9b98aa429a0b57da6e17b9a44f0451f930b6967b7a4"},
+]
[[package]]
name = "commonmark"
version = "0.9.1"
description = "Python parser for the CommonMark Markdown spec"
-category = "main"
+category = "dev"
optional = false
python-versions = "*"
+files = [
+ {file = "commonmark-0.9.1-py2.py3-none-any.whl", hash = "sha256:da2f38c92590f83de410ba1a3cbceafbc74fee9def35f9251ba9a971d6d66fd9"},
+ {file = "commonmark-0.9.1.tar.gz", hash = "sha256:452f9dc859be7f06631ddcb328b6919c67984aca654e5fefb3914d54691aed60"},
+]
[package.extras]
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
python-versions = ">=3.6"
+files = [
+ {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"},
+]
[package.dependencies]
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"
+name = "deprecated"
+version = "1.2.13"
+description = "Python @deprecated decorator to deprecate old python classes, functions or methods."
category = "main"
optional = false
-python-versions = ">=3.6"
+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
+files = [
+ {file = "Deprecated-1.2.13-py2.py3-none-any.whl", hash = "sha256:64756e3e14c8c5eea9795d93c524551432a0be75629f8f29e67ab8caf076c76d"},
+ {file = "Deprecated-1.2.13.tar.gz", hash = "sha256:43ac5335da90c31c24ba028af536a91d41d53f9e6901ddb021bcc572ce44e38d"},
+]
[package.dependencies]
-rich = ">=9.5.1"
+wrapt = ">=1.10,<2"
+
+[package.extras]
+dev = ["PyTest", "PyTest (<5)", "PyTest-Cov", "PyTest-Cov (<2.6)", "bump2version (<1)", "configparser (<5)", "importlib-metadata (<3)", "importlib-resources (<4)", "sphinx (<2)", "sphinxcontrib-websupport (<2)", "tox", "zipp (<2)"]
+
+[[package]]
+name = "filelock"
+version = "3.8.0"
+description = "A platform independent file lock."
+category = "dev"
+optional = false
+python-versions = ">=3.7"
+files = [
+ {file = "filelock-3.8.0-py3-none-any.whl", hash = "sha256:617eb4e5eedc82fc5f47b6d61e4d11cb837c56cb4544e39081099fa17ad109d4"},
+ {file = "filelock-3.8.0.tar.gz", hash = "sha256:55447caa666f2198c5b6b13a26d2084d26fa5b115c00d065664b2124680c4edc"},
+]
[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 = "idna"
+version = "3.4"
+description = "Internationalized Domain Names in Applications (IDNA)"
+category = "main"
+optional = false
+python-versions = ">=3.5"
+files = [
+ {file = "idna-3.4-py3-none-any.whl", hash = "sha256:90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2"},
+ {file = "idna-3.4.tar.gz", hash = "sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4"},
+]
[[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"
+files = [
+ {file = "Jinja2-3.1.2-py3-none-any.whl", hash = "sha256:6088930bfe239f0e6710546ab9c19c9ef35e29792895fed6e6e31a023a182a61"},
+ {file = "Jinja2-3.1.2.tar.gz", hash = "sha256:31351a702a408a9e7595a8fc6150fc3f43bb6bf7e319770cbc0db9df9437e852"},
+]
[package.dependencies]
MarkupSafe = ">=2.0"
@@ -133,27 +500,102 @@ 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"
+files = [
+ {file = "jsonschema-4.16.0-py3-none-any.whl", hash = "sha256:9e74b8f9738d6a946d70705dc692b74b5429cd0960d58e79ffecfc43b2221eb9"},
+ {file = "jsonschema-4.16.0.tar.gz", hash = "sha256:165059f076eff6971bae5b742fc029a7b4ef3f9bcf04c14e4776a7605de14b23"},
+]
+
+[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"
+files = [
+ {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"},
+]
[[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.*"
+files = []
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 = "*"
+files = [
+ {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"},
+]
[[package]]
name = "packaging"
@@ -162,69 +604,284 @@ description = "Core utilities for Python packages"
category = "main"
optional = false
python-versions = ">=3.6"
+files = [
+ {file = "packaging-21.3-py3-none-any.whl", hash = "sha256:ef103e05f519cdc783ae24ea4e2e0f508a9c99b2d4969652eed6a2e1ea5bd522"},
+ {file = "packaging-21.3.tar.gz", hash = "sha256:dd47c42927d89ab911e606518907cc2d3a1f38bbd026385970643f9c5b8ecfeb"},
+]
[package.dependencies]
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"
+files = [
+ {file = "pathspec-0.10.1-py3-none-any.whl", hash = "sha256:46846318467efc4556ccfd27816e004270a9eeeeb4d062ce5e6fc7a87c573f93"},
+ {file = "pathspec-0.10.1.tar.gz", hash = "sha256:7ace6161b621d31e7902eb6b5ae148d12cfd23f4a249b9ffb6b9fee12084323d"},
+]
+
+[[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"
+files = [
+ {file = "platformdirs-2.5.2-py3-none-any.whl", hash = "sha256:027d8e83a2d7de06bbac4e5ef7e023c02b863d7ea5d079477e722bb41ab25788"},
+ {file = "platformdirs-2.5.2.tar.gz", hash = "sha256:58c8abb07dcb441e6ee4b11d8df0ac856038f944ab98b7be6b27b2a3c7feef19"},
+]
+
+[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"
category = "main"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
+files = [
+ {file = "pycparser-2.21-py2.py3-none-any.whl", hash = "sha256:8ee45429555515e1f6b185e78100aea234072576aa43ab53aefcae078162fca9"},
+ {file = "pycparser-2.21.tar.gz", hash = "sha256:e644fdec12f7872f86c58ff790da456218b10f863970249516d60a5eaca77206"},
+]
+
+[[package]]
+name = "pygithub"
+version = "1.57"
+description = "Use the full Github API v3"
+category = "main"
+optional = false
+python-versions = ">=3.7"
+files = [
+ {file = "PyGithub-1.57-py3-none-any.whl", hash = "sha256:5822febeac2391f1306c55a99af2bc8f86c8bf82ded000030cd02c18f31b731f"},
+ {file = "PyGithub-1.57.tar.gz", hash = "sha256:c273f252b278fb81f1769505cc6921bdb6791e1cebd6ac850cc97dad13c31ff3"},
+]
+
+[package.dependencies]
+deprecated = "*"
+pyjwt = ">=2.4.0"
+pynacl = ">=1.4.0"
+requests = ">=2.14.0"
+
+[package.extras]
+integrations = ["cryptography"]
[[package]]
name = "pygments"
-version = "2.10.0"
+version = "2.13.0"
description = "Pygments is a syntax highlighting package written in Python."
+category = "dev"
+optional = false
+python-versions = ">=3.6"
+files = [
+ {file = "Pygments-2.13.0-py3-none-any.whl", hash = "sha256:f643f331ab57ba3c9d89212ee4a2dabc6e94f117cf4eefde99a0574720d14c42"},
+ {file = "Pygments-2.13.0.tar.gz", hash = "sha256:56a8508ae95f98e2b9bdf93a6be5ae3f7d8af858b43e02c5a2ff083726be40c1"},
+]
+
+[package.extras]
+plugins = ["importlib-metadata"]
+
+[[package]]
+name = "pyjwt"
+version = "2.6.0"
+description = "JSON Web Token implementation in Python"
category = "main"
optional = false
-python-versions = ">=3.5"
+python-versions = ">=3.7"
+files = [
+ {file = "PyJWT-2.6.0-py3-none-any.whl", hash = "sha256:d83c3d892a77bbb74d3e1a2cfa90afaadb60945205d1095d9221f04466f64c14"},
+ {file = "PyJWT-2.6.0.tar.gz", hash = "sha256:69285c7e31fc44f68a1feb309e948e0df53259d579295e6cfe2b1792329f05fd"},
+]
+
+[package.extras]
+crypto = ["cryptography (>=3.4.0)"]
+dev = ["coverage[toml] (==5.0.4)", "cryptography (>=3.4.0)", "pre-commit", "pytest (>=6.0.0,<7.0.0)", "sphinx (>=4.5.0,<5.0.0)", "sphinx-rtd-theme", "zope.interface"]
+docs = ["sphinx (>=4.5.0,<5.0.0)", "sphinx-rtd-theme", "zope.interface"]
+tests = ["coverage[toml] (==5.0.4)", "pytest (>=6.0.0,<7.0.0)"]
[[package]]
-name = "pyparsing"
-version = "3.0.6"
-description = "Python parsing module"
+name = "pynacl"
+version = "1.5.0"
+description = "Python binding to the Networking and Cryptography (NaCl) library"
category = "main"
optional = false
python-versions = ">=3.6"
+files = [
+ {file = "PyNaCl-1.5.0-cp36-abi3-macosx_10_10_universal2.whl", hash = "sha256:401002a4aaa07c9414132aaed7f6836ff98f59277a234704ff66878c2ee4a0d1"},
+ {file = "PyNaCl-1.5.0-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:52cb72a79269189d4e0dc537556f4740f7f0a9ec41c1322598799b0bdad4ef92"},
+ {file = "PyNaCl-1.5.0-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a36d4a9dda1f19ce6e03c9a784a2921a4b726b02e1c736600ca9c22029474394"},
+ {file = "PyNaCl-1.5.0-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:0c84947a22519e013607c9be43706dd42513f9e6ae5d39d3613ca1e142fba44d"},
+ {file = "PyNaCl-1.5.0-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:06b8f6fa7f5de8d5d2f7573fe8c863c051225a27b61e6860fd047b1775807858"},
+ {file = "PyNaCl-1.5.0-cp36-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:a422368fc821589c228f4c49438a368831cb5bbc0eab5ebe1d7fac9dded6567b"},
+ {file = "PyNaCl-1.5.0-cp36-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:61f642bf2378713e2c2e1de73444a3778e5f0a38be6fee0fe532fe30060282ff"},
+ {file = "PyNaCl-1.5.0-cp36-abi3-win32.whl", hash = "sha256:e46dae94e34b085175f8abb3b0aaa7da40767865ac82c928eeb9e57e1ea8a543"},
+ {file = "PyNaCl-1.5.0-cp36-abi3-win_amd64.whl", hash = "sha256:20f42270d27e1b6a29f54032090b972d97f0a1b0948cc52392041ef7831fee93"},
+ {file = "PyNaCl-1.5.0.tar.gz", hash = "sha256:8ac7448f09ab85811607bdd21ec2464495ac8b7c66d146bf545b0f08fb9220ba"},
+]
+
+[package.dependencies]
+cffi = ">=1.4.1"
+
+[package.extras]
+docs = ["sphinx (>=1.6.5)", "sphinx-rtd-theme"]
+tests = ["hypothesis (>=3.27.0)", "pytest (>=3.2.1,!=3.3.0)"]
+
+[[package]]
+name = "pyparsing"
+version = "3.0.9"
+description = "pyparsing module - Classes and methods to define and execute parsing grammars"
+category = "main"
+optional = false
+python-versions = ">=3.6.8"
+files = [
+ {file = "pyparsing-3.0.9-py3-none-any.whl", hash = "sha256:5026bae9a10eeaefb61dab2f09052b9f4307d44aee4eda64b309723d8d206bbc"},
+ {file = "pyparsing-3.0.9.tar.gz", hash = "sha256:2b020ecf7d21b687f219b71ecad3631f644a47f01403fa1d1036b0c6416d70fb"},
+]
[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"
+files = [
+ {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"},
+]
+
+[[package]]
name = "pyyaml"
version = "6.0"
description = "YAML parser and emitter for Python"
category = "main"
optional = false
python-versions = ">=3.6"
+files = [
+ {file = "PyYAML-6.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d4db7c7aef085872ef65a8fd7d6d09a14ae91f691dec3e87ee5ee0539d516f53"},
+ {file = "PyYAML-6.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9df7ed3b3d2e0ecfe09e14741b857df43adb5a3ddadc919a2d94fbdf78fea53c"},
+ {file = "PyYAML-6.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:77f396e6ef4c73fdc33a9157446466f1cff553d979bd00ecb64385760c6babdc"},
+ {file = "PyYAML-6.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a80a78046a72361de73f8f395f1f1e49f956c6be882eed58505a15f3e430962b"},
+ {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"},
+ {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:98c4d36e99714e55cfbaaee6dd5badbc9a1ec339ebfc3b1f52e293aee6bb71a4"},
+ {file = "PyYAML-6.0-cp36-cp36m-win32.whl", hash = "sha256:0283c35a6a9fbf047493e3a0ce8d79ef5030852c51e9d911a27badfde0605293"},
+ {file = "PyYAML-6.0-cp36-cp36m-win_amd64.whl", hash = "sha256:07751360502caac1c067a8132d150cf3d61339af5691fe9e87803040dbc5db57"},
+ {file = "PyYAML-6.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:819b3830a1543db06c4d4b865e70ded25be52a2e0631ccd2f6a47a2822f2fd7c"},
+ {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:473f9edb243cb1935ab5a084eb238d842fb8f404ed2193a915d1784b5a6b5fc0"},
+ {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0ce82d761c532fe4ec3f87fc45688bdd3a4c1dc5e0b4a19814b9009a29baefd4"},
+ {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:231710d57adfd809ef5d34183b8ed1eeae3f76459c18fb4a0b373ad56bedcdd9"},
+ {file = "PyYAML-6.0-cp37-cp37m-win32.whl", hash = "sha256:c5687b8d43cf58545ade1fe3e055f70eac7a5a1a0bf42824308d868289a95737"},
+ {file = "PyYAML-6.0-cp37-cp37m-win_amd64.whl", hash = "sha256:d15a181d1ecd0d4270dc32edb46f7cb7733c7c508857278d3d378d14d606db2d"},
+ {file = "PyYAML-6.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0b4624f379dab24d3725ffde76559cff63d9ec94e1736b556dacdfebe5ab6d4b"},
+ {file = "PyYAML-6.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:213c60cd50106436cc818accf5baa1aba61c0189ff610f64f4a3e8c6726218ba"},
+ {file = "PyYAML-6.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9fa600030013c4de8165339db93d182b9431076eb98eb40ee068700c9c813e34"},
+ {file = "PyYAML-6.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:277a0ef2981ca40581a47093e9e2d13b3f1fbbeffae064c1d21bfceba2030287"},
+ {file = "PyYAML-6.0-cp38-cp38-win32.whl", hash = "sha256:d4eccecf9adf6fbcc6861a38015c2a64f38b9d94838ac1810a9023a0609e1b78"},
+ {file = "PyYAML-6.0-cp38-cp38-win_amd64.whl", hash = "sha256:1e4747bc279b4f613a09eb64bba2ba602d8a6664c6ce6396a4d0cd413a50ce07"},
+ {file = "PyYAML-6.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:055d937d65826939cb044fc8c9b08889e8c743fdc6a32b33e2390f66013e449b"},
+ {file = "PyYAML-6.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e61ceaab6f49fb8bdfaa0f92c4b57bcfbea54c09277b1b4f7ac376bfb7a7c174"},
+ {file = "PyYAML-6.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d67d839ede4ed1b28a4e8909735fc992a923cdb84e618544973d7dfc71540803"},
+ {file = "PyYAML-6.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cba8c411ef271aa037d7357a2bc8f9ee8b58b9965831d9e51baf703280dc73d3"},
+ {file = "PyYAML-6.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:40527857252b61eacd1d9af500c3337ba8deb8fc298940291486c465c8b46ec0"},
+ {file = "PyYAML-6.0-cp39-cp39-win32.whl", hash = "sha256:b5b9eccad747aabaaffbc6064800670f0c297e52c12754eb1d976c57e4f74dcb"},
+ {file = "PyYAML-6.0-cp39-cp39-win_amd64.whl", hash = "sha256:b3d267842bf12586ba6c734f89d1f5b871df0273157918b0ccefa29deb05c21c"},
+ {file = "PyYAML-6.0.tar.gz", hash = "sha256:68fb519c14306fec9720a2a5b45bc9f0c8d1b9c72adf45c37baedfcd949c35a2"},
+]
+
+[[package]]
+name = "requests"
+version = "2.28.2"
+description = "Python HTTP for Humans."
+category = "main"
+optional = false
+python-versions = ">=3.7, <4"
+files = [
+ {file = "requests-2.28.2-py3-none-any.whl", hash = "sha256:64299f4909223da747622c030b781c0d7811e359c37124b4bd368fb8c6518baa"},
+ {file = "requests-2.28.2.tar.gz", hash = "sha256:98b1b2782e3c6c4904938b84c0eb932721069dfdb9134313beff7c83c2df24bf"},
+]
+
+[package.dependencies]
+certifi = ">=2017.4.17"
+charset-normalizer = ">=2,<4"
+idna = ">=2.5,<4"
+urllib3 = ">=1.21.1,<1.27"
+
+[package.extras]
+socks = ["PySocks (>=1.5.6,!=1.5.7)"]
+use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"]
[[package]]
name = "resolvelib"
-version = "0.5.5"
+version = "0.8.1"
description = "Resolve abstract dependencies into concrete ones"
category = "main"
optional = false
python-versions = "*"
+files = [
+ {file = "resolvelib-0.8.1-py2.py3-none-any.whl", hash = "sha256:d9b7907f055c3b3a2cfc56c914ffd940122915826ff5fb5b1de0c99778f4de98"},
+ {file = "resolvelib-0.8.1.tar.gz", hash = "sha256:c6ea56732e9fb6fca1b2acc2ccc68a0b6b8c566d8f3e78e0443310ede61dbd37"},
+]
[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"
+files = [
+ {file = "rich-12.6.0-py3-none-any.whl", hash = "sha256:a4eb26484f2c82589bd9a17c73d32a010b1e29d89f1604cd9bf3a2097b81bb5e"},
+ {file = "rich-12.6.0.tar.gz", hash = "sha256:ba3a3775974105c221d31141f2c116f4fd65c5ceb0698657a11e9f295ec93fd0"},
+]
[package.dependencies]
-colorama = ">=0.4.0,<0.5.0"
commonmark = ">=0.9.0,<0.10.0"
pygments = ">=2.6.0,<3.0.0"
@@ -232,12 +889,16 @@ 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"
+files = [
+ {file = "ruamel.yaml-0.17.21-py3-none-any.whl", hash = "sha256:742b35d3d665023981bd6d16b3d24248ce5df75fdb4e2924e93a05c1f8b61ca7"},
+ {file = "ruamel.yaml-0.17.21.tar.gz", hash = "sha256:8b7ce697a2f212752a35c1ac414471dc16c424c9573be4926b56ff3f5d23b7af"},
+]
[package.dependencies]
"ruamel.yaml.clib" = {version = ">=0.2.6", markers = "platform_python_implementation == \"CPython\" and python_version < \"3.11\""}
@@ -247,312 +908,228 @@ 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"
+files = [
+ {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"},
+]
[[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"
+files = [
+ {file = "setuptools-65.5.0-py3-none-any.whl", hash = "sha256:f62ea9da9ed6289bfe868cd6845968a2c854d1427f8548d52cae02a42b4f0356"},
+ {file = "setuptools-65.5.0.tar.gz", hash = "sha256:512e5536220e38146176efb833d4a62aa726b7bbff82cfbc8ba9eaa3996e0b17"},
+]
+
+[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"
+files = [
+ {file = "subprocess-tee-0.3.5.tar.gz", hash = "sha256:ff5cced589a4b8ac973276ca1ba21bb6e3de600cde11a69947ff51f696efd577"},
+ {file = "subprocess_tee-0.3.5-py3-none-any.whl", hash = "sha256:d34186c639aa7f8013b5dfba80e17f52589539137c9d9205f2ae1c1bd03549e1"},
+]
+
+[package.extras]
+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"
+files = [
+ {file = "tomli-2.0.1-py3-none-any.whl", hash = "sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc"},
+ {file = "tomli-2.0.1.tar.gz", hash = "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f"},
+]
+
+[[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"
+files = [
+ {file = "typing_extensions-4.4.0-py3-none-any.whl", hash = "sha256:16fa4864408f655d35ec496218b85f79b3437c829e93320c7c9215ccfd92489e"},
+ {file = "typing_extensions-4.4.0.tar.gz", hash = "sha256:1511434bb92bf8dd198c12b1cc812e800d4181cfcb867674e0f8279cc93087aa"},
+]
+
+[[package]]
+name = "urllib3"
+version = "1.26.14"
+description = "HTTP library with thread-safe connection pooling, file post, and more."
+category = "main"
+optional = false
+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*"
+files = [
+ {file = "urllib3-1.26.14-py2.py3-none-any.whl", hash = "sha256:75edcdc2f7d85b137124a6c3c9fc3933cdeaa12ecb9a6a959f22797a0feca7e1"},
+ {file = "urllib3-1.26.14.tar.gz", hash = "sha256:076907bf8fd355cde77728471316625a4d2f7e713c125f51953bb5b3eecf4f72"},
+]
[package.extras]
-doc = ["reno", "sphinx", "tornado (>=4.5)"]
+brotli = ["brotli (>=1.0.9)", "brotlicffi (>=0.8.0)", "brotlipy (>=0.6.0)"]
+secure = ["certifi", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "ipaddress", "pyOpenSSL (>=0.14)", "urllib3-secure-extra"]
+socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"]
[[package]]
name = "wcmatch"
-version = "8.3"
+version = "8.4.1"
description = "Wildcard/glob file name matcher."
+category = "dev"
+optional = false
+python-versions = ">=3.7"
+files = [
+ {file = "wcmatch-8.4.1-py3-none-any.whl", hash = "sha256:3476cd107aba7b25ba1d59406938a47dc7eec6cfd0ad09ff77193f21a964dee7"},
+ {file = "wcmatch-8.4.1.tar.gz", hash = "sha256:b1f042a899ea4c458b7321da1b5e3331e3e0ec781583434de1301946ceadb943"},
+]
+
+[package.dependencies]
+bracex = ">=2.1.1"
+
+[[package]]
+name = "wrapt"
+version = "1.14.1"
+description = "Module for decorators, wrappers and monkey patching."
category = "main"
optional = false
+python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7"
+files = [
+ {file = "wrapt-1.14.1-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:1b376b3f4896e7930f1f772ac4b064ac12598d1c38d04907e696cc4d794b43d3"},
+ {file = "wrapt-1.14.1-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:903500616422a40a98a5a3c4ff4ed9d0066f3b4c951fa286018ecdf0750194ef"},
+ {file = "wrapt-1.14.1-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:5a9a0d155deafd9448baff28c08e150d9b24ff010e899311ddd63c45c2445e28"},
+ {file = "wrapt-1.14.1-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:ddaea91abf8b0d13443f6dac52e89051a5063c7d014710dcb4d4abb2ff811a59"},
+ {file = "wrapt-1.14.1-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:36f582d0c6bc99d5f39cd3ac2a9062e57f3cf606ade29a0a0d6b323462f4dd87"},
+ {file = "wrapt-1.14.1-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:7ef58fb89674095bfc57c4069e95d7a31cfdc0939e2a579882ac7d55aadfd2a1"},
+ {file = "wrapt-1.14.1-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:e2f83e18fe2f4c9e7db597e988f72712c0c3676d337d8b101f6758107c42425b"},
+ {file = "wrapt-1.14.1-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:ee2b1b1769f6707a8a445162ea16dddf74285c3964f605877a20e38545c3c462"},
+ {file = "wrapt-1.14.1-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:833b58d5d0b7e5b9832869f039203389ac7cbf01765639c7309fd50ef619e0b1"},
+ {file = "wrapt-1.14.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:80bb5c256f1415f747011dc3604b59bc1f91c6e7150bd7db03b19170ee06b320"},
+ {file = "wrapt-1.14.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:07f7a7d0f388028b2df1d916e94bbb40624c59b48ecc6cbc232546706fac74c2"},
+ {file = "wrapt-1.14.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:02b41b633c6261feff8ddd8d11c711df6842aba629fdd3da10249a53211a72c4"},
+ {file = "wrapt-1.14.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2fe803deacd09a233e4762a1adcea5db5d31e6be577a43352936179d14d90069"},
+ {file = "wrapt-1.14.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:257fd78c513e0fb5cdbe058c27a0624c9884e735bbd131935fd49e9fe719d310"},
+ {file = "wrapt-1.14.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:4fcc4649dc762cddacd193e6b55bc02edca674067f5f98166d7713b193932b7f"},
+ {file = "wrapt-1.14.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:11871514607b15cfeb87c547a49bca19fde402f32e2b1c24a632506c0a756656"},
+ {file = "wrapt-1.14.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:8ad85f7f4e20964db4daadcab70b47ab05c7c1cf2a7c1e51087bfaa83831854c"},
+ {file = "wrapt-1.14.1-cp310-cp310-win32.whl", hash = "sha256:a9a52172be0b5aae932bef82a79ec0a0ce87288c7d132946d645eba03f0ad8a8"},
+ {file = "wrapt-1.14.1-cp310-cp310-win_amd64.whl", hash = "sha256:6d323e1554b3d22cfc03cd3243b5bb815a51f5249fdcbb86fda4bf62bab9e164"},
+ {file = "wrapt-1.14.1-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:43ca3bbbe97af00f49efb06e352eae40434ca9d915906f77def219b88e85d907"},
+ {file = "wrapt-1.14.1-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:6b1a564e6cb69922c7fe3a678b9f9a3c54e72b469875aa8018f18b4d1dd1adf3"},
+ {file = "wrapt-1.14.1-cp35-cp35m-manylinux2010_i686.whl", hash = "sha256:00b6d4ea20a906c0ca56d84f93065b398ab74b927a7a3dbd470f6fc503f95dc3"},
+ {file = "wrapt-1.14.1-cp35-cp35m-manylinux2010_x86_64.whl", hash = "sha256:a85d2b46be66a71bedde836d9e41859879cc54a2a04fad1191eb50c2066f6e9d"},
+ {file = "wrapt-1.14.1-cp35-cp35m-win32.whl", hash = "sha256:dbcda74c67263139358f4d188ae5faae95c30929281bc6866d00573783c422b7"},
+ {file = "wrapt-1.14.1-cp35-cp35m-win_amd64.whl", hash = "sha256:b21bb4c09ffabfa0e85e3a6b623e19b80e7acd709b9f91452b8297ace2a8ab00"},
+ {file = "wrapt-1.14.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:9e0fd32e0148dd5dea6af5fee42beb949098564cc23211a88d799e434255a1f4"},
+ {file = "wrapt-1.14.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9736af4641846491aedb3c3f56b9bc5568d92b0692303b5a305301a95dfd38b1"},
+ {file = "wrapt-1.14.1-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5b02d65b9ccf0ef6c34cba6cf5bf2aab1bb2f49c6090bafeecc9cd81ad4ea1c1"},
+ {file = "wrapt-1.14.1-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:21ac0156c4b089b330b7666db40feee30a5d52634cc4560e1905d6529a3897ff"},
+ {file = "wrapt-1.14.1-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:9f3e6f9e05148ff90002b884fbc2a86bd303ae847e472f44ecc06c2cd2fcdb2d"},
+ {file = "wrapt-1.14.1-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:6e743de5e9c3d1b7185870f480587b75b1cb604832e380d64f9504a0535912d1"},
+ {file = "wrapt-1.14.1-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:d79d7d5dc8a32b7093e81e97dad755127ff77bcc899e845f41bf71747af0c569"},
+ {file = "wrapt-1.14.1-cp36-cp36m-win32.whl", hash = "sha256:81b19725065dcb43df02b37e03278c011a09e49757287dca60c5aecdd5a0b8ed"},
+ {file = "wrapt-1.14.1-cp36-cp36m-win_amd64.whl", hash = "sha256:b014c23646a467558be7da3d6b9fa409b2c567d2110599b7cf9a0c5992b3b471"},
+ {file = "wrapt-1.14.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:88bd7b6bd70a5b6803c1abf6bca012f7ed963e58c68d76ee20b9d751c74a3248"},
+ {file = "wrapt-1.14.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b5901a312f4d14c59918c221323068fad0540e34324925c8475263841dbdfe68"},
+ {file = "wrapt-1.14.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d77c85fedff92cf788face9bfa3ebaa364448ebb1d765302e9af11bf449ca36d"},
+ {file = "wrapt-1.14.1-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8d649d616e5c6a678b26d15ece345354f7c2286acd6db868e65fcc5ff7c24a77"},
+ {file = "wrapt-1.14.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:7d2872609603cb35ca513d7404a94d6d608fc13211563571117046c9d2bcc3d7"},
+ {file = "wrapt-1.14.1-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:ee6acae74a2b91865910eef5e7de37dc6895ad96fa23603d1d27ea69df545015"},
+ {file = "wrapt-1.14.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:2b39d38039a1fdad98c87279b48bc5dce2c0ca0d73483b12cb72aa9609278e8a"},
+ {file = "wrapt-1.14.1-cp37-cp37m-win32.whl", hash = "sha256:60db23fa423575eeb65ea430cee741acb7c26a1365d103f7b0f6ec412b893853"},
+ {file = "wrapt-1.14.1-cp37-cp37m-win_amd64.whl", hash = "sha256:709fe01086a55cf79d20f741f39325018f4df051ef39fe921b1ebe780a66184c"},
+ {file = "wrapt-1.14.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:8c0ce1e99116d5ab21355d8ebe53d9460366704ea38ae4d9f6933188f327b456"},
+ {file = "wrapt-1.14.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:e3fb1677c720409d5f671e39bac6c9e0e422584e5f518bfd50aa4cbbea02433f"},
+ {file = "wrapt-1.14.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:642c2e7a804fcf18c222e1060df25fc210b9c58db7c91416fb055897fc27e8cc"},
+ {file = "wrapt-1.14.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7b7c050ae976e286906dd3f26009e117eb000fb2cf3533398c5ad9ccc86867b1"},
+ {file = "wrapt-1.14.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ef3f72c9666bba2bab70d2a8b79f2c6d2c1a42a7f7e2b0ec83bb2f9e383950af"},
+ {file = "wrapt-1.14.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:01c205616a89d09827986bc4e859bcabd64f5a0662a7fe95e0d359424e0e071b"},
+ {file = "wrapt-1.14.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:5a0f54ce2c092aaf439813735584b9537cad479575a09892b8352fea5e988dc0"},
+ {file = "wrapt-1.14.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:2cf71233a0ed05ccdabe209c606fe0bac7379fdcf687f39b944420d2a09fdb57"},
+ {file = "wrapt-1.14.1-cp38-cp38-win32.whl", hash = "sha256:aa31fdcc33fef9eb2552cbcbfee7773d5a6792c137b359e82879c101e98584c5"},
+ {file = "wrapt-1.14.1-cp38-cp38-win_amd64.whl", hash = "sha256:d1967f46ea8f2db647c786e78d8cc7e4313dbd1b0aca360592d8027b8508e24d"},
+ {file = "wrapt-1.14.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3232822c7d98d23895ccc443bbdf57c7412c5a65996c30442ebe6ed3df335383"},
+ {file = "wrapt-1.14.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:988635d122aaf2bdcef9e795435662bcd65b02f4f4c1ae37fbee7401c440b3a7"},
+ {file = "wrapt-1.14.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9cca3c2cdadb362116235fdbd411735de4328c61425b0aa9f872fd76d02c4e86"},
+ {file = "wrapt-1.14.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d52a25136894c63de15a35bc0bdc5adb4b0e173b9c0d07a2be9d3ca64a332735"},
+ {file = "wrapt-1.14.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:40e7bc81c9e2b2734ea4bc1aceb8a8f0ceaac7c5299bc5d69e37c44d9081d43b"},
+ {file = "wrapt-1.14.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:b9b7a708dd92306328117d8c4b62e2194d00c365f18eff11a9b53c6f923b01e3"},
+ {file = "wrapt-1.14.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:6a9a25751acb379b466ff6be78a315e2b439d4c94c1e99cb7266d40a537995d3"},
+ {file = "wrapt-1.14.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:34aa51c45f28ba7f12accd624225e2b1e5a3a45206aa191f6f9aac931d9d56fe"},
+ {file = "wrapt-1.14.1-cp39-cp39-win32.whl", hash = "sha256:dee0ce50c6a2dd9056c20db781e9c1cfd33e77d2d569f5d1d9321c641bb903d5"},
+ {file = "wrapt-1.14.1-cp39-cp39-win_amd64.whl", hash = "sha256:dee60e1de1898bde3b238f18340eec6148986da0455d8ba7848d50470a7a32fb"},
+ {file = "wrapt-1.14.1.tar.gz", hash = "sha256:380a85cf89e0e69b7cfbe2ea9f765f004ff419f34194018a6827ac0e3edfed4d"},
+]
+
+[[package]]
+name = "yamllint"
+version = "1.28.0"
+description = "A linter for YAML files."
+category = "dev"
+optional = false
python-versions = ">=3.6"
+files = [
+ {file = "yamllint-1.28.0-py2.py3-none-any.whl", hash = "sha256:89bb5b5ac33b1ade059743cf227de73daa34d5e5a474b06a5e17fc16583b0cf2"},
+ {file = "yamllint-1.28.0.tar.gz", hash = "sha256:9e3d8ddd16d0583214c5fdffe806c9344086721f107435f68bad990e5a88826b"},
+]
[package.dependencies]
-bracex = ">=2.1.1"
+pathspec = ">=0.5.3"
+pyyaml = "*"
+setuptools = "*"
[metadata]
-lock-version = "1.1"
+lock-version = "2.0"
python-versions = "^3.9"
-content-hash = "2ac6e5c214fd98e719ec10591f466f0b80d01e900c87642419216e23b02e5854"
-
-[metadata.files]
-ansible = [
- {file = "ansible-5.1.0.tar.gz", hash = "sha256:7604f264f9bdf31442ea152fa4eb77fe700100ff5e54103822d284551b7524bc"},
-]
-ansible-core = [
- {file = "ansible-core-2.12.1.tar.gz", hash = "sha256:a4508707262be11bb4dd98a006f1b14817879a055e6b6c46ad9fca8894fb3073"},
-]
-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"},
-]
-bracex = [
- {file = "bracex-2.2.1-py3-none-any.whl", hash = "sha256:096c4b788bf492f7af4e90ef8b5bcbfb99759ae3415ea1b83c9d29a5ed8f9a94"},
- {file = "bracex-2.2.1.tar.gz", hash = "sha256:1c8d1296e00ad9a91030ccb4c291f9e4dc7c054f12c707ba3c5ff3e9a81bcd21"},
-]
-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"},
-]
-colorama = [
- {file = "colorama-0.4.4-py2.py3-none-any.whl", hash = "sha256:9f47eda37229f68eee03b24b9748937c7dc3868f906e8ba69fbcbdd3bc5dc3e2"},
- {file = "colorama-0.4.4.tar.gz", hash = "sha256:5941b2b48a20143d2267e95b1c2a7603ce057ee39fd88e7329b0c292aa16869b"},
-]
-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"},
-]
-jinja2 = [
- {file = "Jinja2-3.0.3-py3-none-any.whl", hash = "sha256:077ce6014f7b40d03b47d1f1ca4b0fc8328a692bd284016f806ed0eaca390ad8"},
- {file = "Jinja2-3.0.3.tar.gz", hash = "sha256:611bb273cd68f3b993fabdc4064fc858c5b47a973cb5aa7999ec1ba405c87cd7"},
-]
-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"},
-]
-mitogen = []
-packaging = [
- {file = "packaging-21.3-py3-none-any.whl", hash = "sha256:ef103e05f519cdc783ae24ea4e2e0f508a9c99b2d4969652eed6a2e1ea5bd522"},
- {file = "packaging-21.3.tar.gz", hash = "sha256:dd47c42927d89ab911e606518907cc2d3a1f38bbd026385970643f9c5b8ecfeb"},
-]
-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"},
-]
-pyparsing = [
- {file = "pyparsing-3.0.6-py3-none-any.whl", hash = "sha256:04ff808a5b90911829c55c4e26f75fa5ca8a2f5f36aa3a51f68e27033341d3e4"},
- {file = "pyparsing-3.0.6.tar.gz", hash = "sha256:d9bdec0013ef1eb5a84ab39a3b3868911598afa494f5faa038647101504e2b81"},
-]
-pyyaml = [
- {file = "PyYAML-6.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d4db7c7aef085872ef65a8fd7d6d09a14ae91f691dec3e87ee5ee0539d516f53"},
- {file = "PyYAML-6.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9df7ed3b3d2e0ecfe09e14741b857df43adb5a3ddadc919a2d94fbdf78fea53c"},
- {file = "PyYAML-6.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:77f396e6ef4c73fdc33a9157446466f1cff553d979bd00ecb64385760c6babdc"},
- {file = "PyYAML-6.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a80a78046a72361de73f8f395f1f1e49f956c6be882eed58505a15f3e430962b"},
- {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-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"},
- {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:98c4d36e99714e55cfbaaee6dd5badbc9a1ec339ebfc3b1f52e293aee6bb71a4"},
- {file = "PyYAML-6.0-cp36-cp36m-win32.whl", hash = "sha256:0283c35a6a9fbf047493e3a0ce8d79ef5030852c51e9d911a27badfde0605293"},
- {file = "PyYAML-6.0-cp36-cp36m-win_amd64.whl", hash = "sha256:07751360502caac1c067a8132d150cf3d61339af5691fe9e87803040dbc5db57"},
- {file = "PyYAML-6.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:819b3830a1543db06c4d4b865e70ded25be52a2e0631ccd2f6a47a2822f2fd7c"},
- {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:473f9edb243cb1935ab5a084eb238d842fb8f404ed2193a915d1784b5a6b5fc0"},
- {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0ce82d761c532fe4ec3f87fc45688bdd3a4c1dc5e0b4a19814b9009a29baefd4"},
- {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:231710d57adfd809ef5d34183b8ed1eeae3f76459c18fb4a0b373ad56bedcdd9"},
- {file = "PyYAML-6.0-cp37-cp37m-win32.whl", hash = "sha256:c5687b8d43cf58545ade1fe3e055f70eac7a5a1a0bf42824308d868289a95737"},
- {file = "PyYAML-6.0-cp37-cp37m-win_amd64.whl", hash = "sha256:d15a181d1ecd0d4270dc32edb46f7cb7733c7c508857278d3d378d14d606db2d"},
- {file = "PyYAML-6.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0b4624f379dab24d3725ffde76559cff63d9ec94e1736b556dacdfebe5ab6d4b"},
- {file = "PyYAML-6.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:213c60cd50106436cc818accf5baa1aba61c0189ff610f64f4a3e8c6726218ba"},
- {file = "PyYAML-6.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9fa600030013c4de8165339db93d182b9431076eb98eb40ee068700c9c813e34"},
- {file = "PyYAML-6.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:277a0ef2981ca40581a47093e9e2d13b3f1fbbeffae064c1d21bfceba2030287"},
- {file = "PyYAML-6.0-cp38-cp38-win32.whl", hash = "sha256:d4eccecf9adf6fbcc6861a38015c2a64f38b9d94838ac1810a9023a0609e1b78"},
- {file = "PyYAML-6.0-cp38-cp38-win_amd64.whl", hash = "sha256:1e4747bc279b4f613a09eb64bba2ba602d8a6664c6ce6396a4d0cd413a50ce07"},
- {file = "PyYAML-6.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:055d937d65826939cb044fc8c9b08889e8c743fdc6a32b33e2390f66013e449b"},
- {file = "PyYAML-6.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e61ceaab6f49fb8bdfaa0f92c4b57bcfbea54c09277b1b4f7ac376bfb7a7c174"},
- {file = "PyYAML-6.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d67d839ede4ed1b28a4e8909735fc992a923cdb84e618544973d7dfc71540803"},
- {file = "PyYAML-6.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cba8c411ef271aa037d7357a2bc8f9ee8b58b9965831d9e51baf703280dc73d3"},
- {file = "PyYAML-6.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:40527857252b61eacd1d9af500c3337ba8deb8fc298940291486c465c8b46ec0"},
- {file = "PyYAML-6.0-cp39-cp39-win32.whl", hash = "sha256:b5b9eccad747aabaaffbc6064800670f0c297e52c12754eb1d976c57e4f74dcb"},
- {file = "PyYAML-6.0-cp39-cp39-win_amd64.whl", hash = "sha256:b3d267842bf12586ba6c734f89d1f5b871df0273157918b0ccefa29deb05c21c"},
- {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"},
-]
-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"},
-]
-wcmatch = [
- {file = "wcmatch-8.3-py3-none-any.whl", hash = "sha256:7141d2c85314253f16b38cb3d6cc0fb612918d407e1df3ccc2be7c86cc259c22"},
- {file = "wcmatch-8.3.tar.gz", hash = "sha256:371072912398af61d1e4e78609e18801c6faecd3cb36c54c82556a60abc965db"},
-]
+content-hash = "b546abdadaa4fc79108aab42bb1748a30614be19ad4fb9f01caf75967ceb5d15"
diff --git a/pyproject.toml b/pyproject.toml
index 4083b78..6e20d1c 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -2,15 +2,19 @@
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" }
+pygithub = "^1.57"
[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 cf0f01b..b57e6d7 100644
--- a/roles/workstation/defaults/main.yml
+++ b/roles/_workstation/basetools/defaults/main.yml
@@ -1,19 +1,23 @@
-workstation_user: qwd
+---
-workstation_hosts_file: /etc/hosts
-workstation_hosts_url: "https://raw.githubusercontent.com/\
- StevenBlack/hosts/master/alternates/fakenews-gambling-porn/hosts"
+basetools_distribution_packages: []
+basetools_makepkg_packages:
+ - conftest
+ - dive-bin
+ - pandoc-bin
+ - pipewatch-git
+ - yay-bin
+ # not maintained anymore
+ # - wkhtmltopdf
-workstation_yay_repo: https://aur.archlinux.org/yay-bin.git
-workstation_yay_dir: /tmp/yay
-
-workstation_pkgs: []
-workstation_pkgs_common:
+basetools_common_packages:
- ansible
- ansible-lint
- calcurse
- cmus
- dmenu
+ - dunst
+ - entr
- feh
- fzf
- git
@@ -26,13 +30,17 @@ workstation_pkgs_common:
- httpie
- inotify-tools
- ipmitool
+ - ipython
+ - isync
- jq
- lowdown
+ - lynx
- mpv
- neomutt
- neovim
- newsboat
- nmap
+ - parallel
- qutebrowser
- rsync
- rtorrent
@@ -42,11 +50,11 @@ workstation_pkgs_common:
- terminus-font
- tig
- tor
+ - tree
- unzip
- vlc
- weechat
- wget
- - wkhtmltopdf
- xclip
- zathura
- zip
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..655fea3
--- /dev/null
+++ b/roles/_workstation/basetools/tasks/install.yml
@@ -0,0 +1,17 @@
+---
+
+- 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/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 e5c2e9d..a30b825 100644
--- a/roles/workstation/vars/os_archlinux.yml
+++ b/roles/_workstation/basetools/vars/os_archlinux.yml
@@ -1,30 +1,41 @@
-workstation_pkgs:
+---
+
+basetools_distribution_packages:
- acpi
- alsa-tools
- base-devel
+ - bc
- bind
- clang
- - docker
- - docker-compose
+ - diffoscope
- easyeffects
+ - entr
- firefox
+ - fq
+ - go
+ - go-tools
+ - gopls
+ - httpie
+ - imagemagick
+ - inetutils
+ - jless
- 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
- postgresql
- pyenv
+ - python-debugpy
- python-netaddr
- python-nodeenv
- python-pip
@@ -33,23 +44,21 @@ workstation_pkgs:
- python-pynvim
- python-qrencode
- qemu
+ - shellcheck
- signify
+ - sshuttle
- strace
+ - stylua
- tar
- tmux
- torbrowser-launcher
- traceroute
+ - unrar
- vi
- wireguard-tools
- wireplumber
- - xf86-input-synaptics
- - xorg-apps
- - xorg-server
- - xorg-xinit
- - xorg-xwayland
- - xsecurelock
- 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..cd713c6 100644
--- a/roles/acme/defaults/main.yml
+++ b/roles/acme/defaults/main.yml
@@ -1,2 +1,10 @@
+---
+
acme_configuration_file: /etc/acme-client.conf
-acme_domain_name: null
+acme_certificates_dir: /etc/ssl
+acme_keys_dir: /etc/ssl/private
+
+acme_authority:
+ name: letsencrypt
+ url: https://acme-v02.api.letsencrypt.org/directory
+ key: /etc/acme/letsencrypt-privkey.pem
diff --git a/roles/acme/meta/main.yml b/roles/acme/meta/main.yml
new file mode 100644
index 0000000..924fd90
--- /dev/null
+++ b/roles/acme/meta/main.yml
@@ -0,0 +1,53 @@
+---
+
+argument_specs:
+ main:
+ short_description: acme main entrypoint.
+ options:
+
+ acme_rules:
+ type: list
+ elements: dict
+ required: true
+ options:
+ domain:
+ type: str
+ required: true
+ description: Acme domain name
+
+ acme_authority:
+ type: dict
+ required: true
+ options:
+ name:
+ type: str
+ required: true
+ description: Acme authority name
+ url:
+ type: str
+ required: true
+ description: Acme authority api url
+ key:
+ type: path
+ required: true
+ description: Acme authority key file
+
+ acme_certificates_dir:
+ type: path
+ required: true
+ description: Acme certificates directory
+
+ acme_keys_dir:
+ type: path
+ required: true
+ description: Acme keys directory
+
+ acme_configuration_file:
+ type: path
+ required: true
+ description: Acme configuration file
+
+ relayd_connected_hosts:
+ type: str
+ required: true
+ description: Group name of hosts for generating certificates
diff --git a/roles/acme/tasks/main.yml b/roles/acme/tasks/main.yml
index 5834cb5..c068ab5 100644
--- a/roles/acme/tasks/main.yml
+++ b/roles/acme/tasks/main.yml
@@ -1,33 +1,36 @@
+---
+
- 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: |
+- name: retrieve enabled domains
+ ansible.builtin.shell: |
set -o pipefail
grep "^domain" /etc/acme-client.conf | cut -d " " -f 2
- register: subdomains
+ register: acme_result_subdomains
+ changed_when: false
-- name: generate acme certificates # noqa: no-changed-when
- command: acme-client -v {{ item }}
- loop: "{{ subdomains.stdout_lines }}"
- register: result
- failed_when:
- - result.rc != 0
- - "'certificate valid' not in result.stderr"
+- name: generate acme certificates
+ ansible.builtin.command: acme-client -v {{ item }}
+ loop: "{{ acme_result_subdomains.stdout_lines }}"
+ register: acme_result_generation
+ failed_when: acme_result_generation.rc == 1
+ changed_when: acme_result_generation.rc != 2
- name: display registered certificates
- debug:
- var: result
+ ansible.builtin.debug:
+ msg: "{{ acme_result_generation.results | map(attribute='stderr')
+ | join('\n') }}"
- name: enable automatic acme certificates update
- cron:
+ ansible.builtin.cron:
name: "automatic acme certificates update for subdomain : {{ item }}"
minute: 0
hour: 6,18
job: "acme-client -v {{ item }} && rcctl reload relayd"
- loop: "{{ subdomains.stdout_lines }}"
+ loop: "{{ acme_result_subdomains.stdout_lines }}"
diff --git a/roles/acme/templates/acme-client.conf.j2 b/roles/acme/templates/acme-client.conf.j2
index 3792009..a6516c6 100644
--- a/roles/acme/templates/acme-client.conf.j2
+++ b/roles/acme/templates/acme-client.conf.j2
@@ -1,26 +1,19 @@
# managed by Ansible
{% import 'macros.j2' as macros with context %}
-authority letsencrypt {
- api url "https://acme-v02.api.letsencrypt.org/directory"
- account key "/etc/acme/letsencrypt-privkey.pem"
+authority {{ acme_authority.name }} {
+ api url "{{ acme_authority.url }}"
+ account key "{{ acme_authority.key }}"
}
-domain {{ acme_domain_name }} {
- alternative names { www.{{ acme_domain_name }} }
- domain key "/etc/ssl/private/{{ acme_domain_name }}.key"
- domain full chain certificate "/etc/ssl/{{ acme_domain_name }}.crt"
- sign with letsencrypt
-}
+{% call(h) macros.loop_valid_hosts(relayd_connected_hosts) -%}
+{% for rule in h.acme_rules %}
-{% 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 %}
- alternative names { www.{{ domain }} }
- domain key "/etc/ssl/private/{{ domain }}.key"
- domain full chain certificate "/etc/ssl/{{ domain }}.crt"
- sign with letsencrypt
+domain {{ rule.domain }} {
+ alternative names { www.{{ rule.domain }} }
+ domain key "{{ acme_keys_dir }}/{{ rule.domain }}.key"
+ domain full chain certificate "{{ acme_certificates_dir }}/{{ rule.domain }}.crt"
+ sign with {{ acme_authority.name }}
}
{% endfor %}
{%- endcall %}
diff --git a/roles/cgit/defaults/main.yml b/roles/cgit/defaults/main.yml
index 47d312a..503b20b 100644
--- a/roles/cgit/defaults/main.yml
+++ b/roles/cgit/defaults/main.yml
@@ -1,18 +1,30 @@
-cgit_instance: cgit
+---
+
cgit_git_dir: /data/git
+cgit_cache_size: 10
+cgit_cache_dir: /cache/cgit
+
cgit_chroot_dir: /var/www
+cgit_chroot_required_files:
+ - /bin/sh
+ - /bin/cat
+ - /usr/local/bin/lowdown
+
+cgit_user: www
+cgit_group: www
+
+cgit_listen_address: 0.0.0.0
+cgit_listen_port: 1235
+cgit_footer_path: /conf/footer.html
-cgit_ip: 0.0.0.0
-cgit_port: 1235
-cgit_authenticate: false
+cgit_clone_urls:
+ - git://{{ cgit_domain_name }}/$CGIT_REPO_URL
+ - ssh://{{ git_user }}@{{ cgit_domain_name }}/$CGIT_REPO_URL
+ - https://{{ cgit_domain_name }}/$CGIT_REPO_URL
-cgit__favicon: https://rgoncalves.se/img/favicon.ico
-cgit__logo: https://rgoncalves.se/img/favicon.ico
-cgit__css: https://rgoncalves.se/style/cgit.css
-cgit__root_desc: development hub
-cgit__root_readme: https://rgoncalves.se
-cgit__footer: /conf/footer.html
-cgit__clone_urls:
- - git://git.{{ __global_domain_name }}/$CGIT_REPO_URL
- - ssh://git@git.{{ __global_domain_name }}/$CGIT_REPO_URL
- - https://git.{{ __global_domain_name }}/$CGIT_REPO_URL
+cgit_domain_name: ""
+cgit_favicon_url: ""
+cgit_logo_url: ""
+cgit_css_url: ""
+cgit_description: ""
+cgit_readme_url: ""
diff --git a/roles/cgit/meta/main.yml b/roles/cgit/meta/main.yml
index a25f289..ddd865d 100644
--- a/roles/cgit/meta/main.yml
+++ b/roles/cgit/meta/main.yml
@@ -1,5 +1,76 @@
+---
+
dependencies:
- role: git
- tags: dependency
- role: httpd_pre
- tags: dependency
+
+argument_specs:
+ main:
+ short_description: cgit main entrypoint.
+ options:
+
+ cgit_git_dir:
+ type: path
+ required: true
+ description: Git directory
+
+ cgit_chroot_dir:
+ type: path
+ required: true
+ description: Chroot directory for web service
+
+ cgit_user:
+ type: str
+ required: true
+ description: Cgit web service user
+
+ cgit_group:
+ type: str
+ required: true
+ description: Cgit web service group
+
+ cgit_domain_name:
+ type: str
+ required: true
+ description: Cgit domain name
+
+ cgit_clone_urls:
+ type: list
+ elements: str
+ requiredi: true
+ description: Available urls for cloning a repository
+
+ cgit_cache_size:
+ type: int
+ required: true
+ description: Cgit cache size
+
+ cgit_cache_dir:
+ type: path
+ required: true
+ description: Cgit cache directory
+
+ cgit_chroot_required_files:
+ type: list
+ elements: str
+ required: true
+ description: Files to be copied in cgit chroot
+
+ cgit_favicon_url:
+ type: str
+ description: Favicon url
+ cgit_logo_url:
+ type: str
+ description: Logo url
+ cgit_css_url:
+ type: str
+ description: Stylesheet url
+ cgit_description:
+ type: str
+ description: Instance description
+ cgit_readme_url:
+ type: str
+ description: Instance readme url
+ cgit_footer_path:
+ type: str
+ description: Footer path
diff --git a/roles/cgit/tasks/dependencies.yml b/roles/cgit/tasks/dependencies.yml
deleted file mode 100644
index c0439e8..0000000
--- a/roles/cgit/tasks/dependencies.yml
+++ /dev/null
@@ -1,33 +0,0 @@
-- name: retrieve dependencies for lowdown # noqa: no-changed-when
- 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:
- path: "{{ cgit_chroot_dir }}{{ item | dirname }}"
- owner: 0
- group: 0
- mode: 0755
- state: directory
- loop: "{{ result.stdout_lines }}"
-
-- name: copy dependencies for lowdown
- copy:
- src: "{{ item }}"
- dest: "{{ cgit_chroot_dir }}/{{ item }}"
- mode: preserve
- remote_src: true
- loop: "{{ result.stdout_lines }}"
-
-- name: copy utilities in httpd chroot
- copy:
- src: "{{ item }}"
- dest: "{{ cgit_chroot_dir }}/bin"
- mode: preserve
- remote_src: true
- loop:
- - /bin/sh
- - /bin/cat
- - /usr/local/bin/lowdown
diff --git a/roles/cgit/tasks/main.yml b/roles/cgit/tasks/main.yml
index 4559708..ce9ecbe 100644
--- a/roles/cgit/tasks/main.yml
+++ b/roles/cgit/tasks/main.yml
@@ -1,53 +1,77 @@
+---
+
- name: install cgit packages
- package:
+ ansible.builtin.package:
name:
- cgit
- lowdown
state: present
- name: create cgit cache directory
- file:
- path: "{{ cgit_chroot_dir }}/cache/cgit"
- owner: www
- group: www
- mode: 0750
+ ansible.builtin.file:
+ path: "{{ cgit_chroot_dir }}/{{ cgit_cache_dir }}"
+ owner: "{{ cgit_user }}"
+ group: "{{ cgit_group }}"
+ mode: "0750"
state: directory
- name: generate cgit configuration files
- template:
- src: "{{ item.template }}"
- dest: "{{ item.file }}"
+ ansible.builtin.template:
+ src: "{{ item.src }}"
+ dest: "{{ item.dest }}"
owner: 0
group: 0
- mode: 0644
+ mode: "0644"
loop:
- - template: cgitrc.j2
- file: "{{ cgit_chroot_dir }}/conf/cgitrc"
- - template: footer.html.j2
- file: "{{ cgit_chroot_dir }}/conf/footer.html"
- - template: httpd.conf.j2
- file: /etc/httpd.d/cgit.conf
+ - src: cgitrc.j2
+ dest: "{{ cgit_chroot_dir }}/conf/cgitrc"
+ - src: footer.html.j2
+ dest: "{{ cgit_chroot_dir }}/conf/footer.html"
+ - src: httpd.conf.j2
+ dest: /etc/httpd.d/cgit.conf
+
+- name: retrieve dependencies for lowdown
+ ansible.builtin.shell: |
+ set -o pipefail
+ ldd $(command -v lowdown) | tr -s " " | grep "0 1 0" | cut -d " " -f 7
+ register: cgit_result_lowdown_dependencies
+ changed_when: false
+
+- name: create dependencies directories in chroot
+ ansible.builtin.file:
+ path: "{{ cgit_chroot_dir }}{{ item | dirname }}"
+ owner: 0
+ group: 0
+ mode: "0755"
+ state: directory
+ loop: "{{ cgit_result_lowdown_dependencies.stdout_lines }}"
-- name: include dependencies for lowdown
- include_tasks: dependencies.yml
+- name: copy dependencies for lowdown
+ ansible.builtin.copy:
+ src: "{{ item }}"
+ dest: "{{ cgit_chroot_dir }}/{{ item }}"
+ mode: preserve
+ remote_src: true
+ loop: "{{ cgit_result_lowdown_dependencies.stdout_lines }}"
+
+- name: copy utilities in httpd chroot
+ ansible.builtin.copy:
+ src: "{{ item }}"
+ dest: "{{ cgit_chroot_dir }}/bin"
+ mode: preserve
+ remote_src: true
+ loop: "{{ cgit_chroot_required_files }}"
- 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:
- msg: |
- Please provide a password using htpasswd,
- in "{{ cgit_chroot_dir }}/htpasswd/cgit"
- when: cgit_authenticate
diff --git a/roles/cgit/templates/cgitrc.j2 b/roles/cgit/templates/cgitrc.j2
index 99dcc17..4c139d4 100644
--- a/roles/cgit/templates/cgitrc.j2
+++ b/roles/cgit/templates/cgitrc.j2
@@ -1,14 +1,8 @@
# managed by Ansible
-# visuals
-css={{ cgit__css }}
-logo={{ cgit__logo }}
-favicon={{ cgit__favicon }}
-footer={{ cgit__footer }}
-
# cache
-cache-root=/cache/cgit
-cache-size=100
+cache-root={{ cgit_cache_dir }}
+cache-size={{ cgit_cache_size }}
# readme
readme=:README.md
@@ -31,12 +25,18 @@ robots=noindex, nofollow
localtime=1
# git
-clone-url={{ cgit__clone_urls | join(' ') }}
+clone-url={{ cgit_clone_urls | join(' ') }}
# instance id
-root-title=git.{{ __global_domain_name }}
-root-desc={{ cgit__root_desc }}
-root-readme={{ cgit__root_readme }}
+root-title={{ cgit_domain_name }}
+root-desc={{ cgit_description }}
+root-readme={{ cgit_readme_url }}
+
+# visuals
+css={{ cgit_css_url }}
+logo={{ cgit_logo_url }}
+favicon={{ cgit_favicon_url }}
+footer={{ cgit_footer_path }}
# archives
snapshots=tar.gz
diff --git a/roles/cgit/templates/httpd.conf.j2 b/roles/cgit/templates/httpd.conf.j2
index 962016a..0220f90 100644
--- a/roles/cgit/templates/httpd.conf.j2
+++ b/roles/cgit/templates/httpd.conf.j2
@@ -1,10 +1,7 @@
# managed by Ansible
server "cgit" {
- listen on "{{ cgit_ip }}" port {{ cgit_port }}
-{% if cgit_authenticate %}
- authenticate "realm" with "/htpasswd/cgit"
-{% endif %}
+ listen on "{{ cgit_listen_address }}" port {{ cgit_listen_port }}
# cgit
location "/cgit.*" {
diff --git a/roles/git/defaults/main.yml b/roles/git/defaults/main.yml
index f99dec3..43597db 100644
--- a/roles/git/defaults/main.yml
+++ b/roles/git/defaults/main.yml
@@ -1,7 +1,8 @@
+---
+
git_user: git
git_group: git
git_dir: /data/git
-
git_shell: /bin/sh
git_default_branch: trunk
git_allow_ssh_login: true
diff --git a/roles/git/meta/main.yml b/roles/git/meta/main.yml
new file mode 100644
index 0000000..1117027
--- /dev/null
+++ b/roles/git/meta/main.yml
@@ -0,0 +1,41 @@
+---
+
+dependencies:
+ - role: sshd_keys
+ sshd_keys_users:
+ - "{{ git_user }}"
+
+argument_specs:
+ main:
+ short_description: git main entrypoint.
+ options:
+
+ git_user:
+ type: str
+ required: true
+ description: Git user
+
+ git_group:
+ type: str
+ required: true
+ description: Git group
+
+ git_dir:
+ type: path
+ required: true
+ description: Git directory
+
+ git_shell:
+ type: path
+ required: true
+ description: Shell of the git user
+
+ git_default_branch:
+ type: str
+ required: true
+ description: Default branch when creating a git repository
+
+ git_allow_ssh_login:
+ type: bool
+ required: true
+ description: Allow user to login with ssh
diff --git a/roles/git/tasks/main.yml b/roles/git/tasks/main.yml
index 851287e..467378d 100644
--- a/roles/git/tasks/main.yml
+++ b/roles/git/tasks/main.yml
@@ -1,34 +1,33 @@
+---
+
- 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 }}"
home: "{{ git_dir }}"
- create_home: false
+ create_home: true
- name: create git directories
- file:
- path: "{{ item }}"
+ ansible.builtin.file:
+ path: "{{ git_dir }}/git-shell-commands"
owner: "{{ git_user }}"
group: "{{ git_group }}"
state: directory
- mode: 0755
- loop:
- - "{{ git_dir }}"
- - "{{ git_dir }}/git-shell-commands"
+ mode: "0755"
- 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 +36,9 @@
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
-
-- name: include ssh key synchronization
- include_role:
- name: sshd
- tasks_from: synchronize_keys.yml
+ mode: "0644"
diff --git a/roles/git/templates/gitconfig.j2 b/roles/git/templates/gitconfig.j2
index b9923a2..3ffc6a9 100644
--- a/roles/git/templates/gitconfig.j2
+++ b/roles/git/templates/gitconfig.j2
@@ -1,2 +1,4 @@
+# managed by Ansible
+
[init]
defaultBranch = {{ git_default_branch }}
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..90b4c7e 100644
--- a/roles/pf/defaults/main.yml
+++ b/roles/pf/defaults/main.yml
@@ -1 +1,8 @@
+---
+
+pf_rules: null
+
pf_configuration_file: /etc/pf.conf
+pf_test_delay: 2
+pf_test_ports:
+ - "{{ ansible_port }}"
diff --git a/roles/pf/handlers/main.yml b/roles/pf/handlers/main.yml
deleted file mode 100644
index 5d75a1a..0000000
--- a/roles/pf/handlers/main.yml
+++ /dev/null
@@ -1,12 +0,0 @@
-- name: lint pf configuration
- command: "pfctl -nf {{ pf_configuration_file }}"
-
-- name: enable pf
- command: pfctl -e
- register: result
- failed_when:
- - result.rc != 0
- - "'already enabled' not in result.stderr"
-
-- name: restart pf
- command: pfctl -f "{{ pf_configuration_file }}"
diff --git a/roles/pf/meta/main.yml b/roles/pf/meta/main.yml
new file mode 100644
index 0000000..8a6aa88
--- /dev/null
+++ b/roles/pf/meta/main.yml
@@ -0,0 +1,42 @@
+---
+
+argument_specs:
+ main:
+ short_description: pf main entrypoint.
+ options:
+
+ pf_rules:
+ type: list
+ elements: dict
+ required: true
+ options:
+ name:
+ type: str
+ required: true
+ protocol:
+ type: str
+ required: true
+ choices:
+ - tcp
+ - udp
+ description: Network protocol
+ port:
+ type: int
+ required: true
+ description: Port to be configured
+
+ pf_configuration_file:
+ type: path
+ required: true
+ description: Pf configuration file
+
+ pf_test_delay:
+ type: int
+ required: true
+ description: Pf test delay
+
+ pf_test_ports:
+ type: list
+ element: int
+ required: true
+ description: Ports to be tested
diff --git a/roles/pf/tasks/main.yml b/roles/pf/tasks/main.yml
index e5b8af8..4fba69e 100644
--- a/roles/pf/tasks/main.yml
+++ b/roles/pf/tasks/main.yml
@@ -1,17 +1,37 @@
+---
+
- name: generate pf configuration
- template:
+ ansible.builtin.template:
src: pf.conf.j2
dest: "{{ pf_configuration_file }}"
owner: 0
group: 0
- mode: 0600
- notify:
- - lint pf configuration
- - enable pf
- - restart pf
+ mode: "0600"
+ register: pf_result_generate_configuration
+
+- name: lint pf configuration # noqa: no-handler
+ ansible.builtin.command: "pfctl -nf {{ pf_configuration_file }}"
+ register: pf_result_lint_configuration
+ changed_when:
+ - pf_result_generate_configuration.changed
+ - pf_result_lint_configuration.rc != 0
-- name: test ssh connection on new pf rule
- wait_for:
- port: "{{ ansible_port }}"
- delay: 2
+- name: restart pf # noqa: no-handler
+ ansible.builtin.command: pfctl -f "{{ pf_configuration_file }}"
+ when: pf_result_generate_configuration.changed
+
+- name: test pf rules
+ ansible.builtin.wait_for:
+ port: "{{ item }}"
+ delay: "{{ pf_test_delay }}"
state: started
+ loop: "{{ pf_test_ports }}"
+
+- name: enable pf
+ ansible.builtin.command: pfctl -e
+ register: pf_result_enable
+ changed_when:
+ - "'already enabled' not in pf_result_enable.stderr"
+ failed_when:
+ - pf_result_enable.rc != 0
+ - "'already enabled' not in pf_result_enable.stderr"
diff --git a/roles/pf/templates/pf.conf.j2 b/roles/pf/templates/pf.conf.j2
index 1b51fe7..193c9d2 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 rule in pf_rules %}
+# {{ rule.name }}
+pass in quick on egress proto {{ rule.protocol }} to port {{ rule.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..2028ef1 100644
--- a/roles/relayd/defaults/main.yml
+++ b/roles/relayd/defaults/main.yml
@@ -1,4 +1,16 @@
+---
+
+relayd_rules: {}
+
relayd_configuration_file: /etc/relayd.conf
-relayd_domain_name: example.com
-relayd_transparent: true
relayd_block_msg: aah!
+
+relayd_tls_ciphers:
+ - HIGH
+ - "!AES128"
+ - "!kRSA"
+ - "!aNULL"
+relayd_tls_elliptic_curves:
+ - P-384
+ - P-256
+ - X25519
diff --git a/roles/relayd/handlers/main.yml b/roles/relayd/handlers/main.yml
deleted file mode 100644
index 82be0a8..0000000
--- a/roles/relayd/handlers/main.yml
+++ /dev/null
@@ -1,2 +0,0 @@
-- name: lint relayd configuration
- command: "relayd -nf {{ relayd_configuration_file }}"
diff --git a/roles/relayd/meta/main.yml b/roles/relayd/meta/main.yml
new file mode 100644
index 0000000..e2da9c2
--- /dev/null
+++ b/roles/relayd/meta/main.yml
@@ -0,0 +1,45 @@
+---
+
+argument_specs:
+ main:
+ short_description: relayd main entrypoint.
+ options:
+
+ relayd_rules:
+ type: list
+ elements: dict
+ required: true
+ options:
+ domain:
+ type: str
+ required: true
+ description: Domain name
+ name:
+ type: str
+ required: true
+ description: Rule name
+ port:
+ type: int
+ required: true
+ description: Port to be configured
+
+ relayd_configuration_file:
+ type: path
+ required: true
+ description: Relayd configuration file
+
+ relayd_domain_name:
+ type: str
+ required: true
+ description: Relayd domain name
+
+ relayd_connected_hosts:
+ type: str
+ required: true
+ description: Group name of hosts that are behind relayd
+
+ relayd_tls_ciphers:
+ type: list
+ elements: str
+ required: true
+ description: Relayd tls ciphers
diff --git a/roles/relayd/tasks/main.yml b/roles/relayd/tasks/main.yml
index 3af5756..8dc2837 100644
--- a/roles/relayd/tasks/main.yml
+++ b/roles/relayd/tasks/main.yml
@@ -1,14 +1,29 @@
+---
+
- 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"
+ register: relayd_result_generate_configuration
+
+- name: lint relayd configuration
+ ansible.builtin.command: "relayd -nf {{ relayd_configuration_file }}"
+ register: relayd_result_lint_configuration
+ changed_when:
+ - relayd_result_generate_configuration.changed
+ - relayd_result_lint_configuration.rc != 0
-- name: enable and restart relayd
- service:
+- name: restart relayd # noqa: no-handler
+ ansible.builtin.service:
name: relayd
state: restarted
+ when: relayd_result_generate_configuration.changed
+ or relayd_result_lint_configuration.changed
+
+- name: enable relayd
+ ansible.builtin.service:
+ name: relayd
enabled: true
diff --git a/roles/relayd/templates/relayd.conf.j2 b/roles/relayd/templates/relayd.conf.j2
index c97e9da..67b9e13 100644
--- a/roles/relayd/templates/relayd.conf.j2
+++ b/roles/relayd/templates/relayd.conf.j2
@@ -6,10 +6,11 @@ log connection errors
# hosts
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 }} }
+{% call(h) macros.loop_valid_hosts(relayd_connected_hosts) -%}
+{% set relayd_rule_ip = "127.0.0.1" if h.inventory_hostname == inventory_hostname else h.__ip.internal %}
+table <{{ h.inventory_hostname }}> { {{ relayd_rule_ip }} }
+{% for rule in h.relayd_rules %}
+table <{{ h.inventory_hostname }}_{{ rule.name }}> { {{ relayd_rule_ip }} }
{% endfor %}
{%- endcall %}
@@ -17,8 +18,8 @@ table <{{ h.inventory_hostname }}_{{ service.domain }}> { {{ h.__ip.internal }}
http protocol "https" {
- tls ciphers "HIGH:!AES128:!kRSA:!aNULL"
- tls ecdhe "P-384,P-256,X25519"
+ tls ciphers "{{ relayd_tls_ciphers | join(':') }}"
+ tls ecdhe "{{ relayd_tls_elliptic_curves | join(',') }}"
tcp { sack, backlog 128 }
@@ -31,13 +32,10 @@ http protocol "https" {
match response header set "Referrer-Policy" value "no-referrer"
match response header set "X-XSS-Protection" value "1; mode=block"
- 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 -%}
- tls keypair "{{ domain_name }}"
- pass request quick header "Host" value "{{ domain_name }}" forward to <{{ h.inventory_hostname }}_{{ service.domain }}>
+{% call(h) macros.loop_valid_hosts(relayd_connected_hosts) -%}
+{% for rule in h.relayd_rules %}
+ tls keypair "{{ rule.domain }}"
+ pass request quick header "Host" value "{{ rule.domain }}" forward to <{{ h.inventory_hostname }}_{{ rule.name }}>
{% endfor %}
{%- endcall %}
@@ -50,11 +48,9 @@ http protocol "http" {
# acme
pass request quick path "/.well-known/acme-challenge/*" forward to <local>
- 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 }}>
+{% call(h) macros.loop_valid_hosts(relayd_connected_hosts) -%}
+{% for rule in h.relayd_rules %}
+ pass request quick header "Host" value "{{ rule.domain }}" forward to <{{ h.inventory_hostname }}_{{ rule.name }}>
{% endfor %}
{%- endcall %}
@@ -74,9 +70,9 @@ relay "wwwtls" {
listen on egress port 443 tls
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
+{% call(h) macros.loop_valid_hosts(relayd_connected_hosts) -%}
+{% for rule in h.relayd_rules %}
+ forward to <{{ h.inventory_hostname }}_{{ rule.name }}> port {{ rule.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/meta/main.yml b/roles/sshd/meta/main.yml
new file mode 100644
index 0000000..e0d60ee
--- /dev/null
+++ b/roles/sshd/meta/main.yml
@@ -0,0 +1,21 @@
+---
+
+argument_specs:
+ main:
+ short_description: sshd main entrypoint.
+ options:
+
+ sshd_configuration_file:
+ type: path
+ required: true
+ description: Sshd configuration file
+
+ sshd_listen_port:
+ type: int
+ required: true
+ description: Sshd listen port
+
+ sshd_enable_x11_forwarding:
+ type: bool
+ required: true
+ description: Enable X11 forwarding
diff --git a/roles/sshd/tasks/main.yml b/roles/sshd/tasks/main.yml
index f1af386..6a622d2 100644
--- a/roles/sshd/tasks/main.yml
+++ b/roles/sshd/tasks/main.yml
@@ -1,22 +1,38 @@
+---
+
+- 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
+ dest: "{{ sshd_configuration_file }}"
owner: 0
group: 0
- mode: 0644
+ mode: "0644"
+ register: sshd_result_generate_configuration
-- name: include key synchronization tasks
- include_tasks: synchronize_keys.yml
+- name: lint sshd configuration
+ ansible.builtin.command: "sshd -tf {{ sshd_configuration_file }}"
+ register: sshd_result_lint
+ changed_when: false
-- name: enable and restart sshd
- service:
+- name: restart sshd # noqa: no-handler
+ ansible.builtin.service:
name: sshd
state: restarted
+ when: sshd_result_generate_configuration.changed
+
+- name: enable sshd
+ ansible.builtin.service:
+ name: sshd
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/tasks/synchronize_keys.yml b/roles/sshd/tasks/synchronize_keys.yml
deleted file mode 100644
index 722fdfa..0000000
--- a/roles/sshd/tasks/synchronize_keys.yml
+++ /dev/null
@@ -1,18 +0,0 @@
-- name: get ssh keys for all users
- find:
- paths: files/keys
- file_type: link
- recurse: true
- delegate_to: localhost
- run_once: true
- register: result
-
-- name: synchronize ssh keys
- authorized_key:
- user: "{{ item.path | dirname | basename }}"
- state: present
- key: "{{ lookup('file', item.path) }}"
- loop_control:
- label: "{{ item.path }} -> user: {{ item.path | dirname | basename }}"
- loop: "{{ result.files }}"
- failed_when: false
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/defaults/main.yml b/roles/sshd_keys/defaults/main.yml
new file mode 100644
index 0000000..1b97a4a
--- /dev/null
+++ b/roles/sshd_keys/defaults/main.yml
@@ -0,0 +1,13 @@
+---
+
+sshd_keys_users: null
+sshd_keys_dir: files/keys
+sshd_keys_paths: "[
+ {% if sshd_keys_users is none %}
+ '{{ sshd_keys_dir }}',
+ {% else %}
+ {% for user in sshd_keys_users %}
+ '{{ sshd_keys_dir }}/{{ user }}',
+ {% endfor %}
+ {% endif %}
+ ]"
diff --git a/roles/sshd_keys/meta/main.yml b/roles/sshd_keys/meta/main.yml
new file mode 100644
index 0000000..e790d71
--- /dev/null
+++ b/roles/sshd_keys/meta/main.yml
@@ -0,0 +1,27 @@
+---
+
+dependencies:
+ - role: sshd
+ tags: dependency
+
+argument_specs:
+ main:
+ short_description: sshd_keys main entrypoint.
+ options:
+
+ sshd_keys_users:
+ type: list
+ elements: str
+ required: true
+ description: Users to be synced
+
+ sshd_keys_dir:
+ type: path
+ required: true
+ description: Local directory with public keys
+
+ sshd_keys_paths:
+ type: list
+ elements: path
+ required: true
+ description: Local directory with public keys
diff --git a/roles/sshd_keys/tasks/main.yml b/roles/sshd_keys/tasks/main.yml
new file mode 100644
index 0000000..5d45e34
--- /dev/null
+++ b/roles/sshd_keys/tasks/main.yml
@@ -0,0 +1,41 @@
+---
+
+- name: get ssh keys for all users
+ ansible.builtin.find:
+ paths: "{{ sshd_keys_paths }}"
+ file_type: link
+ recurse: true
+ delegate_to: localhost
+ run_once: true
+ register: sshd_keys_result_find
+
+- name: set sshd_keys_found_users variable
+ ansible.builtin.set_fact:
+ sshd_keys_found_users: "{{ sshd_keys_result_find.files
+ | map(attribute='path')
+ | map('dirname')
+ | map('basename')
+ | unique }}"
+
+- name: create groups for users with ssh keys
+ ansible.builtin.group:
+ name: "{{ item }}"
+ state: present
+ loop: "{{ sshd_keys_found_users }}"
+
+- name: create users with ssh keys
+ ansible.builtin.user:
+ name: "{{ item }}"
+ group: "{{ item }}"
+ state: present
+ loop: "{{ sshd_keys_found_users }}"
+
+- name: synchronize ssh keys
+ ansible.posix.authorized_key:
+ user: "{{ item.path | dirname | basename }}"
+ state: present
+ key: "{{ lookup('file', item.path) }}"
+ loop_control:
+ label: "{{ item.path }}: {{ item.path | dirname | basename }}"
+ loop: "{{ sshd_keys_result_find.files }}"
+ failed_when: false
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 dc1c268..0000000
--- a/roles/workstation/tasks/dockerd.yml
+++ /dev/null
@@ -1,15 +0,0 @@
-- name: create docker directory
- file:
- path: /etc/docker
- state: directory
- owner: 0
- group: 0
- mode: 0755
-
-- 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/hosts.yml b/roles/workstation/tasks/hosts.yml
deleted file mode 100644
index bcc67c6..0000000
--- a/roles/workstation/tasks/hosts.yml
+++ /dev/null
@@ -1,7 +0,0 @@
-- name: retrieve hosts file
- get_url:
- url: "{{ workstation_hosts_url }}"
- dest: "{{ workstation_hosts_file }}"
- mode: '0644'
- owner: 0
- group: 0
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 205834f..0000000
--- a/roles/workstation/tasks/main.yml
+++ /dev/null
@@ -1,52 +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 }}"
-
-- name: include hosts setup
- include_tasks:
- file: hosts.yml
diff --git a/roles/workstation/tasks/os_archlinux.yml b/roles/workstation/tasks/os_archlinux.yml
deleted file mode 100644
index 70d7abd..0000000
--- a/roles/workstation/tasks/os_archlinux.yml
+++ /dev/null
@@ -1,50 +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
- 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 d17bca4..761c0f7 100644
--- a/site.all.yml
+++ b/site.all.yml
@@ -1,73 +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..0929e6e 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 }}/main.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 }}"
diff --git a/vault.sh b/vault.sh
new file mode 100755
index 0000000..6bf443a
--- /dev/null
+++ b/vault.sh
@@ -0,0 +1,16 @@
+#!/bin/sh
+
+set -ex
+
+password_bin=$(command -v pass || command -v gopass)
+password_name="${2:-infrastructure/ansible/root}"
+
+set +x
+
+if [ "$(logname)" != "$(whoami)" ]; then
+ password_string="$(su "$(logname)" -c "${password_bin} show ${password_name}")"
+else
+ password_string="$("${password_bin}" show "${password_name}")"
+fi
+
+echo "${password_string}" | head -n 1
remember that computers suck.