Compare commits
41 Commits
feature/do
...
feature/db
Author | SHA1 | Date | |
---|---|---|---|
7f97f206b0
|
|||
a8bc344aa2
|
|||
f9d590170d
|
|||
e1f3a22a23
|
|||
f3c6c61130
|
|||
ef40b1ba7d
|
|||
2e22d4c7f2
|
|||
bc963f28ee
|
|||
5b1e346282
|
|||
8061a2773f
|
|||
3dba4e6fe9
|
|||
d54193e0d5
|
|||
6c05da2b58
|
|||
50ca5d6d0d
|
|||
3d1a509681
|
|||
be14ddd5fc
|
|||
b15b1fca40
|
|||
eed1b78625
|
|||
405d837407
|
|||
18c1d96b0a
|
|||
74679ed8e5
|
|||
d2401f11f4
|
|||
30a2744830
|
|||
de37042061
|
|||
6a92053232
|
|||
1ef7f1cf6e
|
|||
9844a1ab5c
|
|||
bd8e1b8e38
|
|||
40964c0f60
|
|||
145c5db29f
|
|||
ec335e5d3c
|
|||
659d5ffebc
|
|||
40de9b87a1
|
|||
20ce67472d
|
|||
7e94d27824
|
|||
de566c0395
|
|||
a5370f49f5
|
|||
c3f6bd2ea9
|
|||
ed426593d4
|
|||
a6c370b85a
|
|||
a0d52958e8
|
7
.idea/alpina.iml
generated
7
.idea/alpina.iml
generated
@@ -4,7 +4,7 @@
|
||||
<content url="file://$MODULE_DIR$">
|
||||
<excludeFolder url="file://$MODULE_DIR$/venv" />
|
||||
</content>
|
||||
<orderEntry type="jdk" jdkName="Poetry (alpina)" jdkType="Python SDK" />
|
||||
<orderEntry type="jdk" jdkName="Poetry (alpina) (3)" jdkType="Python SDK" />
|
||||
<orderEntry type="sourceFolder" forTests="false" />
|
||||
</component>
|
||||
<component name="PyDocumentationSettings">
|
||||
@@ -23,9 +23,8 @@
|
||||
<option name="TEMPLATE_CONFIGURATION" value="Jinja2" />
|
||||
<option name="TEMPLATE_FOLDERS">
|
||||
<list>
|
||||
<option value="$MODULE_DIR$/roles/traefik/templates" />
|
||||
<option value="$MODULE_DIR$/roles/gitea/templates" />
|
||||
<option value="$MODULE_DIR$/roles/nextcloud/templates" />
|
||||
<option value="$MODULE_DIR$/roles/docker_host/templates" />
|
||||
<option value="$MODULE_DIR$/roles/alpina/templates" />
|
||||
</list>
|
||||
</option>
|
||||
</component>
|
||||
|
89
.idea/jsonSchemas.xml
generated
89
.idea/jsonSchemas.xml
generated
@@ -3,6 +3,42 @@
|
||||
<component name="JsonSchemaMappingsProjectConfiguration">
|
||||
<state>
|
||||
<map>
|
||||
<entry key="Ansible Tasks File">
|
||||
<value>
|
||||
<SchemaInfo>
|
||||
<option name="name" value="Ansible Tasks File" />
|
||||
<option name="relativePathToSchema" value="https://raw.githubusercontent.com/ansible/ansible-lint/main/src/ansiblelint/schemas/ansible.json#/$defs/tasks" />
|
||||
<option name="applicationDefined" value="true" />
|
||||
<option name="patterns">
|
||||
<list>
|
||||
<Item>
|
||||
<option name="pattern" value="true" />
|
||||
<option name="path" value="*/tasks/*.yml" />
|
||||
<option name="mappingKind" value="Pattern" />
|
||||
</Item>
|
||||
</list>
|
||||
</option>
|
||||
</SchemaInfo>
|
||||
</value>
|
||||
</entry>
|
||||
<entry key="Authentik Blueprint">
|
||||
<value>
|
||||
<SchemaInfo>
|
||||
<option name="generatedName" value="New Schema" />
|
||||
<option name="name" value="Authentik Blueprint" />
|
||||
<option name="relativePathToSchema" value="https://goauthentik.io/blueprints/schema.json" />
|
||||
<option name="patterns">
|
||||
<list>
|
||||
<Item>
|
||||
<option name="directory" value="true" />
|
||||
<option name="path" value="roles/alpina/collections/services/authentik/templates/blueprints" />
|
||||
<option name="mappingKind" value="Directory" />
|
||||
</Item>
|
||||
</list>
|
||||
</option>
|
||||
</SchemaInfo>
|
||||
</value>
|
||||
</entry>
|
||||
<entry key="Traefik v2">
|
||||
<value>
|
||||
<SchemaInfo>
|
||||
@@ -12,7 +48,9 @@
|
||||
<option name="patterns">
|
||||
<list>
|
||||
<Item>
|
||||
<option name="path" value="roles/traefik/templates/traefik.yml.j2" />
|
||||
<option name="pattern" value="true" />
|
||||
<option name="path" value="*/traefik.yml.j2" />
|
||||
<option name="mappingKind" value="Pattern" />
|
||||
</Item>
|
||||
</list>
|
||||
</option>
|
||||
@@ -28,9 +66,52 @@
|
||||
<option name="patterns">
|
||||
<list>
|
||||
<Item>
|
||||
<option name="directory" value="true" />
|
||||
<option name="path" value="roles/traefik/templates/rules" />
|
||||
<option name="mappingKind" value="Directory" />
|
||||
<option name="path" value="file://$APPLICATION_CONFIG_DIR$/scratches/scratch.yml" />
|
||||
</Item>
|
||||
<Item>
|
||||
<option name="path" value="file://$APPLICATION_CONFIG_DIR$/scratches/scratch_1.yml" />
|
||||
</Item>
|
||||
<Item>
|
||||
<option name="path" value="file:///run/user/1000/kio-fuse-kipURF/sftp/root@debbi.lab.home/mnt/dock/traefik/rules/hello-world.yml" />
|
||||
</Item>
|
||||
</list>
|
||||
</option>
|
||||
</SchemaInfo>
|
||||
</value>
|
||||
</entry>
|
||||
<entry key="docker-compose.yml">
|
||||
<value>
|
||||
<SchemaInfo>
|
||||
<option name="name" value="docker-compose.yml" />
|
||||
<option name="relativePathToSchema" value="https://raw.githubusercontent.com/compose-spec/compose-spec/master/schema/compose-spec.json" />
|
||||
<option name="applicationDefined" value="true" />
|
||||
<option name="patterns">
|
||||
<list>
|
||||
<Item>
|
||||
<option name="pattern" value="true" />
|
||||
<option name="path" value="*/docker-compose.yml" />
|
||||
<option name="mappingKind" value="Pattern" />
|
||||
</Item>
|
||||
<Item>
|
||||
<option name="pattern" value="true" />
|
||||
<option name="path" value="*/docker-compose.yml.j2" />
|
||||
<option name="mappingKind" value="Pattern" />
|
||||
</Item>
|
||||
</list>
|
||||
</option>
|
||||
</SchemaInfo>
|
||||
</value>
|
||||
</entry>
|
||||
<entry key="prometheus.json">
|
||||
<value>
|
||||
<SchemaInfo>
|
||||
<option name="name" value="prometheus.json" />
|
||||
<option name="relativePathToSchema" value="https://json.schemastore.org/prometheus.json" />
|
||||
<option name="applicationDefined" value="true" />
|
||||
<option name="patterns">
|
||||
<list>
|
||||
<Item>
|
||||
<option name="path" value="roles/alpina/collections/services/monitoring/templates/prometheus_config/prometheus.yml.j2" />
|
||||
</Item>
|
||||
</list>
|
||||
</option>
|
||||
|
5
.idea/misc.xml
generated
5
.idea/misc.xml
generated
@@ -1,4 +1,7 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="ProjectRootManager" version="2" project-jdk-name="Poetry (alpina)" project-jdk-type="Python SDK" />
|
||||
<component name="Black">
|
||||
<option name="sdkName" value="Poetry (alpina) (2)" />
|
||||
</component>
|
||||
<component name="ProjectRootManager" version="2" project-jdk-name="Poetry (alpina) (3)" project-jdk-type="Python SDK" />
|
||||
</project>
|
8
Makefile
8
Makefile
@@ -1,15 +1,19 @@
|
||||
.POSIX:
|
||||
.PHONY: *
|
||||
.EXPORT_ALL_VARIABLES:
|
||||
|
||||
env ?= staging
|
||||
vault_id ?= alpina@contrib/rbw-client.sh
|
||||
|
||||
clean_desired ?= false
|
||||
|
||||
all: site
|
||||
|
||||
setup:
|
||||
poetry install
|
||||
poetry install --quiet
|
||||
|
||||
site: setup
|
||||
poetry run ansible-playbook --vault-id ${vault_id} -i inventories/${env} site.yml
|
||||
poetry run ansible-playbook --vault-id ${vault_id} -i inventories/${env} --extra-vars "clean_desired_arg=${clean_desired}" site.yml
|
||||
|
||||
services: setup
|
||||
poetry run ansible-playbook --vault-id ${vault_id} -i inventories/${env} services.yml
|
||||
|
45
README.md
45
README.md
@@ -1,3 +1,46 @@
|
||||
# Alpina
|
||||
|
||||
A home for configuring all of my homelab containers on an Alpine Linux machine.
|
||||
A home for configuring all of my homelab containers on a Debian Linux machine.
|
||||
This assumes a Debian Linux machine with Docker and Docker Compose installed.
|
||||
|
||||
My particular setup is based on a [jailmaker](https://github.com/Jip-Hop/jailmaker) container
|
||||
running on top of TrueNAS SCALE, separating all the docker stuff from the appliance.
|
||||
|
||||
# Notes
|
||||
|
||||
## IPv6
|
||||
The current configuration is designed to work with IPv6.
|
||||
However, because of how (not properly) I'm doing the subnetting
|
||||
from the host's network, NDP doesn't work.
|
||||
This means that container IPs are not accessible from other hosts on the local network.
|
||||
I simply have a static route on my router to the container subnet,
|
||||
that uses the IP of this host as the gateway.
|
||||
|
||||
This is a limitation of my current ISP, I only have a single /64 subnet for my lab network.
|
||||
I'd like to get a /56 or /48, perhaps using Hurricane Electric's tunnel broker.
|
||||
*Sigh* ISPs being stingy with the 2^48 prefixes they're afraid of running out of.
|
||||
|
||||
## Upgrading Postgres
|
||||
Upgrading the postgres container for a given stack requires a dump and restore.
|
||||
|
||||
In the compose directory for a given stack, run the following commands:
|
||||
```bash
|
||||
docker compose down
|
||||
docker compose up -d <db_service>
|
||||
docker compose exec -it <db_service> pg_dumpall -U <db_user> | tee /tmp/dump.sql
|
||||
docker compose down
|
||||
|
||||
# Edit the docker-compose.yml file to use the new postgres image
|
||||
sudo rm -r <postgres_data_dir>/* # TODO: this might not actually work with the sudo wildcard
|
||||
docker compose up -d <db_service>
|
||||
# For some reason, compose exec doesn't like the input redirection
|
||||
docker exec -i <db_container_name> psql -U <db_user> < /tmp/dump.sql
|
||||
docker compose up -d
|
||||
rm /tmp/dump.sql
|
||||
```
|
||||
|
||||
Additionally, if upgrading from postgres <= 13, it is necessary to upgrade the
|
||||
password hashes. This can be done by running the following command:
|
||||
```bash
|
||||
docker compose exec -it <db_service> psql -U <db_user> -c "\password"
|
||||
```
|
||||
|
28
contrib/compose_helpers.j2
Normal file
28
contrib/compose_helpers.j2
Normal file
@@ -0,0 +1,28 @@
|
||||
{% macro default_network(subnet_index) %}
|
||||
default:
|
||||
enable_ipv6: true
|
||||
ipam:
|
||||
config:
|
||||
- subnet: {{ docker_ipv6_subnet | ansible.utils.ipsubnet(80, subnet_index) }}
|
||||
{% endmacro %}
|
||||
|
||||
{% macro traefik_labels(host, service="", port="", auth=false) %}
|
||||
traefik.enable=true
|
||||
- traefik.http.routers.{{ host }}.rule=Host(`{{ host }}.{{ domain }}`)
|
||||
- traefik.http.routers.{{ host }}.entrypoints=web
|
||||
- traefik.http.routers.{{ host }}-tls.rule=Host(`{{ host }}.{{ domain }}`)
|
||||
- traefik.http.routers.{{ host }}-tls.entrypoints=websecure
|
||||
- traefik.http.routers.{{ host }}-tls.tls=true
|
||||
- traefik.http.routers.{{ host }}-tls.tls.certresolver=letsencrypt
|
||||
- traefik.http.routers.{{ host }}-tls.tls.domains.0.main={{ domain }}
|
||||
- traefik.http.routers.{{ host }}-tls.tls.domains.0.sans=*.{{ domain }}
|
||||
{% if service -%}
|
||||
- traefik.http.routers.{{ host }}.service={{ service }}
|
||||
{% endif %}
|
||||
{% if port -%}
|
||||
- traefik.http.services.{{ host }}.loadbalancer.server.port={{ port }}
|
||||
{% endif %}
|
||||
{% if auth -%}
|
||||
- traefik.http.routers.{{ host }}-tls.middlewares=authentik@docker
|
||||
{% endif %}
|
||||
{% endmacro %}
|
@@ -1,35 +0,0 @@
|
||||
# https://stackoverflow.com/questions/41667864/can-the-templates-module-handle-multiple-templates-directories
|
||||
|
||||
- name: Ensure service directory exists
|
||||
file:
|
||||
path: "{{ current_svc_path }}"
|
||||
state: directory
|
||||
mode: "500"
|
||||
|
||||
- name: Ensure directory structure exists
|
||||
file:
|
||||
path: "{{ current_svc_path }}/{{ item.path }}"
|
||||
state: directory
|
||||
mode: "500"
|
||||
with_community.general.filetree: "{{ templates_source }}"
|
||||
when: item.state == "directory"
|
||||
|
||||
|
||||
- name: Include app config variables
|
||||
include_vars:
|
||||
file: "{{ role_path }}/vars/app_config.yml"
|
||||
|
||||
- name: Generate {{ current_svc_name }} deployment from templates
|
||||
template:
|
||||
src: "{{ item.src }}"
|
||||
dest: "{{ current_svc_path }}/{{ item.path | regex_replace('\\.j2$', '') }}"
|
||||
mode: "400"
|
||||
with_community.general.filetree: "{{ templates_source }}"
|
||||
when: item.state == "file"
|
||||
|
||||
- name: Deploy docker-compose for {{ current_svc_name }}
|
||||
community.docker.docker_compose:
|
||||
project_src: "{{ current_svc_path }}"
|
||||
state: present
|
||||
pull: true
|
||||
remove_orphans: true
|
48
group_vars/alpina/vars.yml
Normal file
48
group_vars/alpina/vars.yml
Normal file
@@ -0,0 +1,48 @@
|
||||
# Shared variables between environments
|
||||
|
||||
---
|
||||
alpina_svc_path: ~/alpina
|
||||
base_volume_path: /mnt/dock
|
||||
media_volume_path: /mnt/media
|
||||
|
||||
traefik_subnet: 172.16.122.0
|
||||
|
||||
# Authentik
|
||||
authentik_db_password: "{{ vault_authentik_db_password }}"
|
||||
authentik_secret_key: "{{ vault_authentik_secret_key }}"
|
||||
|
||||
authentik_sendgrid_api_key: "{{ vault_authentik_sendgrid_api_key }}"
|
||||
|
||||
auth_grafana_client_secret: "{{ vault_auth_grafana_client_secret }}"
|
||||
arrstack_password: "{{ vault_arrstack_password }}"
|
||||
|
||||
# Minio
|
||||
minio_password: "{{ vault_minio_password }}"
|
||||
|
||||
# Monitoring
|
||||
## auth_grafana_client_secret:
|
||||
influxdb_admin_password: "{{ vault_influxdb_admin_password }}"
|
||||
influxdb_admin_token: "{{ vault_influxdb_admin_token }}"
|
||||
|
||||
# Traefik
|
||||
acme_email: "{{ vault_acme_email }}"
|
||||
cloudflare_api_token: "{{ vault_cloudflare_api_token }}"
|
||||
|
||||
# Arrstack
|
||||
wg_peer_pubkey: "{{ vault_wg_peer_pubkey }}"
|
||||
vpn_server_names: "{{ vault_vpn_server_names }}"
|
||||
|
||||
# Gitea
|
||||
gitea_db_password: "{{ vault_gitea_db_password }}"
|
||||
gitea_sendgrid_api_key: "{{ vault_gitea_sendgrid_api_key }}"
|
||||
## Security
|
||||
secret_key: "{{ vault_secret_key }}"
|
||||
internal_token: "{{ vault_internal_token }}"
|
||||
jwt_secret: "{{ vault_jwt_secret }}"
|
||||
|
||||
# Jellyfin
|
||||
|
||||
# Nextcloud
|
||||
nextcloud_db_password: "{{ vault_nextcloud_db_password }}"
|
||||
redis_password: "{{ vault_redis_password }}"
|
||||
nextcloud_sendgrid_api_key: "{{ vault_nextcloud_sendgrid_api_key }}"
|
88
group_vars/alpina/vault.yml
Normal file
88
group_vars/alpina/vault.yml
Normal file
@@ -0,0 +1,88 @@
|
||||
$ANSIBLE_VAULT;1.1;AES256
|
||||
36636236366435333738633465323539336231393239656538643863643233346563333836623335
|
||||
3136393936656261396434316232356338313838373666660a653464613833306133343232623864
|
||||
61666561336462376664363463313533353238623031613664353063396236343663643936303730
|
||||
6235646336306636360a653238633038306532613436633132363231613862383636313838623461
|
||||
32633366326136346435613232396632396365656138643361643139353430663637353565383664
|
||||
36623961663030653639316131376535363138343965636437653139646233613765323439393030
|
||||
31666137346339663162393836636638636431326232323461353661613062623032306130393965
|
||||
38313931313935666633343835303232333961633232623538383138366262663335323764323939
|
||||
32373333663834626633363265373632356439633862316562323565646530383534653338353165
|
||||
38396434353332623164346137383238343536303130616666643065306431656137303263323135
|
||||
34316662353031653932396239623733313037383935383762623136346636323434363231623161
|
||||
30393864353466643637316566663366363231373335663331323932663837626239663633663965
|
||||
66333531323861663130353531323339386566303630366236636135393439356634393732623033
|
||||
31336231363935633436363962316666666336303338313636386163313666636336343464336133
|
||||
33313730303961663632323435323963663530623265663664343735643061323332343265343431
|
||||
61363039333730623562363233373537633138663239313132336666313237373137353663326538
|
||||
32366130326635366433393434653735616132366264386461363063393265623765666461626366
|
||||
38636239376534653230663932393930343162333262643130633835343363613061623932363761
|
||||
64643164323335376565646137643763316562343565366462376162333633313737303465373362
|
||||
63343734633536353661353165346632666230616138396461336332623365366432313734343837
|
||||
30613736313961663334326335333834336634373338326631313739363765303036303132346166
|
||||
37313030373264383564383936396339623061616134356663333733653838393537306336313135
|
||||
32336261356437653863653839373130323035346538343938646265653239376236373932646433
|
||||
35373932326535643763396563373138626239393661373231393066323335336264373835336635
|
||||
38393732643630336364363834303534663334396363623261383339313939663461303236646237
|
||||
36393330373534383836373065373239353836653137306338336638396662363434303839363466
|
||||
37303332343464663733653632363239366337656364333532313237633935616637333361383763
|
||||
62363063323362323565363837333264346161353032643039323839336666656333336433376231
|
||||
36363335626137366135373230613436653232663138343862623562306331336330356630316166
|
||||
30613264353165343634663461373630653632366333313837373237613339336638396338376465
|
||||
64633638373263376330343561303664666139663237326637663964386133623164626339346635
|
||||
66636365366562343636653362656133306164353761346661343430356633613063656466316262
|
||||
31633932313532663930303837353863333664393563646566396164666236633832633235653362
|
||||
63663931353436623034653733313766393465363466363831643130643939356335643166356436
|
||||
38386530333264313263636438376134666235646636316233653330613735323234313036356639
|
||||
61316164376434616239646235326661323363333835393430646462323234356138653163616530
|
||||
65623233636435396462343437626130353735643530376538633762346332653162353563386366
|
||||
32656633633935626238323431643631633434633032303435383037353834653964326336616530
|
||||
30363765663133313239373664383830393238303439653531316664636532363135636563356666
|
||||
34376636373033353665373261363536393562653638306661663832326139383565613862333831
|
||||
38616238616332326532656430393331383161376237393365666639363732363164306332343336
|
||||
37366638326464373261386431623731306663616262633837313965633530616265326536323136
|
||||
62366365666461383535663637633332626464643062653139623333663038316536353930653266
|
||||
37343830613062346533613762663738343138383537396435643765323237623130363564396462
|
||||
61663063643135303539313062396338353061346336303938626361343238366366393533363638
|
||||
31313437623631626437393761366537636664393863306164373431653133316639623630353336
|
||||
65313037636533393362363266366231393334613264343331623531393666336336626265366163
|
||||
34663161396633666162326564313735373137303337386538633866653331646635633532336465
|
||||
34386166373436386566656135313438363733353139663630613430363332656239356139393532
|
||||
35626337666639376664346631323938316538333066353363646562323266353165366632656137
|
||||
66366162376165626564363230353062666364646363366637666433636333316536623435623836
|
||||
62346566363362363939353038396566653238666138666531396338323262323965383031336362
|
||||
34613332363334653531383231363539343133333531666564386133346562323338366139663438
|
||||
31613466366438643566333632326239653662636464373337326537313234393038306132343730
|
||||
36633136366162643966396362643165313336383862653435343630646431306366656636353230
|
||||
64326633346561613662383863356531306563623439363566643733336535303335303164633535
|
||||
36356463616162313039386434323637383937613133623131373033373462363365643730666166
|
||||
65383166346638313533326366346433656461346439343838306564393336383536633732343965
|
||||
39306231386130303433616361366363366163646534316138623362393063663438313165643762
|
||||
39393332653564333762663762366633386135353865366338396138666265653662373535666366
|
||||
35613937613366323064316561643435353830316239396464393737613835373964626437316464
|
||||
39643664656565633966393832643033323130636562383233323636363361353430353062323439
|
||||
39396464633336623963633963326461316562333162333766613064336462613235336531623437
|
||||
30383063653666633839646533386239366637346230363033306161386537303039376465303535
|
||||
34643162323065326264343662303138313063303834353832393663616239383739313133393532
|
||||
62393766343037666564326132386139346661383564366366646530346434373366326531356138
|
||||
31323531653338653130303733363764636430336563336439666132626434363463306631363334
|
||||
39623332376334383338633132653262653735346563626365613336623435396539383630366332
|
||||
31316638393562376131363166633163333332633332393062393962613132366538653865663264
|
||||
38313237393436353333323431336361653938343034346164353335366535396265633961333138
|
||||
65386137356161643732636531613166633464326163303336303439383435376331373935333563
|
||||
64633961623761393131333234656530653737346563643963643833383262383434653266343362
|
||||
35623832643032346133346363646136646438663761363330666231316434306232623339656535
|
||||
34393337666237656262313439386336336466373466663663616139353463316265396135626366
|
||||
62313562306334343831616364633933343463386233323637313832316635346235623830333461
|
||||
33663530343966383739643261653736363865323438363430653661653964643339633833386438
|
||||
36333331366334366461346636636462343335313234663864613864366134356161396662383632
|
||||
36663538373761353937313666363262626435623537646665646364353934373638366261333234
|
||||
36353439303663656531666637376364313838386130343966316138356338643135316139363630
|
||||
30386635376565363931333331336431303562346431323534643238333337386264616161356163
|
||||
35663766306635626235373663643064393233346364666663393236353561653362373361666164
|
||||
65653566666234626464356338613834323332383939643935323337376162316163333034643062
|
||||
63646237646234636561313038383636373936656164333735323461626233633337623764383830
|
||||
66383161346336633962643032376662656566396666343662656337306333313836613335643961
|
||||
64323961663032373239636430306430383639306333363938303837386139643230353061623937
|
||||
36373733636337616264313432643230303935626666633533666135666538626266626266643864
|
||||
376430653461346366626432636336653437
|
@@ -1,2 +0,0 @@
|
||||
---
|
||||
my_svc_path: ~/services
|
14
inventories/prod/group_vars/alpina/vars.yml
Normal file
14
inventories/prod/group_vars/alpina/vars.yml
Normal file
@@ -0,0 +1,14 @@
|
||||
# Environment specific variables (prod)
|
||||
|
||||
---
|
||||
docker_ipv6_index: 255
|
||||
|
||||
# Arrstack VPN
|
||||
wg_privkey: "{{ vault_wg_privkey }}"
|
||||
wg_psk: "{{ vault_wg_psk }}"
|
||||
wg_addresses: "{{ vault_wg_addresses }}"
|
||||
fw_vpn_input_ports: "{{ vault_fw_vpn_input_ports }}"
|
||||
|
||||
# Authentik GitHub OAuth
|
||||
github_consumer_key: 32d5cae58d744c56fcc9
|
||||
github_consumer_secret: "{{ vault_github_consumer_secret }}"
|
21
inventories/prod/group_vars/alpina/vault.yml
Normal file
21
inventories/prod/group_vars/alpina/vault.yml
Normal file
@@ -0,0 +1,21 @@
|
||||
$ANSIBLE_VAULT;1.1;AES256
|
||||
61656162363565633436373135333536623561663136303736393865623830633539376362363363
|
||||
3938333137343336626634346262363964316563643261310a366538363037343965363766646535
|
||||
61636239326464373039333462653562373933396665393039633266326234663335363337666439
|
||||
6137323332303533640a383062383135633762323561313666636566306531306636633466316536
|
||||
66623731626266333731303336323733343336626366343833633365616330343565363035323039
|
||||
35313961383131616133386663376331336639633137383137346164353632653939363266613562
|
||||
36316631366661353632386230306532633862393963663465383862653964646462666334396666
|
||||
66626636353539316266343937623662613336616331626439306538363764636366656635356639
|
||||
30663535393366383261333832356237373230663037373638303161303534636230616464636265
|
||||
37623938303638646233346338616239393838396433313063343065386666323264646461373032
|
||||
63376661646139316430303533643063336634333364643231336130613638626431623732646434
|
||||
63643833353164313465633333646232653761356333323933396666323837656334343866363762
|
||||
39646263653137356632323534356631366531636530613736343438393136363835373435636230
|
||||
30313163386335353935663432323033326235653963653930396235373863373232666334326661
|
||||
34336632666365666563326366376461386130343965363832343430396537323734363533353065
|
||||
64313837623366356261383437306465633730353332636561333462356363326132313933653234
|
||||
66363634333664333433613466396639306436353035346134373430663532373934343861323262
|
||||
30666664336336393835346234316238613839326436363162626439376530306133343530303365
|
||||
65393030633237333166336637363435646435323736353461333932366638333264333239373733
|
||||
30623062643336643431
|
@@ -1,2 +1,2 @@
|
||||
[docker_hosts]
|
||||
root@alpina.lab.home
|
||||
[alpina]
|
||||
debbi.lab.home
|
||||
|
14
inventories/staging/group_vars/alpina/vars.yml
Normal file
14
inventories/staging/group_vars/alpina/vars.yml
Normal file
@@ -0,0 +1,14 @@
|
||||
# Environment specific variables (staging)
|
||||
|
||||
---
|
||||
docker_ipv6_index: 254
|
||||
|
||||
# Arrstack VPN
|
||||
wg_privkey: "{{ vault_wg_privkey }}"
|
||||
wg_psk: "{{ vault_wg_psk }}"
|
||||
wg_addresses: "{{ vault_wg_addresses }}"
|
||||
fw_vpn_input_ports: "{{ vault_fw_vpn_input_ports }}"
|
||||
|
||||
# Authentik GitHub OAuth
|
||||
github_consumer_key: dbacb8621c37320eb745
|
||||
github_consumer_secret: "{{ vault_github_consumer_secret }}"
|
21
inventories/staging/group_vars/alpina/vault.yml
Normal file
21
inventories/staging/group_vars/alpina/vault.yml
Normal file
@@ -0,0 +1,21 @@
|
||||
$ANSIBLE_VAULT;1.1;AES256
|
||||
63633535633462326534626562373461373363643166383961303861623531663263323534366537
|
||||
3263633238646439306430356365623233313838326639350a386633363434623737313565316535
|
||||
33393734633937333637373432366132323366343836393538366339626235613937323066613666
|
||||
3737393262646333390a623331333461373563313166323232343234616538623433376166313532
|
||||
32323834346336336164343938303062336438643566343866316164643535663039326331646465
|
||||
36666162393365323633646635333666613030386265306238633434303234336439646663356363
|
||||
63323638373035326465633934326363316364616539613462653232393465633233366666373664
|
||||
66616361646564303530356331323864343966633736643434653237316236363063613634646438
|
||||
35303238646632616465643264316164363139393834626362326538613033656464323435396638
|
||||
31346631653764303332386331663361623766333332366537313634636333346538653537346631
|
||||
62363438303036386530633236376633326162336434343861346261373835653735323161323965
|
||||
62353965373164616537346134303232363033323134323130316439386339613966646330666533
|
||||
65346239383230646565346133663530613462363532663562326136376233303638323332326630
|
||||
35656432363563653663616236393932663637323139666664636237336136366438656666633865
|
||||
66353162656364356638313236643131613830393838636264663833343461373963613431656364
|
||||
32303331623033303433333631313038316336653638656638373031653234356164333363336532
|
||||
37316334353463376562643138346633613633353536653939376564333166323931353634333736
|
||||
63616133663266383339323562343265613461623865623263623139396163343065623264366230
|
||||
32633362336335396562366563363830636133376238646433386236666461333731353337386333
|
||||
61323931643766326338
|
@@ -1,2 +1,2 @@
|
||||
[docker_hosts]
|
||||
root@etapp.lab.home
|
||||
[alpina]
|
||||
etappi.lab.home
|
||||
|
537
poetry.lock
generated
537
poetry.lock
generated
@@ -1,30 +1,28 @@
|
||||
# This file is automatically @generated by Poetry 1.4.0 and should not be changed by hand.
|
||||
# This file is automatically @generated by Poetry 1.8.3 and should not be changed by hand.
|
||||
|
||||
[[package]]
|
||||
name = "ansible"
|
||||
version = "7.3.0"
|
||||
version = "10.1.0"
|
||||
description = "Radically simple IT automation"
|
||||
category = "main"
|
||||
optional = false
|
||||
python-versions = ">=3.9"
|
||||
python-versions = ">=3.10"
|
||||
files = [
|
||||
{file = "ansible-7.3.0-py3-none-any.whl", hash = "sha256:5039bf0fe4cbb9dcc3dbefe464fe2fa7fe75d8548814f00c478d5fe90c3e3979"},
|
||||
{file = "ansible-7.3.0.tar.gz", hash = "sha256:56c2fd97487b2cc83e39e895d8dfad8b2a5df34d490394a15735ebcfdc45f5be"},
|
||||
{file = "ansible-10.1.0-py3-none-any.whl", hash = "sha256:05b761c4628a0fc216478a5e3c111613c61fd13280846fa84843a63c36c7b1b6"},
|
||||
{file = "ansible-10.1.0.tar.gz", hash = "sha256:7d8c44557f570687306e19d0e3296ad230593cb12bda35dcfc9274a6063af22a"},
|
||||
]
|
||||
|
||||
[package.dependencies]
|
||||
ansible-core = ">=2.14.3,<2.15.0"
|
||||
ansible-core = ">=2.17.1,<2.18.0"
|
||||
|
||||
[[package]]
|
||||
name = "ansible-core"
|
||||
version = "2.14.3"
|
||||
version = "2.17.1"
|
||||
description = "Radically simple IT automation"
|
||||
category = "main"
|
||||
optional = false
|
||||
python-versions = ">=3.9"
|
||||
python-versions = ">=3.10"
|
||||
files = [
|
||||
{file = "ansible-core-2.14.3.tar.gz", hash = "sha256:093a4bc4a1259eaeb56ea37ec1d33cf1836c88f39281d89197f8d3480e068a58"},
|
||||
{file = "ansible_core-2.14.3-py3-none-any.whl", hash = "sha256:a4b36bfdd7aa3534d449e9ae6a9fd82d8e513fda8caaf5d18e1e27d217151c8c"},
|
||||
{file = "ansible_core-2.17.1-py3-none-any.whl", hash = "sha256:aaaccf6a9fe05968821a02079c5ec4c33a7fe5f02d9f5d94f7c3a69f71eab675"},
|
||||
{file = "ansible_core-2.17.1.tar.gz", hash = "sha256:46449d71bbd17c3ce85fe379721d88d333fd23637b5c3798e83fae5fa38def00"},
|
||||
]
|
||||
|
||||
[package.dependencies]
|
||||
@@ -32,80 +30,85 @@ cryptography = "*"
|
||||
jinja2 = ">=3.0.0"
|
||||
packaging = "*"
|
||||
PyYAML = ">=5.1"
|
||||
resolvelib = ">=0.5.3,<0.9.0"
|
||||
resolvelib = ">=0.5.3,<1.1.0"
|
||||
|
||||
[[package]]
|
||||
name = "cffi"
|
||||
version = "1.15.1"
|
||||
description = "Foreign Function Interface for Python calling C code."
|
||||
category = "main"
|
||||
name = "ansible-vault"
|
||||
version = "2.1.0"
|
||||
description = "R/W an ansible-vault yaml file"
|
||||
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"},
|
||||
{file = "ansible-vault-2.1.0.tar.gz", hash = "sha256:5ce8fdb5470f1449b76bf07ae2abc56480dad48356ae405c85b686efb64dbd5e"},
|
||||
]
|
||||
|
||||
[package.dependencies]
|
||||
ansible = "*"
|
||||
setuptools = "*"
|
||||
|
||||
[package.extras]
|
||||
dev = ["black", "flake8", "isort[pyproject]", "pytest"]
|
||||
release = ["twine"]
|
||||
|
||||
[[package]]
|
||||
name = "cffi"
|
||||
version = "1.16.0"
|
||||
description = "Foreign Function Interface for Python calling C code."
|
||||
optional = false
|
||||
python-versions = ">=3.8"
|
||||
files = [
|
||||
{file = "cffi-1.16.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:6b3d6606d369fc1da4fd8c357d026317fbb9c9b75d36dc16e90e84c26854b088"},
|
||||
{file = "cffi-1.16.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ac0f5edd2360eea2f1daa9e26a41db02dd4b0451b48f7c318e217ee092a213e9"},
|
||||
{file = "cffi-1.16.0-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7e61e3e4fa664a8588aa25c883eab612a188c725755afff6289454d6362b9673"},
|
||||
{file = "cffi-1.16.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a72e8961a86d19bdb45851d8f1f08b041ea37d2bd8d4fd19903bc3083d80c896"},
|
||||
{file = "cffi-1.16.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5b50bf3f55561dac5438f8e70bfcdfd74543fd60df5fa5f62d94e5867deca684"},
|
||||
{file = "cffi-1.16.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7651c50c8c5ef7bdb41108b7b8c5a83013bfaa8a935590c5d74627c047a583c7"},
|
||||
{file = "cffi-1.16.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e4108df7fe9b707191e55f33efbcb2d81928e10cea45527879a4749cbe472614"},
|
||||
{file = "cffi-1.16.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:32c68ef735dbe5857c810328cb2481e24722a59a2003018885514d4c09af9743"},
|
||||
{file = "cffi-1.16.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:673739cb539f8cdaa07d92d02efa93c9ccf87e345b9a0b556e3ecc666718468d"},
|
||||
{file = "cffi-1.16.0-cp310-cp310-win32.whl", hash = "sha256:9f90389693731ff1f659e55c7d1640e2ec43ff725cc61b04b2f9c6d8d017df6a"},
|
||||
{file = "cffi-1.16.0-cp310-cp310-win_amd64.whl", hash = "sha256:e6024675e67af929088fda399b2094574609396b1decb609c55fa58b028a32a1"},
|
||||
{file = "cffi-1.16.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:b84834d0cf97e7d27dd5b7f3aca7b6e9263c56308ab9dc8aae9784abb774d404"},
|
||||
{file = "cffi-1.16.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:1b8ebc27c014c59692bb2664c7d13ce7a6e9a629be20e54e7271fa696ff2b417"},
|
||||
{file = "cffi-1.16.0-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ee07e47c12890ef248766a6e55bd38ebfb2bb8edd4142d56db91b21ea68b7627"},
|
||||
{file = "cffi-1.16.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d8a9d3ebe49f084ad71f9269834ceccbf398253c9fac910c4fd7053ff1386936"},
|
||||
{file = "cffi-1.16.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e70f54f1796669ef691ca07d046cd81a29cb4deb1e5f942003f401c0c4a2695d"},
|
||||
{file = "cffi-1.16.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5bf44d66cdf9e893637896c7faa22298baebcd18d1ddb6d2626a6e39793a1d56"},
|
||||
{file = "cffi-1.16.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7b78010e7b97fef4bee1e896df8a4bbb6712b7f05b7ef630f9d1da00f6444d2e"},
|
||||
{file = "cffi-1.16.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:c6a164aa47843fb1b01e941d385aab7215563bb8816d80ff3a363a9f8448a8dc"},
|
||||
{file = "cffi-1.16.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e09f3ff613345df5e8c3667da1d918f9149bd623cd9070c983c013792a9a62eb"},
|
||||
{file = "cffi-1.16.0-cp311-cp311-win32.whl", hash = "sha256:2c56b361916f390cd758a57f2e16233eb4f64bcbeee88a4881ea90fca14dc6ab"},
|
||||
{file = "cffi-1.16.0-cp311-cp311-win_amd64.whl", hash = "sha256:db8e577c19c0fda0beb7e0d4e09e0ba74b1e4c092e0e40bfa12fe05b6f6d75ba"},
|
||||
{file = "cffi-1.16.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:fa3a0128b152627161ce47201262d3140edb5a5c3da88d73a1b790a959126956"},
|
||||
{file = "cffi-1.16.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:68e7c44931cc171c54ccb702482e9fc723192e88d25a0e133edd7aff8fcd1f6e"},
|
||||
{file = "cffi-1.16.0-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:abd808f9c129ba2beda4cfc53bde801e5bcf9d6e0f22f095e45327c038bfe68e"},
|
||||
{file = "cffi-1.16.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:88e2b3c14bdb32e440be531ade29d3c50a1a59cd4e51b1dd8b0865c54ea5d2e2"},
|
||||
{file = "cffi-1.16.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fcc8eb6d5902bb1cf6dc4f187ee3ea80a1eba0a89aba40a5cb20a5087d961357"},
|
||||
{file = "cffi-1.16.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b7be2d771cdba2942e13215c4e340bfd76398e9227ad10402a8767ab1865d2e6"},
|
||||
{file = "cffi-1.16.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e715596e683d2ce000574bae5d07bd522c781a822866c20495e52520564f0969"},
|
||||
{file = "cffi-1.16.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:2d92b25dbf6cae33f65005baf472d2c245c050b1ce709cc4588cdcdd5495b520"},
|
||||
{file = "cffi-1.16.0-cp312-cp312-win32.whl", hash = "sha256:b2ca4e77f9f47c55c194982e10f058db063937845bb2b7a86c84a6cfe0aefa8b"},
|
||||
{file = "cffi-1.16.0-cp312-cp312-win_amd64.whl", hash = "sha256:68678abf380b42ce21a5f2abde8efee05c114c2fdb2e9eef2efdb0257fba1235"},
|
||||
{file = "cffi-1.16.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0c9ef6ff37e974b73c25eecc13952c55bceed9112be2d9d938ded8e856138bcc"},
|
||||
{file = "cffi-1.16.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a09582f178759ee8128d9270cd1344154fd473bb77d94ce0aeb2a93ebf0feaf0"},
|
||||
{file = "cffi-1.16.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e760191dd42581e023a68b758769e2da259b5d52e3103c6060ddc02c9edb8d7b"},
|
||||
{file = "cffi-1.16.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:80876338e19c951fdfed6198e70bc88f1c9758b94578d5a7c4c91a87af3cf31c"},
|
||||
{file = "cffi-1.16.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a6a14b17d7e17fa0d207ac08642c8820f84f25ce17a442fd15e27ea18d67c59b"},
|
||||
{file = "cffi-1.16.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6602bc8dc6f3a9e02b6c22c4fc1e47aa50f8f8e6d3f78a5e16ac33ef5fefa324"},
|
||||
{file = "cffi-1.16.0-cp38-cp38-win32.whl", hash = "sha256:131fd094d1065b19540c3d72594260f118b231090295d8c34e19a7bbcf2e860a"},
|
||||
{file = "cffi-1.16.0-cp38-cp38-win_amd64.whl", hash = "sha256:31d13b0f99e0836b7ff893d37af07366ebc90b678b6664c955b54561fc36ef36"},
|
||||
{file = "cffi-1.16.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:582215a0e9adbe0e379761260553ba11c58943e4bbe9c36430c4ca6ac74b15ed"},
|
||||
{file = "cffi-1.16.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:b29ebffcf550f9da55bec9e02ad430c992a87e5f512cd63388abb76f1036d8d2"},
|
||||
{file = "cffi-1.16.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dc9b18bf40cc75f66f40a7379f6a9513244fe33c0e8aa72e2d56b0196a7ef872"},
|
||||
{file = "cffi-1.16.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9cb4a35b3642fc5c005a6755a5d17c6c8b6bcb6981baf81cea8bfbc8903e8ba8"},
|
||||
{file = "cffi-1.16.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b86851a328eedc692acf81fb05444bdf1891747c25af7529e39ddafaf68a4f3f"},
|
||||
{file = "cffi-1.16.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c0f31130ebc2d37cdd8e44605fb5fa7ad59049298b3f745c74fa74c62fbfcfc4"},
|
||||
{file = "cffi-1.16.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8f8e709127c6c77446a8c0a8c8bf3c8ee706a06cd44b1e827c3e6a2ee6b8c098"},
|
||||
{file = "cffi-1.16.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:748dcd1e3d3d7cd5443ef03ce8685043294ad6bd7c02a38d1bd367cfd968e000"},
|
||||
{file = "cffi-1.16.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:8895613bcc094d4a1b2dbe179d88d7fb4a15cee43c052e8885783fac397d91fe"},
|
||||
{file = "cffi-1.16.0-cp39-cp39-win32.whl", hash = "sha256:ed86a35631f7bfbb28e108dd96773b9d5a6ce4811cf6ea468bb6a359b256b1e4"},
|
||||
{file = "cffi-1.16.0-cp39-cp39-win_amd64.whl", hash = "sha256:3686dffb02459559c74dd3d81748269ffb0eb027c39a6fc99502de37d501faa8"},
|
||||
{file = "cffi-1.16.0.tar.gz", hash = "sha256:bcb3ef43e58665bbda2fb198698fcae6776483e0c4a631aa5647806c25e02cc0"},
|
||||
]
|
||||
|
||||
[package.dependencies]
|
||||
@@ -113,60 +116,67 @@ pycparser = "*"
|
||||
|
||||
[[package]]
|
||||
name = "cryptography"
|
||||
version = "39.0.2"
|
||||
version = "42.0.8"
|
||||
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-39.0.2-cp36-abi3-macosx_10_12_universal2.whl", hash = "sha256:2725672bb53bb92dc7b4150d233cd4b8c59615cd8288d495eaa86db00d4e5c06"},
|
||||
{file = "cryptography-39.0.2-cp36-abi3-macosx_10_12_x86_64.whl", hash = "sha256:23df8ca3f24699167daf3e23e51f7ba7334d504af63a94af468f468b975b7dd7"},
|
||||
{file = "cryptography-39.0.2-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:eb40fe69cfc6f5cdab9a5ebd022131ba21453cf7b8a7fd3631f45bbf52bed612"},
|
||||
{file = "cryptography-39.0.2-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bc0521cce2c1d541634b19f3ac661d7a64f9555135e9d8af3980965be717fd4a"},
|
||||
{file = "cryptography-39.0.2-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ffd394c7896ed7821a6d13b24657c6a34b6e2650bd84ae063cf11ccffa4f1a97"},
|
||||
{file = "cryptography-39.0.2-cp36-abi3-manylinux_2_24_x86_64.whl", hash = "sha256:e8a0772016feeb106efd28d4a328e77dc2edae84dfbac06061319fdb669ff828"},
|
||||
{file = "cryptography-39.0.2-cp36-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:8f35c17bd4faed2bc7797d2a66cbb4f986242ce2e30340ab832e5d99ae60e011"},
|
||||
{file = "cryptography-39.0.2-cp36-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:b49a88ff802e1993b7f749b1eeb31134f03c8d5c956e3c125c75558955cda536"},
|
||||
{file = "cryptography-39.0.2-cp36-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:5f8c682e736513db7d04349b4f6693690170f95aac449c56f97415c6980edef5"},
|
||||
{file = "cryptography-39.0.2-cp36-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:d7d84a512a59f4412ca8549b01f94be4161c94efc598bf09d027d67826beddc0"},
|
||||
{file = "cryptography-39.0.2-cp36-abi3-win32.whl", hash = "sha256:c43ac224aabcbf83a947eeb8b17eaf1547bce3767ee2d70093b461f31729a480"},
|
||||
{file = "cryptography-39.0.2-cp36-abi3-win_amd64.whl", hash = "sha256:788b3921d763ee35dfdb04248d0e3de11e3ca8eb22e2e48fef880c42e1f3c8f9"},
|
||||
{file = "cryptography-39.0.2-pp38-pypy38_pp73-macosx_10_12_x86_64.whl", hash = "sha256:d15809e0dbdad486f4ad0979753518f47980020b7a34e9fc56e8be4f60702fac"},
|
||||
{file = "cryptography-39.0.2-pp38-pypy38_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:50cadb9b2f961757e712a9737ef33d89b8190c3ea34d0fb6675e00edbe35d074"},
|
||||
{file = "cryptography-39.0.2-pp38-pypy38_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:103e8f7155f3ce2ffa0049fe60169878d47a4364b277906386f8de21c9234aa1"},
|
||||
{file = "cryptography-39.0.2-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:6236a9610c912b129610eb1a274bdc1350b5df834d124fa84729ebeaf7da42c3"},
|
||||
{file = "cryptography-39.0.2-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:e944fe07b6f229f4c1a06a7ef906a19652bdd9fd54c761b0ff87e83ae7a30354"},
|
||||
{file = "cryptography-39.0.2-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:35d658536b0a4117c885728d1a7032bdc9a5974722ae298d6c533755a6ee3915"},
|
||||
{file = "cryptography-39.0.2-pp39-pypy39_pp73-manylinux_2_24_x86_64.whl", hash = "sha256:30b1d1bfd00f6fc80d11300a29f1d8ab2b8d9febb6ed4a38a76880ec564fae84"},
|
||||
{file = "cryptography-39.0.2-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:e029b844c21116564b8b61216befabca4b500e6816fa9f0ba49527653cae2108"},
|
||||
{file = "cryptography-39.0.2-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:fa507318e427169ade4e9eccef39e9011cdc19534f55ca2f36ec3f388c1f70f3"},
|
||||
{file = "cryptography-39.0.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:8bc0008ef798231fac03fe7d26e82d601d15bd16f3afaad1c6113771566570f3"},
|
||||
{file = "cryptography-39.0.2.tar.gz", hash = "sha256:bc5b871e977c8ee5a1bbc42fa8d19bcc08baf0c51cbf1586b0e87a2694dde42f"},
|
||||
]
|
||||
|
||||
[package.dependencies]
|
||||
cffi = ">=1.12"
|
||||
|
||||
[package.extras]
|
||||
docs = ["sphinx (>=5.3.0)", "sphinx-rtd-theme (>=1.1.1)"]
|
||||
docstest = ["pyenchant (>=1.6.11)", "sphinxcontrib-spelling (>=4.0.1)", "twine (>=1.12.0)"]
|
||||
pep8test = ["black", "check-manifest", "mypy", "ruff", "types-pytz", "types-requests"]
|
||||
sdist = ["setuptools-rust (>=0.11.4)"]
|
||||
ssh = ["bcrypt (>=3.1.5)"]
|
||||
test = ["hypothesis (>=1.11.4,!=3.79.2)", "iso8601", "pretend", "pytest (>=6.2.0)", "pytest-benchmark", "pytest-cov", "pytest-shard (>=0.1.2)", "pytest-subtests", "pytest-xdist", "pytz"]
|
||||
test-randomorder = ["pytest-randomly"]
|
||||
tox = ["tox"]
|
||||
|
||||
[[package]]
|
||||
name = "jinja2"
|
||||
version = "3.1.2"
|
||||
description = "A very fast and expressive template engine."
|
||||
category = "main"
|
||||
optional = false
|
||||
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"},
|
||||
{file = "cryptography-42.0.8-cp37-abi3-macosx_10_12_universal2.whl", hash = "sha256:81d8a521705787afe7a18d5bfb47ea9d9cc068206270aad0b96a725022e18d2e"},
|
||||
{file = "cryptography-42.0.8-cp37-abi3-macosx_10_12_x86_64.whl", hash = "sha256:961e61cefdcb06e0c6d7e3a1b22ebe8b996eb2bf50614e89384be54c48c6b63d"},
|
||||
{file = "cryptography-42.0.8-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e3ec3672626e1b9e55afd0df6d774ff0e953452886e06e0f1eb7eb0c832e8902"},
|
||||
{file = "cryptography-42.0.8-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e599b53fd95357d92304510fb7bda8523ed1f79ca98dce2f43c115950aa78801"},
|
||||
{file = "cryptography-42.0.8-cp37-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:5226d5d21ab681f432a9c1cf8b658c0cb02533eece706b155e5fbd8a0cdd3949"},
|
||||
{file = "cryptography-42.0.8-cp37-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:6b7c4f03ce01afd3b76cf69a5455caa9cfa3de8c8f493e0d3ab7d20611c8dae9"},
|
||||
{file = "cryptography-42.0.8-cp37-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:2346b911eb349ab547076f47f2e035fc8ff2c02380a7cbbf8d87114fa0f1c583"},
|
||||
{file = "cryptography-42.0.8-cp37-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:ad803773e9df0b92e0a817d22fd8a3675493f690b96130a5e24f1b8fabbea9c7"},
|
||||
{file = "cryptography-42.0.8-cp37-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:2f66d9cd9147ee495a8374a45ca445819f8929a3efcd2e3df6428e46c3cbb10b"},
|
||||
{file = "cryptography-42.0.8-cp37-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:d45b940883a03e19e944456a558b67a41160e367a719833c53de6911cabba2b7"},
|
||||
{file = "cryptography-42.0.8-cp37-abi3-win32.whl", hash = "sha256:a0c5b2b0585b6af82d7e385f55a8bc568abff8923af147ee3c07bd8b42cda8b2"},
|
||||
{file = "cryptography-42.0.8-cp37-abi3-win_amd64.whl", hash = "sha256:57080dee41209e556a9a4ce60d229244f7a66ef52750f813bfbe18959770cfba"},
|
||||
{file = "cryptography-42.0.8-cp39-abi3-macosx_10_12_universal2.whl", hash = "sha256:dea567d1b0e8bc5764b9443858b673b734100c2871dc93163f58c46a97a83d28"},
|
||||
{file = "cryptography-42.0.8-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c4783183f7cb757b73b2ae9aed6599b96338eb957233c58ca8f49a49cc32fd5e"},
|
||||
{file = "cryptography-42.0.8-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a0608251135d0e03111152e41f0cc2392d1e74e35703960d4190b2e0f4ca9c70"},
|
||||
{file = "cryptography-42.0.8-cp39-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:dc0fdf6787f37b1c6b08e6dfc892d9d068b5bdb671198c72072828b80bd5fe4c"},
|
||||
{file = "cryptography-42.0.8-cp39-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:9c0c1716c8447ee7dbf08d6db2e5c41c688544c61074b54fc4564196f55c25a7"},
|
||||
{file = "cryptography-42.0.8-cp39-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:fff12c88a672ab9c9c1cf7b0c80e3ad9e2ebd9d828d955c126be4fd3e5578c9e"},
|
||||
{file = "cryptography-42.0.8-cp39-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:cafb92b2bc622cd1aa6a1dce4b93307792633f4c5fe1f46c6b97cf67073ec961"},
|
||||
{file = "cryptography-42.0.8-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:31f721658a29331f895a5a54e7e82075554ccfb8b163a18719d342f5ffe5ecb1"},
|
||||
{file = "cryptography-42.0.8-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:b297f90c5723d04bcc8265fc2a0f86d4ea2e0f7ab4b6994459548d3a6b992a14"},
|
||||
{file = "cryptography-42.0.8-cp39-abi3-win32.whl", hash = "sha256:2f88d197e66c65be5e42cd72e5c18afbfae3f741742070e3019ac8f4ac57262c"},
|
||||
{file = "cryptography-42.0.8-cp39-abi3-win_amd64.whl", hash = "sha256:fa76fbb7596cc5839320000cdd5d0955313696d9511debab7ee7278fc8b5c84a"},
|
||||
{file = "cryptography-42.0.8-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:ba4f0a211697362e89ad822e667d8d340b4d8d55fae72cdd619389fb5912eefe"},
|
||||
{file = "cryptography-42.0.8-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:81884c4d096c272f00aeb1f11cf62ccd39763581645b0812e99a91505fa48e0c"},
|
||||
{file = "cryptography-42.0.8-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:c9bb2ae11bfbab395bdd072985abde58ea9860ed84e59dbc0463a5d0159f5b71"},
|
||||
{file = "cryptography-42.0.8-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:7016f837e15b0a1c119d27ecd89b3515f01f90a8615ed5e9427e30d9cdbfed3d"},
|
||||
{file = "cryptography-42.0.8-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:5a94eccb2a81a309806027e1670a358b99b8fe8bfe9f8d329f27d72c094dde8c"},
|
||||
{file = "cryptography-42.0.8-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:dec9b018df185f08483f294cae6ccac29e7a6e0678996587363dc352dc65c842"},
|
||||
{file = "cryptography-42.0.8-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:343728aac38decfdeecf55ecab3264b015be68fc2816ca800db649607aeee648"},
|
||||
{file = "cryptography-42.0.8-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:013629ae70b40af70c9a7a5db40abe5d9054e6f4380e50ce769947b73bf3caad"},
|
||||
{file = "cryptography-42.0.8.tar.gz", hash = "sha256:8d09d05439ce7baa8e9e95b07ec5b6c886f548deb7e0f69ef25f64b3bce842f2"},
|
||||
]
|
||||
|
||||
[package.dependencies]
|
||||
cffi = {version = ">=1.12", markers = "platform_python_implementation != \"PyPy\""}
|
||||
|
||||
[package.extras]
|
||||
docs = ["sphinx (>=5.3.0)", "sphinx-rtd-theme (>=1.1.1)"]
|
||||
docstest = ["pyenchant (>=1.6.11)", "readme-renderer", "sphinxcontrib-spelling (>=4.0.1)"]
|
||||
nox = ["nox"]
|
||||
pep8test = ["check-sdist", "click", "mypy", "ruff"]
|
||||
sdist = ["build"]
|
||||
ssh = ["bcrypt (>=3.1.5)"]
|
||||
test = ["certifi", "pretend", "pytest (>=6.2.0)", "pytest-benchmark", "pytest-cov", "pytest-xdist"]
|
||||
test-randomorder = ["pytest-randomly"]
|
||||
|
||||
[[package]]
|
||||
name = "jinja2"
|
||||
version = "3.1.4"
|
||||
description = "A very fast and expressive template engine."
|
||||
optional = false
|
||||
python-versions = ">=3.7"
|
||||
files = [
|
||||
{file = "jinja2-3.1.4-py3-none-any.whl", hash = "sha256:bc5dd2abb727a5319567b7a813e6a2e7318c39f4f487cfe6c89c6f9c7d25197d"},
|
||||
{file = "jinja2-3.1.4.tar.gz", hash = "sha256:4a3aee7acbbe7303aede8e9648d13b8bf88a429282aa6122a993f0ac800cb369"},
|
||||
]
|
||||
|
||||
[package.dependencies]
|
||||
@@ -177,148 +187,178 @@ i18n = ["Babel (>=2.7)"]
|
||||
|
||||
[[package]]
|
||||
name = "markupsafe"
|
||||
version = "2.1.2"
|
||||
version = "2.1.5"
|
||||
description = "Safely add untrusted strings to HTML/XML markup."
|
||||
category = "main"
|
||||
optional = false
|
||||
python-versions = ">=3.7"
|
||||
files = [
|
||||
{file = "MarkupSafe-2.1.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:665a36ae6f8f20a4676b53224e33d456a6f5a72657d9c83c2aa00765072f31f7"},
|
||||
{file = "MarkupSafe-2.1.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:340bea174e9761308703ae988e982005aedf427de816d1afe98147668cc03036"},
|
||||
{file = "MarkupSafe-2.1.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:22152d00bf4a9c7c83960521fc558f55a1adbc0631fbb00a9471e097b19d72e1"},
|
||||
{file = "MarkupSafe-2.1.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:28057e985dace2f478e042eaa15606c7efccb700797660629da387eb289b9323"},
|
||||
{file = "MarkupSafe-2.1.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ca244fa73f50a800cf8c3ebf7fd93149ec37f5cb9596aa8873ae2c1d23498601"},
|
||||
{file = "MarkupSafe-2.1.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:d9d971ec1e79906046aa3ca266de79eac42f1dbf3612a05dc9368125952bd1a1"},
|
||||
{file = "MarkupSafe-2.1.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:7e007132af78ea9df29495dbf7b5824cb71648d7133cf7848a2a5dd00d36f9ff"},
|
||||
{file = "MarkupSafe-2.1.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:7313ce6a199651c4ed9d7e4cfb4aa56fe923b1adf9af3b420ee14e6d9a73df65"},
|
||||
{file = "MarkupSafe-2.1.2-cp310-cp310-win32.whl", hash = "sha256:c4a549890a45f57f1ebf99c067a4ad0cb423a05544accaf2b065246827ed9603"},
|
||||
{file = "MarkupSafe-2.1.2-cp310-cp310-win_amd64.whl", hash = "sha256:835fb5e38fd89328e9c81067fd642b3593c33e1e17e2fdbf77f5676abb14a156"},
|
||||
{file = "MarkupSafe-2.1.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:2ec4f2d48ae59bbb9d1f9d7efb9236ab81429a764dedca114f5fdabbc3788013"},
|
||||
{file = "MarkupSafe-2.1.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:608e7073dfa9e38a85d38474c082d4281f4ce276ac0010224eaba11e929dd53a"},
|
||||
{file = "MarkupSafe-2.1.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:65608c35bfb8a76763f37036547f7adfd09270fbdbf96608be2bead319728fcd"},
|
||||
{file = "MarkupSafe-2.1.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f2bfb563d0211ce16b63c7cb9395d2c682a23187f54c3d79bfec33e6705473c6"},
|
||||
{file = "MarkupSafe-2.1.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:da25303d91526aac3672ee6d49a2f3db2d9502a4a60b55519feb1a4c7714e07d"},
|
||||
{file = "MarkupSafe-2.1.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:9cad97ab29dfc3f0249b483412c85c8ef4766d96cdf9dcf5a1e3caa3f3661cf1"},
|
||||
{file = "MarkupSafe-2.1.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:085fd3201e7b12809f9e6e9bc1e5c96a368c8523fad5afb02afe3c051ae4afcc"},
|
||||
{file = "MarkupSafe-2.1.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:1bea30e9bf331f3fef67e0a3877b2288593c98a21ccb2cf29b74c581a4eb3af0"},
|
||||
{file = "MarkupSafe-2.1.2-cp311-cp311-win32.whl", hash = "sha256:7df70907e00c970c60b9ef2938d894a9381f38e6b9db73c5be35e59d92e06625"},
|
||||
{file = "MarkupSafe-2.1.2-cp311-cp311-win_amd64.whl", hash = "sha256:e55e40ff0cc8cc5c07996915ad367fa47da6b3fc091fdadca7f5403239c5fec3"},
|
||||
{file = "MarkupSafe-2.1.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:a6e40afa7f45939ca356f348c8e23048e02cb109ced1eb8420961b2f40fb373a"},
|
||||
{file = "MarkupSafe-2.1.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cf877ab4ed6e302ec1d04952ca358b381a882fbd9d1b07cccbfd61783561f98a"},
|
||||
{file = "MarkupSafe-2.1.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:63ba06c9941e46fa389d389644e2d8225e0e3e5ebcc4ff1ea8506dce646f8c8a"},
|
||||
{file = "MarkupSafe-2.1.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f1cd098434e83e656abf198f103a8207a8187c0fc110306691a2e94a78d0abb2"},
|
||||
{file = "MarkupSafe-2.1.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:55f44b440d491028addb3b88f72207d71eeebfb7b5dbf0643f7c023ae1fba619"},
|
||||
{file = "MarkupSafe-2.1.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:a6f2fcca746e8d5910e18782f976489939d54a91f9411c32051b4aab2bd7c513"},
|
||||
{file = "MarkupSafe-2.1.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:0b462104ba25f1ac006fdab8b6a01ebbfbce9ed37fd37fd4acd70c67c973e460"},
|
||||
{file = "MarkupSafe-2.1.2-cp37-cp37m-win32.whl", hash = "sha256:7668b52e102d0ed87cb082380a7e2e1e78737ddecdde129acadb0eccc5423859"},
|
||||
{file = "MarkupSafe-2.1.2-cp37-cp37m-win_amd64.whl", hash = "sha256:6d6607f98fcf17e534162f0709aaad3ab7a96032723d8ac8750ffe17ae5a0666"},
|
||||
{file = "MarkupSafe-2.1.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:a806db027852538d2ad7555b203300173dd1b77ba116de92da9afbc3a3be3eed"},
|
||||
{file = "MarkupSafe-2.1.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:a4abaec6ca3ad8660690236d11bfe28dfd707778e2442b45addd2f086d6ef094"},
|
||||
{file = "MarkupSafe-2.1.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f03a532d7dee1bed20bc4884194a16160a2de9ffc6354b3878ec9682bb623c54"},
|
||||
{file = "MarkupSafe-2.1.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4cf06cdc1dda95223e9d2d3c58d3b178aa5dacb35ee7e3bbac10e4e1faacb419"},
|
||||
{file = "MarkupSafe-2.1.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:22731d79ed2eb25059ae3df1dfc9cb1546691cc41f4e3130fe6bfbc3ecbbecfa"},
|
||||
{file = "MarkupSafe-2.1.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:f8ffb705ffcf5ddd0e80b65ddf7bed7ee4f5a441ea7d3419e861a12eaf41af58"},
|
||||
{file = "MarkupSafe-2.1.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:8db032bf0ce9022a8e41a22598eefc802314e81b879ae093f36ce9ddf39ab1ba"},
|
||||
{file = "MarkupSafe-2.1.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:2298c859cfc5463f1b64bd55cb3e602528db6fa0f3cfd568d3605c50678f8f03"},
|
||||
{file = "MarkupSafe-2.1.2-cp38-cp38-win32.whl", hash = "sha256:50c42830a633fa0cf9e7d27664637532791bfc31c731a87b202d2d8ac40c3ea2"},
|
||||
{file = "MarkupSafe-2.1.2-cp38-cp38-win_amd64.whl", hash = "sha256:bb06feb762bade6bf3c8b844462274db0c76acc95c52abe8dbed28ae3d44a147"},
|
||||
{file = "MarkupSafe-2.1.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:99625a92da8229df6d44335e6fcc558a5037dd0a760e11d84be2260e6f37002f"},
|
||||
{file = "MarkupSafe-2.1.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:8bca7e26c1dd751236cfb0c6c72d4ad61d986e9a41bbf76cb445f69488b2a2bd"},
|
||||
{file = "MarkupSafe-2.1.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:40627dcf047dadb22cd25ea7ecfe9cbf3bbbad0482ee5920b582f3809c97654f"},
|
||||
{file = "MarkupSafe-2.1.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:40dfd3fefbef579ee058f139733ac336312663c6706d1163b82b3003fb1925c4"},
|
||||
{file = "MarkupSafe-2.1.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:090376d812fb6ac5f171e5938e82e7f2d7adc2b629101cec0db8b267815c85e2"},
|
||||
{file = "MarkupSafe-2.1.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:2e7821bffe00aa6bd07a23913b7f4e01328c3d5cc0b40b36c0bd81d362faeb65"},
|
||||
{file = "MarkupSafe-2.1.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:c0a33bc9f02c2b17c3ea382f91b4db0e6cde90b63b296422a939886a7a80de1c"},
|
||||
{file = "MarkupSafe-2.1.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:b8526c6d437855442cdd3d87eede9c425c4445ea011ca38d937db299382e6fa3"},
|
||||
{file = "MarkupSafe-2.1.2-cp39-cp39-win32.whl", hash = "sha256:137678c63c977754abe9086a3ec011e8fd985ab90631145dfb9294ad09c102a7"},
|
||||
{file = "MarkupSafe-2.1.2-cp39-cp39-win_amd64.whl", hash = "sha256:0576fe974b40a400449768941d5d0858cc624e3249dfd1e0c33674e5c7ca7aed"},
|
||||
{file = "MarkupSafe-2.1.2.tar.gz", hash = "sha256:abcabc8c2b26036d62d4c746381a6f7cf60aafcc653198ad678306986b09450d"},
|
||||
{file = "MarkupSafe-2.1.5-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:a17a92de5231666cfbe003f0e4b9b3a7ae3afb1ec2845aadc2bacc93ff85febc"},
|
||||
{file = "MarkupSafe-2.1.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:72b6be590cc35924b02c78ef34b467da4ba07e4e0f0454a2c5907f473fc50ce5"},
|
||||
{file = "MarkupSafe-2.1.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e61659ba32cf2cf1481e575d0462554625196a1f2fc06a1c777d3f48e8865d46"},
|
||||
{file = "MarkupSafe-2.1.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2174c595a0d73a3080ca3257b40096db99799265e1c27cc5a610743acd86d62f"},
|
||||
{file = "MarkupSafe-2.1.5-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ae2ad8ae6ebee9d2d94b17fb62763125f3f374c25618198f40cbb8b525411900"},
|
||||
{file = "MarkupSafe-2.1.5-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:075202fa5b72c86ad32dc7d0b56024ebdbcf2048c0ba09f1cde31bfdd57bcfff"},
|
||||
{file = "MarkupSafe-2.1.5-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:598e3276b64aff0e7b3451b72e94fa3c238d452e7ddcd893c3ab324717456bad"},
|
||||
{file = "MarkupSafe-2.1.5-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:fce659a462a1be54d2ffcacea5e3ba2d74daa74f30f5f143fe0c58636e355fdd"},
|
||||
{file = "MarkupSafe-2.1.5-cp310-cp310-win32.whl", hash = "sha256:d9fad5155d72433c921b782e58892377c44bd6252b5af2f67f16b194987338a4"},
|
||||
{file = "MarkupSafe-2.1.5-cp310-cp310-win_amd64.whl", hash = "sha256:bf50cd79a75d181c9181df03572cdce0fbb75cc353bc350712073108cba98de5"},
|
||||
{file = "MarkupSafe-2.1.5-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:629ddd2ca402ae6dbedfceeba9c46d5f7b2a61d9749597d4307f943ef198fc1f"},
|
||||
{file = "MarkupSafe-2.1.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:5b7b716f97b52c5a14bffdf688f971b2d5ef4029127f1ad7a513973cfd818df2"},
|
||||
{file = "MarkupSafe-2.1.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6ec585f69cec0aa07d945b20805be741395e28ac1627333b1c5b0105962ffced"},
|
||||
{file = "MarkupSafe-2.1.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b91c037585eba9095565a3556f611e3cbfaa42ca1e865f7b8015fe5c7336d5a5"},
|
||||
{file = "MarkupSafe-2.1.5-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7502934a33b54030eaf1194c21c692a534196063db72176b0c4028e140f8f32c"},
|
||||
{file = "MarkupSafe-2.1.5-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:0e397ac966fdf721b2c528cf028494e86172b4feba51d65f81ffd65c63798f3f"},
|
||||
{file = "MarkupSafe-2.1.5-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:c061bb86a71b42465156a3ee7bd58c8c2ceacdbeb95d05a99893e08b8467359a"},
|
||||
{file = "MarkupSafe-2.1.5-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:3a57fdd7ce31c7ff06cdfbf31dafa96cc533c21e443d57f5b1ecc6cdc668ec7f"},
|
||||
{file = "MarkupSafe-2.1.5-cp311-cp311-win32.whl", hash = "sha256:397081c1a0bfb5124355710fe79478cdbeb39626492b15d399526ae53422b906"},
|
||||
{file = "MarkupSafe-2.1.5-cp311-cp311-win_amd64.whl", hash = "sha256:2b7c57a4dfc4f16f7142221afe5ba4e093e09e728ca65c51f5620c9aaeb9a617"},
|
||||
{file = "MarkupSafe-2.1.5-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:8dec4936e9c3100156f8a2dc89c4b88d5c435175ff03413b443469c7c8c5f4d1"},
|
||||
{file = "MarkupSafe-2.1.5-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:3c6b973f22eb18a789b1460b4b91bf04ae3f0c4234a0a6aa6b0a92f6f7b951d4"},
|
||||
{file = "MarkupSafe-2.1.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ac07bad82163452a6884fe8fa0963fb98c2346ba78d779ec06bd7a6262132aee"},
|
||||
{file = "MarkupSafe-2.1.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f5dfb42c4604dddc8e4305050aa6deb084540643ed5804d7455b5df8fe16f5e5"},
|
||||
{file = "MarkupSafe-2.1.5-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ea3d8a3d18833cf4304cd2fc9cbb1efe188ca9b5efef2bdac7adc20594a0e46b"},
|
||||
{file = "MarkupSafe-2.1.5-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:d050b3361367a06d752db6ead6e7edeb0009be66bc3bae0ee9d97fb326badc2a"},
|
||||
{file = "MarkupSafe-2.1.5-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:bec0a414d016ac1a18862a519e54b2fd0fc8bbfd6890376898a6c0891dd82e9f"},
|
||||
{file = "MarkupSafe-2.1.5-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:58c98fee265677f63a4385256a6d7683ab1832f3ddd1e66fe948d5880c21a169"},
|
||||
{file = "MarkupSafe-2.1.5-cp312-cp312-win32.whl", hash = "sha256:8590b4ae07a35970728874632fed7bd57b26b0102df2d2b233b6d9d82f6c62ad"},
|
||||
{file = "MarkupSafe-2.1.5-cp312-cp312-win_amd64.whl", hash = "sha256:823b65d8706e32ad2df51ed89496147a42a2a6e01c13cfb6ffb8b1e92bc910bb"},
|
||||
{file = "MarkupSafe-2.1.5-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:c8b29db45f8fe46ad280a7294f5c3ec36dbac9491f2d1c17345be8e69cc5928f"},
|
||||
{file = "MarkupSafe-2.1.5-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ec6a563cff360b50eed26f13adc43e61bc0c04d94b8be985e6fb24b81f6dcfdf"},
|
||||
{file = "MarkupSafe-2.1.5-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a549b9c31bec33820e885335b451286e2969a2d9e24879f83fe904a5ce59d70a"},
|
||||
{file = "MarkupSafe-2.1.5-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4f11aa001c540f62c6166c7726f71f7573b52c68c31f014c25cc7901deea0b52"},
|
||||
{file = "MarkupSafe-2.1.5-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:7b2e5a267c855eea6b4283940daa6e88a285f5f2a67f2220203786dfa59b37e9"},
|
||||
{file = "MarkupSafe-2.1.5-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:2d2d793e36e230fd32babe143b04cec8a8b3eb8a3122d2aceb4a371e6b09b8df"},
|
||||
{file = "MarkupSafe-2.1.5-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:ce409136744f6521e39fd8e2a24c53fa18ad67aa5bc7c2cf83645cce5b5c4e50"},
|
||||
{file = "MarkupSafe-2.1.5-cp37-cp37m-win32.whl", hash = "sha256:4096e9de5c6fdf43fb4f04c26fb114f61ef0bf2e5604b6ee3019d51b69e8c371"},
|
||||
{file = "MarkupSafe-2.1.5-cp37-cp37m-win_amd64.whl", hash = "sha256:4275d846e41ecefa46e2015117a9f491e57a71ddd59bbead77e904dc02b1bed2"},
|
||||
{file = "MarkupSafe-2.1.5-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:656f7526c69fac7f600bd1f400991cc282b417d17539a1b228617081106feb4a"},
|
||||
{file = "MarkupSafe-2.1.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:97cafb1f3cbcd3fd2b6fbfb99ae11cdb14deea0736fc2b0952ee177f2b813a46"},
|
||||
{file = "MarkupSafe-2.1.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1f3fbcb7ef1f16e48246f704ab79d79da8a46891e2da03f8783a5b6fa41a9532"},
|
||||
{file = "MarkupSafe-2.1.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fa9db3f79de01457b03d4f01b34cf91bc0048eb2c3846ff26f66687c2f6d16ab"},
|
||||
{file = "MarkupSafe-2.1.5-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ffee1f21e5ef0d712f9033568f8344d5da8cc2869dbd08d87c84656e6a2d2f68"},
|
||||
{file = "MarkupSafe-2.1.5-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:5dedb4db619ba5a2787a94d877bc8ffc0566f92a01c0ef214865e54ecc9ee5e0"},
|
||||
{file = "MarkupSafe-2.1.5-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:30b600cf0a7ac9234b2638fbc0fb6158ba5bdcdf46aeb631ead21248b9affbc4"},
|
||||
{file = "MarkupSafe-2.1.5-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:8dd717634f5a044f860435c1d8c16a270ddf0ef8588d4887037c5028b859b0c3"},
|
||||
{file = "MarkupSafe-2.1.5-cp38-cp38-win32.whl", hash = "sha256:daa4ee5a243f0f20d528d939d06670a298dd39b1ad5f8a72a4275124a7819eff"},
|
||||
{file = "MarkupSafe-2.1.5-cp38-cp38-win_amd64.whl", hash = "sha256:619bc166c4f2de5caa5a633b8b7326fbe98e0ccbfacabd87268a2b15ff73a029"},
|
||||
{file = "MarkupSafe-2.1.5-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:7a68b554d356a91cce1236aa7682dc01df0edba8d043fd1ce607c49dd3c1edcf"},
|
||||
{file = "MarkupSafe-2.1.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:db0b55e0f3cc0be60c1f19efdde9a637c32740486004f20d1cff53c3c0ece4d2"},
|
||||
{file = "MarkupSafe-2.1.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3e53af139f8579a6d5f7b76549125f0d94d7e630761a2111bc431fd820e163b8"},
|
||||
{file = "MarkupSafe-2.1.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:17b950fccb810b3293638215058e432159d2b71005c74371d784862b7e4683f3"},
|
||||
{file = "MarkupSafe-2.1.5-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4c31f53cdae6ecfa91a77820e8b151dba54ab528ba65dfd235c80b086d68a465"},
|
||||
{file = "MarkupSafe-2.1.5-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:bff1b4290a66b490a2f4719358c0cdcd9bafb6b8f061e45c7a2460866bf50c2e"},
|
||||
{file = "MarkupSafe-2.1.5-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:bc1667f8b83f48511b94671e0e441401371dfd0f0a795c7daa4a3cd1dde55bea"},
|
||||
{file = "MarkupSafe-2.1.5-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:5049256f536511ee3f7e1b3f87d1d1209d327e818e6ae1365e8653d7e3abb6a6"},
|
||||
{file = "MarkupSafe-2.1.5-cp39-cp39-win32.whl", hash = "sha256:00e046b6dd71aa03a41079792f8473dc494d564611a8f89bbbd7cb93295ebdcf"},
|
||||
{file = "MarkupSafe-2.1.5-cp39-cp39-win_amd64.whl", hash = "sha256:fa173ec60341d6bb97a89f5ea19c85c5643c1e7dedebc22f5181eb73573142c5"},
|
||||
{file = "MarkupSafe-2.1.5.tar.gz", hash = "sha256:d283d37a890ba4c1ae73ffadf8046435c76e7bc2247bbb63c00bd1a709c6544b"},
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "packaging"
|
||||
version = "23.0"
|
||||
description = "Core utilities for Python packages"
|
||||
category = "main"
|
||||
name = "netaddr"
|
||||
version = "1.3.0"
|
||||
description = "A network address manipulation library for Python"
|
||||
optional = false
|
||||
python-versions = ">=3.7"
|
||||
files = [
|
||||
{file = "packaging-23.0-py3-none-any.whl", hash = "sha256:714ac14496c3e68c99c29b00845f7a2b85f3bb6f1078fd9f72fd20f0570002b2"},
|
||||
{file = "packaging-23.0.tar.gz", hash = "sha256:b6ad297f8907de0fa2fe1ccbd26fdaf387f5f47c7275fedf8cce89f99446cf97"},
|
||||
{file = "netaddr-1.3.0-py3-none-any.whl", hash = "sha256:c2c6a8ebe5554ce33b7d5b3a306b71bbb373e000bbbf2350dd5213cc56e3dbbe"},
|
||||
{file = "netaddr-1.3.0.tar.gz", hash = "sha256:5c3c3d9895b551b763779ba7db7a03487dc1f8e3b385af819af341ae9ef6e48a"},
|
||||
]
|
||||
|
||||
[package.extras]
|
||||
nicer-shell = ["ipython"]
|
||||
|
||||
[[package]]
|
||||
name = "packaging"
|
||||
version = "24.1"
|
||||
description = "Core utilities for Python packages"
|
||||
optional = false
|
||||
python-versions = ">=3.8"
|
||||
files = [
|
||||
{file = "packaging-24.1-py3-none-any.whl", hash = "sha256:5b8f2217dbdbd2f7f384c41c628544e6d52f2d0f53c6d0c3ea61aa5d1d7ff124"},
|
||||
{file = "packaging-24.1.tar.gz", hash = "sha256:026ed72c8ed3fcce5bf8950572258698927fd1dbda10a5e981cdf0ac37f4f002"},
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "pycparser"
|
||||
version = "2.21"
|
||||
version = "2.22"
|
||||
description = "C parser in Python"
|
||||
category = "main"
|
||||
optional = false
|
||||
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
|
||||
python-versions = ">=3.8"
|
||||
files = [
|
||||
{file = "pycparser-2.21-py2.py3-none-any.whl", hash = "sha256:8ee45429555515e1f6b185e78100aea234072576aa43ab53aefcae078162fca9"},
|
||||
{file = "pycparser-2.21.tar.gz", hash = "sha256:e644fdec12f7872f86c58ff790da456218b10f863970249516d60a5eaca77206"},
|
||||
{file = "pycparser-2.22-py3-none-any.whl", hash = "sha256:c3702b6d3dd8c7abc1afa565d7e63d53a1d0bd86cdc24edd75470f4de499cfcc"},
|
||||
{file = "pycparser-2.22.tar.gz", hash = "sha256:491c8be9c040f5390f5bf44a5b07752bd07f56edf992381b05c701439eec10f6"},
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "pyyaml"
|
||||
version = "6.0"
|
||||
version = "6.0.1"
|
||||
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"},
|
||||
{file = "PyYAML-6.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d858aa552c999bc8a8d57426ed01e40bef403cd8ccdd0fc5f6f04a00414cac2a"},
|
||||
{file = "PyYAML-6.0.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:fd66fc5d0da6d9815ba2cebeb4205f95818ff4b79c3ebe268e75d961704af52f"},
|
||||
{file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:69b023b2b4daa7548bcfbd4aa3da05b3a74b772db9e23b982788168117739938"},
|
||||
{file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:81e0b275a9ecc9c0c0c07b4b90ba548307583c125f54d5b6946cfee6360c733d"},
|
||||
{file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba336e390cd8e4d1739f42dfe9bb83a3cc2e80f567d8805e11b46f4a943f5515"},
|
||||
{file = "PyYAML-6.0.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:326c013efe8048858a6d312ddd31d56e468118ad4cdeda36c719bf5bb6192290"},
|
||||
{file = "PyYAML-6.0.1-cp310-cp310-win32.whl", hash = "sha256:bd4af7373a854424dabd882decdc5579653d7868b8fb26dc7d0e99f823aa5924"},
|
||||
{file = "PyYAML-6.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:fd1592b3fdf65fff2ad0004b5e363300ef59ced41c2e6b3a99d4089fa8c5435d"},
|
||||
{file = "PyYAML-6.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6965a7bc3cf88e5a1c3bd2e0b5c22f8d677dc88a455344035f03399034eb3007"},
|
||||
{file = "PyYAML-6.0.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f003ed9ad21d6a4713f0a9b5a7a0a79e08dd0f221aff4525a2be4c346ee60aab"},
|
||||
{file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:42f8152b8dbc4fe7d96729ec2b99c7097d656dc1213a3229ca5383f973a5ed6d"},
|
||||
{file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:062582fca9fabdd2c8b54a3ef1c978d786e0f6b3a1510e0ac93ef59e0ddae2bc"},
|
||||
{file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d2b04aac4d386b172d5b9692e2d2da8de7bfb6c387fa4f801fbf6fb2e6ba4673"},
|
||||
{file = "PyYAML-6.0.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e7d73685e87afe9f3b36c799222440d6cf362062f78be1013661b00c5c6f678b"},
|
||||
{file = "PyYAML-6.0.1-cp311-cp311-win32.whl", hash = "sha256:1635fd110e8d85d55237ab316b5b011de701ea0f29d07611174a1b42f1444741"},
|
||||
{file = "PyYAML-6.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:bf07ee2fef7014951eeb99f56f39c9bb4af143d8aa3c21b1677805985307da34"},
|
||||
{file = "PyYAML-6.0.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:855fb52b0dc35af121542a76b9a84f8d1cd886ea97c84703eaa6d88e37a2ad28"},
|
||||
{file = "PyYAML-6.0.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:40df9b996c2b73138957fe23a16a4f0ba614f4c0efce1e9406a184b6d07fa3a9"},
|
||||
{file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a08c6f0fe150303c1c6b71ebcd7213c2858041a7e01975da3a99aed1e7a378ef"},
|
||||
{file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c22bec3fbe2524cde73d7ada88f6566758a8f7227bfbf93a408a9d86bcc12a0"},
|
||||
{file = "PyYAML-6.0.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8d4e9c88387b0f5c7d5f281e55304de64cf7f9c0021a3525bd3b1c542da3b0e4"},
|
||||
{file = "PyYAML-6.0.1-cp312-cp312-win32.whl", hash = "sha256:d483d2cdf104e7c9fa60c544d92981f12ad66a457afae824d146093b8c294c54"},
|
||||
{file = "PyYAML-6.0.1-cp312-cp312-win_amd64.whl", hash = "sha256:0d3304d8c0adc42be59c5f8a4d9e3d7379e6955ad754aa9d6ab7a398b59dd1df"},
|
||||
{file = "PyYAML-6.0.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:50550eb667afee136e9a77d6dc71ae76a44df8b3e51e41b77f6de2932bfe0f47"},
|
||||
{file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1fe35611261b29bd1de0070f0b2f47cb6ff71fa6595c077e42bd0c419fa27b98"},
|
||||
{file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:704219a11b772aea0d8ecd7058d0082713c3562b4e271b849ad7dc4a5c90c13c"},
|
||||
{file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:afd7e57eddb1a54f0f1a974bc4391af8bcce0b444685d936840f125cf046d5bd"},
|
||||
{file = "PyYAML-6.0.1-cp36-cp36m-win32.whl", hash = "sha256:fca0e3a251908a499833aa292323f32437106001d436eca0e6e7833256674585"},
|
||||
{file = "PyYAML-6.0.1-cp36-cp36m-win_amd64.whl", hash = "sha256:f22ac1c3cac4dbc50079e965eba2c1058622631e526bd9afd45fedd49ba781fa"},
|
||||
{file = "PyYAML-6.0.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:b1275ad35a5d18c62a7220633c913e1b42d44b46ee12554e5fd39c70a243d6a3"},
|
||||
{file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:18aeb1bf9a78867dc38b259769503436b7c72f7a1f1f4c93ff9a17de54319b27"},
|
||||
{file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:596106435fa6ad000c2991a98fa58eeb8656ef2325d7e158344fb33864ed87e3"},
|
||||
{file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:baa90d3f661d43131ca170712d903e6295d1f7a0f595074f151c0aed377c9b9c"},
|
||||
{file = "PyYAML-6.0.1-cp37-cp37m-win32.whl", hash = "sha256:9046c58c4395dff28dd494285c82ba00b546adfc7ef001486fbf0324bc174fba"},
|
||||
{file = "PyYAML-6.0.1-cp37-cp37m-win_amd64.whl", hash = "sha256:4fb147e7a67ef577a588a0e2c17b6db51dda102c71de36f8549b6816a96e1867"},
|
||||
{file = "PyYAML-6.0.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1d4c7e777c441b20e32f52bd377e0c409713e8bb1386e1099c2415f26e479595"},
|
||||
{file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a0cd17c15d3bb3fa06978b4e8958dcdc6e0174ccea823003a106c7d4d7899ac5"},
|
||||
{file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:28c119d996beec18c05208a8bd78cbe4007878c6dd15091efb73a30e90539696"},
|
||||
{file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7e07cbde391ba96ab58e532ff4803f79c4129397514e1413a7dc761ccd755735"},
|
||||
{file = "PyYAML-6.0.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:49a183be227561de579b4a36efbb21b3eab9651dd81b1858589f796549873dd6"},
|
||||
{file = "PyYAML-6.0.1-cp38-cp38-win32.whl", hash = "sha256:184c5108a2aca3c5b3d3bf9395d50893a7ab82a38004c8f61c258d4428e80206"},
|
||||
{file = "PyYAML-6.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:1e2722cc9fbb45d9b87631ac70924c11d3a401b2d7f410cc0e3bbf249f2dca62"},
|
||||
{file = "PyYAML-6.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9eb6caa9a297fc2c2fb8862bc5370d0303ddba53ba97e71f08023b6cd73d16a8"},
|
||||
{file = "PyYAML-6.0.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c8098ddcc2a85b61647b2590f825f3db38891662cfc2fc776415143f599bb859"},
|
||||
{file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5773183b6446b2c99bb77e77595dd486303b4faab2b086e7b17bc6bef28865f6"},
|
||||
{file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b786eecbdf8499b9ca1d697215862083bd6d2a99965554781d0d8d1ad31e13a0"},
|
||||
{file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc1bf2925a1ecd43da378f4db9e4f799775d6367bdb94671027b73b393a7c42c"},
|
||||
{file = "PyYAML-6.0.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:04ac92ad1925b2cff1db0cfebffb6ffc43457495c9b3c39d3fcae417d7125dc5"},
|
||||
{file = "PyYAML-6.0.1-cp39-cp39-win32.whl", hash = "sha256:faca3bdcf85b2fc05d06ff3fbc1f83e1391b3e724afa3feba7d13eeab355484c"},
|
||||
{file = "PyYAML-6.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:510c9deebc5c0225e8c96813043e62b680ba2f9c50a08d3724c7f28a747d1486"},
|
||||
{file = "PyYAML-6.0.1.tar.gz", hash = "sha256:bfdf460b1736c775f2ba9f6a92bca30bc2095067b8a9d77876d1fad6cc3b4a43"},
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "resolvelib"
|
||||
version = "0.8.1"
|
||||
version = "1.0.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"},
|
||||
{file = "resolvelib-1.0.1-py2.py3-none-any.whl", hash = "sha256:d2da45d1a8dfee81bdd591647783e340ef3bcb104b54c383f70d422ef5cc7dbf"},
|
||||
{file = "resolvelib-1.0.1.tar.gz", hash = "sha256:04ce76cbd63fded2078ce224785da6ecd42b9564b1390793f64ddecbe997b309"},
|
||||
]
|
||||
|
||||
[package.extras]
|
||||
@@ -327,7 +367,22 @@ lint = ["black", "flake8", "isort", "mypy", "types-requests"]
|
||||
release = ["build", "towncrier", "twine"]
|
||||
test = ["commentjson", "packaging", "pytest"]
|
||||
|
||||
[[package]]
|
||||
name = "setuptools"
|
||||
version = "70.1.1"
|
||||
description = "Easily download, build, install, upgrade, and uninstall Python packages"
|
||||
optional = false
|
||||
python-versions = ">=3.8"
|
||||
files = [
|
||||
{file = "setuptools-70.1.1-py3-none-any.whl", hash = "sha256:a58a8fde0541dab0419750bcc521fbdf8585f6e5cb41909df3a472ef7b81ca95"},
|
||||
{file = "setuptools-70.1.1.tar.gz", hash = "sha256:937a48c7cdb7a21eb53cd7f9b59e525503aa8abaf3584c730dc5f7a5bec3a650"},
|
||||
]
|
||||
|
||||
[package.extras]
|
||||
docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "pyproject-hooks (!=1.1)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (>=1,<2)", "sphinx-reredirects", "sphinxcontrib-towncrier"]
|
||||
testing = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "importlib-metadata", "ini2toml[lite] (>=0.14)", "jaraco.develop (>=7.21)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "jaraco.test", "mypy (==1.10.0)", "packaging (>=23.2)", "pip (>=19.1)", "pyproject-hooks (!=1.1)", "pytest (>=6,!=8.1.1)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-home (>=0.5)", "pytest-mypy", "pytest-perf", "pytest-ruff (>=0.3.2)", "pytest-subprocess", "pytest-timeout", "pytest-xdist (>=3)", "tomli", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"]
|
||||
|
||||
[metadata]
|
||||
lock-version = "2.0"
|
||||
python-versions = "^3.10"
|
||||
content-hash = "fdbbbb1f3c9578e994fc064c9036557f370fe659bb84e4a5cf5ad29247968141"
|
||||
content-hash = "2b6819adc72a58e8d504a1ba77064b09a47ec69d1cd39542ee6e068091927cb3"
|
||||
|
@@ -7,7 +7,9 @@ readme = "README.md"
|
||||
|
||||
[tool.poetry.dependencies]
|
||||
python = "^3.10"
|
||||
ansible = "^7.3.0"
|
||||
ansible = "^10.1.0"
|
||||
ansible-vault = "^2.1.0"
|
||||
netaddr = "^1.3.0"
|
||||
|
||||
|
||||
[build-system]
|
||||
|
15
roles/alpina/tasks/deploy_collection.yml
Normal file
15
roles/alpina/tasks/deploy_collection.yml
Normal file
@@ -0,0 +1,15 @@
|
||||
- name: Ensure {{ collection }} collection directory exists
|
||||
file:
|
||||
path: "{{ alpina_svc_path }}/{{ collection }}"
|
||||
state: directory
|
||||
mode: "700"
|
||||
|
||||
- name: Deploy docker compose stacks for {{ collection }}
|
||||
vars:
|
||||
current_stack_name: "{{ stack }}"
|
||||
current_stack_dest: "{{ alpina_svc_path }}/{{ collection }}/{{ stack }}"
|
||||
current_stack_source: "{{ role_path }}/templates/{{ collection }}/{{ stack }}"
|
||||
include_tasks: deploy_compose_stack.yml
|
||||
loop: "{{ stacks }}"
|
||||
loop_control:
|
||||
loop_var: stack
|
34
roles/alpina/tasks/deploy_compose_stack.yml
Normal file
34
roles/alpina/tasks/deploy_compose_stack.yml
Normal file
@@ -0,0 +1,34 @@
|
||||
# https://stackoverflow.com/questions/41667864/can-the-templates-module-handle-multiple-templates-directories
|
||||
|
||||
- name: Ensure {{ stack }} stack directory exists
|
||||
file:
|
||||
path: "{{ current_stack_dest }}"
|
||||
state: directory
|
||||
mode: "700"
|
||||
|
||||
- name: Ensure directory structure exists
|
||||
file:
|
||||
path: "{{ current_stack_dest }}/{{ item.path }}"
|
||||
state: directory
|
||||
mode: "700"
|
||||
loop: "{{ lookup('community.general.filetree', current_stack_source) }}"
|
||||
when: item.state == "directory"
|
||||
|
||||
- name: Generate {{ current_stack_name }} deployment from templates
|
||||
template:
|
||||
src: "{{ item.src }}"
|
||||
dest: "{{ current_stack_dest }}/{{ item.path | regex_replace('\\.j2$', '') }}"
|
||||
mode: "600"
|
||||
loop: "{{ lookup('community.general.filetree', current_stack_source) }}"
|
||||
when: item.state == "file"
|
||||
|
||||
- name: Deploy docker-compose for {{ current_stack_name }}
|
||||
community.docker.docker_compose_v2:
|
||||
project_src: "{{ current_stack_dest }}"
|
||||
state: present
|
||||
pull: always
|
||||
remove_orphans: yes
|
||||
register: docker_compose_output
|
||||
|
||||
- debug:
|
||||
var: docker_compose_output
|
34
roles/alpina/tasks/main.yml
Normal file
34
roles/alpina/tasks/main.yml
Normal file
@@ -0,0 +1,34 @@
|
||||
- name: Register uid of remote user
|
||||
command: id -u
|
||||
register: remote_uid_command
|
||||
changed_when: false
|
||||
|
||||
- name: Set fact for uid
|
||||
set_fact:
|
||||
remote_uid: "{{ remote_uid_command.stdout }}"
|
||||
|
||||
- name: Ensure alpina directory exists
|
||||
file:
|
||||
state: directory
|
||||
path: "{{ alpina_svc_path }}"
|
||||
mode: "700"
|
||||
|
||||
- name: Deploy collection services
|
||||
vars:
|
||||
collection: services
|
||||
stacks:
|
||||
- traefik
|
||||
- monitoring
|
||||
- authentik
|
||||
- minio
|
||||
import_tasks: deploy_collection.yml
|
||||
|
||||
- name: Deploy collection apps
|
||||
vars:
|
||||
collection: apps
|
||||
stacks:
|
||||
- gitea
|
||||
- nextcloud
|
||||
- jellyfin
|
||||
- arrstack
|
||||
import_tasks: deploy_collection.yml
|
33
roles/alpina/templates/apps/arrstack/.env.gluetun.j2
Normal file
33
roles/alpina/templates/apps/arrstack/.env.gluetun.j2
Normal file
@@ -0,0 +1,33 @@
|
||||
## ProtonVPN OpenVPN
|
||||
#VPN_SERVICE_PROVIDER=protonvpn
|
||||
#OPENVPN_USER=+pmp
|
||||
#OPENVPN_PASSWORD=
|
||||
#SERVER_HOSTNAMES=node-us-160.protonvpn.net,node-us-161.protonvpn.net
|
||||
#VPN_PORT_FORWARDING=on
|
||||
|
||||
## ProtonVPN WireGuard
|
||||
#VPN_SERVICE_PROVIDER=custom
|
||||
#VPN_TYPE=wireguard
|
||||
#VPN_ENDPOINT_IP=
|
||||
#VPN_ENDPOINT_PORT=
|
||||
#WIREGUARD_PUBLIC_KEY=
|
||||
#WIREGUARD_PRIVATE_KEY=
|
||||
#WIREGUARD_PRESHARED_KEY=
|
||||
#WIREGUARD_ADDRESSES=
|
||||
#VPN_DNS_ADDRESS=
|
||||
#VPN_PORT_FORWARDING=on
|
||||
#VPN_PORT_FORWARDING_PROVIDER=protonvpn
|
||||
|
||||
## AirVPN
|
||||
VPN_SERVICE_PROVIDER=airvpn
|
||||
VPN_TYPE=wireguard
|
||||
SERVER_NAMES={{ vpn_server_names }}
|
||||
WIREGUARD_PUBLIC_KEY={{ wg_peer_pubkey }}
|
||||
WIREGUARD_PRIVATE_KEY={{ wg_privkey }}
|
||||
WIREGUARD_PRESHARED_KEY={{ wg_psk }}
|
||||
WIREGUARD_ADDRESSES={{ wg_addresses }}
|
||||
FIREWALL_VPN_INPUT_PORTS={{ fw_vpn_input_ports }}
|
||||
|
||||
UPDATER_PERIOD=24h
|
||||
|
||||
#FIREWALL_OUTBOUND_SUBNETS=10.0.0.0/8,{{ docker_ipv6_subnet }}
|
88
roles/alpina/templates/apps/arrstack/docker-compose.yml.j2
Normal file
88
roles/alpina/templates/apps/arrstack/docker-compose.yml.j2
Normal file
@@ -0,0 +1,88 @@
|
||||
{% import 'contrib/compose_helpers.j2' as helpers with context %}
|
||||
|
||||
networks:
|
||||
{{ helpers.default_network(249) | indent(2) }}
|
||||
traefik_traefik:
|
||||
external: true
|
||||
|
||||
services:
|
||||
gluetun:
|
||||
image: qmcgaw/gluetun:latest
|
||||
container_name: gluetun
|
||||
cap_add:
|
||||
- NET_ADMIN
|
||||
sysctls:
|
||||
- net.ipv6.conf.all.disable_ipv6=0
|
||||
env_file:
|
||||
- .env.gluetun
|
||||
restart: unless-stopped
|
||||
networks:
|
||||
- default
|
||||
- traefik_traefik
|
||||
volumes:
|
||||
- {{ base_volume_path }}/arrstack/gluetun:/gluetun
|
||||
|
||||
qbittorrent:
|
||||
image: linuxserver/qbittorrent:latest
|
||||
container_name: qbittorrent
|
||||
labels:
|
||||
- {{ helpers.traefik_labels('qbit', port='8080', auth=true) | indent(6) }}
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
{# Keeping this for debugging purposes -#}
|
||||
- DOCKER_MODS=linuxserver/mods:universal-package-install
|
||||
network_mode: service:gluetun
|
||||
volumes:
|
||||
- {{ base_volume_path }}/arrstack/config/qbittorrent:/config
|
||||
- {{ base_volume_path }}/arrstack/downloads:/downloads
|
||||
- {{ media_volume_path }}/Plex:/media/Plex
|
||||
- {{ media_volume_path }}/iso-img:/media/iso-img
|
||||
depends_on:
|
||||
gluetun:
|
||||
condition: service_healthy
|
||||
|
||||
prowlarr:
|
||||
image: linuxserver/prowlarr:latest
|
||||
container_name: prowlarr
|
||||
labels:
|
||||
- {{ helpers.traefik_labels('prowlarr', port='9696', auth=true) | indent(6) }}
|
||||
restart: unless-stopped
|
||||
depends_on:
|
||||
- qbittorrent
|
||||
networks:
|
||||
- default
|
||||
- traefik_traefik
|
||||
volumes:
|
||||
- {{ base_volume_path }}/arrstack/config/prowlarr:/config
|
||||
|
||||
sonarr:
|
||||
image: linuxserver/sonarr:latest
|
||||
container_name: sonarr
|
||||
labels:
|
||||
- {{ helpers.traefik_labels('sonarr', port='8989', auth=true) | indent(6) }}
|
||||
restart: unless-stopped
|
||||
depends_on:
|
||||
- qbittorrent
|
||||
networks:
|
||||
- default
|
||||
- traefik_traefik
|
||||
volumes:
|
||||
- {{ base_volume_path }}/arrstack/config/sonarr:/config
|
||||
- {{ base_volume_path }}/arrstack/downloads:/downloads
|
||||
- {{ media_volume_path }}/Plex:/media/Plex
|
||||
|
||||
radarr:
|
||||
image: linuxserver/radarr:latest
|
||||
container_name: radarr
|
||||
labels:
|
||||
- {{ helpers.traefik_labels('radarr', port='7878', auth=true) | indent(6) }}
|
||||
restart: unless-stopped
|
||||
depends_on:
|
||||
- qbittorrent
|
||||
networks:
|
||||
- default
|
||||
- traefik_traefik
|
||||
volumes:
|
||||
- {{ base_volume_path }}/arrstack/config/radarr:/config
|
||||
- {{ base_volume_path }}/arrstack/downloads:/downloads
|
||||
- {{ media_volume_path }}/Plex:/media/Plex
|
3
roles/alpina/templates/apps/gitea/.env.db.j2
Normal file
3
roles/alpina/templates/apps/gitea/.env.db.j2
Normal file
@@ -0,0 +1,3 @@
|
||||
POSTGRES_USER=gitea
|
||||
POSTGRES_DB=gitea
|
||||
POSTGRES_PASSWORD={{ gitea_db_password }}
|
29
roles/alpina/templates/apps/gitea/.env.gitea.j2
Normal file
29
roles/alpina/templates/apps/gitea/.env.gitea.j2
Normal file
@@ -0,0 +1,29 @@
|
||||
GITEA____APP_NAME=CazGitea
|
||||
|
||||
# Database
|
||||
GITEA__database__DB_TYPE=postgres
|
||||
GITEA__database__HOST=db:5432
|
||||
GITEA__database__NAME=gitea
|
||||
GITEA__database__USER=gitea
|
||||
GITEA__database__PASSWD={{ gitea_db_password }}
|
||||
|
||||
# Server
|
||||
GITEA__server__ROOT_URL=https://gitea.{{ domain }}/
|
||||
GITEA__server__DISABLE_SSH=true
|
||||
|
||||
# Mail
|
||||
GITEA__mailer__ENABLED=true
|
||||
GITEA__mailer__SMTP_ADDR=smtp.sendgrid.net
|
||||
GITEA__mailer__SMTP_PORT=587
|
||||
GITEA__mailer__FROM=gitea@cazzzer.com
|
||||
GITEA__mailer__USER=apikey
|
||||
GITEA__mailer__PASSWD={{ gitea_sendgrid_api_key }}
|
||||
|
||||
# Security
|
||||
GITEA__security__SECRET_KEY={{ secret_key }}
|
||||
GITEA__security__INTERNAL_TOKEN={{ internal_token }}
|
||||
|
||||
GITEA__oauth2__JWT_SECRET={{ jwt_secret }}
|
||||
|
||||
# Indexer
|
||||
GITEA__indexer__REPO_INDEXER_ENABLED=true
|
@@ -1,22 +1,16 @@
|
||||
version: "3.9"
|
||||
{% import 'contrib/compose_helpers.j2' as helpers with context %}
|
||||
|
||||
networks:
|
||||
default:
|
||||
{{ helpers.default_network(199) | indent(2) }}
|
||||
traefik_traefik:
|
||||
external: true
|
||||
|
||||
volumes:
|
||||
gitea:
|
||||
postgres:
|
||||
|
||||
services:
|
||||
server:
|
||||
image: gitea/gitea:1.18
|
||||
image: gitea/gitea:1.22
|
||||
container_name: gitea_server
|
||||
labels:
|
||||
- traefik.enable=true
|
||||
- traefik.http.routers.gitea.rule=Host(`gitea.{{ domain }}`)
|
||||
- traefik.http.services.gitea.loadbalancer.server.port=3000
|
||||
- {{ helpers.traefik_labels('gitea', port='3000') | indent(6) }}
|
||||
restart: unless-stopped
|
||||
env_file:
|
||||
- .env.gitea
|
||||
@@ -24,11 +18,11 @@ services:
|
||||
- default
|
||||
- traefik_traefik
|
||||
volumes:
|
||||
- gitea:/data
|
||||
- {{ base_volume_path }}/gitea/gitea:/data
|
||||
depends_on:
|
||||
- db
|
||||
db:
|
||||
image: postgres:14-alpine
|
||||
image: postgres:16-alpine
|
||||
container_name: gitea_db
|
||||
restart: unless-stopped
|
||||
env_file:
|
||||
@@ -36,4 +30,4 @@ services:
|
||||
networks:
|
||||
- default
|
||||
volumes:
|
||||
- postgres:/var/lib/postgresql/data
|
||||
- {{ base_volume_path }}/gitea/postgres:/var/lib/postgresql/data
|
1
roles/alpina/templates/apps/jellyfin/.env.jellyfin.j2
Normal file
1
roles/alpina/templates/apps/jellyfin/.env.jellyfin.j2
Normal file
@@ -0,0 +1 @@
|
||||
JELLYFIN_PublishedServerUrl=https://jellyfin.{{ domain }}
|
28
roles/alpina/templates/apps/jellyfin/docker-compose.yml.j2
Normal file
28
roles/alpina/templates/apps/jellyfin/docker-compose.yml.j2
Normal file
@@ -0,0 +1,28 @@
|
||||
{% import 'contrib/compose_helpers.j2' as helpers with context %}
|
||||
|
||||
networks:
|
||||
{{ helpers.default_network(197) | indent(2) }}
|
||||
traefik_traefik:
|
||||
external: true
|
||||
|
||||
services:
|
||||
jellyfin:
|
||||
image: jellyfin/jellyfin:latest
|
||||
container_name: jellyfin_jellyfin
|
||||
labels:
|
||||
- {{ helpers.traefik_labels('jellyfin', port='8096') | indent(6) }}
|
||||
restart: unless-stopped
|
||||
env_file:
|
||||
- .env.jellyfin
|
||||
networks:
|
||||
- default
|
||||
- traefik_traefik
|
||||
volumes:
|
||||
- {{ base_volume_path }}/jellyfin/config:/config
|
||||
- {{ base_volume_path }}/jellyfin/cache:/cache
|
||||
- {{ media_volume_path }}/Plex/media:/data/media:ro
|
||||
- {{ media_volume_path }}/other_videos:/data/other_videos:ro
|
||||
tmpfs:
|
||||
- /tmp/transcodes
|
||||
devices:
|
||||
- /dev/dri:/dev/dri
|
@@ -1,3 +1,3 @@
|
||||
POSTGRES_USER=nextcloud
|
||||
POSTGRES_DB=nextcloud
|
||||
POSTGRES_PASSWORD="{{ db_password }}"
|
||||
POSTGRES_PASSWORD={{ nextcloud_db_password }}
|
1
roles/alpina/templates/apps/nextcloud/.env.j2
Normal file
1
roles/alpina/templates/apps/nextcloud/.env.j2
Normal file
@@ -0,0 +1 @@
|
||||
NEXTCLOUD_VERSION=29-fpm-alpine
|
23
roles/alpina/templates/apps/nextcloud/.env.nextcloud.j2
Normal file
23
roles/alpina/templates/apps/nextcloud/.env.nextcloud.j2
Normal file
@@ -0,0 +1,23 @@
|
||||
POSTGRES_DB=nextcloud
|
||||
POSTGRES_USER=nextcloud
|
||||
POSTGRES_PASSWORD={{ nextcloud_db_password }}
|
||||
POSTGRES_HOST=db
|
||||
|
||||
NEXTCLOUD_TRUSTED_DOMAINS=nc.{{ domain }}
|
||||
|
||||
REDIS_HOST=redis
|
||||
REDIS_HOST_PASSWORD={{ redis_password }}
|
||||
|
||||
SMTP_HOST=smtp.sendgrid.net
|
||||
SMTP_SECURE=tls
|
||||
SMTP_PORT=587
|
||||
SMTP_AUTHTYPE=LOGIN
|
||||
SMTP_NAME=apikey
|
||||
SMTP_PASSWORD={{ nextcloud_sendgrid_api_key }}
|
||||
MAIL_FROM_ADDRESS=nc
|
||||
MAIL_DOMAIN=cazzzer.com
|
||||
|
||||
TRUSTED_PROXIES={{ traefik_subnet }}
|
||||
OVERWRITEHOST=nc.{{ domain }}
|
||||
OVERWRITEPROTOCOL=https
|
||||
OVERWRITECLIURL=https://nc.{{ domain }}
|
1
roles/alpina/templates/apps/nextcloud/.env.redis.j2
Normal file
1
roles/alpina/templates/apps/nextcloud/.env.redis.j2
Normal file
@@ -0,0 +1 @@
|
||||
REDIS_PASSWORD={{ redis_password }}
|
@@ -1,15 +1,10 @@
|
||||
version: "3.9"
|
||||
{% import 'contrib/compose_helpers.j2' as helpers with context %}
|
||||
|
||||
networks:
|
||||
default:
|
||||
{{ helpers.default_network(198) | indent(2) }}
|
||||
traefik_traefik:
|
||||
external: true
|
||||
|
||||
volumes:
|
||||
nextcloud:
|
||||
nextcloud_config:
|
||||
nextcloud_data:
|
||||
db:
|
||||
|
||||
services:
|
||||
app:
|
||||
@@ -24,9 +19,9 @@ services:
|
||||
networks:
|
||||
- default
|
||||
volumes:
|
||||
- nextcloud:/var/www/html
|
||||
- nextcloud_config:/var/www/html/config
|
||||
- nextcloud_data:/var/www/html/data
|
||||
- {{ base_volume_path }}/nextcloud/nextcloud:/var/www/html
|
||||
- {{ base_volume_path }}/nextcloud/nextcloud_config:/var/www/html/config
|
||||
- {{ base_volume_path }}/nextcloud/nextcloud_data:/var/www/html/data
|
||||
|
||||
cron:
|
||||
image: nextcloud:${NEXTCLOUD_VERSION}
|
||||
@@ -37,8 +32,10 @@ services:
|
||||
entrypoint: /cron.sh
|
||||
networks:
|
||||
- default
|
||||
volumes_from:
|
||||
- app
|
||||
volumes:
|
||||
- {{ base_volume_path }}/nextcloud/nextcloud:/var/www/html
|
||||
- {{ base_volume_path }}/nextcloud/nextcloud_config:/var/www/html/config
|
||||
- {{ base_volume_path }}/nextcloud/nextcloud_data:/var/www/html/data
|
||||
|
||||
notify_push:
|
||||
image: nextcloud:${NEXTCLOUD_VERSION}
|
||||
@@ -51,11 +48,13 @@ services:
|
||||
- /var/www/html/config/config.php
|
||||
networks:
|
||||
- default
|
||||
volumes_from:
|
||||
- app
|
||||
volumes:
|
||||
- {{ base_volume_path }}/nextcloud/nextcloud:/var/www/html
|
||||
- {{ base_volume_path }}/nextcloud/nextcloud_config:/var/www/html/config
|
||||
- {{ base_volume_path }}/nextcloud/nextcloud_data:/var/www/html/data
|
||||
|
||||
db:
|
||||
image: postgres:13-alpine
|
||||
image: postgres:16-alpine
|
||||
container_name: nextcloud_db
|
||||
restart: unless-stopped
|
||||
env_file:
|
||||
@@ -63,7 +62,7 @@ services:
|
||||
networks:
|
||||
- default
|
||||
volumes:
|
||||
- db:/var/lib/postgresql/data
|
||||
- {{ base_volume_path }}/nextcloud/db:/var/lib/postgresql/data
|
||||
|
||||
redis:
|
||||
image: redis:7-alpine
|
||||
@@ -82,8 +81,7 @@ services:
|
||||
image: nginx:1.23-alpine
|
||||
container_name: nextcloud_web
|
||||
labels:
|
||||
- traefik.enable=true
|
||||
- traefik.http.routers.nextcloud.rule=Host(`nc.{{ domain }}`)
|
||||
- {{ helpers.traefik_labels('nc') | indent(6) }}
|
||||
restart: unless-stopped
|
||||
links:
|
||||
- app
|
||||
@@ -91,6 +89,7 @@ services:
|
||||
- traefik_traefik
|
||||
- default
|
||||
volumes:
|
||||
- ./nginx.conf:/etc/nginx/nginx.conf
|
||||
volumes_from:
|
||||
- app
|
||||
- ./nginx.conf:/etc/nginx/nginx.conf:ro
|
||||
- {{ base_volume_path }}/nextcloud/nextcloud:/var/www/html
|
||||
- {{ base_volume_path }}/nextcloud/nextcloud_config:/var/www/html/config
|
||||
- {{ base_volume_path }}/nextcloud/nextcloud_data:/var/www/html/data
|
21
roles/alpina/templates/services/authentik/.env.authentik.j2
Normal file
21
roles/alpina/templates/services/authentik/.env.authentik.j2
Normal file
@@ -0,0 +1,21 @@
|
||||
AUTHENTIK_ERROR_REPORTING__ENABLED=true
|
||||
|
||||
AUTHENTIK_REDIS__HOST=redis
|
||||
AUTHENTIK_POSTGRESQL__HOST=postgres
|
||||
AUTHENTIK_POSTGRESQL__USER=authentik
|
||||
AUTHENTIK_POSTGRESQL__NAME=authentik
|
||||
AUTHENTIK_POSTGRESQL__PASSWORD={{ authentik_db_password }}
|
||||
|
||||
AUTHENTIK_SECRET_KEY={{ authentik_secret_key }}
|
||||
|
||||
AUTHENTIK_EMAIL__HOST=smtp.sendgrid.net
|
||||
AUTHENTIK_EMAIL__PORT=587
|
||||
AUTHENTIK_EMAIL__USERNAME=apikey
|
||||
AUTHENTIK_EMAIL__PASSWORD={{ authentik_sendgrid_api_key }}
|
||||
|
||||
AUTHENTIK_EMAIL__USE_TLS=true
|
||||
AUTHENTIK_EMAIL__TIMEOUT=10
|
||||
AUTHENTIK_EMAIL__FROM=auth@cazzzer.com
|
||||
|
||||
AUTHENTIK_DEFAULT_USER_CHANGE_EMAIL=false
|
||||
AUTHENTIK_DEFAULT_USER_CHANGE_USERNAME=false
|
3
roles/alpina/templates/services/authentik/.env.db.j2
Normal file
3
roles/alpina/templates/services/authentik/.env.db.j2
Normal file
@@ -0,0 +1,3 @@
|
||||
POSTGRES_USER=authentik
|
||||
POSTGRES_DB=authentik
|
||||
POSTGRES_PASSWORD={{ authentik_db_password }}
|
@@ -0,0 +1,50 @@
|
||||
version: 1
|
||||
metadata:
|
||||
labels:
|
||||
blueprints.goauthentik.io/instantiate: "true"
|
||||
name: Alpina - OAuth2 Apps
|
||||
entries:
|
||||
{% set apps = {
|
||||
"Gitea": {
|
||||
"redirect_uris": "https://gitea."~ domain ~"/user/oauth2/Authentik/callback",
|
||||
"icon": "https://gitea."~ domain ~"/assets/img/logo.svg",
|
||||
},
|
||||
"Nextcloud": {
|
||||
"redirect_uris": "https://nc."~ domain ~"/apps/sociallogin/custom_oidc/authentik",
|
||||
"icon": "https://nc."~ domain ~"/apps/theming/favicon",
|
||||
},
|
||||
} -%}
|
||||
{% for app in apps.keys() -%}
|
||||
- identifiers:
|
||||
name: {{ app }}
|
||||
model: authentik_providers_oauth2.oauth2provider
|
||||
id: {{ app | lower }}
|
||||
attrs:
|
||||
access_code_validity: minutes=1
|
||||
access_token_validity: minutes=5
|
||||
authorization_flow: !Find [authentik_flows.flow, [slug, default-provider-authorization-implicit-consent]]
|
||||
client_type: confidential
|
||||
issuer_mode: per_provider
|
||||
sub_mode: hashed_user_id
|
||||
property_mappings:
|
||||
- !Find [authentik_providers_oauth2.scopemapping, [scope_name, openid]]
|
||||
- !Find [authentik_providers_oauth2.scopemapping, [scope_name, email]]
|
||||
- !Find [authentik_providers_oauth2.scopemapping, [scope_name, profile]]
|
||||
redirect_uris: {{ apps[app]["redirect_uris"] }}
|
||||
refresh_token_validity: days=30
|
||||
signing_key: !Find [authentik_crypto.certificatekeypair, [name, "authentik Self-signed Certificate"]]
|
||||
|
||||
- identifiers:
|
||||
slug: {{ app | lower }}
|
||||
model: authentik_core.application
|
||||
id: {{ app | lower }}
|
||||
attrs:
|
||||
name: {{ app }}
|
||||
group: "Apps"
|
||||
meta_description: "Hello, I'm {{ app }}!"
|
||||
meta_publisher: Alpina
|
||||
icon: "{{ apps[app]["icon"] }}"
|
||||
open_in_new_tab: true
|
||||
policy_engine_mode: any
|
||||
provider: !KeyOf {{ app | lower }}
|
||||
{% endfor %}
|
@@ -0,0 +1,115 @@
|
||||
version: 1
|
||||
metadata:
|
||||
labels:
|
||||
blueprints.goauthentik.io/instantiate: "true"
|
||||
name: Alpina - Proxied Apps
|
||||
entries:
|
||||
- identifiers:
|
||||
name: arrstack
|
||||
model: authentik_core.group
|
||||
id: arrstack
|
||||
attrs:
|
||||
arrstack_username: "arr"
|
||||
arrstack_password: "{{ arrstack_password }}"
|
||||
|
||||
# TODO: Probably refactor this into a jinja macro
|
||||
{% set apps = {
|
||||
"uptime-kuma": {
|
||||
"host": "uptime",
|
||||
"name": "Uptime Kuma",
|
||||
"icon": "https://uptime."~ domain ~"/icon.svg",
|
||||
"unauthenticated_paths": "^/icon.svg$",
|
||||
"group": "Services",
|
||||
"create_admin_group": true,
|
||||
},
|
||||
"qbit": {
|
||||
"host": "qbit",
|
||||
"name": "qBit",
|
||||
"icon": "https://qbit."~ domain ~"/images/qbittorrent-tray.svg",
|
||||
"unauthenticated_paths": "^/images/qbittorrent-tray.svg$",
|
||||
"group": "Arrstack",
|
||||
"create_admin_group": false,
|
||||
},
|
||||
"prowlarr": {
|
||||
"host": "prowlarr",
|
||||
"name": "Prowlarr",
|
||||
"icon": "https://prowlarr."~ domain ~"/Content/Images/logo.svg",
|
||||
"unauthenticated_paths": "^/Content/Images/logo.svg$",
|
||||
"group": "Arrstack",
|
||||
"create_admin_group": false,
|
||||
},
|
||||
"sonarr": {
|
||||
"host": "sonarr",
|
||||
"name": "Sonarr",
|
||||
"icon": "https://sonarr."~ domain ~"/Content/Images/logo.svg",
|
||||
"unauthenticated_paths": "^/Content/Images/logo.svg$",
|
||||
"group": "Arrstack",
|
||||
"create_admin_group": false,
|
||||
},
|
||||
"radarr": {
|
||||
"host": "radarr",
|
||||
"name": "Radarr",
|
||||
"icon": "https://radarr."~ domain ~"/Content/Images/logo.svg",
|
||||
"unauthenticated_paths": "^/Content/Images/logo.svg$",
|
||||
"group": "Arrstack",
|
||||
"create_admin_group": false,
|
||||
},
|
||||
} -%}
|
||||
|
||||
{% for app in apps.keys() -%}
|
||||
- identifiers:
|
||||
name: {{ apps[app]["name"] }}
|
||||
model: authentik_providers_proxy.proxyprovider
|
||||
id: {{ app }}
|
||||
attrs:
|
||||
authorization_flow: !Find [authentik_flows.flow, [ slug, default-provider-authorization-implicit-consent ] ]
|
||||
mode: forward_single
|
||||
external_host: "https://{{ apps[app]["host"] }}.{{ domain }}/"
|
||||
skip_path_regex: "{{ apps[app]["unauthenticated_paths"] }}"
|
||||
|
||||
- identifiers:
|
||||
slug: {{ app }}
|
||||
model: authentik_core.application
|
||||
attrs:
|
||||
name: {{ apps[app]["name"] }}
|
||||
group: {{ apps[app]["group"] }}
|
||||
meta_description: "Hello, I'm {{ apps[app]["name"] }}!"
|
||||
meta_publisher: Alpina
|
||||
icon: "{{ apps[app]["icon"] }}"
|
||||
open_in_new_tab: true
|
||||
provider: !KeyOf {{ app }}
|
||||
|
||||
{% if apps[app]["create_admin_group"] -%}
|
||||
- identifiers:
|
||||
name: "{{ apps[app]["name"] }} Admins"
|
||||
model: authentik_core.group
|
||||
id: "{{ app }} Admins"
|
||||
|
||||
- identifiers:
|
||||
group: !KeyOf "{{ app }} Admins"
|
||||
target: !Find [authentik_core.application, [ slug, {{ app }}] ]
|
||||
model: authentik_policies.policybinding
|
||||
attrs:
|
||||
order: 0
|
||||
{% endif %}
|
||||
|
||||
{% if apps[app]["group"] == "Arrstack" -%}
|
||||
- identifiers:
|
||||
group: !KeyOf arrstack
|
||||
target: !Find [authentik_core.application, [slug, {{ app }}]]
|
||||
model: authentik_policies.policybinding
|
||||
attrs:
|
||||
order: 0
|
||||
{% endif %}
|
||||
|
||||
{% endfor %}
|
||||
|
||||
- identifiers:
|
||||
managed: goauthentik.io/outposts/embedded
|
||||
name: authentik Embedded Outpost
|
||||
model: authentik_outposts.outpost
|
||||
attrs:
|
||||
providers:
|
||||
{% for app in apps.keys() -%}
|
||||
- !KeyOf {{ app }}
|
||||
{% endfor %}
|
@@ -0,0 +1,58 @@
|
||||
version: 1
|
||||
metadata:
|
||||
labels:
|
||||
blueprints.goauthentik.io/instantiate: "true"
|
||||
name: Alpina - Default Authentication Modifications
|
||||
entries:
|
||||
# Add a new flow for passwordless WebAuthn authentication
|
||||
- identifiers:
|
||||
slug: authentication-passwordless-flow
|
||||
model: authentik_flows.flow
|
||||
attrs:
|
||||
designation: authentication
|
||||
name: WebAuthn Authentication Flow
|
||||
title: Sign in with a passkey
|
||||
|
||||
# Add a new stage to the flow to validate just WebAuthn devices
|
||||
- identifiers:
|
||||
name: webauthn-validation
|
||||
model: authentik_stages_authenticator_validate.authenticatorvalidatestage
|
||||
attrs:
|
||||
device_classes:
|
||||
- webauthn
|
||||
not_configured_action: deny
|
||||
webauthn_user_verification: required
|
||||
|
||||
# Stage bindings for passwordless flow,
|
||||
# 1. Validate WebAuthn key
|
||||
- identifiers:
|
||||
order: 10
|
||||
stage: !Find [authentik_stages_authenticator_validate.authenticatorvalidatestage, [name, webauthn-validation]]
|
||||
target: !Find [authentik_flows.flow, [slug, authentication-passwordless-flow]]
|
||||
model: authentik_flows.flowstagebinding
|
||||
# 2. Finish authenticating user
|
||||
- identifiers:
|
||||
order: 100
|
||||
stage: !Find [authentik_stages_user_login.userloginstage, [name, default-authentication-login]]
|
||||
target: !Find [authentik_flows.flow, [slug, authentication-passwordless-flow]]
|
||||
model: authentik_flows.flowstagebinding
|
||||
|
||||
# Some modifications to the default identification stage
|
||||
- identifiers:
|
||||
name: default-authentication-identification
|
||||
model: authentik_stages_identification.identificationstage
|
||||
attrs:
|
||||
# Allow username and password fields to be on the same page
|
||||
password_stage: !Find [authentik_stages_password.passwordstage, [name, default-authentication-password]]
|
||||
# Add a button to use the passwordless WebAuthn flow
|
||||
passwordless_flow: !Find [authentik_flows.flow, [slug, authentication-passwordless-flow]]
|
||||
sources:
|
||||
- !Find [authentik_core.source, [slug, authentik-built-in]]
|
||||
- !Find [authentik_sources_oauth.oauthsource, [slug, github]]
|
||||
|
||||
# Enable compatibility mode for the default authentication flow for better autofill support
|
||||
- identifiers:
|
||||
slug: default-authentication-flow
|
||||
model: authentik_flows.flow
|
||||
attrs:
|
||||
compatibility_mode: true
|
@@ -0,0 +1,25 @@
|
||||
version: 1
|
||||
metadata:
|
||||
labels:
|
||||
blueprints.goauthentik.io/instantiate: "true"
|
||||
name: Alpina - GitHub OAuth
|
||||
entries:
|
||||
- identifiers:
|
||||
slug: github
|
||||
model: authentik_sources_oauth.oauthsource
|
||||
attrs:
|
||||
name: GitHub
|
||||
slug: github
|
||||
access_token_url: https://github.com/login/oauth/access_token
|
||||
additional_scopes: openid read:org
|
||||
authentication_flow: !Find [authentik_flows.flow, [slug, default-source-authentication]]
|
||||
authorization_url: https://github.com/login/oauth/authorize
|
||||
consumer_key: {{ github_consumer_key }}
|
||||
consumer_secret: {{ github_consumer_secret }}
|
||||
enabled: true
|
||||
enrollment_flow: !Find [authentik_flows.flow, [slug, default-source-enrollment]]
|
||||
policy_engine_mode: any
|
||||
profile_url: https://api.github.com/user
|
||||
provider_type: github
|
||||
user_matching_mode: email_link
|
||||
user_path_template: goauthentik.io/sources/%(slug)s
|
@@ -0,0 +1,56 @@
|
||||
version: 1
|
||||
metadata:
|
||||
labels:
|
||||
blueprints.goauthentik.io/instantiate: "true"
|
||||
name: Alpina - OAuth2 Services
|
||||
entries:
|
||||
{% set apps = {
|
||||
"Grafana": {
|
||||
"redirect_uris": "https://grafana."~ domain ~"/login/generic_oauth",
|
||||
"icon": "https://grafana."~ domain ~"/public/img/grafana_icon.svg",
|
||||
"client_secret": auth_grafana_client_secret,
|
||||
},
|
||||
} -%}
|
||||
# TODO: Add Minio
|
||||
|
||||
{% for app in apps.keys() -%}
|
||||
- identifiers:
|
||||
name: {{ app }}
|
||||
model: authentik_providers_oauth2.oauth2provider
|
||||
id: {{ app | lower }}
|
||||
attrs:
|
||||
authorization_flow: !Find [authentik_flows.flow, [slug, default-provider-authorization-implicit-consent]]
|
||||
client_type: confidential
|
||||
client_id: {{ app | lower }}
|
||||
client_secret: {{ apps[app]["client_secret"] }}
|
||||
property_mappings:
|
||||
- !Find [authentik_providers_oauth2.scopemapping, [scope_name, openid]]
|
||||
- !Find [authentik_providers_oauth2.scopemapping, [scope_name, email]]
|
||||
- !Find [authentik_providers_oauth2.scopemapping, [scope_name, profile]]
|
||||
redirect_uris: {{ apps[app]["redirect_uris"] }}
|
||||
|
||||
- identifiers:
|
||||
slug: {{ app | lower }}
|
||||
model: authentik_core.application
|
||||
attrs:
|
||||
name: {{ app }}
|
||||
group: "Services"
|
||||
meta_description: "Hello, I'm {{ app }}!"
|
||||
meta_publisher: Alpina
|
||||
icon: "{{ apps[app]["icon"] }}"
|
||||
open_in_new_tab: true
|
||||
provider: !KeyOf {{ app | lower }}
|
||||
|
||||
- identifiers:
|
||||
name: "{{ app }} Admins"
|
||||
model: authentik_core.group
|
||||
id: "{{ app }} Admins"
|
||||
|
||||
- identifiers:
|
||||
group: !KeyOf "{{ app }} Admins"
|
||||
target: !Find [authentik_core.application, [slug, {{ app | lower }}]]
|
||||
model: authentik_policies.policybinding
|
||||
attrs:
|
||||
order: 0
|
||||
|
||||
{% endfor %}
|
@@ -0,0 +1,66 @@
|
||||
{% import 'contrib/compose_helpers.j2' as helpers with context %}
|
||||
|
||||
networks:
|
||||
{{ helpers.default_network(253) | indent(2) }}
|
||||
traefik_traefik:
|
||||
external: true
|
||||
|
||||
services:
|
||||
server:
|
||||
image: ghcr.io/goauthentik/server:latest
|
||||
container_name: authentik_server
|
||||
labels:
|
||||
- {{ helpers.traefik_labels('auth', port='9000') | indent(6) }}
|
||||
- traefik.http.middlewares.authentik.forwardauth.address=http://localhost:9000/outpost.goauthentik.io/auth/traefik
|
||||
- traefik.http.middlewares.authentik.forwardauth.trustForwardHeader=true
|
||||
- traefik.http.middlewares.authentik.forwardauth.authResponseHeaders=Authorization,X-authentik-username,X-authentik-groups,X-authentik-email,X-authentik-name,X-authentik-uid,X-authentik-jwt,X-authentik-meta-jwks,X-authentik-meta-outpost,X-authentik-meta-provider,X-authentik-meta-app,X-authentik-meta-version
|
||||
restart: unless-stopped
|
||||
# Port forward is needed because traefik can't resolve the container name from the host network
|
||||
ports:
|
||||
- "9000:9000"
|
||||
command: server
|
||||
env_file:
|
||||
- .env.authentik
|
||||
networks:
|
||||
- default
|
||||
- traefik_traefik
|
||||
|
||||
worker:
|
||||
image: ghcr.io/goauthentik/server:latest
|
||||
container_name: authentik_worker
|
||||
restart: unless-stopped
|
||||
command: worker
|
||||
env_file:
|
||||
- .env.authentik
|
||||
volumes:
|
||||
- ./blueprints:/blueprints/alpina
|
||||
- {{ base_volume_path }}/authentik/certs:/certs
|
||||
|
||||
postgres:
|
||||
image: postgres:16-alpine
|
||||
container_name: authentik_postgres
|
||||
restart: unless-stopped
|
||||
env_file:
|
||||
- .env.db
|
||||
healthcheck:
|
||||
test: ["CMD-SHELL", "pg_isready -d $${POSTGRES_DB} -U $${POSTGRES_USER}"]
|
||||
start_period: 20s
|
||||
interval: 30s
|
||||
retries: 5
|
||||
timeout: 5s
|
||||
volumes:
|
||||
- {{ base_volume_path }}/authentik/postgres:/var/lib/postgresql/data
|
||||
|
||||
redis:
|
||||
image: redis:alpine
|
||||
container_name: authentik_redis
|
||||
restart: unless-stopped
|
||||
command: --save 60 1 --loglevel warning
|
||||
healthcheck:
|
||||
test: ["CMD-SHELL", "redis-cli ping | grep PONG"]
|
||||
start_period: 20s
|
||||
interval: 30s
|
||||
retries: 5
|
||||
timeout: 3s
|
||||
volumes:
|
||||
- {{ base_volume_path }}/authentik/redis:/data
|
15
roles/alpina/templates/services/minio/.env.minio.j2
Normal file
15
roles/alpina/templates/services/minio/.env.minio.j2
Normal file
@@ -0,0 +1,15 @@
|
||||
MINIO_ROOT_USER=minio
|
||||
MINIO_ROOT_PASSWORD={{ minio_password }}
|
||||
|
||||
MINIO_DOMAIN=s3.{{ domain }}
|
||||
MINIO_SERVER_URL=https://s3.{{ domain }}
|
||||
MINIO_BROWSER_REDIRECT_URL=https://minio.{{ domain }}
|
||||
|
||||
#MINIO_IDENTITY_OPENID_CONFIG_URL=https://auth.{{ domain }}/application/o/minio/.well-known/openid-configuration
|
||||
#MINIO_IDENTITY_OPENID_CLIENT_ID=
|
||||
#MINIO_IDENTITY_OPENID_CLIENT_SECRET=
|
||||
#MINIO_IDENTITY_OPENID_CLAIM_NAME=
|
||||
#MINIO_IDENTITY_OPENID_CLAIM_PREFIX=
|
||||
#MINIO_IDENTITY_OPENID_SCOPES=
|
||||
#MINIO_IDENTITY_OPENID_REDIRECT_URI=
|
||||
#MINIO_IDENTITY_OPENID_COMMENT=
|
32
roles/alpina/templates/services/minio/docker-compose.yml.j2
Normal file
32
roles/alpina/templates/services/minio/docker-compose.yml.j2
Normal file
@@ -0,0 +1,32 @@
|
||||
{% import 'contrib/compose_helpers.j2' as helpers with context %}
|
||||
|
||||
networks:
|
||||
{{ helpers.default_network(252) | indent(2) }}
|
||||
traefik_traefik:
|
||||
external: true
|
||||
|
||||
services:
|
||||
minio:
|
||||
image: minio/minio:latest
|
||||
container_name: minio
|
||||
labels:
|
||||
- {{ helpers.traefik_labels('minio', port='9090') | indent(6) }}
|
||||
- traefik.http.routers.minio.service=minio
|
||||
- traefik.http.routers.minio-tls.service=minio
|
||||
- traefik.http.routers.minio-s3.rule=Host(`s3.{{ domain }}`) || HostRegexp(`^.+[.]s3[.]{{ domain }}`)
|
||||
- traefik.http.routers.minio-s3.entrypoints=websecure
|
||||
- traefik.http.routers.minio-s3.tls=true
|
||||
- traefik.http.routers.minio-s3.tls.certresolver=letsencrypt
|
||||
- traefik.http.routers.minio-s3.tls.domains.0.main=s3.{{ domain }}
|
||||
- traefik.http.routers.minio-s3.tls.domains.0.sans=*.s3.{{ domain }}
|
||||
- traefik.http.routers.minio-s3.service=minio-s3
|
||||
- traefik.http.services.minio-s3.loadbalancer.server.port=9000
|
||||
restart: unless-stopped
|
||||
command: server --console-address ":9090" /data
|
||||
env_file:
|
||||
- .env.minio
|
||||
networks:
|
||||
- default
|
||||
- traefik_traefik
|
||||
volumes:
|
||||
- {{ base_volume_path }}/minio/data:/data
|
@@ -0,0 +1,7 @@
|
||||
DOCKER_INFLUXDB_INIT_MODE=setup
|
||||
DOCKER_INFLUXDB_INIT_ORG=home
|
||||
DOCKER_INFLUXDB_INIT_BUCKET=influx
|
||||
DOCKER_INFLUXDB_INIT_USERNAME=CaZzzer
|
||||
DOCKER_INFLUXDB_INIT_PASSWORD={{ influxdb_admin_password }}
|
||||
DOCKER_INFLUXDB_INIT_ADMIN_TOKEN={{ influxdb_admin_token }}
|
||||
DOCKER_INFLUXDB_INIT_RETENTION=1w
|
121
roles/alpina/templates/services/monitoring/docker-compose.yml.j2
Normal file
121
roles/alpina/templates/services/monitoring/docker-compose.yml.j2
Normal file
@@ -0,0 +1,121 @@
|
||||
{% import 'contrib/compose_helpers.j2' as helpers with context %}
|
||||
|
||||
networks:
|
||||
{{ helpers.default_network(251) | indent(2) }}
|
||||
traefik_traefik:
|
||||
external: true
|
||||
|
||||
services:
|
||||
grafana:
|
||||
image: grafana/grafana:latest
|
||||
container_name: grafana
|
||||
labels:
|
||||
- {{ helpers.traefik_labels('grafana', port='3000') | indent(6) }}
|
||||
restart: unless-stopped
|
||||
# Needed to make config files readable
|
||||
user: "{{ remote_uid }}"
|
||||
networks:
|
||||
- default
|
||||
- traefik_traefik
|
||||
volumes:
|
||||
- {{ base_volume_path }}/monitoring/grafana:/var/lib/grafana
|
||||
- ./grafana_config:/etc/grafana:ro
|
||||
|
||||
loki:
|
||||
image: grafana/loki:latest
|
||||
container_name: loki
|
||||
restart: unless-stopped
|
||||
# Needed to make config files readable
|
||||
user: "{{ remote_uid }}"
|
||||
command:
|
||||
- -config.file=/etc/loki/loki-config.yaml
|
||||
# Port forward is needed because not possible to resolve the container name from the host network
|
||||
ports:
|
||||
- 3100:3100
|
||||
volumes:
|
||||
- {{ base_volume_path }}/monitoring/loki:/loki
|
||||
- ./loki_config:/etc/loki:ro
|
||||
tmpfs:
|
||||
- /tmp/loki
|
||||
|
||||
promtail:
|
||||
image: grafana/promtail:latest
|
||||
container_name: promtail
|
||||
restart: unless-stopped
|
||||
command:
|
||||
- -config.file=/etc/promtail/promtail-config.yaml
|
||||
ports:
|
||||
- 514:514
|
||||
volumes:
|
||||
- ./promtail_config:/etc/promtail:ro
|
||||
- /var/log:/var/log:ro
|
||||
tmpfs:
|
||||
- /tmp
|
||||
|
||||
prometheus:
|
||||
image: prom/prometheus:latest
|
||||
container_name: prometheus
|
||||
restart: unless-stopped
|
||||
# Needed to make config files readable
|
||||
user: "{{ remote_uid }}"
|
||||
command:
|
||||
- --config.file=/etc/prometheus/prometheus.yml
|
||||
- --storage.tsdb.retention.time=30d
|
||||
volumes:
|
||||
- ./prometheus_config:/etc/prometheus:ro
|
||||
- {{ base_volume_path }}/monitoring/prometheus_configs:/etc/prometheus/extra:ro
|
||||
- {{ base_volume_path }}/monitoring/prometheus:/prometheus
|
||||
|
||||
node-exporter:
|
||||
image: prom/node-exporter:latest
|
||||
container_name: node-exporter
|
||||
restart: unless-stopped
|
||||
network_mode: host
|
||||
pid: host
|
||||
volumes:
|
||||
- /:/host:ro,rslave
|
||||
|
||||
cadvisor:
|
||||
image: gcr.io/cadvisor/cadvisor:latest
|
||||
container_name: cadvisor
|
||||
restart: unless-stopped
|
||||
volumes:
|
||||
- /:/rootfs:ro
|
||||
- /var/run:/var/run:rw
|
||||
- /sys:/sys:ro
|
||||
- /var/lib/docker/:/var/lib/docker:ro
|
||||
|
||||
influxdb:
|
||||
image: influxdb:2.7-alpine
|
||||
container_name: influxdb
|
||||
labels:
|
||||
- {{ helpers.traefik_labels('influxdb', port='8086') | indent(6) }}
|
||||
restart: unless-stopped
|
||||
env_file:
|
||||
- .env.influxdb
|
||||
networks:
|
||||
- default
|
||||
- traefik_traefik
|
||||
volumes:
|
||||
- {{ base_volume_path }}/monitoring/influxdb:/var/lib/influxdb2
|
||||
|
||||
jaeger:
|
||||
image: jaegertracing/all-in-one:1
|
||||
container_name: jaeger
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
- COLLECTOR_OTLP_ENABLED=true
|
||||
ports:
|
||||
- 4317:4317
|
||||
- 4318:4318
|
||||
volumes:
|
||||
- {{ base_volume_path }}/monitoring/jaeger:/jaeger
|
||||
|
||||
uptime-kuma:
|
||||
image: louislam/uptime-kuma:1
|
||||
container_name: uptime-kuma
|
||||
labels:
|
||||
- {{ helpers.traefik_labels('uptime', port='3001', auth=true) | indent(6) }}
|
||||
restart: unless-stopped
|
||||
volumes:
|
||||
- {{ base_volume_path }}/monitoring/uptime-kuma:/app/data
|
@@ -0,0 +1,34 @@
|
||||
[server]
|
||||
domain = grafana.{{ domain }}
|
||||
root_url = https://%(domain)s/
|
||||
|
||||
;[security]
|
||||
;admin_user =
|
||||
;admin_email =
|
||||
;admin_password =
|
||||
|
||||
; https://grafana.com/docs/grafana/latest/setup-grafana/configure-security/configure-authentication/generic-oauth/
|
||||
[auth]
|
||||
disable_login_form = true
|
||||
signout_redirect_url = https://auth.{{ domain }}/application/o/grafana/end-session/
|
||||
|
||||
[auth.generic_oauth]
|
||||
name = Authentik
|
||||
enabled = true
|
||||
allow_sign_up = true
|
||||
|
||||
client_id = grafana
|
||||
client_secret = {{ auth_grafana_client_secret }}
|
||||
|
||||
scopes = openid profile email
|
||||
auth_url = https://auth.{{ domain }}/application/o/authorize/
|
||||
token_url = https://auth.{{ domain }}/application/o/token/
|
||||
api_url = https://auth.{{ domain }}/application/o/userinfo/
|
||||
|
||||
email_attribute_path = email
|
||||
login_attribute_path = preferred_username
|
||||
name_attribute_path = name
|
||||
|
||||
# Optionally map user groups to Grafana roles
|
||||
allow_assign_grafana_admin = true
|
||||
role_attribute_path = contains(groups[*], 'Grafana Admins') && 'GrafanaAdmin' || 'Viewer'
|
@@ -0,0 +1,46 @@
|
||||
apiVersion: 1
|
||||
|
||||
datasources:
|
||||
- name: Loki
|
||||
type: loki
|
||||
access: proxy
|
||||
uid: loki
|
||||
url: http://loki:3100
|
||||
editable: false
|
||||
|
||||
- name: Prometheus
|
||||
type: prometheus
|
||||
access: proxy
|
||||
uid: prometheus
|
||||
url: http://prometheus:9090
|
||||
editable: false
|
||||
|
||||
- name: InfluxDB
|
||||
type: influxdb
|
||||
access: proxy
|
||||
uid: influxdb
|
||||
url: http://influxdb:8086
|
||||
jsonData:
|
||||
version: Flux
|
||||
organization: home
|
||||
defaultBucket: influx
|
||||
secureJsonData:
|
||||
token: {{ influxdb_admin_token }}
|
||||
editable: false
|
||||
|
||||
- name: Jaeger
|
||||
type: jaeger
|
||||
access: proxy
|
||||
uid: jaeger
|
||||
url: http://jaeger:16686
|
||||
editable: false
|
||||
jsonData:
|
||||
tracesToLogsV2:
|
||||
datasourceUid: loki
|
||||
spanStartTimeShift: 1h
|
||||
spanEndTimeShift: -1h
|
||||
tags: []
|
||||
filterByTraceID: false
|
||||
filterBySpanID: false
|
||||
customQuery: true
|
||||
query: '{container_name=~".*$${__span.tags["traefik.service.name"]}.*"}'
|
@@ -0,0 +1,30 @@
|
||||
auth_enabled: false
|
||||
|
||||
server:
|
||||
http_listen_port: 3100
|
||||
|
||||
common:
|
||||
path_prefix: /loki
|
||||
# TODO: Consider setting up S3 for storage
|
||||
storage:
|
||||
filesystem:
|
||||
chunks_directory: /loki/chunks
|
||||
rules_directory: /loki/rules
|
||||
replication_factor: 1
|
||||
ring:
|
||||
kvstore:
|
||||
store: inmemory
|
||||
|
||||
schema_config:
|
||||
configs:
|
||||
- from: 2020-10-24
|
||||
store: boltdb-shipper
|
||||
object_store: filesystem
|
||||
schema: v11
|
||||
index:
|
||||
prefix: index_
|
||||
period: 24h
|
||||
|
||||
# TODO: Figure this out
|
||||
ruler:
|
||||
alertmanager_url: http://localhost:9093
|
@@ -0,0 +1,39 @@
|
||||
global:
|
||||
scrape_interval: 15s
|
||||
evaluation_interval: 15s
|
||||
|
||||
external_labels:
|
||||
monitor: "{{ ansible_host }}"
|
||||
|
||||
scrape_configs:
|
||||
- job_name: "prometheus"
|
||||
static_configs:
|
||||
- targets: ["localhost:9090"]
|
||||
|
||||
- job_name: "node"
|
||||
static_configs:
|
||||
- targets: ["{{ ansible_host }}:9100"]
|
||||
|
||||
- job_name: "cadvisor"
|
||||
static_configs:
|
||||
- targets: ["cadvisor:8080"]
|
||||
|
||||
- job_name: "traefik"
|
||||
static_configs:
|
||||
- targets: ["{{ ansible_host }}:8082"]
|
||||
|
||||
- job_name: "loki"
|
||||
static_configs:
|
||||
- targets: ["loki:3100"]
|
||||
|
||||
- job_name: "promtail"
|
||||
static_configs:
|
||||
- targets: ["promtail:9080"]
|
||||
|
||||
rule_files:
|
||||
- "/etc/prometheus/extra/rules/*.yml"
|
||||
- "/etc/prometheus/extra/rules/*.json"
|
||||
|
||||
scrape_config_files:
|
||||
- "/etc/prometheus/extra/scrape_configs/*.yml"
|
||||
- "/etc/prometheus/extra/scrape_configs/*.json"
|
@@ -0,0 +1,48 @@
|
||||
server:
|
||||
http_listen_port: 9080
|
||||
grpc_listen_port: 0
|
||||
|
||||
positions:
|
||||
filename: /tmp/positions.yaml
|
||||
|
||||
clients:
|
||||
- url: http://loki:3100/loki/api/v1/push
|
||||
|
||||
scrape_configs:
|
||||
|
||||
# local machine logs
|
||||
- job_name: local
|
||||
static_configs:
|
||||
- targets:
|
||||
- localhost
|
||||
labels:
|
||||
job: varlogs
|
||||
__path__: /var/log/*log
|
||||
|
||||
# syslog target
|
||||
- job_name: syslog
|
||||
syslog:
|
||||
listen_address: "0.0.0.0:514" # make sure you also expose this port on the container
|
||||
idle_timeout: 60s
|
||||
label_structured_data: yes
|
||||
labels:
|
||||
job: "syslog"
|
||||
relabel_configs:
|
||||
- source_labels: ['__syslog_message_hostname']
|
||||
target_label: 'host'
|
||||
- source_labels: ['__syslog_message_facility']
|
||||
target_label: 'facility'
|
||||
- source_labels: ['__syslog_message_severity']
|
||||
target_label: 'severity'
|
||||
- source_labels: ['__syslog_message_app_name']
|
||||
target_label: 'app_name'
|
||||
|
||||
## docker logs
|
||||
|
||||
#- job_name: docker
|
||||
# pipeline_stages:
|
||||
# - docker: {}
|
||||
# static_configs:
|
||||
# - labels:
|
||||
# job: docker
|
||||
# __path__: /var/lib/docker/containers/*/*-json.log
|
1
roles/alpina/templates/services/traefik/.env.traefik.j2
Normal file
1
roles/alpina/templates/services/traefik/.env.traefik.j2
Normal file
@@ -0,0 +1 @@
|
||||
CF_DNS_API_TOKEN={{ cloudflare_api_token }}
|
@@ -0,0 +1,36 @@
|
||||
{% import 'contrib/compose_helpers.j2' as helpers with context %}
|
||||
|
||||
networks:
|
||||
traefik:
|
||||
internal: true
|
||||
enable_ipv6: true
|
||||
ipam:
|
||||
config:
|
||||
# TODO: Consider removing traefik network, it shouldn't be needed with host networking
|
||||
- subnet: {{ traefik_subnet }}/24
|
||||
- subnet: {{ docker_ipv6_subnet | ansible.utils.ipsubnet(80, 255) }}
|
||||
|
||||
services:
|
||||
traefik:
|
||||
image: traefik:v3.0
|
||||
container_name: traefik
|
||||
restart: unless-stopped
|
||||
env_file:
|
||||
- .env.traefik
|
||||
network_mode: host
|
||||
volumes:
|
||||
- ./traefik.yml:/etc/traefik/traefik.yml:ro
|
||||
- ./rules:/rules:ro
|
||||
- /var/run/docker.sock:/var/run/docker.sock:ro
|
||||
- {{ base_volume_path }}/traefik/rules:/rules/extra:ro
|
||||
- {{ base_volume_path }}/traefik/logs:/logs
|
||||
- {{ base_volume_path }}/traefik/acme:/acme
|
||||
|
||||
# This is mostly just so that the traefik network gets created
|
||||
whoami:
|
||||
image: containous/whoami
|
||||
container_name: whoami
|
||||
labels:
|
||||
- {{ helpers.traefik_labels('whoami', port=80) | indent(6) }}
|
||||
networks:
|
||||
- traefik
|
@@ -0,0 +1,25 @@
|
||||
http:
|
||||
routers:
|
||||
traefik-dash:
|
||||
rule: "Host(`traefik.{{ domain }}`)"
|
||||
entryPoints:
|
||||
- web
|
||||
service: traefik-dash
|
||||
|
||||
traefik-dash-tls:
|
||||
rule: "Host(`traefik.{{ domain }}`)"
|
||||
entryPoints:
|
||||
- websecure
|
||||
service: traefik-dash
|
||||
tls:
|
||||
certResolver: letsencrypt
|
||||
domains:
|
||||
- main: "{{ domain }}"
|
||||
sans:
|
||||
- "*.{{ domain }}"
|
||||
|
||||
services:
|
||||
traefik-dash:
|
||||
loadBalancer:
|
||||
servers:
|
||||
- url: "http://localhost:8080"
|
51
roles/alpina/templates/services/traefik/traefik.yml.j2
Normal file
51
roles/alpina/templates/services/traefik/traefik.yml.j2
Normal file
@@ -0,0 +1,51 @@
|
||||
api:
|
||||
insecure: true
|
||||
|
||||
log:
|
||||
filePath: /logs/traefik.log
|
||||
level: INFO
|
||||
accessLog:
|
||||
filePath: /logs/access.log
|
||||
bufferingSize: 100
|
||||
|
||||
entryPoints:
|
||||
web:
|
||||
address: ":80"
|
||||
websecure:
|
||||
address: ":443"
|
||||
http3:
|
||||
advertisedPort: 443
|
||||
metrics:
|
||||
address: ":8082"
|
||||
|
||||
metrics:
|
||||
prometheus:
|
||||
entryPoint: metrics
|
||||
|
||||
tracing:
|
||||
otlp:
|
||||
grpc:
|
||||
endpoint: "localhost:4317"
|
||||
insecure: true
|
||||
|
||||
certificatesResolvers:
|
||||
letsencrypt:
|
||||
acme:
|
||||
email: {{ acme_email }}
|
||||
storage: "/acme/acme.json"
|
||||
keyType: "EC384"
|
||||
dnsChallenge:
|
||||
provider: "cloudflare"
|
||||
delayBeforeCheck: 10
|
||||
resolvers:
|
||||
- 1.1.1.1
|
||||
- 8.8.8.8
|
||||
- 9.9.9.9
|
||||
|
||||
providers:
|
||||
docker:
|
||||
exposedByDefault: false
|
||||
network: traefik_traefik
|
||||
file:
|
||||
directory: /rules
|
||||
watch: true
|
@@ -1,49 +1,70 @@
|
||||
- name: Upgrade alpine packages
|
||||
community.general.apk:
|
||||
upgrade: yes
|
||||
update_cache: yes
|
||||
register: apk_upgrades
|
||||
|
||||
- name: Install alpine packages
|
||||
community.general.apk:
|
||||
- name: Install Debian packages
|
||||
become: yes
|
||||
ansible.builtin.apt:
|
||||
name:
|
||||
- qemu-guest-agent
|
||||
- dhcpcd
|
||||
- python3
|
||||
- fish
|
||||
- docker
|
||||
- docker-compose
|
||||
- docker-fish-completion
|
||||
- docker-compose-fish-completion
|
||||
- zfs
|
||||
- zfs-utils-py
|
||||
- docker-ce
|
||||
- docker-compose-plugin
|
||||
- firewalld
|
||||
state: latest
|
||||
|
||||
- name: Upgrade Debian packages
|
||||
become: yes
|
||||
ansible.builtin.apt:
|
||||
upgrade: dist
|
||||
update_cache: yes
|
||||
register: apk_installs
|
||||
cache_valid_time: 3600
|
||||
autoremove: yes
|
||||
state: latest
|
||||
register: apt_upgrades
|
||||
|
||||
- name: Enable qemu-guest-agent service
|
||||
- name: Ensure firewalld is running
|
||||
become: yes
|
||||
service:
|
||||
name: qemu-guest-agent
|
||||
runlevel: boot
|
||||
name: firewalld
|
||||
state: started
|
||||
enabled: yes
|
||||
|
||||
- name: Enable zfs-import service
|
||||
service:
|
||||
name: zfs-import
|
||||
runlevel: sysinit
|
||||
enabled: yes
|
||||
- name: Allow SSH
|
||||
become: yes
|
||||
firewalld:
|
||||
service: ssh
|
||||
permanent: yes
|
||||
state: enabled
|
||||
immediate: yes
|
||||
|
||||
- name: Enable zfs-mount service
|
||||
service:
|
||||
name: zfs-mount
|
||||
runlevel: sysinit
|
||||
enabled: yes
|
||||
- name: Allow Web
|
||||
become: yes
|
||||
firewalld:
|
||||
service: http
|
||||
permanent: yes
|
||||
state: disabled
|
||||
immediate: yes
|
||||
|
||||
- name: Enable docker service
|
||||
service:
|
||||
name: docker
|
||||
enabled: yes
|
||||
- name: Allow Web Secure
|
||||
become: yes
|
||||
firewalld:
|
||||
service: https
|
||||
permanent: yes
|
||||
state: enabled
|
||||
immediate: yes
|
||||
|
||||
- name: Allow 443 udp for http3
|
||||
become: yes
|
||||
firewalld:
|
||||
port: 443/udp
|
||||
permanent: yes
|
||||
state: enabled
|
||||
immediate: yes
|
||||
|
||||
- name: Allow 514 tcp for syslog
|
||||
become: yes
|
||||
firewalld:
|
||||
port: 514/tcp
|
||||
permanent: yes
|
||||
state: enabled
|
||||
immediate: yes
|
||||
|
||||
- name: Reboot if needed
|
||||
reboot:
|
||||
when: apk_upgrades.changed or apk_installs.changed
|
||||
become: yes
|
||||
ansible.builtin.reboot:
|
||||
when: apt_upgrades.changed
|
||||
|
@@ -1,5 +1,70 @@
|
||||
- name: Create my service directory
|
||||
- name: Get IPv6 subnet for Docker
|
||||
set_fact:
|
||||
docker_ipv6_subnet: "{{ \
|
||||
ansible_default_ipv6.address \
|
||||
| ansible.utils.ipsubnet(64) \
|
||||
| ansible.utils.ipsubnet(72, docker_ipv6_index) \
|
||||
}}"
|
||||
|
||||
- debug:
|
||||
var: docker_ipv6_subnet
|
||||
|
||||
- name: Configure Docker daemon
|
||||
become: yes
|
||||
template:
|
||||
src: "daemon.json.j2"
|
||||
dest: "/etc/docker/daemon.json"
|
||||
owner: root
|
||||
group: root
|
||||
mode: "0644"
|
||||
register: docker_daemon_config
|
||||
|
||||
- name: Install Docker loki plugin for logs
|
||||
community.docker.docker_plugin:
|
||||
plugin_name: grafana/loki-docker-driver:latest
|
||||
alias: loki
|
||||
state: enable
|
||||
|
||||
- name: Remove docker0 from firewalld trusted zone
|
||||
become: yes
|
||||
firewalld:
|
||||
zone: trusted
|
||||
interface: docker0
|
||||
permanent: yes
|
||||
immediate: yes
|
||||
state: disabled
|
||||
register: docker0_firewalld
|
||||
|
||||
- name: Get list of running Docker containers
|
||||
docker_host_info:
|
||||
containers: yes
|
||||
register: docker_container_list
|
||||
when: clean_desired is true
|
||||
|
||||
- name: Stop all running Docker containers
|
||||
docker_container:
|
||||
name: "{{ item }}"
|
||||
state: stopped
|
||||
loop: "{{ docker_container_list.containers | map(attribute='Id') | list }}"
|
||||
async: 300
|
||||
poll: 0
|
||||
when: clean_desired is true and docker_container_list.containers | length > 0
|
||||
|
||||
- name: Prune all Docker containers and networks
|
||||
docker_prune:
|
||||
containers: yes
|
||||
networks: yes
|
||||
when: clean_desired is true
|
||||
|
||||
- name: Clean alpina directory
|
||||
file:
|
||||
state: directory
|
||||
path: "{{ my_svc_path }}"
|
||||
mode: "700"
|
||||
path: "{{ alpina_svc_path }}"
|
||||
state: absent
|
||||
when: clean_desired is true
|
||||
|
||||
- name: Restart Docker daemon
|
||||
become: yes
|
||||
service:
|
||||
name: docker
|
||||
state: restarted
|
||||
when: docker_daemon_config.changed or docker0_firewalld.changed
|
||||
|
10
roles/docker_host/templates/daemon.json.j2
Normal file
10
roles/docker_host/templates/daemon.json.j2
Normal file
@@ -0,0 +1,10 @@
|
||||
{
|
||||
"ipv6": true,
|
||||
"fixed-cidr-v6": "{{ docker_ipv6_subnet | ansible.utils.ipsubnet(80, 0) }}",
|
||||
"log-driver": "loki",
|
||||
"log-opts": {
|
||||
"loki-url": "http://localhost:3100/loki/api/v1/push",
|
||||
"loki-batch-size": "400",
|
||||
"loki-retries": "5"
|
||||
}
|
||||
}
|
@@ -1,2 +0,0 @@
|
||||
- name: "Docker compose steps for {{ current_svc_name }}"
|
||||
import_tasks: "{{ playbook_dir }}/contrib/docker_compose_template_task_list.yml"
|
@@ -1,3 +0,0 @@
|
||||
POSTGRES_USER=gitea
|
||||
POSTGRES_DB=gitea
|
||||
POSTGRES_PASSWORD="{{ db_password }}"
|
@@ -1,28 +0,0 @@
|
||||
GITEA____APP_NAME=CazGitea
|
||||
|
||||
# Database
|
||||
GITEA__database__DB_TYPE=postgres
|
||||
GITEA__database__HOST=db:5432
|
||||
GITEA__database__NAME="{{ db_user }}"
|
||||
GITEA__database__USER="{{ db_name }}"
|
||||
GITEA__database__PASSWD="{{ db_password }}"
|
||||
|
||||
# Server
|
||||
GITEA__server__ROOT_URL=https://gitea.{{ domain }}/
|
||||
GITEA__server__DISABLE_SSH=true
|
||||
|
||||
# Mail
|
||||
GITEA__mailer__ENABLED=true
|
||||
GITEA__mailer__HOST=smtp.sendgrid.net:587
|
||||
GITEA__mailer__FROM=gitea@cazzzer.com
|
||||
GITEA__mailer__USER=apikey
|
||||
GITEA__mailer__PASSWD="{{ sendgrid_api_key }}"
|
||||
|
||||
# Security
|
||||
GITEA__security__SECRET_KEY="{{ secret_key }}"
|
||||
GITEA__security__INTERNAL_TOKEN="{{ internal_token }}"
|
||||
|
||||
GITEA__oauth2__JWT_SECRET="{{ jwt_secret }}"
|
||||
|
||||
# Indexer
|
||||
GITEA__indexer__REPO_INDEXER_ENABLED=true
|
@@ -1,27 +0,0 @@
|
||||
$ANSIBLE_VAULT;1.2;AES256;alpina
|
||||
35303032386566343430633238343936366234333434343763666231666232633539303232383534
|
||||
3035346233346162373939333531613535353232626531640a646537616163353736653161326265
|
||||
31336530316335623335353661373834613264326436303933326135396166346562343136353931
|
||||
6439383039346465300a366266393130356630316630333336616565366562613038393239623738
|
||||
65626664643630353236333932373337333363626337386163613464306638633964663264363964
|
||||
30373661393531306662323134626664656233323762393037356434353066343830333033316365
|
||||
65616636613437663737306263373066306361376630616331663031346434336663393862316464
|
||||
62343339663461353934323063653566303932656264363562333136353665336263646230323832
|
||||
35376666303531383961646234663230663634393135326664386665633538616233613866373965
|
||||
64363361313232316336376631646662376565353536316438306361306261663532386564616566
|
||||
61663534393035343233326562303863646165346538393761326335376165623964396130393831
|
||||
64333665313461666335383134613831376138393061343238643661366439636534626265323865
|
||||
35393035336632653038623438626366373733626331633866373935616531623664303063376562
|
||||
31356332346164663364636235333461383437623161343338643839323765336237633266633864
|
||||
64363234646533616439313638363865373364623637636537623666383664656630333533303233
|
||||
64383734366666633832393230663739333435666138636462336332373061346239306136336263
|
||||
39643666303863303035313738343664636536663939616335303834333834363739303938646665
|
||||
66303637633239373461393434313036316563313132356432633337666537616363373830313034
|
||||
61313538633663653230643262613333306361666131663036643162343966313365653566393235
|
||||
36623832663034373734653664613038363137366437326565373761663963636336393536386435
|
||||
30393831326134376639366661653439616138643438646363343632346131306532663439396534
|
||||
32383661306539306635336262383563376561303862396532633362666266313562623336383235
|
||||
36366565633734633639653239306331333237353233326563653930653739316230666362323931
|
||||
39663931376562653530323434656436353166393836643238643632396430353034333034333665
|
||||
62323338373839383132323537353431636537616366393965643463316164323034316536383961
|
||||
6164333537633631646663333463306236613038326339643439
|
@@ -1,5 +0,0 @@
|
||||
---
|
||||
current_svc_name: gitea
|
||||
current_svc_path: "{{ my_svc_path }}/{{ current_svc_name }}"
|
||||
|
||||
templates_source: "{{ role_path }}/templates"
|
@@ -1,2 +0,0 @@
|
||||
- name: "Docker compose steps for {{ current_svc_name }}"
|
||||
import_tasks: "{{ playbook_dir }}/contrib/docker_compose_template_task_list.yml"
|
@@ -1,26 +0,0 @@
|
||||
version: "3.9"
|
||||
|
||||
networks:
|
||||
default:
|
||||
traefik_traefik:
|
||||
external: true
|
||||
|
||||
volumes:
|
||||
config:
|
||||
torrent_blackhole:
|
||||
|
||||
services:
|
||||
jackett:
|
||||
image: linuxserver/jackett:latest
|
||||
container_name: jackett
|
||||
labels:
|
||||
- traefik.enable=true
|
||||
- traefik.http.routers.jackett.rule=Host(`jackett.{{ domain }}`)
|
||||
- traefik.http.services.jackett.loadbalancer.server.port=9117
|
||||
restart: unless-stopped
|
||||
networks:
|
||||
- default
|
||||
- traefik_traefik
|
||||
volumes:
|
||||
- config:/config
|
||||
- torrent_blackhole:/downloads
|
@@ -1,5 +0,0 @@
|
||||
---
|
||||
current_svc_name: jackett
|
||||
current_svc_path: "{{ my_svc_path }}/{{ current_svc_name }}"
|
||||
|
||||
templates_source: "{{ role_path }}/templates"
|
@@ -1,2 +0,0 @@
|
||||
- name: "Docker compose steps for {{ current_svc_name }}"
|
||||
import_tasks: "{{ playbook_dir }}/contrib/docker_compose_template_task_list.yml"
|
@@ -1 +0,0 @@
|
||||
JELLYFIN_PublishedServerUrl="https://jellyfin.{{ domain }}"
|
@@ -1,46 +0,0 @@
|
||||
version: "3.9"
|
||||
|
||||
networks:
|
||||
default:
|
||||
traefik_traefik:
|
||||
external: true
|
||||
|
||||
volumes:
|
||||
config:
|
||||
cache:
|
||||
media:
|
||||
driver: local
|
||||
driver_opts:
|
||||
type: nfs
|
||||
o: "addr=truenas.lab.home,nfsvers=4,ro,noatime"
|
||||
device: ":/mnt/Mass-Storage-New/JailStorage/Plex/media"
|
||||
other_videos:
|
||||
driver: local
|
||||
driver_opts:
|
||||
type: nfs
|
||||
o: "addr=truenas.lab.home,nfsvers=4,ro,noatime"
|
||||
device: ":/mnt/Mass-Storage-New/syncThingData/Videos"
|
||||
|
||||
services:
|
||||
jellyfin:
|
||||
image: jellyfin/jellyfin:10.8.6
|
||||
container_name: jellyfin_jellyfin
|
||||
labels:
|
||||
- traefik.enable=true
|
||||
- traefik.http.routers.jellyfin.rule=Host(`jellyfin.{{ domain }}`)
|
||||
- traefik.http.services.jellyfin.loadbalancer.server.port=8096
|
||||
restart: unless-stopped
|
||||
env_file:
|
||||
- .env.jellyfin
|
||||
networks:
|
||||
- default
|
||||
- traefik_traefik
|
||||
volumes:
|
||||
- config:/config
|
||||
- cache:/cache
|
||||
- media:/data/media
|
||||
- other_videos:/data/other_videos
|
||||
tmpfs:
|
||||
- /tmp/transcodes
|
||||
devices:
|
||||
- /dev/dri:/dev/dri
|
@@ -1,6 +0,0 @@
|
||||
$ANSIBLE_VAULT;1.2;AES256;alpina
|
||||
61626665353536663033663661393434616339396434383530306265363837313839303939623465
|
||||
3634333839333530383464613966326238363738663637360a343837623832343232316565346131
|
||||
66663831356162653363383131396665326531363430656539333866313031306537343864343262
|
||||
3730643765633232620a643734623336646565663266656262343162613239306166386665333139
|
||||
6366
|
@@ -1,5 +0,0 @@
|
||||
---
|
||||
current_svc_name: jellyfin
|
||||
current_svc_path: "{{ my_svc_path }}/{{ current_svc_name }}"
|
||||
|
||||
templates_source: "{{ role_path }}/templates"
|
@@ -1,2 +0,0 @@
|
||||
- name: "Docker compose steps for {{ current_svc_name }}"
|
||||
import_tasks: "{{ playbook_dir }}/contrib/docker_compose_template_task_list.yml"
|
@@ -1 +0,0 @@
|
||||
NEXTCLOUD_VERSION=25-fpm-alpine
|
@@ -1,18 +0,0 @@
|
||||
POSTGRES_DB=nextcloud
|
||||
POSTGRES_USER=nextcloud
|
||||
POSTGRES_PASSWORD="{{ db_password }}"
|
||||
POSTGRES_HOST=db
|
||||
|
||||
NEXTCLOUD_TRUSTED_DOMAINS="nc.{{ domain }}"
|
||||
|
||||
REDIS_HOST=redis
|
||||
REDIS_HOST_PASSWORD="{{ redis_password }}"
|
||||
|
||||
SMTP_HOST=smtp.sendgrid.net
|
||||
SMTP_SECURE=tls
|
||||
SMTP_PORT=587
|
||||
SMTP_AUTHTYPE=LOGIN
|
||||
SMTP_NAME=apikey
|
||||
SMTP_PASSWORD="{{ sendgrid_api_key }}"
|
||||
MAIL_FROM_ADDRESS=nc
|
||||
MAIL_DOMAIN=cazzzer.com
|
@@ -1 +0,0 @@
|
||||
REDIS_PASSWORD="{{ redis_password }}"
|
@@ -1,14 +0,0 @@
|
||||
$ANSIBLE_VAULT;1.2;AES256;alpina
|
||||
65313636646233613364363933616361346639653939346337303832646339316632383966666237
|
||||
3766396134383434613534373937663162393134306536300a626139373732393037346630333838
|
||||
63663439353238643532316231623866396434303034313130386635623363353263626362376334
|
||||
3933346434633662320a386432373465646432343338666561366161646335636232353133393933
|
||||
65313364666564353039626238383033343765323730316633356139326666623135326131353864
|
||||
32386237643538636538356261393164633137636235346564393930346539623731386633336339
|
||||
31303466653936343166366164383134306232613236663735623834393963306331376435616365
|
||||
31313866383730393063353335626164303632636331303830636530656131636139376633623439
|
||||
63663639323964623231343066373538633336353561646230363363643762393634643435306164
|
||||
31366364326237636365336363343264343562353337303235633034383635373934376334353336
|
||||
61373065386639643064303431623162373665363937353832313561386134613834613935653964
|
||||
64656339316165313936333736643030356366663162316462636662326134396539356262666536
|
||||
64336133393937396330353234316563356337623733326264363333373536633833
|
@@ -1,6 +0,0 @@
|
||||
---
|
||||
# vars file for roles/nextcloud/
|
||||
current_svc_name: nextcloud
|
||||
current_svc_path: "{{ my_svc_path }}/{{ current_svc_name }}"
|
||||
|
||||
templates_source: "{{ role_path }}/templates"
|
@@ -1,2 +0,0 @@
|
||||
- name: "Docker compose steps for {{ current_svc_name }}"
|
||||
import_tasks: "{{ playbook_dir }}/contrib/docker_compose_template_task_list.yml"
|
@@ -1,25 +0,0 @@
|
||||
version: "3.9"
|
||||
|
||||
networks:
|
||||
traefik:
|
||||
|
||||
volumes:
|
||||
logs:
|
||||
|
||||
services:
|
||||
traefik:
|
||||
image: traefik:v2.9
|
||||
container_name: traefik
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- "80:80"
|
||||
- "8080:8080"
|
||||
env_file:
|
||||
- .env.traefik
|
||||
networks:
|
||||
- traefik
|
||||
volumes:
|
||||
- /var/run/docker.sock:/var/run/docker.sock:ro
|
||||
- ./traefik.yml:/etc/traefik/traefik.yml:ro
|
||||
- logs:/logs
|
||||
- {{ current_svc_path }}/rules:/rules:ro
|
@@ -1,25 +0,0 @@
|
||||
http:
|
||||
routers:
|
||||
sonarr:
|
||||
rule: "Host(`sonarr.{{ domain }}`)"
|
||||
service: sonarr
|
||||
radarr:
|
||||
rule: "Host(`radarr.{{ domain }}`)"
|
||||
service: radarr
|
||||
serversTransports:
|
||||
sonarrTransport:
|
||||
insecureSkipVerify: true
|
||||
forwardingTimeouts:
|
||||
dialTimeout: "180s"
|
||||
|
||||
services:
|
||||
sonarr:
|
||||
loadBalancer:
|
||||
servers:
|
||||
- url: "http://sonarr.lab.home:8989"
|
||||
serversTransport: "sonarrTransport"
|
||||
radarr:
|
||||
loadBalancer:
|
||||
servers:
|
||||
- url: "http://radarr.lab.home:7878"
|
||||
serversTransport: "sonarrTransport"
|
@@ -1,24 +0,0 @@
|
||||
api:
|
||||
insecure: true
|
||||
|
||||
log:
|
||||
filePath: /logs/traefik.log
|
||||
level: INFO
|
||||
accessLog:
|
||||
filePath: /logs/access.log
|
||||
bufferingSize: 100
|
||||
|
||||
entryPoints:
|
||||
web:
|
||||
address: ":80"
|
||||
forwardedHeaders:
|
||||
trustedIPs:
|
||||
- "172.16.0.0/12"
|
||||
|
||||
providers:
|
||||
docker:
|
||||
exposedByDefault: false
|
||||
network: traefik_traefik
|
||||
file:
|
||||
directory: /rules
|
||||
watch: true
|
@@ -1,5 +0,0 @@
|
||||
---
|
||||
current_svc_name: traefik
|
||||
current_svc_path: "{{ my_svc_path }}/{{ current_svc_name }}"
|
||||
|
||||
templates_source: "{{ role_path }}/templates"
|
@@ -1,11 +1,7 @@
|
||||
- hosts: docker_hosts
|
||||
- hosts: alpina
|
||||
roles:
|
||||
- docker_host
|
||||
- traefik
|
||||
- nextcloud
|
||||
- jellyfin
|
||||
- gitea
|
||||
- jackett
|
||||
- alpina
|
||||
post_tasks:
|
||||
- name: Docker prune objects
|
||||
docker_prune:
|
||||
|
6
site.yml
6
site.yml
@@ -1,6 +1,12 @@
|
||||
- hosts: all
|
||||
roles:
|
||||
- common
|
||||
pre_tasks:
|
||||
- name: Set fact for clean desired of docker objects and compose files
|
||||
set_fact:
|
||||
# clean_desired_arg is an extra variable passed to the playbook
|
||||
clean_desired: "{{ clean_desired_arg | bool }}"
|
||||
|
||||
|
||||
- name: Install services
|
||||
import_playbook: services.yml
|
||||
|
Reference in New Issue
Block a user