Compare commits
5 Commits
master
...
feature/mo
| Author | SHA1 | Date | |
|---|---|---|---|
|
eb264b73fa
|
|||
|
8c6b862495
|
|||
|
30510c6690
|
|||
|
c38f94f4ce
|
|||
|
002eb40b68
|
2
.idea/alpina.iml
generated
2
.idea/alpina.iml
generated
@@ -4,7 +4,7 @@
|
|||||||
<content url="file://$MODULE_DIR$">
|
<content url="file://$MODULE_DIR$">
|
||||||
<excludeFolder url="file://$MODULE_DIR$/venv" />
|
<excludeFolder url="file://$MODULE_DIR$/venv" />
|
||||||
</content>
|
</content>
|
||||||
<orderEntry type="jdk" jdkName="Poetry (alpina)" jdkType="Python SDK" />
|
<orderEntry type="jdk" jdkName="Poetry (alpina) (4)" jdkType="Python SDK" />
|
||||||
<orderEntry type="sourceFolder" forTests="false" />
|
<orderEntry type="sourceFolder" forTests="false" />
|
||||||
</component>
|
</component>
|
||||||
<component name="PyDocumentationSettings">
|
<component name="PyDocumentationSettings">
|
||||||
|
|||||||
47
.idea/jsonSchemas.xml
generated
47
.idea/jsonSchemas.xml
generated
@@ -31,7 +31,7 @@
|
|||||||
<list>
|
<list>
|
||||||
<Item>
|
<Item>
|
||||||
<option name="directory" value="true" />
|
<option name="directory" value="true" />
|
||||||
<option name="path" value="roles/alpina/templates/services/authentik/blueprints" />
|
<option name="path" value="roles/alpina/collections/services/authentik/templates/blueprints" />
|
||||||
<option name="mappingKind" value="Directory" />
|
<option name="mappingKind" value="Directory" />
|
||||||
</Item>
|
</Item>
|
||||||
</list>
|
</list>
|
||||||
@@ -39,22 +39,6 @@
|
|||||||
</SchemaInfo>
|
</SchemaInfo>
|
||||||
</value>
|
</value>
|
||||||
</entry>
|
</entry>
|
||||||
<entry key="Loki">
|
|
||||||
<value>
|
|
||||||
<SchemaInfo>
|
|
||||||
<option name="name" value="Loki" />
|
|
||||||
<option name="relativePathToSchema" value="https://json.schemastore.org/loki.json" />
|
|
||||||
<option name="applicationDefined" value="true" />
|
|
||||||
<option name="patterns">
|
|
||||||
<list>
|
|
||||||
<Item>
|
|
||||||
<option name="path" value="roles/alpina/templates/services/monitoring/loki_config/loki-config.yaml.j2" />
|
|
||||||
</Item>
|
|
||||||
</list>
|
|
||||||
</option>
|
|
||||||
</SchemaInfo>
|
|
||||||
</value>
|
|
||||||
</entry>
|
|
||||||
<entry key="Traefik v2">
|
<entry key="Traefik v2">
|
||||||
<value>
|
<value>
|
||||||
<SchemaInfo>
|
<SchemaInfo>
|
||||||
@@ -106,16 +90,6 @@
|
|||||||
<option name="applicationDefined" value="true" />
|
<option name="applicationDefined" value="true" />
|
||||||
<option name="patterns">
|
<option name="patterns">
|
||||||
<list>
|
<list>
|
||||||
<Item>
|
|
||||||
<option name="pattern" value="true" />
|
|
||||||
<option name="path" value="*/compose.yml" />
|
|
||||||
<option name="mappingKind" value="Pattern" />
|
|
||||||
</Item>
|
|
||||||
<Item>
|
|
||||||
<option name="pattern" value="true" />
|
|
||||||
<option name="path" value="*/compose.yml.j2" />
|
|
||||||
<option name="mappingKind" value="Pattern" />
|
|
||||||
</Item>
|
|
||||||
<Item>
|
<Item>
|
||||||
<option name="pattern" value="true" />
|
<option name="pattern" value="true" />
|
||||||
<option name="path" value="*/docker-compose.yml" />
|
<option name="path" value="*/docker-compose.yml" />
|
||||||
@@ -150,6 +124,25 @@
|
|||||||
</SchemaInfo>
|
</SchemaInfo>
|
||||||
</value>
|
</value>
|
||||||
</entry>
|
</entry>
|
||||||
|
<entry key="prometheus.rules.json">
|
||||||
|
<value>
|
||||||
|
<SchemaInfo>
|
||||||
|
<option name="name" value="prometheus.rules.json" />
|
||||||
|
<option name="relativePathToSchema" value="https://json.schemastore.org/prometheus.rules.json" />
|
||||||
|
<option name="applicationDefined" value="true" />
|
||||||
|
<option name="patterns">
|
||||||
|
<list>
|
||||||
|
<Item>
|
||||||
|
<option name="path" value="roles/alpina/templates/services/monitoring/prometheus_config/container-alerts.yml" />
|
||||||
|
</Item>
|
||||||
|
<Item>
|
||||||
|
<option name="path" value="roles/alpina/templates/services/monitoring/prometheus_config/container.alerts.yml" />
|
||||||
|
</Item>
|
||||||
|
</list>
|
||||||
|
</option>
|
||||||
|
</SchemaInfo>
|
||||||
|
</value>
|
||||||
|
</entry>
|
||||||
</map>
|
</map>
|
||||||
</state>
|
</state>
|
||||||
</component>
|
</component>
|
||||||
|
|||||||
2
.idea/misc.xml
generated
2
.idea/misc.xml
generated
@@ -3,5 +3,5 @@
|
|||||||
<component name="Black">
|
<component name="Black">
|
||||||
<option name="sdkName" value="Poetry (alpina) (2)" />
|
<option name="sdkName" value="Poetry (alpina) (2)" />
|
||||||
</component>
|
</component>
|
||||||
<component name="ProjectRootManager" version="2" project-jdk-name="Poetry (alpina)" project-jdk-type="Python SDK" />
|
<component name="ProjectRootManager" version="2" project-jdk-name="Poetry (alpina) (4)" project-jdk-type="Python SDK" />
|
||||||
</project>
|
</project>
|
||||||
12
Makefile
12
Makefile
@@ -1,23 +1,19 @@
|
|||||||
.POSIX:
|
.POSIX:
|
||||||
.PHONY: *
|
.PHONY: *
|
||||||
.EXPORT_ALL_VARIABLES:
|
.EXPORT_ALL_VARIABLES:
|
||||||
MAKEFLAGS += -r # no use of built-in rules
|
|
||||||
|
|
||||||
env ?= staging
|
env ?= staging
|
||||||
vault_id ?= alpina@contrib/rbw-client.sh
|
vault_id ?= alpina@contrib/rbw-client.sh
|
||||||
|
|
||||||
playbook_cmd := poetry run ansible-playbook --vault-id ${vault_id} -i inventories/${env}
|
clean_desired ?= false
|
||||||
|
|
||||||
all: site services
|
all: site
|
||||||
|
|
||||||
setup:
|
setup:
|
||||||
poetry install --quiet
|
poetry install --quiet
|
||||||
|
|
||||||
site: setup
|
site: setup
|
||||||
$(playbook_cmd) site.yml
|
poetry run ansible-playbook --vault-id ${vault_id} -i inventories/${env} --extra-vars "clean_desired_arg=${clean_desired}" site.yml
|
||||||
|
|
||||||
services: setup
|
services: setup
|
||||||
$(playbook_cmd) services.yml
|
poetry run ansible-playbook --vault-id ${vault_id} -i inventories/${env} services.yml
|
||||||
|
|
||||||
clean: setup
|
|
||||||
$(playbook_cmd) clean.yml
|
|
||||||
|
|||||||
16
README.md
16
README.md
@@ -8,22 +8,6 @@ running on top of TrueNAS SCALE, separating all the docker stuff from the applia
|
|||||||
|
|
||||||
# Notes
|
# Notes
|
||||||
|
|
||||||
## Monitoring
|
|
||||||
The monitoring stack is set up to monitor all the containers and the host.
|
|
||||||
|
|
||||||
This is a work in progress, Grafana is set up with grafanalib, a Python library that generates Grafana dashboards.
|
|
||||||
The dashboards are generated from Python scripts in
|
|
||||||
[grafana_config/dashboards](roles/alpina/templates/services/monitoring/grafana_config/dashboards).
|
|
||||||
|
|
||||||
This requires a custom grafana image, which is built from the
|
|
||||||
[Dockerfile](roles/alpina/templates/services/monitoring/Dockerfile).
|
|
||||||
|
|
||||||
This also means it has to be manually rebuilt whenever the dashboards are updated.
|
|
||||||
From the services/monitoring directory, run:
|
|
||||||
```bash
|
|
||||||
docker compose up -d --build --force-recreate grafana
|
|
||||||
```
|
|
||||||
|
|
||||||
## IPv6
|
## IPv6
|
||||||
The current configuration is designed to work with IPv6.
|
The current configuration is designed to work with IPv6.
|
||||||
However, because of how (not properly) I'm doing the subnetting
|
However, because of how (not properly) I'm doing the subnetting
|
||||||
|
|||||||
@@ -6,38 +6,23 @@ default:
|
|||||||
- subnet: {{ docker_ipv6_subnet | ansible.utils.ipsubnet(80, subnet_index) }}
|
- subnet: {{ docker_ipv6_subnet | ansible.utils.ipsubnet(80, subnet_index) }}
|
||||||
{% endmacro %}
|
{% endmacro %}
|
||||||
|
|
||||||
{% macro traefik_labels(host, port='', path_prefix='', auth=false, wildcard=false) %}
|
{% macro traefik_labels(host, service="", port="", auth=false) %}
|
||||||
{% set name = host ~ (wildcard * '-*') ~ path_prefix -%}
|
|
||||||
{% set tls_base = domain %}
|
|
||||||
{% if wildcard -%}
|
|
||||||
{% set tls_base = host ~ '.' ~ domain %}
|
|
||||||
{%- endif -%}
|
|
||||||
|
|
||||||
traefik.enable=true
|
traefik.enable=true
|
||||||
- traefik.http.routers.r-{{ name }}.rule={{ host_rule(host, path_prefix, wildcard) }}
|
- traefik.http.routers.{{ host }}.rule=Host(`{{ host }}.{{ domain }}`)
|
||||||
- traefik.http.routers.r-{{ name }}.entrypoints=websecure
|
- traefik.http.routers.{{ host }}.entrypoints=web
|
||||||
- traefik.http.routers.r-{{ name }}.tls=true
|
- traefik.http.routers.{{ host }}-tls.rule=Host(`{{ host }}.{{ domain }}`)
|
||||||
- traefik.http.routers.r-{{ name }}.tls.certresolver=letsencrypt
|
- traefik.http.routers.{{ host }}-tls.entrypoints=websecure
|
||||||
- traefik.http.routers.r-{{ name }}.tls.domains.0.main={{ tls_base }}
|
- traefik.http.routers.{{ host }}-tls.tls=true
|
||||||
- traefik.http.routers.r-{{ name }}.tls.domains.0.sans=*.{{ tls_base }}
|
- 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 -%}
|
{% if port -%}
|
||||||
- traefik.http.routers.r-{{ name }}.service=svc-{{ name }}
|
- traefik.http.services.{{ host }}.loadbalancer.server.port={{ port }}
|
||||||
- traefik.http.services.svc-{{ name }}.loadbalancer.server.port={{ port }}
|
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% if auth -%}
|
{% if auth -%}
|
||||||
- traefik.http.routers.r-{{ name }}.middlewares=authentik@docker
|
- traefik.http.routers.{{ host }}-tls.middlewares=authentik@docker
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% endmacro %}
|
{% endmacro %}
|
||||||
|
|
||||||
{% macro host_rule(host, path_prefix="", wildcard=false) %}
|
|
||||||
{% if wildcard %}
|
|
||||||
{# regular a.host prevents warnings from 'No domain found in rule HostRegexp' #}
|
|
||||||
{# TODO: figure out this stupidity properly #}
|
|
||||||
Host(`a.{{ host }}.{{ domain }}`) || HostRegexp(`^.+\.{{ host }}\.{{ domain | replace('.', '\.') }}$`)
|
|
||||||
{%- else %}
|
|
||||||
Host(`{{ host }}.{{ domain }}`)
|
|
||||||
{%- endif %}
|
|
||||||
{% if path_prefix -%}
|
|
||||||
&& PathPrefix(`{{ path_prefix }}`)
|
|
||||||
{%- endif %}
|
|
||||||
{% endmacro %}
|
|
||||||
|
|||||||
@@ -5,34 +5,27 @@ alpina_svc_path: ~/alpina
|
|||||||
base_volume_path: /mnt/dock
|
base_volume_path: /mnt/dock
|
||||||
media_volume_path: /mnt/media
|
media_volume_path: /mnt/media
|
||||||
|
|
||||||
docker_ipv6_subnet: "{{ \
|
traefik_subnet: 172.16.122.0
|
||||||
ansible_facts['default_ipv6'].address \
|
|
||||||
| ansible.utils.ipsubnet(64) \
|
|
||||||
| ansible.utils.ipsubnet(72, docker_ipv6_index) \
|
|
||||||
}}"
|
|
||||||
|
|
||||||
# Authentik
|
# Authentik
|
||||||
authentik_db_password: "{{ vault_authentik_db_password }}"
|
authentik_db_password: "{{ vault_authentik_db_password }}"
|
||||||
authentik_secret_key: "{{ vault_authentik_secret_key }}"
|
authentik_secret_key: "{{ vault_authentik_secret_key }}"
|
||||||
|
|
||||||
authentik_sendgrid_api_key: "{{ vault_authentik_sendgrid_api_key }}"
|
authentik_sendgrid_api_key: "{{ vault_authentik_sendgrid_api_key }}"
|
||||||
|
|
||||||
auth_grafana_client_secret: "{{ vault_auth_grafana_client_secret }}"
|
auth_grafana_client_secret: "{{ vault_auth_grafana_client_secret }}"
|
||||||
auth_minio_client_secret: "{{ vault_auth_minio_client_secret }}"
|
|
||||||
auth_gitea_client_secret: "{{ vault_auth_gitea_client_secret }}"
|
|
||||||
auth_nextcloud_client_secret: "{{ vault_auth_nextcloud_client_secret }}"
|
|
||||||
arrstack_password: "{{ vault_arrstack_password }}"
|
arrstack_password: "{{ vault_arrstack_password }}"
|
||||||
auth_vpgen_client_secret: "{{ vault_auth_vpgen_client_secret }}"
|
|
||||||
auth_pgrok_client_secret: "{{ vault_auth_pgrok_client_secret }}"
|
|
||||||
|
|
||||||
auth_default_enrollment_group: vpgen
|
|
||||||
|
|
||||||
# Minio
|
# Minio
|
||||||
minio_password: "{{ vault_minio_password }}"
|
minio_password: "{{ vault_minio_password }}"
|
||||||
|
|
||||||
# Monitoring
|
# Monitoring
|
||||||
|
## auth_grafana_client_secret:
|
||||||
influxdb_admin_password: "{{ vault_influxdb_admin_password }}"
|
influxdb_admin_password: "{{ vault_influxdb_admin_password }}"
|
||||||
influxdb_admin_token: "{{ vault_influxdb_admin_token }}"
|
influxdb_admin_token: "{{ vault_influxdb_admin_token }}"
|
||||||
|
|
||||||
|
alertmanager_discord_webhook: "{{ vault_alertmanager_discord_webhook }}"
|
||||||
|
|
||||||
# Traefik
|
# Traefik
|
||||||
acme_email: "{{ vault_acme_email }}"
|
acme_email: "{{ vault_acme_email }}"
|
||||||
cloudflare_api_token: "{{ vault_cloudflare_api_token }}"
|
cloudflare_api_token: "{{ vault_cloudflare_api_token }}"
|
||||||
@@ -55,27 +48,3 @@ jwt_secret: "{{ vault_jwt_secret }}"
|
|||||||
nextcloud_db_password: "{{ vault_nextcloud_db_password }}"
|
nextcloud_db_password: "{{ vault_nextcloud_db_password }}"
|
||||||
redis_password: "{{ vault_redis_password }}"
|
redis_password: "{{ vault_redis_password }}"
|
||||||
nextcloud_sendgrid_api_key: "{{ vault_nextcloud_sendgrid_api_key }}"
|
nextcloud_sendgrid_api_key: "{{ vault_nextcloud_sendgrid_api_key }}"
|
||||||
|
|
||||||
# VPGen
|
|
||||||
vpgen_auth_invite_token: "{{ vault_vpgen_auth_invite_token }}"
|
|
||||||
|
|
||||||
vpgen_opnsense_api_url: https://opnsense.cazzzer.com
|
|
||||||
vpgen_opnsense_api_key: "{{ vault_vpgen_opnsense_api_key }}"
|
|
||||||
vpgen_opnsense_api_secret: "{{ vault_vpgen_opnsense_api_secret }}"
|
|
||||||
vpgen_opnsense_wg_ifname: wg2
|
|
||||||
|
|
||||||
vpgen_ipv6_client_prefix_size: 112
|
|
||||||
vpgen_ip_max_index: 100
|
|
||||||
vpgen_vpn_endpoint: "{{ vault_vpgen_vpn_endpoint }}"
|
|
||||||
vpgen_vpn_dns: "{{ vault_vpgen_vpn_dns }}"
|
|
||||||
vpgen_max_clients_per_user: 20
|
|
||||||
|
|
||||||
# Woodpecker
|
|
||||||
woodpecker_agent_secret: "{{ vault_woopecker_agent_secret }}"
|
|
||||||
|
|
||||||
# Pgrok
|
|
||||||
pgrok_db_password: "{{ vault_pgrok_db_password }}"
|
|
||||||
|
|
||||||
# Minecruft
|
|
||||||
|
|
||||||
minecruft_cf_api_key: "{{ vault_minecruft_cf_api_key }}"
|
|
||||||
|
|||||||
@@ -1,165 +1,96 @@
|
|||||||
$ANSIBLE_VAULT;1.1;AES256
|
$ANSIBLE_VAULT;1.1;AES256
|
||||||
31623438643264373065653633306538336133623864643438653630353265376138613361393466
|
32653863663065353431636364373163613536643238613961666561653663633530646165643766
|
||||||
3464643166633332666230353734333363623030646564310a313134336539343436626234626364
|
3833323937353331313136633965393061616135366534660a333037383066303431623830313464
|
||||||
62336366323433346165373666656466616434613565323632353033323161363533356133613732
|
65346431633238666534373033663138353438313762326361666233353866663534363536643034
|
||||||
3464353362333362350a633937313036336438393462396538613764636337386166613861613439
|
3636323439316261630a623262336331663431633266336235653034323234383566323963623365
|
||||||
39656466383833646236383062396130306563633861396234383462306331663136396331333433
|
32626363626164373536663464643632393761346137623866633237643038306265636362626561
|
||||||
37303737626533666530393632616130313734653331353364616135633664343035303631343266
|
61313634353634373530383061393364613461303132326335316566326436633635633131643433
|
||||||
65356133376438393639643931636561616434333637393264343832613035653034363863653233
|
31376539396639326464333233643933373737313064363262323639363964643862633035396161
|
||||||
35313035303731316431313634643638666339396139333565663464633131393266333036316437
|
35643037636535623966626131393538643432396536643365383736636262356135373434376433
|
||||||
32363661303534306535326130313139366466393634373762393165393735613563396230636538
|
32316361343330303431376234323632323932376635343964383733633761326639393966383039
|
||||||
37623665373538633237373235396430333539343232363931656463363866363539326464613337
|
35646131343034663962363335373661323065663764396631343461383661663738386163323633
|
||||||
65303932396666383235616162333564626231656361353133326333663039303331613433613030
|
36303464646532633235663662666663343238633465663334326463383133643239666634653739
|
||||||
38353366393466343334656130306131626330613934313865343039616462363137336238303262
|
35396130393961303230396236303766336666643930626161333338326137663235323066663032
|
||||||
64393931353466643466373331396536386231363233396339326637643662613438376666386661
|
33376564373563323635356233616264313663373534333636643236393866613062656338353864
|
||||||
34346530346533643364636665313633633635656564333436346531623564646534646566623135
|
66386132663362363832366661646462316139353132626662663934336530386534376538633235
|
||||||
30613036616662643461623561623837386538633231383736376462363836313538393036356164
|
62653131653835323261373435373631396466353738306362616266616532313435323633613933
|
||||||
61323664666663313838313033336664363062646562336561663138393635626134613036623332
|
61646132346536323632643865326234356535346566346532383162393265613931343962303463
|
||||||
39396137306531366464643862376238643238336230626533653033376361653839323962373162
|
31636334343736666434353835633734396465653862613234386431306463326134613931646232
|
||||||
65373463643235626463316362356161323737623335633832353663613661636436626632313634
|
32353535663133623434643866336165616232613662336533383432633338373763643337616637
|
||||||
39333033393861306333356335623439653432626336376133646432633332393639323230306435
|
38323237646461376433316164646366383438316639633162303739383263656265633364303565
|
||||||
66376631313033643336373430616638393366313538316239386430393064613430666330363233
|
36643339356136653332666230633939636264306431636562323864373037623138363739616561
|
||||||
39343234663635623764646332666634346437333264636339616431666330313138623734326364
|
37613364653737353638646564323439646138646536636564303866636233616264383466656439
|
||||||
34336335353763396238353633333837616534303537303565323264383963616362643761363332
|
33646232653061616437656162353036313834616162313936353533393833313432656534343363
|
||||||
61326566656337373437353236363865376661376462346430626639623561326435613131626330
|
35636638326236646163323463356634326534623165306461316530353936646162323435633862
|
||||||
64643361323533633462313330333536343739393461616264653737626432343362393232613166
|
64396464303363323837316162353734626663643962303534336637336632333463393734383532
|
||||||
35376631666537373765343035616333323663376363613563336366623235643536356134353434
|
66616534666466393333386337363238383432643764373864613461363766333932333862363332
|
||||||
63363337366461623762653964396534336530373134333364633037343739393134616230363033
|
61313364613031376334326635636432346532613462613265643462636436663963323862353733
|
||||||
66666231346362313561323432376164316439646263333131306335333533353939363763653964
|
38396261613332396633666130653262313234633132353264363266336231373535306532383661
|
||||||
36656164623838323638663363336666343766383865393461653435666539663339656239303861
|
65323530653531646339626537653433303332656535346639393466353133363833326236656231
|
||||||
65353032623966653239393234646664633132306163323438343436343365353361653638376637
|
33336265373463396135653730616266346331376461346433343464326238323034653330393732
|
||||||
34393734316166393234313536656533326337616564663732353735343130646265386635363439
|
36643432316662333633333036633761653031393433333338663633386264656535623534653463
|
||||||
33393331656538346563623031623861396437613437663437326134656535633362323039396232
|
36363565303333356361616539376532353066336137336134656465383364636361656664356439
|
||||||
35346135633235623933393239373361376535376332666338626538353333303038666239643837
|
65326334643631663665376530646433323439653864623964323363396561313663636538356536
|
||||||
30356265313235626330613931323538303362626330333162323062326139353661326536633239
|
63626336303862333364363166353437353163656238303765636662636137383337623563666264
|
||||||
38386336613362646465313635613432666436663938353733313365353137333830333362393365
|
66326633343230386638616438393436633431343264343231386563613935626430306337343533
|
||||||
66623961336335633365386339643437303933346432376466643562623232336461306231623038
|
66656366333332326131343661356236396430303832303834653530623639353036663436373862
|
||||||
63646566636434616364613230316238363563623364643138316135326166613939343464633462
|
61336437386338343965653563646664643438353232306231316564616462643236646239333062
|
||||||
36326338343234643338333737313434366461306435643165353030323939333635666435353639
|
38643461346639623964626438396631396139383332666130316635656530653136333662353566
|
||||||
32346563353037653231373836656261623162356138393861313463616532653039396138383436
|
36313261646330373963663032316662383137366436636534383366636362366435393036373264
|
||||||
38646462636464336564663633333631323731623663383138613231643861323932613466326439
|
34646537666462363531343335336638343038333633663862666163306662643634326533316561
|
||||||
31666535313136613632383833323134613639623836653635326336363531363832303633323731
|
61613235366233636530663462353066646530386265623534663336376364323237343936646134
|
||||||
61646630353462363932396661613639353538343136653433656132323637313434306136306366
|
31616563653864383565306439613932396562613835613562326264326535636630646666366335
|
||||||
66336164643431333564623965623064326139646664383965656636393564366535343365616634
|
36653631353961353933386236636534393636356334633336313333383238353838336335646630
|
||||||
31366665396330663864323666386431633439323933306538316231663066323565386132326563
|
63633365666530623562323634303935326362643762616532303531303139333565643835396163
|
||||||
64376434333636373362613937323632356261326439653736336331323233653063613661633539
|
36353130656365326435343130613234336637346461313639653133623933376163393935366266
|
||||||
39323261363333666461393166353362656630633262373661636535363863323664666438306633
|
66653337353732363038663164363663623266356366663637343466393836353965343730666362
|
||||||
61643865323634643063636631366165373230303533323338333832643364663066333131383436
|
38663636336265383331666666616535366334616431306164303738306436333364653765356662
|
||||||
32623662373439636164633939623164396666613138623632333532636634303633356638393537
|
37316433323563323431623164386337343563663538333435616333343433396236356363333262
|
||||||
31343933313965326238643331653635373430636236656433363039383263366363626565326462
|
61396664326234343136666331356465333233663135613839616334623033316362336162613731
|
||||||
30336631656431643262613663376331353631333563623361373231643439646465333261303862
|
38646530326538643337323838326563303130643934623939346635343331356531373235663937
|
||||||
36343766323033356536623931306365313363343232343538396561636133643365663933306231
|
62396530383365666439373632613633633233376139616138323033613135383330333132643839
|
||||||
31666362313935346336333662643237326137336263633934663663656636663836626364643966
|
65363833616337656662653462323436303531653635663739633366616532333761323238353764
|
||||||
34653830356163616636306536303030393634343062623538383239636365373663343463306262
|
39373836303735393165393435323139346661346135636138613731373165386533386333393364
|
||||||
62666536393332316365646630636232376165313266353138346536663435313063663466343533
|
32336265386334386338653734353565343733393931373436336233333031356531313739636666
|
||||||
35323238323466323663396563636361353833663636383234383533356362626232353632633665
|
61376234393631343236643137616631373564376132623534333939346162353662306661393438
|
||||||
31323865303935643765323663383730643462376464626566663562323339613037373761326632
|
32326566373934653463653737383131386431363664333535626361646637613632383132623533
|
||||||
33623636353832323735383866366534663561623136633639653232313564383639653833623532
|
32343465366562363765353366333330633631353936613930376631336538306230626632303966
|
||||||
32326535306661383433656436633031626235373466383633366663376537306530616438383361
|
31343936386535663165663066663862656439306363326337313561396132316338363930323632
|
||||||
65363838663965333831636166316464383964656431383161313838303736656130363132623664
|
33313061623534373338623931663934396339633564353533626639373837323832366132343538
|
||||||
32656232363933616532643461353565366438323166323237393434333630633830366562396531
|
63373862663137306665383732303863343564343830636233613139666631626532373938386663
|
||||||
35626564306634376364333332326539613839346639336561303038653937306339376161393763
|
35646331646462356639383964373732393866653963643832633661323430323430613330633364
|
||||||
30356464646435653237643065643264326630656366656138376566636161323261663366343462
|
35343262366362646165383032333236623863656264353964623136643631326135623538306261
|
||||||
62643837336133316262306261363238316533326436343631643031623731353563323836336533
|
37393839343331653665356131343063316232303963636462653238333466636334616435666463
|
||||||
66613737306232366339653962613136326430353732373034623130306539366431363864626535
|
65636662383930353238623130363834616137643830633261646338363435343839633565303562
|
||||||
38346166613864396434616663393837613466666436613730373466653532663561386533343635
|
37623231396163346464303464333962336261353634396236613132306464643764356265656137
|
||||||
37336233383337343266663037333133373036373435303432313265663539343961653665363762
|
32373263613964396430646332666235303634373431643939623963633334326135626565656662
|
||||||
64323761376632393638356235316362366630323039323336316262343663343563383839363165
|
30646166303732643562653166633232666635343665616665653566316632303861613861313333
|
||||||
38346161303931613832316333353130303637373638636561366134636137376537393538306532
|
38393636663137333231613239353661656338333536656563616237343234623031363535666637
|
||||||
66343133616333353664353062613862656439636161653864343734663537663762626539636138
|
61343662663965663161666436366630366432363733663537613064386130326466343366383232
|
||||||
32643361623135363539663865643935666263373432656138383966393162656164363734626332
|
32363662343561666665323565356163383932336361656132373263363239636666613461366339
|
||||||
61626634643135323262616465393332366235333637393937646531386562313338363431336135
|
31323264393866386239353333386161643330343262366666323533303737373163313262313766
|
||||||
30316632326637393431323538376663336136323438636463656639623238353533633336376534
|
61303638366263346232353134333431613730386431623235323537323962666133613939353762
|
||||||
32303566643264373861323030303033393939326161613037333162363864653839643966393939
|
63326361633630323937353163383930626336663365626532613031623532393932316138353335
|
||||||
34353765653765393336393338663761626663366136303136353932386231346331363961363930
|
32363262393764663135393466616639373965313238323935383531633434633038663437646662
|
||||||
39383131366466633365376635636231363639656238613737356630363734646166336432303535
|
31633265373937316533373332316132363061386133356231623230393739326464333761336338
|
||||||
34313938663864303730373331643437613636356139363934343261306666326437353737336466
|
38626234646164616265633061346239363164376532383834356435346232653065326362343363
|
||||||
30653139656335356133376239386666393166613062303233396330386462633666336532663765
|
39613532356166633133626563643238373661323937353635343464666339323561326136623366
|
||||||
36343230663035353638633662343035656639633433363165346539396661646635653562653161
|
62633637656462376136633963653263346565366563646533373431613761616231653739613537
|
||||||
31363161346565356164343530363731353935663563643532363535343266623935646663336333
|
32343332356435393635363837396463613165626337346235303363613764306132343539333836
|
||||||
35313065663439313535623430333533303964663263643064393331363035376635663964646138
|
63386633626332396339383165303166653334663239313066666632356165643161356262346230
|
||||||
63366361393531326132623236636333626334333433383531653161663961636430663964636561
|
32636365636364663466343939663538386439343336303537636230306263643534653339313538
|
||||||
36333463636334323834336435663636623133306434646530336332386265613962663132663737
|
31373165363962373337636138336561336638633762373363646139366339323031313664306534
|
||||||
31393537336162336532613239666332646436363266313632653538366561643137393332643065
|
30623130663037323839666166323162393065643535663866383062356330633137343239316436
|
||||||
32643264396135653439613632613332393937336230303131343465346232353261646536633130
|
32303132393739653363376138633430313832383165663366626436653033663637616664346632
|
||||||
35626363363763623839343566376633323765353934356431313537323332323736656635613039
|
63633439663734393236343265323533633639316133323336373064633138363266316135363335
|
||||||
39383039366437356535396133396336666330396566373961653762633965373761393633336165
|
31336637666331333139306537333565333064666433653730633430336261656665613263663937
|
||||||
39613261306465353634336666363138343830653939666637353330303234393632306166626633
|
64313230656333373838346439623061393164393239393934306336373063303934663334353532
|
||||||
62336531373636656130363731363334313731376561636466643638363530353363323730643232
|
31313637623466313835313566616161376230343532653561343364383133653736646338303631
|
||||||
31643636623363646233613733326630646235383539393834303864383039313934383633613232
|
36356164303630303433356332343630616465383831623036383833393330663566616333653161
|
||||||
33376433656561356337666638353038353362363936366561323966653862303837663264623039
|
63393361643266323336393962663263323338633634633033393762656139393665353630633637
|
||||||
36353966626362373531333939633934373266313831663337383464616237386361303166383634
|
39386462303731396261613961613238616237373332656361303139633763303837653765623464
|
||||||
61643434633964373634646436623861646266366530313535663361626438323530343361313430
|
64333565666532653864383861333433353731343161613231383836353966353636373762306132
|
||||||
31663066323232353130333732616663373361666661333561343133353837353766623230623963
|
35333536373939656638356333383135313231306433656536383933623634653263353434393238
|
||||||
32323936373336646131653166633365323963616339643630623962663866373038393034623632
|
32323037666135316337633465666335376332326633346665643333656139386465353134356636
|
||||||
35656130383562353734666162666264626138363265626263666661346465333130373764653262
|
36333434303538326135346539313734393939353163316666366438613133333464623732666438
|
||||||
65623939623831633265346638626134386131303339386434343466656565373538613934653035
|
663934323030303937623038343662646163
|
||||||
31663265646266656432333739653439356134366663346366373139353562303964333537396361
|
|
||||||
35353132636266613965313232326439366231653535653861653131373936303439303662643261
|
|
||||||
32623662636565396632376437633064663032393538323432393764383062643835616563656535
|
|
||||||
31386366393839643931656334633930343535326462623761353762396264323362326231643336
|
|
||||||
32633534323661666239366563633837666161643438643033303732623237356139333739663135
|
|
||||||
36343732656263313536383136663832323130393031313265326439383061666264333461373134
|
|
||||||
34616163643839373663306630343861613663643030643437373833643239633539616565636233
|
|
||||||
66303234303036616438356563663636633833396137323462316363613864663536343137303064
|
|
||||||
32623030616562313131343536373435353636353161346337303337633135343262336164336632
|
|
||||||
39343736313165626562353665613061626461393130373735303533636239376533636137396331
|
|
||||||
37346234396364333537623034333430616133396363656164393337396338613766336433396464
|
|
||||||
36346664383838386366366537306333306436383235316535623631343438633232313234613036
|
|
||||||
36396564353833626566316130343439653562313863653761383564643162386362383138356530
|
|
||||||
63376336616266623133323031353966623830633135316636383863333266333136303839373333
|
|
||||||
35366130306431636362636162333661343939386463373936313866646162396138626663353765
|
|
||||||
61666463653939373363393463656537653965313735653863323965666237353230316135346138
|
|
||||||
34373637326366363033393830386164643530313937663031363932343637323836363932303832
|
|
||||||
30316163393431663436643638313233643664333461623932356231383636633536393133666463
|
|
||||||
38303030633866383866356262386235623034666161326632633735396162653437643533313034
|
|
||||||
35306134343731376563383662353463386164323633643231386339356263663534613061306632
|
|
||||||
37646338653633366530323837386333393335323664306265643235346366613164303962643433
|
|
||||||
66303964346339663364633631656434626361396564666366333165396436666632663364336431
|
|
||||||
31376435396134646665353135636138663733363565393833336464653465303961373262393932
|
|
||||||
63396461653133396633376130326463313465363161633861653964313639666534633434393032
|
|
||||||
38383334386432353630316336313839363362643533356433636665623235366664326139346430
|
|
||||||
35646435356131666230383966383230336336623935336431653562363863643739373962366230
|
|
||||||
32373661313832313963373263613764336635616239393063346232666364623631373839303632
|
|
||||||
66386462666166616465336538313335323461316162346461613163643363313732366331313166
|
|
||||||
39646535393235383633323663333865383462623162393665336132303334326138303431616665
|
|
||||||
35633864373530613762396632303737653535663538316237663538646465313038373961616361
|
|
||||||
39643866363563643133346437643038393361373938633935363332346236353362363238353365
|
|
||||||
38393632336139313937616536633839383830376131633561383237313264373739626661646139
|
|
||||||
32613465613933623062653362646439343035376261613361356233363631636539653062613138
|
|
||||||
65633235656534633135633434336233303031333135363838666361306238323530643838386264
|
|
||||||
33666639613931313239306539313131313530353836306361643665666231663966316237613134
|
|
||||||
30303437376132373034366534383435626139623162653335636434373665623034376163633239
|
|
||||||
39326332396631333965373337653239356237656235393765303236366565326536313732353137
|
|
||||||
32623036343831383335336539303439303864666561323463393162353536303235626631373363
|
|
||||||
37346338393336363038643430313037373164336264633838656231343331356266386266376563
|
|
||||||
31633561376166343939326534383363393738613837653135663765366464306336326663333566
|
|
||||||
61613339373234303838633639396562313930643339633733663030323761343737323862343232
|
|
||||||
64343233326330306662653535633539393566626565306530363161343731613439383362393738
|
|
||||||
61303339373565643036396563376230376464636632316265326165333761656164626632303235
|
|
||||||
61353962613731633238643937343166343261363337303731633134373238643062643133633434
|
|
||||||
37306265373666613131316332663066363834663864396364373637613632376539616363623963
|
|
||||||
31356264393335366266613339343233383830643364356435316432613566316365326130333531
|
|
||||||
64366536383937306437386538643338306662633739363231616438633465613563336564616363
|
|
||||||
64363130326337383734666435336333656136326663336637336231623637633738323863636437
|
|
||||||
39373766646333363433383130336336626163616564376336633833633835653231333239656462
|
|
||||||
63316263313931626333663832653939616436643964613061343866303035653830633734643631
|
|
||||||
35316533383333616332313938653762623435353161653061633732386365303138656466313238
|
|
||||||
30616666666433333237313835623764373361633938396361393930393832323763373533356565
|
|
||||||
65393261393363623435346463343537386531643439383764626239356530346666346633313332
|
|
||||||
61656639616361396562633137666631613062303031343734313738313735346237613233363833
|
|
||||||
39663036653865346336653734306631303563343563663438643533626638363463353731386132
|
|
||||||
62326538613237616264623936393530613366303632643939336539333138626464383964663838
|
|
||||||
34363763663732336536656162393635306563633662636664323563363161386261313230393766
|
|
||||||
66373037343135616531653938633931643539386433633037623138613639653238303936383930
|
|
||||||
62333564663537653764653638663465326462323838613838643034363238343339396663333835
|
|
||||||
62396161373531646132663931356638643331626135376432633531383564393335316534313266
|
|
||||||
62613935313661303636303762336166323064633837396435363937623238333461396235636534
|
|
||||||
31616461303334363361376334306366633133633965646138623663623137393634613465376663
|
|
||||||
33613836316365393136333639643035333238373535643932353330316161363733333439356532
|
|
||||||
31343935376564333938613630616437343864336632356435326265363761643339653638666139
|
|
||||||
30613035393830616263353338393334353635333534336165396266326462373036653663393863
|
|
||||||
61323838363831663434636236636463633362633136653662623863323737626163613863643566
|
|
||||||
63363933336533386666636632656661303033326535613234336264376337376139353831386364
|
|
||||||
64643331353934323761623264353030653265336462356233313864343233323866333262363536
|
|
||||||
36346630396536663565
|
|
||||||
1
inventories/prod/group_vars/all.yml
Normal file
1
inventories/prod/group_vars/all.yml
Normal file
@@ -0,0 +1 @@
|
|||||||
|
domain: cazzzer.com
|
||||||
@@ -1,8 +1,6 @@
|
|||||||
# Environment specific variables (prod)
|
# Environment specific variables (prod)
|
||||||
|
|
||||||
---
|
---
|
||||||
domain: cazzzer.com
|
|
||||||
|
|
||||||
docker_ipv6_index: 255
|
docker_ipv6_index: 255
|
||||||
|
|
||||||
# Arrstack VPN
|
# Arrstack VPN
|
||||||
@@ -11,16 +9,6 @@ wg_psk: "{{ vault_wg_psk }}"
|
|||||||
wg_addresses: "{{ vault_wg_addresses }}"
|
wg_addresses: "{{ vault_wg_addresses }}"
|
||||||
fw_vpn_input_ports: "{{ vault_fw_vpn_input_ports }}"
|
fw_vpn_input_ports: "{{ vault_fw_vpn_input_ports }}"
|
||||||
|
|
||||||
# Authentik External OAuth
|
# Authentik GitHub OAuth
|
||||||
github_consumer_key: 32d5cae58d744c56fcc9
|
github_consumer_key: 32d5cae58d744c56fcc9
|
||||||
github_consumer_secret: "{{ vault_github_consumer_secret }}"
|
github_consumer_secret: "{{ vault_github_consumer_secret }}"
|
||||||
google_consumer_key: 606830535764-9vc8mjta87g9974pb7qasp82cpoc1d3a.apps.googleusercontent.com
|
|
||||||
google_consumer_secret: "{{ vault_google_consumer_secret }}"
|
|
||||||
|
|
||||||
# VPGen
|
|
||||||
vpgen_ipv4_starting_addr: 10.18.11.100
|
|
||||||
vpgen_ipv6_starting_addr: "{{ vault_vpgen_ipv6_starting_addr }}"
|
|
||||||
|
|
||||||
# Woodpecker
|
|
||||||
woodpecker_gitea_client_id: 3b7515f3-6005-4512-a2ee-5464dba315f8
|
|
||||||
woodpecker_gitea_client_secret: "{{ vault_woodpecker_gitea_client_secret }}"
|
|
||||||
|
|||||||
@@ -1,32 +1,21 @@
|
|||||||
$ANSIBLE_VAULT;1.1;AES256
|
$ANSIBLE_VAULT;1.1;AES256
|
||||||
36313835643238353932323631323439626432316436346533376365633332313963666433313333
|
61656162363565633436373135333536623561663136303736393865623830633539376362363363
|
||||||
6134633133636133623130376237373462383164396338380a316463396139653161366536636336
|
3938333137343336626634346262363964316563643261310a366538363037343965363766646535
|
||||||
64346664356538366538363239306631326464633635316161663963326635656430326637333963
|
61636239326464373039333462653562373933396665393039633266326234663335363337666439
|
||||||
6462633236353132300a323062353639646238663737353461633733636530613036316364353864
|
6137323332303533640a383062383135633762323561313666636566306531306636633466316536
|
||||||
34326534376639643734303137613866393464306334336566653134333765356361386436323939
|
66623731626266333731303336323733343336626366343833633365616330343565363035323039
|
||||||
35393535303635376162386266396431313739663961643061623037343463303637623130623131
|
35313961383131616133386663376331336639633137383137346164353632653939363266613562
|
||||||
31653761616639613964386432643561376637316435333064343837636463303033333432636234
|
36316631366661353632386230306532633862393963663465383862653964646462666334396666
|
||||||
39323735373161616133396566316266383165343033666530376333626264643531613334363634
|
66626636353539316266343937623662613336616331626439306538363764636366656635356639
|
||||||
35393766623361346461333764666139366632306362613362376133363239656562346263643066
|
30663535393366383261333832356237373230663037373638303161303534636230616464636265
|
||||||
65616538366532346537383432663766366161633234373562623531356339666661346164306563
|
37623938303638646233346338616239393838396433313063343065386666323264646461373032
|
||||||
35343339386631383462656466303563376237386137346437323634626163353464356462346364
|
63376661646139316430303533643063336634333364643231336130613638626431623732646434
|
||||||
35373061636237383335396231326563366230663566333665326338303564326263316630666233
|
63643833353164313465633333646232653761356333323933396666323837656334343866363762
|
||||||
65303930663862313137333630353837363265333532303133306466643462626662613166326132
|
39646263653137356632323534356631366531636530613736343438393136363835373435636230
|
||||||
66346439333739653965346236313766346532356233333164633538326135643662623533646561
|
30313163386335353935663432323033326235653963653930396235373863373232666334326661
|
||||||
65626530386333303362343830653430653866336261623566616362313739303939656364656363
|
34336632666365666563326366376461386130343965363832343430396537323734363533353065
|
||||||
37336331353766633534653936626139303061623531323362346564363665663438646533646166
|
64313837623366356261383437306465633730353332636561333462356363326132313933653234
|
||||||
62376534653562373138656465666133353235313935626534383537643436376665613865303363
|
66363634333664333433613466396639306436353035346134373430663532373934343861323262
|
||||||
62326562396361306131616363363866316232623635353663323537366563333239383636643763
|
30666664336336393835346234316238613839326436363162626439376530306133343530303365
|
||||||
35623366663463303831323730363036306363643364303532326339353633393739306366396331
|
65393030633237333166336637363435646435323736353461333932366638333264333239373733
|
||||||
33313230656431623462376135623438633164323064653866646165643263383832353138633931
|
30623062643336643431
|
||||||
66306463346361646561376334613837383762366365666638643434383034376339643239646463
|
|
||||||
66343461363233626635323535336462666339323032616136396239396534346434623238396330
|
|
||||||
37653665643366323362313136386231396532323035363963623738346564356435303263303832
|
|
||||||
37346532366432363638363330316464366361313461626535616165333433343835393565633766
|
|
||||||
32663162386562373035333335303332323136613233613431386265626337653939326435396262
|
|
||||||
61303631633838613962346663326232636438393563396230306361333335383462653432383766
|
|
||||||
35376662353262303635316635363130383032366530396439613861653037383234363831333562
|
|
||||||
37343332646534353838626366623361636261393865363633303631613837323733626264643835
|
|
||||||
63376430613234386463336234623062656534643863656434386134616265333666613939393331
|
|
||||||
39333166393538306135313431303831623063363533326330633062653333313733653831383736
|
|
||||||
613864303461323739336563356161353234
|
|
||||||
|
|||||||
@@ -1,2 +1,2 @@
|
|||||||
[alpina]
|
[alpina]
|
||||||
debbi.sys.cazzzer.com
|
debbi.lab.home
|
||||||
|
|||||||
1
inventories/staging/group_vars/all.yml
Normal file
1
inventories/staging/group_vars/all.yml
Normal file
@@ -0,0 +1 @@
|
|||||||
|
domain: lab.cazzzer.com
|
||||||
@@ -1,8 +1,6 @@
|
|||||||
# Environment specific variables (staging)
|
# Environment specific variables (staging)
|
||||||
|
|
||||||
---
|
---
|
||||||
domain: lab.cazzzer.com
|
|
||||||
|
|
||||||
docker_ipv6_index: 254
|
docker_ipv6_index: 254
|
||||||
|
|
||||||
# Arrstack VPN
|
# Arrstack VPN
|
||||||
@@ -11,16 +9,6 @@ wg_psk: "{{ vault_wg_psk }}"
|
|||||||
wg_addresses: "{{ vault_wg_addresses }}"
|
wg_addresses: "{{ vault_wg_addresses }}"
|
||||||
fw_vpn_input_ports: "{{ vault_fw_vpn_input_ports }}"
|
fw_vpn_input_ports: "{{ vault_fw_vpn_input_ports }}"
|
||||||
|
|
||||||
# Authentik External OAuth
|
# Authentik GitHub OAuth
|
||||||
github_consumer_key: dbacb8621c37320eb745
|
github_consumer_key: dbacb8621c37320eb745
|
||||||
github_consumer_secret: "{{ vault_github_consumer_secret }}"
|
github_consumer_secret: "{{ vault_github_consumer_secret }}"
|
||||||
google_consumer_key: 606830535764-pec4b3sa2tohim3u9jl2jmnl1see46q1.apps.googleusercontent.com
|
|
||||||
google_consumer_secret: "{{ vault_google_consumer_secret }}"
|
|
||||||
|
|
||||||
# VPGen
|
|
||||||
vpgen_ipv4_starting_addr: 10.18.11.50
|
|
||||||
vpgen_ipv6_starting_addr: "{{ vault_vpgen_ipv6_starting_addr }}"
|
|
||||||
|
|
||||||
# Woodpecker
|
|
||||||
woodpecker_gitea_client_id: c7122416-b160-498b-8021-8f2837552588
|
|
||||||
woodpecker_gitea_client_secret: "{{ vault_woodpecker_gitea_client_secret }}"
|
|
||||||
|
|||||||
@@ -1,32 +1,21 @@
|
|||||||
$ANSIBLE_VAULT;1.1;AES256
|
$ANSIBLE_VAULT;1.1;AES256
|
||||||
36343339366166383430383235626463376339653331333635623936653135633633353064613634
|
63633535633462326534626562373461373363643166383961303861623531663263323534366537
|
||||||
3263306161376232356634363532653266366665333364650a636365393465383165306563346132
|
3263633238646439306430356365623233313838326639350a386633363434623737313565316535
|
||||||
37653564633630653635353464333939353266396562316663653933373065353536333130383065
|
33393734633937333637373432366132323366343836393538366339626235613937323066613666
|
||||||
3864353332303164320a316439313164663736636465366539643131303663343861333164613561
|
3737393262646333390a623331333461373563313166323232343234616538623433376166313532
|
||||||
37383965373964313535313335643164376164323263613539643933333035323837373662303030
|
32323834346336336164343938303062336438643566343866316164643535663039326331646465
|
||||||
66636465303566313334386435326433653032383962353739643861346161323738636366396239
|
36666162393365323633646635333666613030386265306238633434303234336439646663356363
|
||||||
39623336336234376339343562656362323932383265313161396435346530663330353266323433
|
63323638373035326465633934326363316364616539613462653232393465633233366666373664
|
||||||
66396538313365653963323164306464663565303364386466666636346533633661333634313236
|
66616361646564303530356331323864343966633736643434653237316236363063613634646438
|
||||||
33623936616239613264613730363039366561646535633239633564656166343162303633373366
|
35303238646632616465643264316164363139393834626362326538613033656464323435396638
|
||||||
37656163333838656533363735383332626632353237613666396633363531666366336630613064
|
31346631653764303332386331663361623766333332366537313634636333346538653537346631
|
||||||
66626561663766376531313666663963643766393965653564333062653139336230356330383464
|
62363438303036386530633236376633326162336434343861346261373835653735323161323965
|
||||||
38343562383430303132663964303736623238386562323033623861303432363363373934643332
|
62353965373164616537346134303232363033323134323130316439386339613966646330666533
|
||||||
63363239323664333131306237336134613137653136633932356238343733393632616464366134
|
65346239383230646565346133663530613462363532663562326136376233303638323332326630
|
||||||
33623038363032653134626337663863366663383433633134326239616136656139366535613565
|
35656432363563653663616236393932663637323139666664636237336136366438656666633865
|
||||||
61646330356330396236303566363834613236653733643162666536303435643133346633353632
|
66353162656364356638313236643131613830393838636264663833343461373963613431656364
|
||||||
62386135303262353332643135636164303963616234626132356161663463366434323864626261
|
32303331623033303433333631313038316336653638656638373031653234356164333363336532
|
||||||
33356536626263626261343937386666396561306334346435316262333431353234303836356563
|
37316334353463376562643138346633613633353536653939376564333166323931353634333736
|
||||||
31343566373935396633636133616265346235396333396664333534336162323039623937656336
|
63616133663266383339323562343265613461623865623263623139396163343065623264366230
|
||||||
36656133383966613333646336613039626563353862646238376461373264633233313836333062
|
32633362336335396562366563363830636133376238646433386236666461333731353337386333
|
||||||
30343134363862626630393035643762376435346532306462363437646238333463396230666465
|
61323931643766326338
|
||||||
64386365393063613139313164366562643066323461313364393265393638643137386561633530
|
|
||||||
65643861386531323836306339386462656530383533363831323461303131396666626464303136
|
|
||||||
64343865616235616366633136393662623862383961323338366435396334653538303830616166
|
|
||||||
39636164613466313033643639366635323666666235653633333436613133343962353664313838
|
|
||||||
64356466393239666131363964643461346633313030643061643938643232343334313731636463
|
|
||||||
37396637643232353539626239306463623237623534366666396164613135356136313534663231
|
|
||||||
36613662653237343061316463386231656136383636393034333666633063613731316162333464
|
|
||||||
64313866633062623530326233633166343434636639346565346337396461393637383333366435
|
|
||||||
62393030383963396638653230613431623837353461313630343333376131616239313164336234
|
|
||||||
62323739316536353835613032303438623230626563303934626466303934613566656232323663
|
|
||||||
643265386333313065333737613438316532
|
|
||||||
|
|||||||
@@ -1,2 +1,2 @@
|
|||||||
[alpina]
|
[alpina]
|
||||||
etappi.sys.cazzzer.com
|
etappi.lab.home
|
||||||
|
|||||||
662
poetry.lock
generated
662
poetry.lock
generated
@@ -1,244 +1,200 @@
|
|||||||
# This file is automatically @generated by Poetry 2.2.1 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]]
|
[[package]]
|
||||||
name = "ansible"
|
name = "ansible"
|
||||||
version = "13.0.0"
|
version = "10.5.0"
|
||||||
description = "Radically simple IT automation"
|
description = "Radically simple IT automation"
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = ">=3.12"
|
python-versions = ">=3.10"
|
||||||
groups = ["main"]
|
|
||||||
files = [
|
files = [
|
||||||
{file = "ansible-13.0.0-py3-none-any.whl", hash = "sha256:c5efd095be1e4d15aa39691e3ce8233727269da4a17043f16f67c6899b98a239"},
|
{file = "ansible-10.5.0-py3-none-any.whl", hash = "sha256:1d10bddba58f1edd0fe0b8e0387e0fafc519535066bb3c919c33b6ea3ec32a0f"},
|
||||||
{file = "ansible-13.0.0.tar.gz", hash = "sha256:fd0f4a29c3e77617011b98d80e4579c31e1d58f40928d3e8fd5e434696676797"},
|
{file = "ansible-10.5.0.tar.gz", hash = "sha256:ba2045031a7d60c203b6e5fe1f8eaddd53ae076f7ada910e636494384135face"},
|
||||||
]
|
]
|
||||||
|
|
||||||
[package.dependencies]
|
[package.dependencies]
|
||||||
ansible-core = ">=2.20.0,<2.21.0"
|
ansible-core = ">=2.17.5,<2.18.0"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "ansible-core"
|
name = "ansible-core"
|
||||||
version = "2.20.0"
|
version = "2.17.5"
|
||||||
description = "Radically simple IT automation"
|
description = "Radically simple IT automation"
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = ">=3.12"
|
python-versions = ">=3.10"
|
||||||
groups = ["main"]
|
|
||||||
files = [
|
files = [
|
||||||
{file = "ansible_core-2.20.0-py3-none-any.whl", hash = "sha256:665f9e46401509f1f799b0fc624ce162127765885d61607c5e31a0f77652d7b6"},
|
{file = "ansible_core-2.17.5-py3-none-any.whl", hash = "sha256:10f165b475cf2bc8d886e532cadb32c52ee6a533649793101d3166bca9bd3ea3"},
|
||||||
{file = "ansible_core-2.20.0.tar.gz", hash = "sha256:cd73faf28a056c933bc1eee8f66ab597e7ec7309d42c8a6e5d6e4294c4a78b54"},
|
{file = "ansible_core-2.17.5.tar.gz", hash = "sha256:ae7f51fd13dc9d57c9bcd43ef23f9c255ca8f18f4b5c0011a4f9b724d92c5a8e"},
|
||||||
]
|
]
|
||||||
|
|
||||||
[package.dependencies]
|
[package.dependencies]
|
||||||
cryptography = "*"
|
cryptography = "*"
|
||||||
jinja2 = ">=3.1.0"
|
jinja2 = ">=3.0.0"
|
||||||
packaging = "*"
|
packaging = "*"
|
||||||
PyYAML = ">=5.1"
|
PyYAML = ">=5.1"
|
||||||
resolvelib = ">=0.8.0,<2.0.0"
|
resolvelib = ">=0.5.3,<1.1.0"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "ansible-vault"
|
name = "ansible-vault"
|
||||||
version = "4.1.0"
|
version = "2.1.0"
|
||||||
description = "R/W an ansible-vault yaml file"
|
description = "R/W an ansible-vault yaml file"
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = "*"
|
python-versions = "*"
|
||||||
groups = ["main"]
|
|
||||||
files = [
|
files = [
|
||||||
{file = "ansible_vault-4.1.0-py3-none-any.whl", hash = "sha256:ae2e194bb68cc94471d0cdba0705cea9390d9c3dfe6299eeb1d4ee36af602bd9"},
|
{file = "ansible-vault-2.1.0.tar.gz", hash = "sha256:5ce8fdb5470f1449b76bf07ae2abc56480dad48356ae405c85b686efb64dbd5e"},
|
||||||
{file = "ansible_vault-4.1.0.tar.gz", hash = "sha256:7e985a9329e4728961d7a00f62412fa8ec246a4d832ad6e6d158165e0026529b"},
|
|
||||||
]
|
]
|
||||||
|
|
||||||
[package.dependencies]
|
[package.dependencies]
|
||||||
ansible-core = ">=2.16"
|
ansible = "*"
|
||||||
PyYAML = ">=5.1"
|
setuptools = "*"
|
||||||
|
|
||||||
[package.extras]
|
[package.extras]
|
||||||
dev = ["black", "coveralls", "flake8", "isort", "pylint", "pylint-pytest", "pytest", "pytest-cov", "setuptools"]
|
dev = ["black", "flake8", "isort[pyproject]", "pytest"]
|
||||||
release = ["build", "twine"]
|
release = ["twine"]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "attrs"
|
name = "attrs"
|
||||||
version = "25.4.0"
|
version = "24.2.0"
|
||||||
description = "Classes Without Boilerplate"
|
description = "Classes Without Boilerplate"
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = ">=3.9"
|
python-versions = ">=3.7"
|
||||||
groups = ["dev"]
|
|
||||||
files = [
|
files = [
|
||||||
{file = "attrs-25.4.0-py3-none-any.whl", hash = "sha256:adcf7e2a1fb3b36ac48d97835bb6d8ade15b8dcce26aba8bf1d14847b57a3373"},
|
{file = "attrs-24.2.0-py3-none-any.whl", hash = "sha256:81921eb96de3191c8258c199618104dd27ac608d9366f5e35d011eae1867ede2"},
|
||||||
{file = "attrs-25.4.0.tar.gz", hash = "sha256:16d5969b87f0859ef33a48b35d55ac1be6e42ae49d5e853b597db70c35c57e11"},
|
{file = "attrs-24.2.0.tar.gz", hash = "sha256:5cfb1b9148b5b086569baec03f20d7b6bf3bcacc9a42bebf87ffaaca362f6346"},
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[package.extras]
|
||||||
|
benchmark = ["cloudpickle", "hypothesis", "mypy (>=1.11.1)", "pympler", "pytest (>=4.3.0)", "pytest-codspeed", "pytest-mypy-plugins", "pytest-xdist[psutil]"]
|
||||||
|
cov = ["cloudpickle", "coverage[toml] (>=5.3)", "hypothesis", "mypy (>=1.11.1)", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-xdist[psutil]"]
|
||||||
|
dev = ["cloudpickle", "hypothesis", "mypy (>=1.11.1)", "pre-commit", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-xdist[psutil]"]
|
||||||
|
docs = ["cogapp", "furo", "myst-parser", "sphinx", "sphinx-notfound-page", "sphinxcontrib-towncrier", "towncrier (<24.7)"]
|
||||||
|
tests = ["cloudpickle", "hypothesis", "mypy (>=1.11.1)", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-xdist[psutil]"]
|
||||||
|
tests-mypy = ["mypy (>=1.11.1)", "pytest-mypy-plugins"]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "cffi"
|
name = "cffi"
|
||||||
version = "2.0.0"
|
version = "1.17.1"
|
||||||
description = "Foreign Function Interface for Python calling C code."
|
description = "Foreign Function Interface for Python calling C code."
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = ">=3.9"
|
python-versions = ">=3.8"
|
||||||
groups = ["main"]
|
|
||||||
markers = "platform_python_implementation != \"PyPy\""
|
|
||||||
files = [
|
files = [
|
||||||
{file = "cffi-2.0.0-cp310-cp310-macosx_10_13_x86_64.whl", hash = "sha256:0cf2d91ecc3fcc0625c2c530fe004f82c110405f101548512cce44322fa8ac44"},
|
{file = "cffi-1.17.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:df8b1c11f177bc2313ec4b2d46baec87a5f3e71fc8b45dab2ee7cae86d9aba14"},
|
||||||
{file = "cffi-2.0.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:f73b96c41e3b2adedc34a7356e64c8eb96e03a3782b535e043a986276ce12a49"},
|
{file = "cffi-1.17.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8f2cdc858323644ab277e9bb925ad72ae0e67f69e804f4898c070998d50b1a67"},
|
||||||
{file = "cffi-2.0.0-cp310-cp310-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:53f77cbe57044e88bbd5ed26ac1d0514d2acf0591dd6bb02a3ae37f76811b80c"},
|
{file = "cffi-1.17.1-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:edae79245293e15384b51f88b00613ba9f7198016a5948b5dddf4917d4d26382"},
|
||||||
{file = "cffi-2.0.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:3e837e369566884707ddaf85fc1744b47575005c0a229de3327f8f9a20f4efeb"},
|
{file = "cffi-1.17.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:45398b671ac6d70e67da8e4224a065cec6a93541bb7aebe1b198a61b58c7b702"},
|
||||||
{file = "cffi-2.0.0-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:5eda85d6d1879e692d546a078b44251cdd08dd1cfb98dfb77b670c97cee49ea0"},
|
{file = "cffi-1.17.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ad9413ccdeda48c5afdae7e4fa2192157e991ff761e7ab8fdd8926f40b160cc3"},
|
||||||
{file = "cffi-2.0.0-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:9332088d75dc3241c702d852d4671613136d90fa6881da7d770a483fd05248b4"},
|
{file = "cffi-1.17.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5da5719280082ac6bd9aa7becb3938dc9f9cbd57fac7d2871717b1feb0902ab6"},
|
||||||
{file = "cffi-2.0.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:fc7de24befaeae77ba923797c7c87834c73648a05a4bde34b3b7e5588973a453"},
|
{file = "cffi-1.17.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2bb1a08b8008b281856e5971307cc386a8e9c5b625ac297e853d36da6efe9c17"},
|
||||||
{file = "cffi-2.0.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:cf364028c016c03078a23b503f02058f1814320a56ad535686f90565636a9495"},
|
{file = "cffi-1.17.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:045d61c734659cc045141be4bae381a41d89b741f795af1dd018bfb532fd0df8"},
|
||||||
{file = "cffi-2.0.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:e11e82b744887154b182fd3e7e8512418446501191994dbf9c9fc1f32cc8efd5"},
|
{file = "cffi-1.17.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:6883e737d7d9e4899a8a695e00ec36bd4e5e4f18fabe0aca0efe0a4b44cdb13e"},
|
||||||
{file = "cffi-2.0.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:8ea985900c5c95ce9db1745f7933eeef5d314f0565b27625d9a10ec9881e1bfb"},
|
{file = "cffi-1.17.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:6b8b4a92e1c65048ff98cfe1f735ef8f1ceb72e3d5f0c25fdb12087a23da22be"},
|
||||||
{file = "cffi-2.0.0-cp310-cp310-win32.whl", hash = "sha256:1f72fb8906754ac8a2cc3f9f5aaa298070652a0ffae577e0ea9bd480dc3c931a"},
|
{file = "cffi-1.17.1-cp310-cp310-win32.whl", hash = "sha256:c9c3d058ebabb74db66e431095118094d06abf53284d9c81f27300d0e0d8bc7c"},
|
||||||
{file = "cffi-2.0.0-cp310-cp310-win_amd64.whl", hash = "sha256:b18a3ed7d5b3bd8d9ef7a8cb226502c6bf8308df1525e1cc676c3680e7176739"},
|
{file = "cffi-1.17.1-cp310-cp310-win_amd64.whl", hash = "sha256:0f048dcf80db46f0098ccac01132761580d28e28bc0f78ae0d58048063317e15"},
|
||||||
{file = "cffi-2.0.0-cp311-cp311-macosx_10_13_x86_64.whl", hash = "sha256:b4c854ef3adc177950a8dfc81a86f5115d2abd545751a304c5bcf2c2c7283cfe"},
|
{file = "cffi-1.17.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:a45e3c6913c5b87b3ff120dcdc03f6131fa0065027d0ed7ee6190736a74cd401"},
|
||||||
{file = "cffi-2.0.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:2de9a304e27f7596cd03d16f1b7c72219bd944e99cc52b84d0145aefb07cbd3c"},
|
{file = "cffi-1.17.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:30c5e0cb5ae493c04c8b42916e52ca38079f1b235c2f8ae5f4527b963c401caf"},
|
||||||
{file = "cffi-2.0.0-cp311-cp311-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:baf5215e0ab74c16e2dd324e8ec067ef59e41125d3eade2b863d294fd5035c92"},
|
{file = "cffi-1.17.1-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f75c7ab1f9e4aca5414ed4d8e5c0e303a34f4421f8a0d47a4d019ceff0ab6af4"},
|
||||||
{file = "cffi-2.0.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:730cacb21e1bdff3ce90babf007d0a0917cc3e6492f336c2f0134101e0944f93"},
|
{file = "cffi-1.17.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a1ed2dd2972641495a3ec98445e09766f077aee98a1c896dcb4ad0d303628e41"},
|
||||||
{file = "cffi-2.0.0-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:6824f87845e3396029f3820c206e459ccc91760e8fa24422f8b0c3d1731cbec5"},
|
{file = "cffi-1.17.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:46bf43160c1a35f7ec506d254e5c890f3c03648a4dbac12d624e4490a7046cd1"},
|
||||||
{file = "cffi-2.0.0-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:9de40a7b0323d889cf8d23d1ef214f565ab154443c42737dfe52ff82cf857664"},
|
{file = "cffi-1.17.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a24ed04c8ffd54b0729c07cee15a81d964e6fee0e3d4d342a27b020d22959dc6"},
|
||||||
{file = "cffi-2.0.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:8941aaadaf67246224cee8c3803777eed332a19d909b47e29c9842ef1e79ac26"},
|
{file = "cffi-1.17.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:610faea79c43e44c71e1ec53a554553fa22321b65fae24889706c0a84d4ad86d"},
|
||||||
{file = "cffi-2.0.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:a05d0c237b3349096d3981b727493e22147f934b20f6f125a3eba8f994bec4a9"},
|
{file = "cffi-1.17.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:a9b15d491f3ad5d692e11f6b71f7857e7835eb677955c00cc0aefcd0669adaf6"},
|
||||||
{file = "cffi-2.0.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:94698a9c5f91f9d138526b48fe26a199609544591f859c870d477351dc7b2414"},
|
{file = "cffi-1.17.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:de2ea4b5833625383e464549fec1bc395c1bdeeb5f25c4a3a82b5a8c756ec22f"},
|
||||||
{file = "cffi-2.0.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:5fed36fccc0612a53f1d4d9a816b50a36702c28a2aa880cb8a122b3466638743"},
|
{file = "cffi-1.17.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:fc48c783f9c87e60831201f2cce7f3b2e4846bf4d8728eabe54d60700b318a0b"},
|
||||||
{file = "cffi-2.0.0-cp311-cp311-win32.whl", hash = "sha256:c649e3a33450ec82378822b3dad03cc228b8f5963c0c12fc3b1e0ab940f768a5"},
|
{file = "cffi-1.17.1-cp311-cp311-win32.whl", hash = "sha256:85a950a4ac9c359340d5963966e3e0a94a676bd6245a4b55bc43949eee26a655"},
|
||||||
{file = "cffi-2.0.0-cp311-cp311-win_amd64.whl", hash = "sha256:66f011380d0e49ed280c789fbd08ff0d40968ee7b665575489afa95c98196ab5"},
|
{file = "cffi-1.17.1-cp311-cp311-win_amd64.whl", hash = "sha256:caaf0640ef5f5517f49bc275eca1406b0ffa6aa184892812030f04c2abf589a0"},
|
||||||
{file = "cffi-2.0.0-cp311-cp311-win_arm64.whl", hash = "sha256:c6638687455baf640e37344fe26d37c404db8b80d037c3d29f58fe8d1c3b194d"},
|
{file = "cffi-1.17.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:805b4371bf7197c329fcb3ead37e710d1bca9da5d583f5073b799d5c5bd1eee4"},
|
||||||
{file = "cffi-2.0.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:6d02d6655b0e54f54c4ef0b94eb6be0607b70853c45ce98bd278dc7de718be5d"},
|
{file = "cffi-1.17.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:733e99bc2df47476e3848417c5a4540522f234dfd4ef3ab7fafdf555b082ec0c"},
|
||||||
{file = "cffi-2.0.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8eca2a813c1cb7ad4fb74d368c2ffbbb4789d377ee5bb8df98373c2cc0dee76c"},
|
{file = "cffi-1.17.1-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1257bdabf294dceb59f5e70c64a3e2f462c30c7ad68092d01bbbfb1c16b1ba36"},
|
||||||
{file = "cffi-2.0.0-cp312-cp312-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:21d1152871b019407d8ac3985f6775c079416c282e431a4da6afe7aefd2bccbe"},
|
{file = "cffi-1.17.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:da95af8214998d77a98cc14e3a3bd00aa191526343078b530ceb0bd710fb48a5"},
|
||||||
{file = "cffi-2.0.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:b21e08af67b8a103c71a250401c78d5e0893beff75e28c53c98f4de42f774062"},
|
{file = "cffi-1.17.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d63afe322132c194cf832bfec0dc69a99fb9bb6bbd550f161a49e9e855cc78ff"},
|
||||||
{file = "cffi-2.0.0-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:1e3a615586f05fc4065a8b22b8152f0c1b00cdbc60596d187c2a74f9e3036e4e"},
|
{file = "cffi-1.17.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f79fc4fc25f1c8698ff97788206bb3c2598949bfe0fef03d299eb1b5356ada99"},
|
||||||
{file = "cffi-2.0.0-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:81afed14892743bbe14dacb9e36d9e0e504cd204e0b165062c488942b9718037"},
|
{file = "cffi-1.17.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b62ce867176a75d03a665bad002af8e6d54644fad99a3c70905c543130e39d93"},
|
||||||
{file = "cffi-2.0.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:3e17ed538242334bf70832644a32a7aae3d83b57567f9fd60a26257e992b79ba"},
|
{file = "cffi-1.17.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:386c8bf53c502fff58903061338ce4f4950cbdcb23e2902d86c0f722b786bbe3"},
|
||||||
{file = "cffi-2.0.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:3925dd22fa2b7699ed2617149842d2e6adde22b262fcbfada50e3d195e4b3a94"},
|
{file = "cffi-1.17.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:4ceb10419a9adf4460ea14cfd6bc43d08701f0835e979bf821052f1805850fe8"},
|
||||||
{file = "cffi-2.0.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:2c8f814d84194c9ea681642fd164267891702542f028a15fc97d4674b6206187"},
|
{file = "cffi-1.17.1-cp312-cp312-win32.whl", hash = "sha256:a08d7e755f8ed21095a310a693525137cfe756ce62d066e53f502a83dc550f65"},
|
||||||
{file = "cffi-2.0.0-cp312-cp312-win32.whl", hash = "sha256:da902562c3e9c550df360bfa53c035b2f241fed6d9aef119048073680ace4a18"},
|
{file = "cffi-1.17.1-cp312-cp312-win_amd64.whl", hash = "sha256:51392eae71afec0d0c8fb1a53b204dbb3bcabcb3c9b807eedf3e1e6ccf2de903"},
|
||||||
{file = "cffi-2.0.0-cp312-cp312-win_amd64.whl", hash = "sha256:da68248800ad6320861f129cd9c1bf96ca849a2771a59e0344e88681905916f5"},
|
{file = "cffi-1.17.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f3a2b4222ce6b60e2e8b337bb9596923045681d71e5a082783484d845390938e"},
|
||||||
{file = "cffi-2.0.0-cp312-cp312-win_arm64.whl", hash = "sha256:4671d9dd5ec934cb9a73e7ee9676f9362aba54f7f34910956b84d727b0d73fb6"},
|
{file = "cffi-1.17.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:0984a4925a435b1da406122d4d7968dd861c1385afe3b45ba82b750f229811e2"},
|
||||||
{file = "cffi-2.0.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:00bdf7acc5f795150faa6957054fbbca2439db2f775ce831222b66f192f03beb"},
|
{file = "cffi-1.17.1-cp313-cp313-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d01b12eeeb4427d3110de311e1774046ad344f5b1a7403101878976ecd7a10f3"},
|
||||||
{file = "cffi-2.0.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:45d5e886156860dc35862657e1494b9bae8dfa63bf56796f2fb56e1679fc0bca"},
|
{file = "cffi-1.17.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:706510fe141c86a69c8ddc029c7910003a17353970cff3b904ff0686a5927683"},
|
||||||
{file = "cffi-2.0.0-cp313-cp313-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:07b271772c100085dd28b74fa0cd81c8fb1a3ba18b21e03d7c27f3436a10606b"},
|
{file = "cffi-1.17.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:de55b766c7aa2e2a3092c51e0483d700341182f08e67c63630d5b6f200bb28e5"},
|
||||||
{file = "cffi-2.0.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:d48a880098c96020b02d5a1f7d9251308510ce8858940e6fa99ece33f610838b"},
|
{file = "cffi-1.17.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c59d6e989d07460165cc5ad3c61f9fd8f1b4796eacbd81cee78957842b834af4"},
|
||||||
{file = "cffi-2.0.0-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:f93fd8e5c8c0a4aa1f424d6173f14a892044054871c771f8566e4008eaa359d2"},
|
{file = "cffi-1.17.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd398dbc6773384a17fe0d3e7eeb8d1a21c2200473ee6806bb5e6a8e62bb73dd"},
|
||||||
{file = "cffi-2.0.0-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:dd4f05f54a52fb558f1ba9f528228066954fee3ebe629fc1660d874d040ae5a3"},
|
{file = "cffi-1.17.1-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:3edc8d958eb099c634dace3c7e16560ae474aa3803a5df240542b305d14e14ed"},
|
||||||
{file = "cffi-2.0.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:c8d3b5532fc71b7a77c09192b4a5a200ea992702734a2e9279a37f2478236f26"},
|
{file = "cffi-1.17.1-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:72e72408cad3d5419375fc87d289076ee319835bdfa2caad331e377589aebba9"},
|
||||||
{file = "cffi-2.0.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:d9b29c1f0ae438d5ee9acb31cadee00a58c46cc9c0b2f9038c6b0b3470877a8c"},
|
{file = "cffi-1.17.1-cp313-cp313-win32.whl", hash = "sha256:e03eab0a8677fa80d646b5ddece1cbeaf556c313dcfac435ba11f107ba117b5d"},
|
||||||
{file = "cffi-2.0.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:6d50360be4546678fc1b79ffe7a66265e28667840010348dd69a314145807a1b"},
|
{file = "cffi-1.17.1-cp313-cp313-win_amd64.whl", hash = "sha256:f6a16c31041f09ead72d69f583767292f750d24913dadacf5756b966aacb3f1a"},
|
||||||
{file = "cffi-2.0.0-cp313-cp313-win32.whl", hash = "sha256:74a03b9698e198d47562765773b4a8309919089150a0bb17d829ad7b44b60d27"},
|
{file = "cffi-1.17.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:636062ea65bd0195bc012fea9321aca499c0504409f413dc88af450b57ffd03b"},
|
||||||
{file = "cffi-2.0.0-cp313-cp313-win_amd64.whl", hash = "sha256:19f705ada2530c1167abacb171925dd886168931e0a7b78f5bffcae5c6b5be75"},
|
{file = "cffi-1.17.1-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c7eac2ef9b63c79431bc4b25f1cd649d7f061a28808cbc6c47b534bd789ef964"},
|
||||||
{file = "cffi-2.0.0-cp313-cp313-win_arm64.whl", hash = "sha256:256f80b80ca3853f90c21b23ee78cd008713787b1b1e93eae9f3d6a7134abd91"},
|
{file = "cffi-1.17.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e221cf152cff04059d011ee126477f0d9588303eb57e88923578ace7baad17f9"},
|
||||||
{file = "cffi-2.0.0-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:fc33c5141b55ed366cfaad382df24fe7dcbc686de5be719b207bb248e3053dc5"},
|
{file = "cffi-1.17.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:31000ec67d4221a71bd3f67df918b1f88f676f1c3b535a7eb473255fdc0b83fc"},
|
||||||
{file = "cffi-2.0.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:c654de545946e0db659b3400168c9ad31b5d29593291482c43e3564effbcee13"},
|
{file = "cffi-1.17.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6f17be4345073b0a7b8ea599688f692ac3ef23ce28e5df79c04de519dbc4912c"},
|
||||||
{file = "cffi-2.0.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:24b6f81f1983e6df8db3adc38562c83f7d4a0c36162885ec7f7b77c7dcbec97b"},
|
{file = "cffi-1.17.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0e2b1fac190ae3ebfe37b979cc1ce69c81f4e4fe5746bb401dca63a9062cdaf1"},
|
||||||
{file = "cffi-2.0.0-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:12873ca6cb9b0f0d3a0da705d6086fe911591737a59f28b7936bdfed27c0d47c"},
|
{file = "cffi-1.17.1-cp38-cp38-win32.whl", hash = "sha256:7596d6620d3fa590f677e9ee430df2958d2d6d6de2feeae5b20e82c00b76fbf8"},
|
||||||
{file = "cffi-2.0.0-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:d9b97165e8aed9272a6bb17c01e3cc5871a594a446ebedc996e2397a1c1ea8ef"},
|
{file = "cffi-1.17.1-cp38-cp38-win_amd64.whl", hash = "sha256:78122be759c3f8a014ce010908ae03364d00a1f81ab5c7f4a7a5120607ea56e1"},
|
||||||
{file = "cffi-2.0.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:afb8db5439b81cf9c9d0c80404b60c3cc9c3add93e114dcae767f1477cb53775"},
|
{file = "cffi-1.17.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b2ab587605f4ba0bf81dc0cb08a41bd1c0a5906bd59243d56bad7668a6fc6c16"},
|
||||||
{file = "cffi-2.0.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:737fe7d37e1a1bffe70bd5754ea763a62a066dc5913ca57e957824b72a85e205"},
|
{file = "cffi-1.17.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:28b16024becceed8c6dfbc75629e27788d8a3f9030691a1dbf9821a128b22c36"},
|
||||||
{file = "cffi-2.0.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:38100abb9d1b1435bc4cc340bb4489635dc2f0da7456590877030c9b3d40b0c1"},
|
{file = "cffi-1.17.1-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1d599671f396c4723d016dbddb72fe8e0397082b0a77a4fab8028923bec050e8"},
|
||||||
{file = "cffi-2.0.0-cp314-cp314-win32.whl", hash = "sha256:087067fa8953339c723661eda6b54bc98c5625757ea62e95eb4898ad5e776e9f"},
|
{file = "cffi-1.17.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ca74b8dbe6e8e8263c0ffd60277de77dcee6c837a3d0881d8c1ead7268c9e576"},
|
||||||
{file = "cffi-2.0.0-cp314-cp314-win_amd64.whl", hash = "sha256:203a48d1fb583fc7d78a4c6655692963b860a417c0528492a6bc21f1aaefab25"},
|
{file = "cffi-1.17.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f7f5baafcc48261359e14bcd6d9bff6d4b28d9103847c9e136694cb0501aef87"},
|
||||||
{file = "cffi-2.0.0-cp314-cp314-win_arm64.whl", hash = "sha256:dbd5c7a25a7cb98f5ca55d258b103a2054f859a46ae11aaf23134f9cc0d356ad"},
|
{file = "cffi-1.17.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:98e3969bcff97cae1b2def8ba499ea3d6f31ddfdb7635374834cf89a1a08ecf0"},
|
||||||
{file = "cffi-2.0.0-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:9a67fc9e8eb39039280526379fb3a70023d77caec1852002b4da7e8b270c4dd9"},
|
{file = "cffi-1.17.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cdf5ce3acdfd1661132f2a9c19cac174758dc2352bfe37d98aa7512c6b7178b3"},
|
||||||
{file = "cffi-2.0.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:7a66c7204d8869299919db4d5069a82f1561581af12b11b3c9f48c584eb8743d"},
|
{file = "cffi-1.17.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:9755e4345d1ec879e3849e62222a18c7174d65a6a92d5b346b1863912168b595"},
|
||||||
{file = "cffi-2.0.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:7cc09976e8b56f8cebd752f7113ad07752461f48a58cbba644139015ac24954c"},
|
{file = "cffi-1.17.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:f1e22e8c4419538cb197e4dd60acc919d7696e5ef98ee4da4e01d3f8cfa4cc5a"},
|
||||||
{file = "cffi-2.0.0-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:92b68146a71df78564e4ef48af17551a5ddd142e5190cdf2c5624d0c3ff5b2e8"},
|
{file = "cffi-1.17.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:c03e868a0b3bc35839ba98e74211ed2b05d2119be4e8a0f224fba9384f1fe02e"},
|
||||||
{file = "cffi-2.0.0-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:b1e74d11748e7e98e2f426ab176d4ed720a64412b6a15054378afdb71e0f37dc"},
|
{file = "cffi-1.17.1-cp39-cp39-win32.whl", hash = "sha256:e31ae45bc2e29f6b2abd0de1cc3b9d5205aa847cafaecb8af1476a609a2f6eb7"},
|
||||||
{file = "cffi-2.0.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:28a3a209b96630bca57cce802da70c266eb08c6e97e5afd61a75611ee6c64592"},
|
{file = "cffi-1.17.1-cp39-cp39-win_amd64.whl", hash = "sha256:d016c76bdd850f3c626af19b0542c9677ba156e4ee4fccfdd7848803533ef662"},
|
||||||
{file = "cffi-2.0.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:7553fb2090d71822f02c629afe6042c299edf91ba1bf94951165613553984512"},
|
{file = "cffi-1.17.1.tar.gz", hash = "sha256:1c39c6016c32bc48dd54561950ebd6836e1670f2ae46128f67cf49e789c52824"},
|
||||||
{file = "cffi-2.0.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:6c6c373cfc5c83a975506110d17457138c8c63016b563cc9ed6e056a82f13ce4"},
|
|
||||||
{file = "cffi-2.0.0-cp314-cp314t-win32.whl", hash = "sha256:1fc9ea04857caf665289b7a75923f2c6ed559b8298a1b8c49e59f7dd95c8481e"},
|
|
||||||
{file = "cffi-2.0.0-cp314-cp314t-win_amd64.whl", hash = "sha256:d68b6cef7827e8641e8ef16f4494edda8b36104d79773a334beaa1e3521430f6"},
|
|
||||||
{file = "cffi-2.0.0-cp314-cp314t-win_arm64.whl", hash = "sha256:0a1527a803f0a659de1af2e1fd700213caba79377e27e4693648c2923da066f9"},
|
|
||||||
{file = "cffi-2.0.0-cp39-cp39-macosx_10_13_x86_64.whl", hash = "sha256:fe562eb1a64e67dd297ccc4f5addea2501664954f2692b69a76449ec7913ecbf"},
|
|
||||||
{file = "cffi-2.0.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:de8dad4425a6ca6e4e5e297b27b5c824ecc7581910bf9aee86cb6835e6812aa7"},
|
|
||||||
{file = "cffi-2.0.0-cp39-cp39-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:4647afc2f90d1ddd33441e5b0e85b16b12ddec4fca55f0d9671fef036ecca27c"},
|
|
||||||
{file = "cffi-2.0.0-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:3f4d46d8b35698056ec29bca21546e1551a205058ae1a181d871e278b0b28165"},
|
|
||||||
{file = "cffi-2.0.0-cp39-cp39-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:e6e73b9e02893c764e7e8d5bb5ce277f1a009cd5243f8228f75f842bf937c534"},
|
|
||||||
{file = "cffi-2.0.0-cp39-cp39-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:cb527a79772e5ef98fb1d700678fe031e353e765d1ca2d409c92263c6d43e09f"},
|
|
||||||
{file = "cffi-2.0.0-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:61d028e90346df14fedc3d1e5441df818d095f3b87d286825dfcbd6459b7ef63"},
|
|
||||||
{file = "cffi-2.0.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:0f6084a0ea23d05d20c3edcda20c3d006f9b6f3fefeac38f59262e10cef47ee2"},
|
|
||||||
{file = "cffi-2.0.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:1cd13c99ce269b3ed80b417dcd591415d3372bcac067009b6e0f59c7d4015e65"},
|
|
||||||
{file = "cffi-2.0.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:89472c9762729b5ae1ad974b777416bfda4ac5642423fa93bd57a09204712322"},
|
|
||||||
{file = "cffi-2.0.0-cp39-cp39-win32.whl", hash = "sha256:2081580ebb843f759b9f617314a24ed5738c51d2aee65d31e02f6f7a2b97707a"},
|
|
||||||
{file = "cffi-2.0.0-cp39-cp39-win_amd64.whl", hash = "sha256:b882b3df248017dba09d6b16defe9b5c407fe32fc7c65a9c69798e6175601be9"},
|
|
||||||
{file = "cffi-2.0.0.tar.gz", hash = "sha256:44d1b5909021139fe36001ae048dbdde8214afa20200eda0f64c068cac5d5529"},
|
|
||||||
]
|
]
|
||||||
|
|
||||||
[package.dependencies]
|
[package.dependencies]
|
||||||
pycparser = {version = "*", markers = "implementation_name != \"PyPy\""}
|
pycparser = "*"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "cryptography"
|
name = "cryptography"
|
||||||
version = "46.0.3"
|
version = "43.0.1"
|
||||||
description = "cryptography is a package which provides cryptographic recipes and primitives to Python developers."
|
description = "cryptography is a package which provides cryptographic recipes and primitives to Python developers."
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = "!=3.9.0,!=3.9.1,>=3.8"
|
python-versions = ">=3.7"
|
||||||
groups = ["main"]
|
|
||||||
files = [
|
files = [
|
||||||
{file = "cryptography-46.0.3-cp311-abi3-macosx_10_9_universal2.whl", hash = "sha256:109d4ddfadf17e8e7779c39f9b18111a09efb969a301a31e987416a0191ed93a"},
|
{file = "cryptography-43.0.1-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:8385d98f6a3bf8bb2d65a73e17ed87a3ba84f6991c155691c51112075f9ffc5d"},
|
||||||
{file = "cryptography-46.0.3-cp311-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:09859af8466b69bc3c27bdf4f5d84a665e0f7ab5088412e9e2ec49758eca5cbc"},
|
{file = "cryptography-43.0.1-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:27e613d7077ac613e399270253259d9d53872aaf657471473ebfc9a52935c062"},
|
||||||
{file = "cryptography-46.0.3-cp311-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:01ca9ff2885f3acc98c29f1860552e37f6d7c7d013d7334ff2a9de43a449315d"},
|
{file = "cryptography-43.0.1-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:68aaecc4178e90719e95298515979814bda0cbada1256a4485414860bd7ab962"},
|
||||||
{file = "cryptography-46.0.3-cp311-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:6eae65d4c3d33da080cff9c4ab1f711b15c1d9760809dad6ea763f3812d254cb"},
|
{file = "cryptography-43.0.1-cp37-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:de41fd81a41e53267cb020bb3a7212861da53a7d39f863585d13ea11049cf277"},
|
||||||
{file = "cryptography-46.0.3-cp311-abi3-manylinux_2_28_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:e5bf0ed4490068a2e72ac03d786693adeb909981cc596425d09032d372bcc849"},
|
{file = "cryptography-43.0.1-cp37-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:f98bf604c82c416bc829e490c700ca1553eafdf2912a91e23a79d97d9801372a"},
|
||||||
{file = "cryptography-46.0.3-cp311-abi3-manylinux_2_28_ppc64le.whl", hash = "sha256:5ecfccd2329e37e9b7112a888e76d9feca2347f12f37918facbb893d7bb88ee8"},
|
{file = "cryptography-43.0.1-cp37-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:61ec41068b7b74268fa86e3e9e12b9f0c21fcf65434571dbb13d954bceb08042"},
|
||||||
{file = "cryptography-46.0.3-cp311-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:a2c0cd47381a3229c403062f764160d57d4d175e022c1df84e168c6251a22eec"},
|
{file = "cryptography-43.0.1-cp37-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:014f58110f53237ace6a408b5beb6c427b64e084eb451ef25a28308270086494"},
|
||||||
{file = "cryptography-46.0.3-cp311-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:549e234ff32571b1f4076ac269fcce7a808d3bf98b76c8dd560e42dbc66d7d91"},
|
{file = "cryptography-43.0.1-cp37-abi3-win32.whl", hash = "sha256:2bd51274dcd59f09dd952afb696bf9c61a7a49dfc764c04dd33ef7a6b502a1e2"},
|
||||||
{file = "cryptography-46.0.3-cp311-abi3-manylinux_2_34_ppc64le.whl", hash = "sha256:c0a7bb1a68a5d3471880e264621346c48665b3bf1c3759d682fc0864c540bd9e"},
|
{file = "cryptography-43.0.1-cp37-abi3-win_amd64.whl", hash = "sha256:666ae11966643886c2987b3b721899d250855718d6d9ce41b521252a17985f4d"},
|
||||||
{file = "cryptography-46.0.3-cp311-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:10b01676fc208c3e6feeb25a8b83d81767e8059e1fe86e1dc62d10a3018fa926"},
|
{file = "cryptography-43.0.1-cp39-abi3-macosx_10_9_universal2.whl", hash = "sha256:ac119bb76b9faa00f48128b7f5679e1d8d437365c5d26f1c2c3f0da4ce1b553d"},
|
||||||
{file = "cryptography-46.0.3-cp311-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:0abf1ffd6e57c67e92af68330d05760b7b7efb243aab8377e583284dbab72c71"},
|
{file = "cryptography-43.0.1-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1bbcce1a551e262dfbafb6e6252f1ae36a248e615ca44ba302df077a846a8806"},
|
||||||
{file = "cryptography-46.0.3-cp311-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:a04bee9ab6a4da801eb9b51f1b708a1b5b5c9eb48c03f74198464c66f0d344ac"},
|
{file = "cryptography-43.0.1-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:58d4e9129985185a06d849aa6df265bdd5a74ca6e1b736a77959b498e0505b85"},
|
||||||
{file = "cryptography-46.0.3-cp311-abi3-win32.whl", hash = "sha256:f260d0d41e9b4da1ed1e0f1ce571f97fe370b152ab18778e9e8f67d6af432018"},
|
{file = "cryptography-43.0.1-cp39-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:d03a475165f3134f773d1388aeb19c2d25ba88b6a9733c5c590b9ff7bbfa2e0c"},
|
||||||
{file = "cryptography-46.0.3-cp311-abi3-win_amd64.whl", hash = "sha256:a9a3008438615669153eb86b26b61e09993921ebdd75385ddd748702c5adfddb"},
|
{file = "cryptography-43.0.1-cp39-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:511f4273808ab590912a93ddb4e3914dfd8a388fed883361b02dea3791f292e1"},
|
||||||
{file = "cryptography-46.0.3-cp311-abi3-win_arm64.whl", hash = "sha256:5d7f93296ee28f68447397bf5198428c9aeeab45705a55d53a6343455dcb2c3c"},
|
{file = "cryptography-43.0.1-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:80eda8b3e173f0f247f711eef62be51b599b5d425c429b5d4ca6a05e9e856baa"},
|
||||||
{file = "cryptography-46.0.3-cp314-cp314t-macosx_10_9_universal2.whl", hash = "sha256:00a5e7e87938e5ff9ff5447ab086a5706a957137e6e433841e9d24f38a065217"},
|
{file = "cryptography-43.0.1-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:38926c50cff6f533f8a2dae3d7f19541432610d114a70808f0926d5aaa7121e4"},
|
||||||
{file = "cryptography-46.0.3-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:c8daeb2d2174beb4575b77482320303f3d39b8e81153da4f0fb08eb5fe86a6c5"},
|
{file = "cryptography-43.0.1-cp39-abi3-win32.whl", hash = "sha256:a575913fb06e05e6b4b814d7f7468c2c660e8bb16d8d5a1faf9b33ccc569dd47"},
|
||||||
{file = "cryptography-46.0.3-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:39b6755623145ad5eff1dab323f4eae2a32a77a7abef2c5089a04a3d04366715"},
|
{file = "cryptography-43.0.1-cp39-abi3-win_amd64.whl", hash = "sha256:d75601ad10b059ec832e78823b348bfa1a59f6b8d545db3a24fd44362a1564cb"},
|
||||||
{file = "cryptography-46.0.3-cp314-cp314t-manylinux_2_28_aarch64.whl", hash = "sha256:db391fa7c66df6762ee3f00c95a89e6d428f4d60e7abc8328f4fe155b5ac6e54"},
|
{file = "cryptography-43.0.1-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:ea25acb556320250756e53f9e20a4177515f012c9eaea17eb7587a8c4d8ae034"},
|
||||||
{file = "cryptography-46.0.3-cp314-cp314t-manylinux_2_28_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:78a97cf6a8839a48c49271cdcbd5cf37ca2c1d6b7fdd86cc864f302b5e9bf459"},
|
{file = "cryptography-43.0.1-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:c1332724be35d23a854994ff0b66530119500b6053d0bd3363265f7e5e77288d"},
|
||||||
{file = "cryptography-46.0.3-cp314-cp314t-manylinux_2_28_ppc64le.whl", hash = "sha256:dfb781ff7eaa91a6f7fd41776ec37c5853c795d3b358d4896fdbb5df168af422"},
|
{file = "cryptography-43.0.1-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:fba1007b3ef89946dbbb515aeeb41e30203b004f0b4b00e5e16078b518563289"},
|
||||||
{file = "cryptography-46.0.3-cp314-cp314t-manylinux_2_28_x86_64.whl", hash = "sha256:6f61efb26e76c45c4a227835ddeae96d83624fb0d29eb5df5b96e14ed1a0afb7"},
|
{file = "cryptography-43.0.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:5b43d1ea6b378b54a1dc99dd8a2b5be47658fe9a7ce0a58ff0b55f4b43ef2b84"},
|
||||||
{file = "cryptography-46.0.3-cp314-cp314t-manylinux_2_34_aarch64.whl", hash = "sha256:23b1a8f26e43f47ceb6d6a43115f33a5a37d57df4ea0ca295b780ae8546e8044"},
|
{file = "cryptography-43.0.1-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:88cce104c36870d70c49c7c8fd22885875d950d9ee6ab54df2745f83ba0dc365"},
|
||||||
{file = "cryptography-46.0.3-cp314-cp314t-manylinux_2_34_ppc64le.whl", hash = "sha256:b419ae593c86b87014b9be7396b385491ad7f320bde96826d0dd174459e54665"},
|
{file = "cryptography-43.0.1-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:9d3cdb25fa98afdd3d0892d132b8d7139e2c087da1712041f6b762e4f807cc96"},
|
||||||
{file = "cryptography-46.0.3-cp314-cp314t-manylinux_2_34_x86_64.whl", hash = "sha256:50fc3343ac490c6b08c0cf0d704e881d0d660be923fd3076db3e932007e726e3"},
|
{file = "cryptography-43.0.1-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:e710bf40870f4db63c3d7d929aa9e09e4e7ee219e703f949ec4073b4294f6172"},
|
||||||
{file = "cryptography-46.0.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:22d7e97932f511d6b0b04f2bfd818d73dcd5928db509460aaf48384778eb6d20"},
|
{file = "cryptography-43.0.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:7c05650fe8023c5ed0d46793d4b7d7e6cd9c04e68eabe5b0aeea836e37bdcec2"},
|
||||||
{file = "cryptography-46.0.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:d55f3dffadd674514ad19451161118fd010988540cee43d8bc20675e775925de"},
|
{file = "cryptography-43.0.1.tar.gz", hash = "sha256:203e92a75716d8cfb491dc47c79e17d0d9207ccffcbcb35f598fbe463ae3444d"},
|
||||||
{file = "cryptography-46.0.3-cp314-cp314t-win32.whl", hash = "sha256:8a6e050cb6164d3f830453754094c086ff2d0b2f3a897a1d9820f6139a1f0914"},
|
|
||||||
{file = "cryptography-46.0.3-cp314-cp314t-win_amd64.whl", hash = "sha256:760f83faa07f8b64e9c33fc963d790a2edb24efb479e3520c14a45741cd9b2db"},
|
|
||||||
{file = "cryptography-46.0.3-cp314-cp314t-win_arm64.whl", hash = "sha256:516ea134e703e9fe26bcd1277a4b59ad30586ea90c365a87781d7887a646fe21"},
|
|
||||||
{file = "cryptography-46.0.3-cp38-abi3-macosx_10_9_universal2.whl", hash = "sha256:cb3d760a6117f621261d662bccc8ef5bc32ca673e037c83fbe565324f5c46936"},
|
|
||||||
{file = "cryptography-46.0.3-cp38-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:4b7387121ac7d15e550f5cb4a43aef2559ed759c35df7336c402bb8275ac9683"},
|
|
||||||
{file = "cryptography-46.0.3-cp38-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:15ab9b093e8f09daab0f2159bb7e47532596075139dd74365da52ecc9cb46c5d"},
|
|
||||||
{file = "cryptography-46.0.3-cp38-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:46acf53b40ea38f9c6c229599a4a13f0d46a6c3fa9ef19fc1a124d62e338dfa0"},
|
|
||||||
{file = "cryptography-46.0.3-cp38-abi3-manylinux_2_28_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:10ca84c4668d066a9878890047f03546f3ae0a6b8b39b697457b7757aaf18dbc"},
|
|
||||||
{file = "cryptography-46.0.3-cp38-abi3-manylinux_2_28_ppc64le.whl", hash = "sha256:36e627112085bb3b81b19fed209c05ce2a52ee8b15d161b7c643a7d5a88491f3"},
|
|
||||||
{file = "cryptography-46.0.3-cp38-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:1000713389b75c449a6e979ffc7dcc8ac90b437048766cef052d4d30b8220971"},
|
|
||||||
{file = "cryptography-46.0.3-cp38-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:b02cf04496f6576afffef5ddd04a0cb7d49cf6be16a9059d793a30b035f6b6ac"},
|
|
||||||
{file = "cryptography-46.0.3-cp38-abi3-manylinux_2_34_ppc64le.whl", hash = "sha256:71e842ec9bc7abf543b47cf86b9a743baa95f4677d22baa4c7d5c69e49e9bc04"},
|
|
||||||
{file = "cryptography-46.0.3-cp38-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:402b58fc32614f00980b66d6e56a5b4118e6cb362ae8f3fda141ba4689bd4506"},
|
|
||||||
{file = "cryptography-46.0.3-cp38-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:ef639cb3372f69ec44915fafcd6698b6cc78fbe0c2ea41be867f6ed612811963"},
|
|
||||||
{file = "cryptography-46.0.3-cp38-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:3b51b8ca4f1c6453d8829e1eb7299499ca7f313900dd4d89a24b8b87c0a780d4"},
|
|
||||||
{file = "cryptography-46.0.3-cp38-abi3-win32.whl", hash = "sha256:6276eb85ef938dc035d59b87c8a7dc559a232f954962520137529d77b18ff1df"},
|
|
||||||
{file = "cryptography-46.0.3-cp38-abi3-win_amd64.whl", hash = "sha256:416260257577718c05135c55958b674000baef9a1c7d9e8f306ec60d71db850f"},
|
|
||||||
{file = "cryptography-46.0.3-cp38-abi3-win_arm64.whl", hash = "sha256:d89c3468de4cdc4f08a57e214384d0471911a3830fcdaf7a8cc587e42a866372"},
|
|
||||||
{file = "cryptography-46.0.3-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:a23582810fedb8c0bc47524558fb6c56aac3fc252cb306072fd2815da2a47c32"},
|
|
||||||
{file = "cryptography-46.0.3-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:e7aec276d68421f9574040c26e2a7c3771060bc0cff408bae1dcb19d3ab1e63c"},
|
|
||||||
{file = "cryptography-46.0.3-pp311-pypy311_pp73-macosx_10_9_x86_64.whl", hash = "sha256:7ce938a99998ed3c8aa7e7272dca1a610401ede816d36d0693907d863b10d9ea"},
|
|
||||||
{file = "cryptography-46.0.3-pp311-pypy311_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:191bb60a7be5e6f54e30ba16fdfae78ad3a342a0599eb4193ba88e3f3d6e185b"},
|
|
||||||
{file = "cryptography-46.0.3-pp311-pypy311_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:c70cc23f12726be8f8bc72e41d5065d77e4515efae3690326764ea1b07845cfb"},
|
|
||||||
{file = "cryptography-46.0.3-pp311-pypy311_pp73-manylinux_2_34_aarch64.whl", hash = "sha256:9394673a9f4de09e28b5356e7fff97d778f8abad85c9d5ac4a4b7e25a0de7717"},
|
|
||||||
{file = "cryptography-46.0.3-pp311-pypy311_pp73-manylinux_2_34_x86_64.whl", hash = "sha256:94cd0549accc38d1494e1f8de71eca837d0509d0d44bf11d158524b0e12cebf9"},
|
|
||||||
{file = "cryptography-46.0.3-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:6b5063083824e5509fdba180721d55909ffacccc8adbec85268b48439423d78c"},
|
|
||||||
{file = "cryptography-46.0.3.tar.gz", hash = "sha256:a8b17438104fed022ce745b362294d9ce35b4c2e45c1d958ad4a4b019285f4a1"},
|
|
||||||
]
|
]
|
||||||
|
|
||||||
[package.dependencies]
|
[package.dependencies]
|
||||||
cffi = {version = ">=2.0.0", markers = "python_full_version >= \"3.9.0\" and platform_python_implementation != \"PyPy\""}
|
cffi = {version = ">=1.12", markers = "platform_python_implementation != \"PyPy\""}
|
||||||
|
|
||||||
[package.extras]
|
[package.extras]
|
||||||
docs = ["sphinx (>=5.3.0)", "sphinx-inline-tabs", "sphinx-rtd-theme (>=3.0.0)"]
|
docs = ["sphinx (>=5.3.0)", "sphinx-rtd-theme (>=1.1.1)"]
|
||||||
docstest = ["pyenchant (>=3)", "readme-renderer (>=30.0)", "sphinxcontrib-spelling (>=7.3.1)"]
|
docstest = ["pyenchant (>=1.6.11)", "readme-renderer", "sphinxcontrib-spelling (>=4.0.1)"]
|
||||||
nox = ["nox[uv] (>=2024.4.15)"]
|
nox = ["nox"]
|
||||||
pep8test = ["check-sdist", "click (>=8.0.1)", "mypy (>=1.14)", "ruff (>=0.11.11)"]
|
pep8test = ["check-sdist", "click", "mypy", "ruff"]
|
||||||
sdist = ["build (>=1.0.0)"]
|
sdist = ["build"]
|
||||||
ssh = ["bcrypt (>=3.1.5)"]
|
ssh = ["bcrypt (>=3.1.5)"]
|
||||||
test = ["certifi (>=2024)", "cryptography-vectors (==46.0.3)", "pretend (>=0.7)", "pytest (>=7.4.0)", "pytest-benchmark (>=4.0)", "pytest-cov (>=2.10.1)", "pytest-xdist (>=3.5.0)"]
|
test = ["certifi", "cryptography-vectors (==43.0.1)", "pretend", "pytest (>=6.2.0)", "pytest-benchmark", "pytest-cov", "pytest-xdist"]
|
||||||
test-randomorder = ["pytest-randomly"]
|
test-randomorder = ["pytest-randomly"]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@@ -247,7 +203,6 @@ version = "0.7.1"
|
|||||||
description = "Library for building Grafana dashboards"
|
description = "Library for building Grafana dashboards"
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = "*"
|
python-versions = "*"
|
||||||
groups = ["dev"]
|
|
||||||
files = [
|
files = [
|
||||||
{file = "grafanalib-0.7.1-py3-none-any.whl", hash = "sha256:6fab5d7b837a1f2d1322ef762cd52e565ec0422707a7512765c59f668bdceb58"},
|
{file = "grafanalib-0.7.1-py3-none-any.whl", hash = "sha256:6fab5d7b837a1f2d1322ef762cd52e565ec0422707a7512765c59f668bdceb58"},
|
||||||
{file = "grafanalib-0.7.1.tar.gz", hash = "sha256:3d92bb4e92ae78fe4e21c5b252ab51f4fdcacd8523ba5a44545b897b2a375b83"},
|
{file = "grafanalib-0.7.1.tar.gz", hash = "sha256:3d92bb4e92ae78fe4e21c5b252ab51f4fdcacd8523ba5a44545b897b2a375b83"},
|
||||||
@@ -261,14 +216,13 @@ dev = ["flake8", "pytest"]
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "jinja2"
|
name = "jinja2"
|
||||||
version = "3.1.6"
|
version = "3.1.4"
|
||||||
description = "A very fast and expressive template engine."
|
description = "A very fast and expressive template engine."
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = ">=3.7"
|
python-versions = ">=3.7"
|
||||||
groups = ["main"]
|
|
||||||
files = [
|
files = [
|
||||||
{file = "jinja2-3.1.6-py3-none-any.whl", hash = "sha256:85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67"},
|
{file = "jinja2-3.1.4-py3-none-any.whl", hash = "sha256:bc5dd2abb727a5319567b7a813e6a2e7318c39f4f487cfe6c89c6f9c7d25197d"},
|
||||||
{file = "jinja2-3.1.6.tar.gz", hash = "sha256:0137fb05990d35f1275a587e9aee6d56da821fc83491a0fb838183be43f66d6d"},
|
{file = "jinja2-3.1.4.tar.gz", hash = "sha256:4a3aee7acbbe7303aede8e9648d13b8bf88a429282aa6122a993f0ac800cb369"},
|
||||||
]
|
]
|
||||||
|
|
||||||
[package.dependencies]
|
[package.dependencies]
|
||||||
@@ -279,101 +233,72 @@ i18n = ["Babel (>=2.7)"]
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "markupsafe"
|
name = "markupsafe"
|
||||||
version = "3.0.3"
|
version = "3.0.1"
|
||||||
description = "Safely add untrusted strings to HTML/XML markup."
|
description = "Safely add untrusted strings to HTML/XML markup."
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = ">=3.9"
|
python-versions = ">=3.9"
|
||||||
groups = ["main"]
|
|
||||||
files = [
|
files = [
|
||||||
{file = "markupsafe-3.0.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:2f981d352f04553a7171b8e44369f2af4055f888dfb147d55e42d29e29e74559"},
|
{file = "MarkupSafe-3.0.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:db842712984e91707437461930e6011e60b39136c7331e971952bb30465bc1a1"},
|
||||||
{file = "markupsafe-3.0.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e1c1493fb6e50ab01d20a22826e57520f1284df32f2d8601fdd90b6304601419"},
|
{file = "MarkupSafe-3.0.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:3ffb4a8e7d46ed96ae48805746755fadd0909fea2306f93d5d8233ba23dda12a"},
|
||||||
{file = "markupsafe-3.0.3-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1ba88449deb3de88bd40044603fafffb7bc2b055d626a330323a9ed736661695"},
|
{file = "MarkupSafe-3.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:67c519635a4f64e495c50e3107d9b4075aec33634272b5db1cde839e07367589"},
|
||||||
{file = "markupsafe-3.0.3-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f42d0984e947b8adf7dd6dde396e720934d12c506ce84eea8476409563607591"},
|
{file = "MarkupSafe-3.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:48488d999ed50ba8d38c581d67e496f955821dc183883550a6fbc7f1aefdc170"},
|
||||||
{file = "markupsafe-3.0.3-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:c0c0b3ade1c0b13b936d7970b1d37a57acde9199dc2aecc4c336773e1d86049c"},
|
{file = "MarkupSafe-3.0.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f31ae06f1328595d762c9a2bf29dafd8621c7d3adc130cbb46278079758779ca"},
|
||||||
{file = "markupsafe-3.0.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:0303439a41979d9e74d18ff5e2dd8c43ed6c6001fd40e5bf2e43f7bd9bbc523f"},
|
{file = "MarkupSafe-3.0.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:80fcbf3add8790caddfab6764bde258b5d09aefbe9169c183f88a7410f0f6dea"},
|
||||||
{file = "markupsafe-3.0.3-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:d2ee202e79d8ed691ceebae8e0486bd9a2cd4794cec4824e1c99b6f5009502f6"},
|
{file = "MarkupSafe-3.0.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:3341c043c37d78cc5ae6e3e305e988532b072329639007fd408a476642a89fd6"},
|
||||||
{file = "markupsafe-3.0.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:177b5253b2834fe3678cb4a5f0059808258584c559193998be2601324fdeafb1"},
|
{file = "MarkupSafe-3.0.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:cb53e2a99df28eee3b5f4fea166020d3ef9116fdc5764bc5117486e6d1211b25"},
|
||||||
{file = "markupsafe-3.0.3-cp310-cp310-win32.whl", hash = "sha256:2a15a08b17dd94c53a1da0438822d70ebcd13f8c3a95abe3a9ef9f11a94830aa"},
|
{file = "MarkupSafe-3.0.1-cp310-cp310-win32.whl", hash = "sha256:db15ce28e1e127a0013dfb8ac243a8e392db8c61eae113337536edb28bdc1f97"},
|
||||||
{file = "markupsafe-3.0.3-cp310-cp310-win_amd64.whl", hash = "sha256:c4ffb7ebf07cfe8931028e3e4c85f0357459a3f9f9490886198848f4fa002ec8"},
|
{file = "MarkupSafe-3.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:4ffaaac913c3f7345579db4f33b0020db693f302ca5137f106060316761beea9"},
|
||||||
{file = "markupsafe-3.0.3-cp310-cp310-win_arm64.whl", hash = "sha256:e2103a929dfa2fcaf9bb4e7c091983a49c9ac3b19c9061b6d5427dd7d14d81a1"},
|
{file = "MarkupSafe-3.0.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:26627785a54a947f6d7336ce5963569b5d75614619e75193bdb4e06e21d447ad"},
|
||||||
{file = "markupsafe-3.0.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:1cc7ea17a6824959616c525620e387f6dd30fec8cb44f649e31712db02123dad"},
|
{file = "MarkupSafe-3.0.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:b954093679d5750495725ea6f88409946d69cfb25ea7b4c846eef5044194f583"},
|
||||||
{file = "markupsafe-3.0.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4bd4cd07944443f5a265608cc6aab442e4f74dff8088b0dfc8238647b8f6ae9a"},
|
{file = "MarkupSafe-3.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:973a371a55ce9ed333a3a0f8e0bcfae9e0d637711534bcb11e130af2ab9334e7"},
|
||||||
{file = "markupsafe-3.0.3-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6b5420a1d9450023228968e7e6a9ce57f65d148ab56d2313fcd589eee96a7a50"},
|
{file = "MarkupSafe-3.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:244dbe463d5fb6d7ce161301a03a6fe744dac9072328ba9fc82289238582697b"},
|
||||||
{file = "markupsafe-3.0.3-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0bf2a864d67e76e5c9a34dc26ec616a66b9888e25e7b9460e1c76d3293bd9dbf"},
|
{file = "MarkupSafe-3.0.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d98e66a24497637dd31ccab090b34392dddb1f2f811c4b4cd80c230205c074a3"},
|
||||||
{file = "markupsafe-3.0.3-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:bc51efed119bc9cfdf792cdeaa4d67e8f6fcccab66ed4bfdd6bde3e59bfcbb2f"},
|
{file = "MarkupSafe-3.0.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:ad91738f14eb8da0ff82f2acd0098b6257621410dcbd4df20aaa5b4233d75a50"},
|
||||||
{file = "markupsafe-3.0.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:068f375c472b3e7acbe2d5318dea141359e6900156b5b2ba06a30b169086b91a"},
|
{file = "MarkupSafe-3.0.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:7044312a928a66a4c2a22644147bc61a199c1709712069a344a3fb5cfcf16915"},
|
||||||
{file = "markupsafe-3.0.3-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:7be7b61bb172e1ed687f1754f8e7484f1c8019780f6f6b0786e76bb01c2ae115"},
|
{file = "MarkupSafe-3.0.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:a4792d3b3a6dfafefdf8e937f14906a51bd27025a36f4b188728a73382231d91"},
|
||||||
{file = "markupsafe-3.0.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:f9e130248f4462aaa8e2552d547f36ddadbeaa573879158d721bbd33dfe4743a"},
|
{file = "MarkupSafe-3.0.1-cp311-cp311-win32.whl", hash = "sha256:fa7d686ed9883f3d664d39d5a8e74d3c5f63e603c2e3ff0abcba23eac6542635"},
|
||||||
{file = "markupsafe-3.0.3-cp311-cp311-win32.whl", hash = "sha256:0db14f5dafddbb6d9208827849fad01f1a2609380add406671a26386cdf15a19"},
|
{file = "MarkupSafe-3.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:9ba25a71ebf05b9bb0e2ae99f8bc08a07ee8e98c612175087112656ca0f5c8bf"},
|
||||||
{file = "markupsafe-3.0.3-cp311-cp311-win_amd64.whl", hash = "sha256:de8a88e63464af587c950061a5e6a67d3632e36df62b986892331d4620a35c01"},
|
{file = "MarkupSafe-3.0.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:8ae369e84466aa70f3154ee23c1451fda10a8ee1b63923ce76667e3077f2b0c4"},
|
||||||
{file = "markupsafe-3.0.3-cp311-cp311-win_arm64.whl", hash = "sha256:3b562dd9e9ea93f13d53989d23a7e775fdfd1066c33494ff43f5418bc8c58a5c"},
|
{file = "MarkupSafe-3.0.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:40f1e10d51c92859765522cbd79c5c8989f40f0419614bcdc5015e7b6bf97fc5"},
|
||||||
{file = "markupsafe-3.0.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:d53197da72cc091b024dd97249dfc7794d6a56530370992a5e1a08983ad9230e"},
|
{file = "MarkupSafe-3.0.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5a4cb365cb49b750bdb60b846b0c0bc49ed62e59a76635095a179d440540c346"},
|
||||||
{file = "markupsafe-3.0.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:1872df69a4de6aead3491198eaf13810b565bdbeec3ae2dc8780f14458ec73ce"},
|
{file = "MarkupSafe-3.0.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ee3941769bd2522fe39222206f6dd97ae83c442a94c90f2b7a25d847d40f4729"},
|
||||||
{file = "markupsafe-3.0.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3a7e8ae81ae39e62a41ec302f972ba6ae23a5c5396c8e60113e9066ef893da0d"},
|
{file = "MarkupSafe-3.0.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:62fada2c942702ef8952754abfc1a9f7658a4d5460fabe95ac7ec2cbe0d02abc"},
|
||||||
{file = "markupsafe-3.0.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d6dd0be5b5b189d31db7cda48b91d7e0a9795f31430b7f271219ab30f1d3ac9d"},
|
{file = "MarkupSafe-3.0.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:4c2d64fdba74ad16138300815cfdc6ab2f4647e23ced81f59e940d7d4a1469d9"},
|
||||||
{file = "markupsafe-3.0.3-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:94c6f0bb423f739146aec64595853541634bde58b2135f27f61c1ffd1cd4d16a"},
|
{file = "MarkupSafe-3.0.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:fb532dd9900381d2e8f48172ddc5a59db4c445a11b9fab40b3b786da40d3b56b"},
|
||||||
{file = "markupsafe-3.0.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:be8813b57049a7dc738189df53d69395eba14fb99345e0a5994914a3864c8a4b"},
|
{file = "MarkupSafe-3.0.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:0f84af7e813784feb4d5e4ff7db633aba6c8ca64a833f61d8e4eade234ef0c38"},
|
||||||
{file = "markupsafe-3.0.3-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:83891d0e9fb81a825d9a6d61e3f07550ca70a076484292a70fde82c4b807286f"},
|
{file = "MarkupSafe-3.0.1-cp312-cp312-win32.whl", hash = "sha256:cbf445eb5628981a80f54087f9acdbf84f9b7d862756110d172993b9a5ae81aa"},
|
||||||
{file = "markupsafe-3.0.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:77f0643abe7495da77fb436f50f8dab76dbc6e5fd25d39589a0f1fe6548bfa2b"},
|
{file = "MarkupSafe-3.0.1-cp312-cp312-win_amd64.whl", hash = "sha256:a10860e00ded1dd0a65b83e717af28845bb7bd16d8ace40fe5531491de76b79f"},
|
||||||
{file = "markupsafe-3.0.3-cp312-cp312-win32.whl", hash = "sha256:d88b440e37a16e651bda4c7c2b930eb586fd15ca7406cb39e211fcff3bf3017d"},
|
{file = "MarkupSafe-3.0.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:e81c52638315ff4ac1b533d427f50bc0afc746deb949210bc85f05d4f15fd772"},
|
||||||
{file = "markupsafe-3.0.3-cp312-cp312-win_amd64.whl", hash = "sha256:26a5784ded40c9e318cfc2bdb30fe164bdb8665ded9cd64d500a34fb42067b1c"},
|
{file = "MarkupSafe-3.0.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:312387403cd40699ab91d50735ea7a507b788091c416dd007eac54434aee51da"},
|
||||||
{file = "markupsafe-3.0.3-cp312-cp312-win_arm64.whl", hash = "sha256:35add3b638a5d900e807944a078b51922212fb3dedb01633a8defc4b01a3c85f"},
|
{file = "MarkupSafe-3.0.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2ae99f31f47d849758a687102afdd05bd3d3ff7dbab0a8f1587981b58a76152a"},
|
||||||
{file = "markupsafe-3.0.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:e1cf1972137e83c5d4c136c43ced9ac51d0e124706ee1c8aa8532c1287fa8795"},
|
{file = "MarkupSafe-3.0.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c97ff7fedf56d86bae92fa0a646ce1a0ec7509a7578e1ed238731ba13aabcd1c"},
|
||||||
{file = "markupsafe-3.0.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:116bb52f642a37c115f517494ea5feb03889e04df47eeff5b130b1808ce7c219"},
|
{file = "MarkupSafe-3.0.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a7420ceda262dbb4b8d839a4ec63d61c261e4e77677ed7c66c99f4e7cb5030dd"},
|
||||||
{file = "markupsafe-3.0.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:133a43e73a802c5562be9bbcd03d090aa5a1fe899db609c29e8c8d815c5f6de6"},
|
{file = "MarkupSafe-3.0.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:45d42d132cff577c92bfba536aefcfea7e26efb975bd455db4e6602f5c9f45e7"},
|
||||||
{file = "markupsafe-3.0.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ccfcd093f13f0f0b7fdd0f198b90053bf7b2f02a3927a30e63f3ccc9df56b676"},
|
{file = "MarkupSafe-3.0.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:4c8817557d0de9349109acb38b9dd570b03cc5014e8aabf1cbddc6e81005becd"},
|
||||||
{file = "markupsafe-3.0.3-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:509fa21c6deb7a7a273d629cf5ec029bc209d1a51178615ddf718f5918992ab9"},
|
{file = "MarkupSafe-3.0.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:6a54c43d3ec4cf2a39f4387ad044221c66a376e58c0d0e971d47c475ba79c6b5"},
|
||||||
{file = "markupsafe-3.0.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a4afe79fb3de0b7097d81da19090f4df4f8d3a2b3adaa8764138aac2e44f3af1"},
|
{file = "MarkupSafe-3.0.1-cp313-cp313-win32.whl", hash = "sha256:c91b394f7601438ff79a4b93d16be92f216adb57d813a78be4446fe0f6bc2d8c"},
|
||||||
{file = "markupsafe-3.0.3-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:795e7751525cae078558e679d646ae45574b47ed6e7771863fcc079a6171a0fc"},
|
{file = "MarkupSafe-3.0.1-cp313-cp313-win_amd64.whl", hash = "sha256:fe32482b37b4b00c7a52a07211b479653b7fe4f22b2e481b9a9b099d8a430f2f"},
|
||||||
{file = "markupsafe-3.0.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:8485f406a96febb5140bfeca44a73e3ce5116b2501ac54fe953e488fb1d03b12"},
|
{file = "MarkupSafe-3.0.1-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:17b2aea42a7280db02ac644db1d634ad47dcc96faf38ab304fe26ba2680d359a"},
|
||||||
{file = "markupsafe-3.0.3-cp313-cp313-win32.whl", hash = "sha256:bdd37121970bfd8be76c5fb069c7751683bdf373db1ed6c010162b2a130248ed"},
|
{file = "MarkupSafe-3.0.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:852dc840f6d7c985603e60b5deaae1d89c56cb038b577f6b5b8c808c97580f1d"},
|
||||||
{file = "markupsafe-3.0.3-cp313-cp313-win_amd64.whl", hash = "sha256:9a1abfdc021a164803f4d485104931fb8f8c1efd55bc6b748d2f5774e78b62c5"},
|
{file = "MarkupSafe-3.0.1-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0778de17cff1acaeccc3ff30cd99a3fd5c50fc58ad3d6c0e0c4c58092b859396"},
|
||||||
{file = "markupsafe-3.0.3-cp313-cp313-win_arm64.whl", hash = "sha256:7e68f88e5b8799aa49c85cd116c932a1ac15caaa3f5db09087854d218359e485"},
|
{file = "MarkupSafe-3.0.1-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:800100d45176652ded796134277ecb13640c1a537cad3b8b53da45aa96330453"},
|
||||||
{file = "markupsafe-3.0.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:218551f6df4868a8d527e3062d0fb968682fe92054e89978594c28e642c43a73"},
|
{file = "MarkupSafe-3.0.1-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d06b24c686a34c86c8c1fba923181eae6b10565e4d80bdd7bc1c8e2f11247aa4"},
|
||||||
{file = "markupsafe-3.0.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:3524b778fe5cfb3452a09d31e7b5adefeea8c5be1d43c4f810ba09f2ceb29d37"},
|
{file = "MarkupSafe-3.0.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:33d1c36b90e570ba7785dacd1faaf091203d9942bc036118fab8110a401eb1a8"},
|
||||||
{file = "markupsafe-3.0.3-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4e885a3d1efa2eadc93c894a21770e4bc67899e3543680313b09f139e149ab19"},
|
{file = "MarkupSafe-3.0.1-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:beeebf760a9c1f4c07ef6a53465e8cfa776ea6a2021eda0d0417ec41043fe984"},
|
||||||
{file = "markupsafe-3.0.3-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8709b08f4a89aa7586de0aadc8da56180242ee0ada3999749b183aa23df95025"},
|
{file = "MarkupSafe-3.0.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:bbde71a705f8e9e4c3e9e33db69341d040c827c7afa6789b14c6e16776074f5a"},
|
||||||
{file = "markupsafe-3.0.3-cp313-cp313t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:b8512a91625c9b3da6f127803b166b629725e68af71f8184ae7e7d54686a56d6"},
|
{file = "MarkupSafe-3.0.1-cp313-cp313t-win32.whl", hash = "sha256:82b5dba6eb1bcc29cc305a18a3c5365d2af06ee71b123216416f7e20d2a84e5b"},
|
||||||
{file = "markupsafe-3.0.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:9b79b7a16f7fedff2495d684f2b59b0457c3b493778c9eed31111be64d58279f"},
|
{file = "MarkupSafe-3.0.1-cp313-cp313t-win_amd64.whl", hash = "sha256:730d86af59e0e43ce277bb83970530dd223bf7f2a838e086b50affa6ec5f9295"},
|
||||||
{file = "markupsafe-3.0.3-cp313-cp313t-musllinux_1_2_riscv64.whl", hash = "sha256:12c63dfb4a98206f045aa9563db46507995f7ef6d83b2f68eda65c307c6829eb"},
|
{file = "MarkupSafe-3.0.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:4935dd7883f1d50e2ffecca0aa33dc1946a94c8f3fdafb8df5c330e48f71b132"},
|
||||||
{file = "markupsafe-3.0.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:8f71bc33915be5186016f675cd83a1e08523649b0e33efdb898db577ef5bb009"},
|
{file = "MarkupSafe-3.0.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e9393357f19954248b00bed7c56f29a25c930593a77630c719653d51e7669c2a"},
|
||||||
{file = "markupsafe-3.0.3-cp313-cp313t-win32.whl", hash = "sha256:69c0b73548bc525c8cb9a251cddf1931d1db4d2258e9599c28c07ef3580ef354"},
|
{file = "MarkupSafe-3.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:40621d60d0e58aa573b68ac5e2d6b20d44392878e0bfc159012a5787c4e35bc8"},
|
||||||
{file = "markupsafe-3.0.3-cp313-cp313t-win_amd64.whl", hash = "sha256:1b4b79e8ebf6b55351f0d91fe80f893b4743f104bff22e90697db1590e47a218"},
|
{file = "MarkupSafe-3.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f94190df587738280d544971500b9cafc9b950d32efcb1fba9ac10d84e6aa4e6"},
|
||||||
{file = "markupsafe-3.0.3-cp313-cp313t-win_arm64.whl", hash = "sha256:ad2cf8aa28b8c020ab2fc8287b0f823d0a7d8630784c31e9ee5edea20f406287"},
|
{file = "MarkupSafe-3.0.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b6a387d61fe41cdf7ea95b38e9af11cfb1a63499af2759444b99185c4ab33f5b"},
|
||||||
{file = "markupsafe-3.0.3-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:eaa9599de571d72e2daf60164784109f19978b327a3910d3e9de8c97b5b70cfe"},
|
{file = "MarkupSafe-3.0.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:8ad4ad1429cd4f315f32ef263c1342166695fad76c100c5d979c45d5570ed58b"},
|
||||||
{file = "markupsafe-3.0.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:c47a551199eb8eb2121d4f0f15ae0f923d31350ab9280078d1e5f12b249e0026"},
|
{file = "MarkupSafe-3.0.1-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:e24bfe89c6ac4c31792793ad9f861b8f6dc4546ac6dc8f1c9083c7c4f2b335cd"},
|
||||||
{file = "markupsafe-3.0.3-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f34c41761022dd093b4b6896d4810782ffbabe30f2d443ff5f083e0cbbb8c737"},
|
{file = "MarkupSafe-3.0.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:2a4b34a8d14649315c4bc26bbfa352663eb51d146e35eef231dd739d54a5430a"},
|
||||||
{file = "markupsafe-3.0.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:457a69a9577064c05a97c41f4e65148652db078a3a509039e64d3467b9e7ef97"},
|
{file = "MarkupSafe-3.0.1-cp39-cp39-win32.whl", hash = "sha256:242d6860f1fd9191aef5fae22b51c5c19767f93fb9ead4d21924e0bcb17619d8"},
|
||||||
{file = "markupsafe-3.0.3-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:e8afc3f2ccfa24215f8cb28dcf43f0113ac3c37c2f0f0806d8c70e4228c5cf4d"},
|
{file = "MarkupSafe-3.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:93e8248d650e7e9d49e8251f883eed60ecbc0e8ffd6349e18550925e31bd029b"},
|
||||||
{file = "markupsafe-3.0.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:ec15a59cf5af7be74194f7ab02d0f59a62bdcf1a537677ce67a2537c9b87fcda"},
|
{file = "markupsafe-3.0.1.tar.gz", hash = "sha256:3e683ee4f5d0fa2dde4db77ed8dd8a876686e3fc417655c2ece9a90576905344"},
|
||||||
{file = "markupsafe-3.0.3-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:0eb9ff8191e8498cca014656ae6b8d61f39da5f95b488805da4bb029cccbfbaf"},
|
|
||||||
{file = "markupsafe-3.0.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:2713baf880df847f2bece4230d4d094280f4e67b1e813eec43b4c0e144a34ffe"},
|
|
||||||
{file = "markupsafe-3.0.3-cp314-cp314-win32.whl", hash = "sha256:729586769a26dbceff69f7a7dbbf59ab6572b99d94576a5592625d5b411576b9"},
|
|
||||||
{file = "markupsafe-3.0.3-cp314-cp314-win_amd64.whl", hash = "sha256:bdc919ead48f234740ad807933cdf545180bfbe9342c2bb451556db2ed958581"},
|
|
||||||
{file = "markupsafe-3.0.3-cp314-cp314-win_arm64.whl", hash = "sha256:5a7d5dc5140555cf21a6fefbdbf8723f06fcd2f63ef108f2854de715e4422cb4"},
|
|
||||||
{file = "markupsafe-3.0.3-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:1353ef0c1b138e1907ae78e2f6c63ff67501122006b0f9abad68fda5f4ffc6ab"},
|
|
||||||
{file = "markupsafe-3.0.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:1085e7fbddd3be5f89cc898938f42c0b3c711fdcb37d75221de2666af647c175"},
|
|
||||||
{file = "markupsafe-3.0.3-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1b52b4fb9df4eb9ae465f8d0c228a00624de2334f216f178a995ccdcf82c4634"},
|
|
||||||
{file = "markupsafe-3.0.3-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:fed51ac40f757d41b7c48425901843666a6677e3e8eb0abcff09e4ba6e664f50"},
|
|
||||||
{file = "markupsafe-3.0.3-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:f190daf01f13c72eac4efd5c430a8de82489d9cff23c364c3ea822545032993e"},
|
|
||||||
{file = "markupsafe-3.0.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:e56b7d45a839a697b5eb268c82a71bd8c7f6c94d6fd50c3d577fa39a9f1409f5"},
|
|
||||||
{file = "markupsafe-3.0.3-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:f3e98bb3798ead92273dc0e5fd0f31ade220f59a266ffd8a4f6065e0a3ce0523"},
|
|
||||||
{file = "markupsafe-3.0.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:5678211cb9333a6468fb8d8be0305520aa073f50d17f089b5b4b477ea6e67fdc"},
|
|
||||||
{file = "markupsafe-3.0.3-cp314-cp314t-win32.whl", hash = "sha256:915c04ba3851909ce68ccc2b8e2cd691618c4dc4c4232fb7982bca3f41fd8c3d"},
|
|
||||||
{file = "markupsafe-3.0.3-cp314-cp314t-win_amd64.whl", hash = "sha256:4faffd047e07c38848ce017e8725090413cd80cbc23d86e55c587bf979e579c9"},
|
|
||||||
{file = "markupsafe-3.0.3-cp314-cp314t-win_arm64.whl", hash = "sha256:32001d6a8fc98c8cb5c947787c5d08b0a50663d139f1305bac5885d98d9b40fa"},
|
|
||||||
{file = "markupsafe-3.0.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:15d939a21d546304880945ca1ecb8a039db6b4dc49b2c5a400387cdae6a62e26"},
|
|
||||||
{file = "markupsafe-3.0.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:f71a396b3bf33ecaa1626c255855702aca4d3d9fea5e051b41ac59a9c1c41edc"},
|
|
||||||
{file = "markupsafe-3.0.3-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0f4b68347f8c5eab4a13419215bdfd7f8c9b19f2b25520968adfad23eb0ce60c"},
|
|
||||||
{file = "markupsafe-3.0.3-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e8fc20152abba6b83724d7ff268c249fa196d8259ff481f3b1476383f8f24e42"},
|
|
||||||
{file = "markupsafe-3.0.3-cp39-cp39-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:949b8d66bc381ee8b007cd945914c721d9aba8e27f71959d750a46f7c282b20b"},
|
|
||||||
{file = "markupsafe-3.0.3-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:3537e01efc9d4dccdf77221fb1cb3b8e1a38d5428920e0657ce299b20324d758"},
|
|
||||||
{file = "markupsafe-3.0.3-cp39-cp39-musllinux_1_2_riscv64.whl", hash = "sha256:591ae9f2a647529ca990bc681daebdd52c8791ff06c2bfa05b65163e28102ef2"},
|
|
||||||
{file = "markupsafe-3.0.3-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:a320721ab5a1aba0a233739394eb907f8c8da5c98c9181d1161e77a0c8e36f2d"},
|
|
||||||
{file = "markupsafe-3.0.3-cp39-cp39-win32.whl", hash = "sha256:df2449253ef108a379b8b5d6b43f4b1a8e81a061d6537becd5582fba5f9196d7"},
|
|
||||||
{file = "markupsafe-3.0.3-cp39-cp39-win_amd64.whl", hash = "sha256:7c3fb7d25180895632e5d3148dbdc29ea38ccb7fd210aa27acbd1201a1902c6e"},
|
|
||||||
{file = "markupsafe-3.0.3-cp39-cp39-win_arm64.whl", hash = "sha256:38664109c14ffc9e7437e86b4dceb442b0096dfe3541d7864d9cbe1da4cf36c8"},
|
|
||||||
{file = "markupsafe-3.0.3.tar.gz", hash = "sha256:722695808f4b6457b320fdc131280796bdceb04ab50fe1795cd540799ebe1698"},
|
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@@ -382,7 +307,6 @@ version = "1.3.0"
|
|||||||
description = "A network address manipulation library for Python"
|
description = "A network address manipulation library for Python"
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = ">=3.7"
|
python-versions = ">=3.7"
|
||||||
groups = ["main"]
|
|
||||||
files = [
|
files = [
|
||||||
{file = "netaddr-1.3.0-py3-none-any.whl", hash = "sha256:c2c6a8ebe5554ce33b7d5b3a306b71bbb373e000bbbf2350dd5213cc56e3dbbe"},
|
{file = "netaddr-1.3.0-py3-none-any.whl", hash = "sha256:c2c6a8ebe5554ce33b7d5b3a306b71bbb373e000bbbf2350dd5213cc56e3dbbe"},
|
||||||
{file = "netaddr-1.3.0.tar.gz", hash = "sha256:5c3c3d9895b551b763779ba7db7a03487dc1f8e3b385af819af341ae9ef6e48a"},
|
{file = "netaddr-1.3.0.tar.gz", hash = "sha256:5c3c3d9895b551b763779ba7db7a03487dc1f8e3b385af819af341ae9ef6e48a"},
|
||||||
@@ -393,130 +317,126 @@ nicer-shell = ["ipython"]
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "packaging"
|
name = "packaging"
|
||||||
version = "25.0"
|
version = "24.1"
|
||||||
description = "Core utilities for Python packages"
|
description = "Core utilities for Python packages"
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = ">=3.8"
|
python-versions = ">=3.8"
|
||||||
groups = ["main"]
|
|
||||||
files = [
|
files = [
|
||||||
{file = "packaging-25.0-py3-none-any.whl", hash = "sha256:29572ef2b1f17581046b3a2227d5c611fb25ec70ca1ba8554b24b0e69331a484"},
|
{file = "packaging-24.1-py3-none-any.whl", hash = "sha256:5b8f2217dbdbd2f7f384c41c628544e6d52f2d0f53c6d0c3ea61aa5d1d7ff124"},
|
||||||
{file = "packaging-25.0.tar.gz", hash = "sha256:d443872c98d677bf60f6a1f2f8c1cb748e8fe762d2bf9d3148b5599295b0fc4f"},
|
{file = "packaging-24.1.tar.gz", hash = "sha256:026ed72c8ed3fcce5bf8950572258698927fd1dbda10a5e981cdf0ac37f4f002"},
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "pycparser"
|
name = "pycparser"
|
||||||
version = "2.23"
|
version = "2.22"
|
||||||
description = "C parser in Python"
|
description = "C parser in Python"
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = ">=3.8"
|
python-versions = ">=3.8"
|
||||||
groups = ["main"]
|
|
||||||
markers = "platform_python_implementation != \"PyPy\" and implementation_name != \"PyPy\""
|
|
||||||
files = [
|
files = [
|
||||||
{file = "pycparser-2.23-py3-none-any.whl", hash = "sha256:e5c6e8d3fbad53479cab09ac03729e0a9faf2bee3db8208a550daf5af81a5934"},
|
{file = "pycparser-2.22-py3-none-any.whl", hash = "sha256:c3702b6d3dd8c7abc1afa565d7e63d53a1d0bd86cdc24edd75470f4de499cfcc"},
|
||||||
{file = "pycparser-2.23.tar.gz", hash = "sha256:78816d4f24add8f10a06d6f05b4d424ad9e96cfebf68a4ddc99c65c0720d00c2"},
|
{file = "pycparser-2.22.tar.gz", hash = "sha256:491c8be9c040f5390f5bf44a5b07752bd07f56edf992381b05c701439eec10f6"},
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "pyyaml"
|
name = "pyyaml"
|
||||||
version = "6.0.3"
|
version = "6.0.2"
|
||||||
description = "YAML parser and emitter for Python"
|
description = "YAML parser and emitter for Python"
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = ">=3.8"
|
python-versions = ">=3.8"
|
||||||
groups = ["main"]
|
|
||||||
files = [
|
files = [
|
||||||
{file = "PyYAML-6.0.3-cp38-cp38-macosx_10_13_x86_64.whl", hash = "sha256:c2514fceb77bc5e7a2f7adfaa1feb2fb311607c9cb518dbc378688ec73d8292f"},
|
{file = "PyYAML-6.0.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0a9a2848a5b7feac301353437eb7d5957887edbf81d56e903999a75a3d743086"},
|
||||||
{file = "PyYAML-6.0.3-cp38-cp38-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9c57bb8c96f6d1808c030b1687b9b5fb476abaa47f0db9c0101f5e9f394e97f4"},
|
{file = "PyYAML-6.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:29717114e51c84ddfba879543fb232a6ed60086602313ca38cce623c1d62cfbf"},
|
||||||
{file = "PyYAML-6.0.3-cp38-cp38-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:efd7b85f94a6f21e4932043973a7ba2613b059c4a000551892ac9f1d11f5baf3"},
|
{file = "PyYAML-6.0.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8824b5a04a04a047e72eea5cec3bc266db09e35de6bdfe34c9436ac5ee27d237"},
|
||||||
{file = "PyYAML-6.0.3-cp38-cp38-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:22ba7cfcad58ef3ecddc7ed1db3409af68d023b7f940da23c6c2a1890976eda6"},
|
{file = "PyYAML-6.0.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7c36280e6fb8385e520936c3cb3b8042851904eba0e58d277dca80a5cfed590b"},
|
||||||
{file = "PyYAML-6.0.3-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:6344df0d5755a2c9a276d4473ae6b90647e216ab4757f8426893b5dd2ac3f369"},
|
{file = "PyYAML-6.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ec031d5d2feb36d1d1a24380e4db6d43695f3748343d99434e6f5f9156aaa2ed"},
|
||||||
{file = "PyYAML-6.0.3-cp38-cp38-win32.whl", hash = "sha256:3ff07ec89bae51176c0549bc4c63aa6202991da2d9a6129d7aef7f1407d3f295"},
|
{file = "PyYAML-6.0.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:936d68689298c36b53b29f23c6dbb74de12b4ac12ca6cfe0e047bedceea56180"},
|
||||||
{file = "PyYAML-6.0.3-cp38-cp38-win_amd64.whl", hash = "sha256:5cf4e27da7e3fbed4d6c3d8e797387aaad68102272f8f9752883bc32d61cb87b"},
|
{file = "PyYAML-6.0.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:23502f431948090f597378482b4812b0caae32c22213aecf3b55325e049a6c68"},
|
||||||
{file = "pyyaml-6.0.3-cp310-cp310-macosx_10_13_x86_64.whl", hash = "sha256:214ed4befebe12df36bcc8bc2b64b396ca31be9304b8f59e25c11cf94a4c033b"},
|
{file = "PyYAML-6.0.2-cp310-cp310-win32.whl", hash = "sha256:2e99c6826ffa974fe6e27cdb5ed0021786b03fc98e5ee3c5bfe1fd5015f42b99"},
|
||||||
{file = "pyyaml-6.0.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:02ea2dfa234451bbb8772601d7b8e426c2bfa197136796224e50e35a78777956"},
|
{file = "PyYAML-6.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:a4d3091415f010369ae4ed1fc6b79def9416358877534caf6a0fdd2146c87a3e"},
|
||||||
{file = "pyyaml-6.0.3-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b30236e45cf30d2b8e7b3e85881719e98507abed1011bf463a8fa23e9c3e98a8"},
|
{file = "PyYAML-6.0.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:cc1c1159b3d456576af7a3e4d1ba7e6924cb39de8f67111c735f6fc832082774"},
|
||||||
{file = "pyyaml-6.0.3-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:66291b10affd76d76f54fad28e22e51719ef9ba22b29e1d7d03d6777a9174198"},
|
{file = "PyYAML-6.0.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:1e2120ef853f59c7419231f3bf4e7021f1b936f6ebd222406c3b60212205d2ee"},
|
||||||
{file = "pyyaml-6.0.3-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9c7708761fccb9397fe64bbc0395abcae8c4bf7b0eac081e12b809bf47700d0b"},
|
{file = "PyYAML-6.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5d225db5a45f21e78dd9358e58a98702a0302f2659a3c6cd320564b75b86f47c"},
|
||||||
{file = "pyyaml-6.0.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:418cf3f2111bc80e0933b2cd8cd04f286338bb88bdc7bc8e6dd775ebde60b5e0"},
|
{file = "PyYAML-6.0.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5ac9328ec4831237bec75defaf839f7d4564be1e6b25ac710bd1a96321cc8317"},
|
||||||
{file = "pyyaml-6.0.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:5e0b74767e5f8c593e8c9b5912019159ed0533c70051e9cce3e8b6aa699fcd69"},
|
{file = "PyYAML-6.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3ad2a3decf9aaba3d29c8f537ac4b243e36bef957511b4766cb0057d32b0be85"},
|
||||||
{file = "pyyaml-6.0.3-cp310-cp310-win32.whl", hash = "sha256:28c8d926f98f432f88adc23edf2e6d4921ac26fb084b028c733d01868d19007e"},
|
{file = "PyYAML-6.0.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:ff3824dc5261f50c9b0dfb3be22b4567a6f938ccce4587b38952d85fd9e9afe4"},
|
||||||
{file = "pyyaml-6.0.3-cp310-cp310-win_amd64.whl", hash = "sha256:bdb2c67c6c1390b63c6ff89f210c8fd09d9a1217a465701eac7316313c915e4c"},
|
{file = "PyYAML-6.0.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:797b4f722ffa07cc8d62053e4cff1486fa6dc094105d13fea7b1de7d8bf71c9e"},
|
||||||
{file = "pyyaml-6.0.3-cp311-cp311-macosx_10_13_x86_64.whl", hash = "sha256:44edc647873928551a01e7a563d7452ccdebee747728c1080d881d68af7b997e"},
|
{file = "PyYAML-6.0.2-cp311-cp311-win32.whl", hash = "sha256:11d8f3dd2b9c1207dcaf2ee0bbbfd5991f571186ec9cc78427ba5bd32afae4b5"},
|
||||||
{file = "pyyaml-6.0.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:652cb6edd41e718550aad172851962662ff2681490a8a711af6a4d288dd96824"},
|
{file = "PyYAML-6.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:e10ce637b18caea04431ce14fabcf5c64a1c61ec9c56b071a4b7ca131ca52d44"},
|
||||||
{file = "pyyaml-6.0.3-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:10892704fc220243f5305762e276552a0395f7beb4dbf9b14ec8fd43b57f126c"},
|
{file = "PyYAML-6.0.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:c70c95198c015b85feafc136515252a261a84561b7b1d51e3384e0655ddf25ab"},
|
||||||
{file = "pyyaml-6.0.3-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:850774a7879607d3a6f50d36d04f00ee69e7fc816450e5f7e58d7f17f1ae5c00"},
|
{file = "PyYAML-6.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ce826d6ef20b1bc864f0a68340c8b3287705cae2f8b4b1d932177dcc76721725"},
|
||||||
{file = "pyyaml-6.0.3-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b8bb0864c5a28024fac8a632c443c87c5aa6f215c0b126c449ae1a150412f31d"},
|
{file = "PyYAML-6.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1f71ea527786de97d1a0cc0eacd1defc0985dcf6b3f17bb77dcfc8c34bec4dc5"},
|
||||||
{file = "pyyaml-6.0.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:1d37d57ad971609cf3c53ba6a7e365e40660e3be0e5175fa9f2365a379d6095a"},
|
{file = "PyYAML-6.0.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9b22676e8097e9e22e36d6b7bda33190d0d400f345f23d4065d48f4ca7ae0425"},
|
||||||
{file = "pyyaml-6.0.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:37503bfbfc9d2c40b344d06b2199cf0e96e97957ab1c1b546fd4f87e53e5d3e4"},
|
{file = "PyYAML-6.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:80bab7bfc629882493af4aa31a4cfa43a4c57c83813253626916b8c7ada83476"},
|
||||||
{file = "pyyaml-6.0.3-cp311-cp311-win32.whl", hash = "sha256:8098f252adfa6c80ab48096053f512f2321f0b998f98150cea9bd23d83e1467b"},
|
{file = "PyYAML-6.0.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:0833f8694549e586547b576dcfaba4a6b55b9e96098b36cdc7ebefe667dfed48"},
|
||||||
{file = "pyyaml-6.0.3-cp311-cp311-win_amd64.whl", hash = "sha256:9f3bfb4965eb874431221a3ff3fdcddc7e74e3b07799e0e84ca4a0f867d449bf"},
|
{file = "PyYAML-6.0.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8b9c7197f7cb2738065c481a0461e50ad02f18c78cd75775628afb4d7137fb3b"},
|
||||||
{file = "pyyaml-6.0.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:7f047e29dcae44602496db43be01ad42fc6f1cc0d8cd6c83d342306c32270196"},
|
{file = "PyYAML-6.0.2-cp312-cp312-win32.whl", hash = "sha256:ef6107725bd54b262d6dedcc2af448a266975032bc85ef0172c5f059da6325b4"},
|
||||||
{file = "pyyaml-6.0.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:fc09d0aa354569bc501d4e787133afc08552722d3ab34836a80547331bb5d4a0"},
|
{file = "PyYAML-6.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:7e7401d0de89a9a855c839bc697c079a4af81cf878373abd7dc625847d25cbd8"},
|
||||||
{file = "pyyaml-6.0.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9149cad251584d5fb4981be1ecde53a1ca46c891a79788c0df828d2f166bda28"},
|
{file = "PyYAML-6.0.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:efdca5630322a10774e8e98e1af481aad470dd62c3170801852d752aa7a783ba"},
|
||||||
{file = "pyyaml-6.0.3-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:5fdec68f91a0c6739b380c83b951e2c72ac0197ace422360e6d5a959d8d97b2c"},
|
{file = "PyYAML-6.0.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:50187695423ffe49e2deacb8cd10510bc361faac997de9efef88badc3bb9e2d1"},
|
||||||
{file = "pyyaml-6.0.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ba1cc08a7ccde2d2ec775841541641e4548226580ab850948cbfda66a1befcdc"},
|
{file = "PyYAML-6.0.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0ffe8360bab4910ef1b9e87fb812d8bc0a308b0d0eef8c8f44e0254ab3b07133"},
|
||||||
{file = "pyyaml-6.0.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:8dc52c23056b9ddd46818a57b78404882310fb473d63f17b07d5c40421e47f8e"},
|
{file = "PyYAML-6.0.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:17e311b6c678207928d649faa7cb0d7b4c26a0ba73d41e99c4fff6b6c3276484"},
|
||||||
{file = "pyyaml-6.0.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:41715c910c881bc081f1e8872880d3c650acf13dfa8214bad49ed4cede7c34ea"},
|
{file = "PyYAML-6.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:70b189594dbe54f75ab3a1acec5f1e3faa7e8cf2f1e08d9b561cb41b845f69d5"},
|
||||||
{file = "pyyaml-6.0.3-cp312-cp312-win32.whl", hash = "sha256:96b533f0e99f6579b3d4d4995707cf36df9100d67e0c8303a0c55b27b5f99bc5"},
|
{file = "PyYAML-6.0.2-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:41e4e3953a79407c794916fa277a82531dd93aad34e29c2a514c2c0c5fe971cc"},
|
||||||
{file = "pyyaml-6.0.3-cp312-cp312-win_amd64.whl", hash = "sha256:5fcd34e47f6e0b794d17de1b4ff496c00986e1c83f7ab2fb8fcfe9616ff7477b"},
|
{file = "PyYAML-6.0.2-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:68ccc6023a3400877818152ad9a1033e3db8625d899c72eacb5a668902e4d652"},
|
||||||
{file = "pyyaml-6.0.3-cp312-cp312-win_arm64.whl", hash = "sha256:64386e5e707d03a7e172c0701abfb7e10f0fb753ee1d773128192742712a98fd"},
|
{file = "PyYAML-6.0.2-cp313-cp313-win32.whl", hash = "sha256:bc2fa7c6b47d6bc618dd7fb02ef6fdedb1090ec036abab80d4681424b84c1183"},
|
||||||
{file = "pyyaml-6.0.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:8da9669d359f02c0b91ccc01cac4a67f16afec0dac22c2ad09f46bee0697eba8"},
|
{file = "PyYAML-6.0.2-cp313-cp313-win_amd64.whl", hash = "sha256:8388ee1976c416731879ac16da0aff3f63b286ffdd57cdeb95f3f2e085687563"},
|
||||||
{file = "pyyaml-6.0.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:2283a07e2c21a2aa78d9c4442724ec1eb15f5e42a723b99cb3d822d48f5f7ad1"},
|
{file = "PyYAML-6.0.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:24471b829b3bf607e04e88d79542a9d48bb037c2267d7927a874e6c205ca7e9a"},
|
||||||
{file = "pyyaml-6.0.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ee2922902c45ae8ccada2c5b501ab86c36525b883eff4255313a253a3160861c"},
|
{file = "PyYAML-6.0.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d7fded462629cfa4b685c5416b949ebad6cec74af5e2d42905d41e257e0869f5"},
|
||||||
{file = "pyyaml-6.0.3-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:a33284e20b78bd4a18c8c2282d549d10bc8408a2a7ff57653c0cf0b9be0afce5"},
|
{file = "PyYAML-6.0.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d84a1718ee396f54f3a086ea0a66d8e552b2ab2017ef8b420e92edbc841c352d"},
|
||||||
{file = "pyyaml-6.0.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0f29edc409a6392443abf94b9cf89ce99889a1dd5376d94316ae5145dfedd5d6"},
|
{file = "PyYAML-6.0.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9056c1ecd25795207ad294bcf39f2db3d845767be0ea6e6a34d856f006006083"},
|
||||||
{file = "pyyaml-6.0.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:f7057c9a337546edc7973c0d3ba84ddcdf0daa14533c2065749c9075001090e6"},
|
{file = "PyYAML-6.0.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:82d09873e40955485746739bcb8b4586983670466c23382c19cffecbf1fd8706"},
|
||||||
{file = "pyyaml-6.0.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:eda16858a3cab07b80edaf74336ece1f986ba330fdb8ee0d6c0d68fe82bc96be"},
|
{file = "PyYAML-6.0.2-cp38-cp38-win32.whl", hash = "sha256:43fa96a3ca0d6b1812e01ced1044a003533c47f6ee8aca31724f78e93ccc089a"},
|
||||||
{file = "pyyaml-6.0.3-cp313-cp313-win32.whl", hash = "sha256:d0eae10f8159e8fdad514efdc92d74fd8d682c933a6dd088030f3834bc8e6b26"},
|
{file = "PyYAML-6.0.2-cp38-cp38-win_amd64.whl", hash = "sha256:01179a4a8559ab5de078078f37e5c1a30d76bb88519906844fd7bdea1b7729ff"},
|
||||||
{file = "pyyaml-6.0.3-cp313-cp313-win_amd64.whl", hash = "sha256:79005a0d97d5ddabfeeea4cf676af11e647e41d81c9a7722a193022accdb6b7c"},
|
{file = "PyYAML-6.0.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:688ba32a1cffef67fd2e9398a2efebaea461578b0923624778664cc1c914db5d"},
|
||||||
{file = "pyyaml-6.0.3-cp313-cp313-win_arm64.whl", hash = "sha256:5498cd1645aa724a7c71c8f378eb29ebe23da2fc0d7a08071d89469bf1d2defb"},
|
{file = "PyYAML-6.0.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a8786accb172bd8afb8be14490a16625cbc387036876ab6ba70912730faf8e1f"},
|
||||||
{file = "pyyaml-6.0.3-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:8d1fab6bb153a416f9aeb4b8763bc0f22a5586065f86f7664fc23339fc1c1fac"},
|
{file = "PyYAML-6.0.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d8e03406cac8513435335dbab54c0d385e4a49e4945d2909a581c83647ca0290"},
|
||||||
{file = "pyyaml-6.0.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:34d5fcd24b8445fadc33f9cf348c1047101756fd760b4dacb5c3e99755703310"},
|
{file = "PyYAML-6.0.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f753120cb8181e736c57ef7636e83f31b9c0d1722c516f7e86cf15b7aa57ff12"},
|
||||||
{file = "pyyaml-6.0.3-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:501a031947e3a9025ed4405a168e6ef5ae3126c59f90ce0cd6f2bfc477be31b7"},
|
{file = "PyYAML-6.0.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3b1fdb9dc17f5a7677423d508ab4f243a726dea51fa5e70992e59a7411c89d19"},
|
||||||
{file = "pyyaml-6.0.3-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:b3bc83488de33889877a0f2543ade9f70c67d66d9ebb4ac959502e12de895788"},
|
{file = "PyYAML-6.0.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:0b69e4ce7a131fe56b7e4d770c67429700908fc0752af059838b1cfb41960e4e"},
|
||||||
{file = "pyyaml-6.0.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c458b6d084f9b935061bc36216e8a69a7e293a2f1e68bf956dcd9e6cbcd143f5"},
|
{file = "PyYAML-6.0.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:a9f8c2e67970f13b16084e04f134610fd1d374bf477b17ec1599185cf611d725"},
|
||||||
{file = "pyyaml-6.0.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:7c6610def4f163542a622a73fb39f534f8c101d690126992300bf3207eab9764"},
|
{file = "PyYAML-6.0.2-cp39-cp39-win32.whl", hash = "sha256:6395c297d42274772abc367baaa79683958044e5d3835486c16da75d2a694631"},
|
||||||
{file = "pyyaml-6.0.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:5190d403f121660ce8d1d2c1bb2ef1bd05b5f68533fc5c2ea899bd15f4399b35"},
|
{file = "PyYAML-6.0.2-cp39-cp39-win_amd64.whl", hash = "sha256:39693e1f8320ae4f43943590b49779ffb98acb81f788220ea932a6b6c51004d8"},
|
||||||
{file = "pyyaml-6.0.3-cp314-cp314-win_amd64.whl", hash = "sha256:4a2e8cebe2ff6ab7d1050ecd59c25d4c8bd7e6f400f5f82b96557ac0abafd0ac"},
|
{file = "pyyaml-6.0.2.tar.gz", hash = "sha256:d584d9ec91ad65861cc08d42e834324ef890a082e591037abe114850ff7bbc3e"},
|
||||||
{file = "pyyaml-6.0.3-cp314-cp314-win_arm64.whl", hash = "sha256:93dda82c9c22deb0a405ea4dc5f2d0cda384168e466364dec6255b293923b2f3"},
|
|
||||||
{file = "pyyaml-6.0.3-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:02893d100e99e03eda1c8fd5c441d8c60103fd175728e23e431db1b589cf5ab3"},
|
|
||||||
{file = "pyyaml-6.0.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:c1ff362665ae507275af2853520967820d9124984e0f7466736aea23d8611fba"},
|
|
||||||
{file = "pyyaml-6.0.3-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6adc77889b628398debc7b65c073bcb99c4a0237b248cacaf3fe8a557563ef6c"},
|
|
||||||
{file = "pyyaml-6.0.3-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:a80cb027f6b349846a3bf6d73b5e95e782175e52f22108cfa17876aaeff93702"},
|
|
||||||
{file = "pyyaml-6.0.3-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:00c4bdeba853cc34e7dd471f16b4114f4162dc03e6b7afcc2128711f0eca823c"},
|
|
||||||
{file = "pyyaml-6.0.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:66e1674c3ef6f541c35191caae2d429b967b99e02040f5ba928632d9a7f0f065"},
|
|
||||||
{file = "pyyaml-6.0.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:16249ee61e95f858e83976573de0f5b2893b3677ba71c9dd36b9cf8be9ac6d65"},
|
|
||||||
{file = "pyyaml-6.0.3-cp314-cp314t-win_amd64.whl", hash = "sha256:4ad1906908f2f5ae4e5a8ddfce73c320c2a1429ec52eafd27138b7f1cbe341c9"},
|
|
||||||
{file = "pyyaml-6.0.3-cp314-cp314t-win_arm64.whl", hash = "sha256:ebc55a14a21cb14062aa4162f906cd962b28e2e9ea38f9b4391244cd8de4ae0b"},
|
|
||||||
{file = "pyyaml-6.0.3-cp39-cp39-macosx_10_13_x86_64.whl", hash = "sha256:b865addae83924361678b652338317d1bd7e79b1f4596f96b96c77a5a34b34da"},
|
|
||||||
{file = "pyyaml-6.0.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c3355370a2c156cffb25e876646f149d5d68f5e0a3ce86a5084dd0b64a994917"},
|
|
||||||
{file = "pyyaml-6.0.3-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3c5677e12444c15717b902a5798264fa7909e41153cdf9ef7ad571b704a63dd9"},
|
|
||||||
{file = "pyyaml-6.0.3-cp39-cp39-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:5ed875a24292240029e4483f9d4a4b8a1ae08843b9c54f43fcc11e404532a8a5"},
|
|
||||||
{file = "pyyaml-6.0.3-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0150219816b6a1fa26fb4699fb7daa9caf09eb1999f3b70fb6e786805e80375a"},
|
|
||||||
{file = "pyyaml-6.0.3-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:fa160448684b4e94d80416c0fa4aac48967a969efe22931448d853ada8baf926"},
|
|
||||||
{file = "pyyaml-6.0.3-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:27c0abcb4a5dac13684a37f76e701e054692a9b2d3064b70f5e4eb54810553d7"},
|
|
||||||
{file = "pyyaml-6.0.3-cp39-cp39-win32.whl", hash = "sha256:1ebe39cb5fc479422b83de611d14e2c0d3bb2a18bbcb01f229ab3cfbd8fee7a0"},
|
|
||||||
{file = "pyyaml-6.0.3-cp39-cp39-win_amd64.whl", hash = "sha256:2e71d11abed7344e42a8849600193d15b6def118602c4c176f748e4583246007"},
|
|
||||||
{file = "pyyaml-6.0.3.tar.gz", hash = "sha256:d76623373421df22fb4cf8817020cbb7ef15c725b9d5e45f17e189bfc384190f"},
|
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "resolvelib"
|
name = "resolvelib"
|
||||||
version = "1.2.1"
|
version = "1.0.1"
|
||||||
description = "Resolve abstract dependencies into concrete ones"
|
description = "Resolve abstract dependencies into concrete ones"
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = ">=3.9"
|
python-versions = "*"
|
||||||
groups = ["main"]
|
|
||||||
files = [
|
files = [
|
||||||
{file = "resolvelib-1.2.1-py3-none-any.whl", hash = "sha256:fb06b66c8da04172d9e72a21d7d06186d8919e32ae5ab5cdf5b9d920be805ac2"},
|
{file = "resolvelib-1.0.1-py2.py3-none-any.whl", hash = "sha256:d2da45d1a8dfee81bdd591647783e340ef3bcb104b54c383f70d422ef5cc7dbf"},
|
||||||
{file = "resolvelib-1.2.1.tar.gz", hash = "sha256:7d08a2022f6e16ce405d60b68c390f054efcfd0477d4b9bd019cc941c28fad1c"},
|
{file = "resolvelib-1.0.1.tar.gz", hash = "sha256:04ce76cbd63fded2078ce224785da6ecd42b9564b1390793f64ddecbe997b309"},
|
||||||
]
|
]
|
||||||
|
|
||||||
[package.extras]
|
[package.extras]
|
||||||
lint = ["mypy", "ruff", "types-requests"]
|
examples = ["html5lib", "packaging", "pygraphviz", "requests"]
|
||||||
|
lint = ["black", "flake8", "isort", "mypy", "types-requests"]
|
||||||
release = ["build", "towncrier", "twine"]
|
release = ["build", "towncrier", "twine"]
|
||||||
test = ["packaging", "pytest"]
|
test = ["commentjson", "packaging", "pytest"]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "setuptools"
|
||||||
|
version = "75.1.0"
|
||||||
|
description = "Easily download, build, install, upgrade, and uninstall Python packages"
|
||||||
|
optional = false
|
||||||
|
python-versions = ">=3.8"
|
||||||
|
files = [
|
||||||
|
{file = "setuptools-75.1.0-py3-none-any.whl", hash = "sha256:35ab7fd3bcd95e6b7fd704e4a1539513edad446c097797f2985e0e4b960772f2"},
|
||||||
|
{file = "setuptools-75.1.0.tar.gz", hash = "sha256:d59a21b17a275fb872a9c3dae73963160ae079f1049ed956880cd7c09b120538"},
|
||||||
|
]
|
||||||
|
|
||||||
|
[package.extras]
|
||||||
|
check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1)", "ruff (>=0.5.2)"]
|
||||||
|
core = ["importlib-metadata (>=6)", "importlib-resources (>=5.10.2)", "jaraco.collections", "jaraco.functools", "jaraco.text (>=3.7)", "more-itertools", "more-itertools (>=8.8)", "packaging", "packaging (>=24)", "platformdirs (>=2.6.2)", "tomli (>=2.0.1)", "wheel (>=0.43.0)"]
|
||||||
|
cover = ["pytest-cov"]
|
||||||
|
doc = ["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", "towncrier (<24.7)"]
|
||||||
|
enabler = ["pytest-enabler (>=2.2)"]
|
||||||
|
test = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "ini2toml[lite] (>=0.14)", "jaraco.develop (>=7.21)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "jaraco.test", "packaging (>=23.2)", "pip (>=19.1)", "pyproject-hooks (!=1.1)", "pytest (>=6,!=8.1.*)", "pytest-home (>=0.5)", "pytest-perf", "pytest-subprocess", "pytest-timeout", "pytest-xdist (>=3)", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel (>=0.44.0)"]
|
||||||
|
type = ["importlib-metadata (>=7.0.2)", "jaraco.develop (>=7.21)", "mypy (==1.11.*)", "pytest-mypy"]
|
||||||
|
|
||||||
[metadata]
|
[metadata]
|
||||||
lock-version = "2.1"
|
lock-version = "2.0"
|
||||||
python-versions = "^3.12"
|
python-versions = "^3.10"
|
||||||
content-hash = "5d542bdeae079233a36951fb69e4883f0c34c7aea13df7ba6cc6765f938bf300"
|
content-hash = "334448cb0c7d192f0e10987a995ecefca5e136733cce4dd15dcc2238f1c371c8"
|
||||||
|
|||||||
@@ -1,2 +0,0 @@
|
|||||||
[virtualenvs]
|
|
||||||
in-project = true
|
|
||||||
@@ -6,12 +6,12 @@ authors = ["Iurii Tatishchev <itatishch@gmail.com>"]
|
|||||||
readme = "README.md"
|
readme = "README.md"
|
||||||
|
|
||||||
[tool.poetry.dependencies]
|
[tool.poetry.dependencies]
|
||||||
python = "^3.12"
|
python = "^3.10"
|
||||||
ansible = "^13.0.0"
|
ansible = "^10.1.0"
|
||||||
ansible-vault = "^4.1.0"
|
ansible-vault = "^2.1.0"
|
||||||
netaddr = "^1.3.0"
|
netaddr = "^1.3.0"
|
||||||
|
|
||||||
[tool.poetry.group.dev.dependencies]
|
[tool.poetry.dev-dependencies]
|
||||||
grafanalib = "^0.7.1"
|
grafanalib = "^0.7.1"
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,11 +0,0 @@
|
|||||||
{
|
|
||||||
"$schema": "https://docs.renovatebot.com/renovate-schema.json",
|
|
||||||
"extends": [
|
|
||||||
"config:recommended"
|
|
||||||
],
|
|
||||||
"docker-compose": {
|
|
||||||
"fileMatch": [
|
|
||||||
"(^|/)(?:docker-)?compose[^/]*\\.ya?ml(\\.j2)?$"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -11,7 +11,7 @@
|
|||||||
path: "{{ current_stack_dest }}/{{ item.path }}"
|
path: "{{ current_stack_dest }}/{{ item.path }}"
|
||||||
state: directory
|
state: directory
|
||||||
mode: "755"
|
mode: "755"
|
||||||
loop: "{{ query('community.general.filetree', current_stack_source) }}"
|
loop: "{{ lookup('community.general.filetree', current_stack_source) }}"
|
||||||
when: item.state == "directory"
|
when: item.state == "directory"
|
||||||
|
|
||||||
- name: Generate {{ current_stack_name }} deployment from templates
|
- name: Generate {{ current_stack_name }} deployment from templates
|
||||||
@@ -19,16 +19,16 @@
|
|||||||
src: "{{ item.src }}"
|
src: "{{ item.src }}"
|
||||||
dest: "{{ current_stack_dest }}/{{ item.path | regex_replace('\\.j2$', '') }}"
|
dest: "{{ current_stack_dest }}/{{ item.path | regex_replace('\\.j2$', '') }}"
|
||||||
mode: "644"
|
mode: "644"
|
||||||
loop: "{{ query('community.general.filetree', current_stack_source) }}"
|
loop: "{{ lookup('community.general.filetree', current_stack_source) }}"
|
||||||
when: item.state == "file" and (item.path | regex_search('\\.j2$')) is not none
|
when: item.state == "file" and item.path | regex_search('\\.j2$')
|
||||||
|
|
||||||
- name: Generate {{ current_stack_name }} deployment from static files
|
- name: Generate {{ current_stack_name }} deployment from static files
|
||||||
copy:
|
copy:
|
||||||
src: "{{ item.src }}"
|
src: "{{ item.src }}"
|
||||||
dest: "{{ current_stack_dest }}/{{ item.path }}"
|
dest: "{{ current_stack_dest }}/{{ item.path }}"
|
||||||
mode: "644"
|
mode: "644"
|
||||||
loop: "{{ query('community.general.filetree', current_stack_source) }}"
|
loop: "{{ lookup('community.general.filetree', current_stack_source) }}"
|
||||||
when: item.state == "file" and (item.path | regex_search('\\.j2$')) is none
|
when: item.state == "file" and not item.path | regex_search('\\.j2$')
|
||||||
|
|
||||||
- name: Deploy docker-compose for {{ current_stack_name }}
|
- name: Deploy docker-compose for {{ current_stack_name }}
|
||||||
community.docker.docker_compose_v2:
|
community.docker.docker_compose_v2:
|
||||||
|
|||||||
@@ -28,13 +28,7 @@
|
|||||||
collection: apps
|
collection: apps
|
||||||
stacks:
|
stacks:
|
||||||
- gitea
|
- gitea
|
||||||
- woodpecker
|
|
||||||
- syncthing
|
|
||||||
- nextcloud
|
- nextcloud
|
||||||
- jellyfin
|
- jellyfin
|
||||||
- arrstack
|
- arrstack
|
||||||
- vpgen
|
|
||||||
- pgrok
|
|
||||||
- n8n
|
|
||||||
- minecruft
|
|
||||||
import_tasks: deploy_collection.yml
|
import_tasks: deploy_collection.yml
|
||||||
|
|||||||
@@ -2,6 +2,8 @@
|
|||||||
|
|
||||||
networks:
|
networks:
|
||||||
{{ helpers.default_network(249) | indent(2) }}
|
{{ helpers.default_network(249) | indent(2) }}
|
||||||
|
traefik_traefik:
|
||||||
|
external: true
|
||||||
|
|
||||||
services:
|
services:
|
||||||
gluetun:
|
gluetun:
|
||||||
@@ -9,13 +11,14 @@ services:
|
|||||||
container_name: gluetun
|
container_name: gluetun
|
||||||
cap_add:
|
cap_add:
|
||||||
- NET_ADMIN
|
- NET_ADMIN
|
||||||
devices:
|
|
||||||
- /dev/net/tun:/dev/net/tun
|
|
||||||
sysctls:
|
sysctls:
|
||||||
- net.ipv6.conf.all.disable_ipv6=0
|
- net.ipv6.conf.all.disable_ipv6=0
|
||||||
env_file:
|
env_file:
|
||||||
- .env.gluetun
|
- .env.gluetun
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
|
networks:
|
||||||
|
- default
|
||||||
|
- traefik_traefik
|
||||||
volumes:
|
volumes:
|
||||||
- {{ base_volume_path }}/arrstack/gluetun:/gluetun
|
- {{ base_volume_path }}/arrstack/gluetun:/gluetun
|
||||||
|
|
||||||
@@ -46,6 +49,9 @@ services:
|
|||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
depends_on:
|
depends_on:
|
||||||
- qbittorrent
|
- qbittorrent
|
||||||
|
networks:
|
||||||
|
- default
|
||||||
|
- traefik_traefik
|
||||||
volumes:
|
volumes:
|
||||||
- {{ base_volume_path }}/arrstack/config/prowlarr:/config
|
- {{ base_volume_path }}/arrstack/config/prowlarr:/config
|
||||||
|
|
||||||
@@ -57,6 +63,9 @@ services:
|
|||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
depends_on:
|
depends_on:
|
||||||
- qbittorrent
|
- qbittorrent
|
||||||
|
networks:
|
||||||
|
- default
|
||||||
|
- traefik_traefik
|
||||||
volumes:
|
volumes:
|
||||||
- {{ base_volume_path }}/arrstack/config/sonarr:/config
|
- {{ base_volume_path }}/arrstack/config/sonarr:/config
|
||||||
- {{ base_volume_path }}/arrstack/downloads:/downloads
|
- {{ base_volume_path }}/arrstack/downloads:/downloads
|
||||||
@@ -70,6 +79,9 @@ services:
|
|||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
depends_on:
|
depends_on:
|
||||||
- qbittorrent
|
- qbittorrent
|
||||||
|
networks:
|
||||||
|
- default
|
||||||
|
- traefik_traefik
|
||||||
volumes:
|
volumes:
|
||||||
- {{ base_volume_path }}/arrstack/config/radarr:/config
|
- {{ base_volume_path }}/arrstack/config/radarr:/config
|
||||||
- {{ base_volume_path }}/arrstack/downloads:/downloads
|
- {{ base_volume_path }}/arrstack/downloads:/downloads
|
||||||
@@ -25,7 +25,5 @@ GITEA__security__INTERNAL_TOKEN={{ internal_token }}
|
|||||||
|
|
||||||
GITEA__oauth2__JWT_SECRET={{ jwt_secret }}
|
GITEA__oauth2__JWT_SECRET={{ jwt_secret }}
|
||||||
|
|
||||||
GITEA__webhook__ALLOWED_HOST_LIST="external,woodpecker.{{ domain }}"
|
|
||||||
|
|
||||||
# Indexer
|
# Indexer
|
||||||
GITEA__indexer__REPO_INDEXER_ENABLED=true
|
GITEA__indexer__REPO_INDEXER_ENABLED=true
|
||||||
|
|||||||
@@ -2,16 +2,21 @@
|
|||||||
|
|
||||||
networks:
|
networks:
|
||||||
{{ helpers.default_network(199) | indent(2) }}
|
{{ helpers.default_network(199) | indent(2) }}
|
||||||
|
traefik_traefik:
|
||||||
|
external: true
|
||||||
|
|
||||||
services:
|
services:
|
||||||
server:
|
server:
|
||||||
image: gitea/gitea
|
image: gitea/gitea:1.22
|
||||||
container_name: gitea_server
|
container_name: gitea_server
|
||||||
labels:
|
labels:
|
||||||
- {{ helpers.traefik_labels('gitea', port='3000') | indent(6) }}
|
- {{ helpers.traefik_labels('gitea', port='3000') | indent(6) }}
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
env_file:
|
env_file:
|
||||||
- .env.gitea
|
- .env.gitea
|
||||||
|
networks:
|
||||||
|
- default
|
||||||
|
- traefik_traefik
|
||||||
volumes:
|
volumes:
|
||||||
- {{ base_volume_path }}/gitea/gitea:/data
|
- {{ base_volume_path }}/gitea/gitea:/data
|
||||||
depends_on:
|
depends_on:
|
||||||
@@ -22,5 +27,7 @@ services:
|
|||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
env_file:
|
env_file:
|
||||||
- .env.db
|
- .env.db
|
||||||
|
networks:
|
||||||
|
- default
|
||||||
volumes:
|
volumes:
|
||||||
- {{ base_volume_path }}/gitea/postgres:/var/lib/postgresql/data
|
- {{ base_volume_path }}/gitea/postgres:/var/lib/postgresql/data
|
||||||
@@ -2,6 +2,8 @@
|
|||||||
|
|
||||||
networks:
|
networks:
|
||||||
{{ helpers.default_network(197) | indent(2) }}
|
{{ helpers.default_network(197) | indent(2) }}
|
||||||
|
traefik_traefik:
|
||||||
|
external: true
|
||||||
|
|
||||||
services:
|
services:
|
||||||
jellyfin:
|
jellyfin:
|
||||||
@@ -12,6 +14,9 @@ services:
|
|||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
env_file:
|
env_file:
|
||||||
- .env.jellyfin
|
- .env.jellyfin
|
||||||
|
networks:
|
||||||
|
- default
|
||||||
|
- traefik_traefik
|
||||||
volumes:
|
volumes:
|
||||||
- {{ base_volume_path }}/jellyfin/config:/config
|
- {{ base_volume_path }}/jellyfin/config:/config
|
||||||
- {{ base_volume_path }}/jellyfin/cache:/cache
|
- {{ base_volume_path }}/jellyfin/cache:/cache
|
||||||
@@ -1,27 +0,0 @@
|
|||||||
EULA=true
|
|
||||||
|
|
||||||
CF_API_KEY="{{ minecruft_cf_api_key }}"
|
|
||||||
TYPE=AUTO_CURSEFORGE
|
|
||||||
CF_PAGE_URL=https://www.curseforge.com/minecraft/modpacks/create-arcane-engineering/files/4852034
|
|
||||||
CF_EXCLUDE_MODS=591711
|
|
||||||
CURSEFORGE_FILES="https://www.curseforge.com/minecraft/mc-mods/simple-voice-chat/files/7011546
|
|
||||||
https://www.curseforge.com/minecraft/mc-mods/bluemap/files/5555751"
|
|
||||||
|
|
||||||
|
|
||||||
MEMORY=16G
|
|
||||||
ENABLE_ROLLING_LOGS=true
|
|
||||||
#TZ=America/New_York
|
|
||||||
|
|
||||||
OVERRIDE_SERVER_PROPERTIES=true
|
|
||||||
DIFFICULTY=normal
|
|
||||||
MAX_TICK_TIME=-1
|
|
||||||
ALLOW_FLIGHT=true
|
|
||||||
OPS=Litoprobka,CaZzzer
|
|
||||||
VIEW_DISTANCE=12
|
|
||||||
MAX_PLAYERS=16
|
|
||||||
PVP=false
|
|
||||||
LEVEL_TYPE=normal
|
|
||||||
LEVEL_SEED=133769
|
|
||||||
MOTD="Remember the Cavendish"
|
|
||||||
ONLINE_MODE=false
|
|
||||||
SPAWN_PROTECTION=0
|
|
||||||
@@ -1,18 +0,0 @@
|
|||||||
{% import 'contrib/compose_helpers.j2' as helpers with context %}
|
|
||||||
|
|
||||||
services:
|
|
||||||
minecruft:
|
|
||||||
image: itzg/minecraft-server:java17-alpine
|
|
||||||
container_name: minecruft
|
|
||||||
labels:
|
|
||||||
- {{ helpers.traefik_labels('minecruft', port='8100') | indent(6) }}
|
|
||||||
ports:
|
|
||||||
- 25565:25565
|
|
||||||
- 25565:25565/udp
|
|
||||||
- 24454:24454/udp
|
|
||||||
restart: unless-stopped
|
|
||||||
env_file: .env.minecruft
|
|
||||||
volumes:
|
|
||||||
- {{ base_volume_path }}/minecruft/data:/data
|
|
||||||
- {{ base_volume_path }}/minecruft/downloads:/downloads
|
|
||||||
- ./config:/config
|
|
||||||
@@ -1,42 +0,0 @@
|
|||||||
# By changing the setting (accept-download) below to TRUE you are indicating that you have accepted mojang's EULA (https://account.mojang.com/documents/minecraft_eula),
|
|
||||||
# you confirm that you own a license to Minecraft (Java Edition)
|
|
||||||
# and you agree that BlueMap will download and use a minecraft-client file (depending on the minecraft-version) from mojangs servers (https://piston-meta.mojang.com/) for you.
|
|
||||||
# This file contains resources that belong to mojang and you must not redistribute it or do anything else that is not compliant with mojang's EULA.
|
|
||||||
# BlueMap uses resources in this file to generate the 3D-Models used for the map and texture them. (BlueMap will not work without those resources.)
|
|
||||||
accept-download: true
|
|
||||||
|
|
||||||
# The folder where bluemap saves data-files it needs during runtime or to save e.g. the render-progress to resume it later.
|
|
||||||
# Default is "bluemap"
|
|
||||||
data: "bluemap"
|
|
||||||
|
|
||||||
# This changes the amount of threads that BlueMap will use to render the maps.
|
|
||||||
# A higher value can improve render-speed but could impact performance on the host machine.
|
|
||||||
# This should be always below or equal to the number of available processor-cores.
|
|
||||||
# Zero or a negative value means the amount of available processor-cores subtracted by the value.
|
|
||||||
# (So a value of -2 with 6 cores results in 4 render-processes)
|
|
||||||
# Default is 1
|
|
||||||
render-thread-count: 3
|
|
||||||
|
|
||||||
# Controls whether BlueMap should try to find and load mod-resources and datapacks from the server/world-directories.
|
|
||||||
# Default is true
|
|
||||||
scan-for-mod-resources: true
|
|
||||||
|
|
||||||
# If this is true, BlueMap might send really basic metrics reports containing only the implementation-type and the version that is being used to https://metrics.bluecolored.de/bluemap/
|
|
||||||
# This allows me to track the basic usage of BlueMap and helps me stay motivated to further develop this tool! Please leave it on :)
|
|
||||||
# An example report looks like this: {"implementation":"bukkit","version":"5.3","mcVersion":"?"}
|
|
||||||
# Default is true
|
|
||||||
metrics: true
|
|
||||||
|
|
||||||
# Config-section for debug-logging
|
|
||||||
log: {
|
|
||||||
# The file where the debug-log will be written to.
|
|
||||||
# Comment out to disable debug-logging completely.
|
|
||||||
# Java String formatting syntax can be used to add time, see: https://docs.oracle.com/javase/8/docs/api/java/util/Formatter.html
|
|
||||||
# Default is no logging
|
|
||||||
file: "bluemap/logs/debug.log"
|
|
||||||
#file: "bluemap/logs/debug_%1$tF_%1$tT.log"
|
|
||||||
|
|
||||||
# Whether the logger should append to an existing file, or overwrite it
|
|
||||||
# Default is false
|
|
||||||
append: false
|
|
||||||
}
|
|
||||||
@@ -1,24 +0,0 @@
|
|||||||
{% import 'contrib/compose_helpers.j2' as helpers with context %}
|
|
||||||
|
|
||||||
networks:
|
|
||||||
{{ helpers.default_network(192) | indent(2) }}
|
|
||||||
|
|
||||||
services:
|
|
||||||
n8n:
|
|
||||||
image: n8nio/n8n
|
|
||||||
container_name: n8n
|
|
||||||
labels:
|
|
||||||
- {{ helpers.traefik_labels('n8n', port='5678') | indent(6) }}
|
|
||||||
restart: unless-stopped
|
|
||||||
volumes:
|
|
||||||
- {{ base_volume_path }}/n8n/data:/home/node/.n8n
|
|
||||||
- {{ base_volume_path }}/n8n/local-files:/files
|
|
||||||
environment:
|
|
||||||
- N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS=true
|
|
||||||
- N8N_HOST=n8n.{{ domain }}
|
|
||||||
- N8N_PORT=5678
|
|
||||||
- N8N_PROTOCOL=https
|
|
||||||
- N8N_RUNNERS_ENABLED=true
|
|
||||||
- NODE_ENV=production
|
|
||||||
- WEBHOOK_URL=https://n8n.{{ domain }}/
|
|
||||||
- N8N_PROXY_HOPS=1
|
|
||||||
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-apache
|
||||||
@@ -18,7 +18,7 @@ MAIL_FROM_ADDRESS=nc
|
|||||||
MAIL_DOMAIN=cazzzer.com
|
MAIL_DOMAIN=cazzzer.com
|
||||||
|
|
||||||
# host IPv4 and IPv6 addresses, loopback for notify_push
|
# host IPv4 and IPv6 addresses, loopback for notify_push
|
||||||
TRUSTED_PROXIES={{ ansible_facts['default_ipv4'].address }} {{ ansible_facts['default_ipv6'].address }} 127.0.0.1 ::1
|
TRUSTED_PROXIES={{ hostvars[inventory_hostname]['ansible_default_ipv4']['address'] }} {{ hostvars[inventory_hostname]['ansible_default_ipv6']['address'] }} 127.0.0.1 ::1
|
||||||
OVERWRITEHOST=nc.{{ domain }}
|
OVERWRITEHOST=nc.{{ domain }}
|
||||||
OVERWRITEPROTOCOL=https
|
OVERWRITEPROTOCOL=https
|
||||||
OVERWRITECLIURL=https://nc.{{ domain }}
|
OVERWRITECLIURL=https://nc.{{ domain }}
|
||||||
|
|||||||
@@ -2,10 +2,13 @@
|
|||||||
|
|
||||||
networks:
|
networks:
|
||||||
{{ helpers.default_network(198) | indent(2) }}
|
{{ helpers.default_network(198) | indent(2) }}
|
||||||
|
traefik_traefik:
|
||||||
|
external: true
|
||||||
|
|
||||||
|
|
||||||
services:
|
services:
|
||||||
app:
|
app:
|
||||||
image: &nextcloud_image nextcloud:stable-apache
|
image: nextcloud:${NEXTCLOUD_VERSION}
|
||||||
container_name: nextcloud_app
|
container_name: nextcloud_app
|
||||||
labels:
|
labels:
|
||||||
- {{ helpers.traefik_labels('nc', port='80') | indent(6) }}
|
- {{ helpers.traefik_labels('nc', port='80') | indent(6) }}
|
||||||
@@ -15,28 +18,40 @@ services:
|
|||||||
- redis
|
- redis
|
||||||
env_file:
|
env_file:
|
||||||
- .env.nextcloud
|
- .env.nextcloud
|
||||||
|
networks:
|
||||||
|
- default
|
||||||
volumes:
|
volumes:
|
||||||
- {{ base_volume_path }}/nextcloud/nextcloud:/var/www/html
|
- {{ base_volume_path }}/nextcloud/nextcloud:/var/www/html
|
||||||
- {{ base_volume_path }}/nextcloud/nextcloud_config:/var/www/html/config
|
- {{ base_volume_path }}/nextcloud/nextcloud_config:/var/www/html/config
|
||||||
- {{ base_volume_path }}/nextcloud/nextcloud_data:/var/www/html/data
|
- {{ base_volume_path }}/nextcloud/nextcloud_data:/var/www/html/data
|
||||||
|
|
||||||
cron:
|
cron:
|
||||||
image: *nextcloud_image
|
image: nextcloud:${NEXTCLOUD_VERSION}
|
||||||
container_name: nextcloud_cron
|
container_name: nextcloud_cron
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
depends_on:
|
depends_on:
|
||||||
- app
|
- app
|
||||||
entrypoint: /cron.sh
|
entrypoint: /cron.sh
|
||||||
|
networks:
|
||||||
|
- default
|
||||||
volumes:
|
volumes:
|
||||||
- {{ base_volume_path }}/nextcloud/nextcloud:/var/www/html
|
- {{ base_volume_path }}/nextcloud/nextcloud:/var/www/html
|
||||||
- {{ base_volume_path }}/nextcloud/nextcloud_config:/var/www/html/config
|
- {{ base_volume_path }}/nextcloud/nextcloud_config:/var/www/html/config
|
||||||
- {{ base_volume_path }}/nextcloud/nextcloud_data:/var/www/html/data
|
- {{ base_volume_path }}/nextcloud/nextcloud_data:/var/www/html/data
|
||||||
|
|
||||||
notify_push:
|
notify_push:
|
||||||
image: *nextcloud_image
|
image: nextcloud:${NEXTCLOUD_VERSION}
|
||||||
container_name: nextcloud_notify_push
|
container_name: nextcloud_notify_push
|
||||||
|
{# TODO: Refactor this and minio -#}
|
||||||
labels:
|
labels:
|
||||||
- {{ helpers.traefik_labels('nc', port='7867', path_prefix='/push') | indent(6) }}
|
- traefik.enable=true
|
||||||
|
- traefik.http.routers.nc-notify.rule=Host(`nc.{{ domain }}`) && PathPrefix(`/push`)
|
||||||
|
- traefik.http.routers.nc-notify.entrypoints=websecure
|
||||||
|
- traefik.http.routers.nc-notify.tls=true
|
||||||
|
- traefik.http.routers.nc-notify.tls.certresolver=letsencrypt
|
||||||
|
- traefik.http.routers.nc-notify.tls.domains.0.main={{ domain }}
|
||||||
|
- traefik.http.routers.nc-notify.tls.domains.0.sans=*.{{ domain }}
|
||||||
|
- traefik.http.services.nc-notify.loadbalancer.server.port=7867
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
user: www-data
|
user: www-data
|
||||||
env_file:
|
env_file:
|
||||||
@@ -53,6 +68,8 @@ services:
|
|||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
env_file:
|
env_file:
|
||||||
- .env.db
|
- .env.db
|
||||||
|
networks:
|
||||||
|
- default
|
||||||
volumes:
|
volumes:
|
||||||
- {{ base_volume_path }}/nextcloud/db:/var/lib/postgresql/data
|
- {{ base_volume_path }}/nextcloud/db:/var/lib/postgresql/data
|
||||||
|
|
||||||
@@ -62,6 +79,8 @@ services:
|
|||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
env_file:
|
env_file:
|
||||||
- .env.redis
|
- .env.redis
|
||||||
|
networks:
|
||||||
|
- default
|
||||||
command:
|
command:
|
||||||
- sh
|
- sh
|
||||||
- -c
|
- -c
|
||||||
@@ -1,31 +0,0 @@
|
|||||||
{% import 'contrib/compose_helpers.j2' as helpers with context %}
|
|
||||||
|
|
||||||
networks:
|
|
||||||
{{ helpers.default_network(194) | indent(2) }}
|
|
||||||
|
|
||||||
# https://github.com/pgrok/pgrok/blob/main/docs/admin/docker.md#docker-compose
|
|
||||||
services:
|
|
||||||
server:
|
|
||||||
image: ghcr.io/pgrok/pgrokd:latest
|
|
||||||
container_name: pgrok_server
|
|
||||||
labels:
|
|
||||||
- {{ helpers.traefik_labels('pgrok', port='3320') | indent(6) }}
|
|
||||||
- {{ helpers.traefik_labels('pgrok', port='3000', wildcard=true) | indent(6) }}
|
|
||||||
restart: unless-stopped
|
|
||||||
volumes:
|
|
||||||
- ./pgrokd.yml:/var/opt/pgrokd/pgrokd.yml
|
|
||||||
ports:
|
|
||||||
- "2222:2222"
|
|
||||||
depends_on:
|
|
||||||
- db
|
|
||||||
|
|
||||||
db:
|
|
||||||
image: postgres:17-alpine
|
|
||||||
container_name: pgrok_db
|
|
||||||
restart: unless-stopped
|
|
||||||
volumes:
|
|
||||||
- {{ base_volume_path }}/pgrok/postgres:/var/lib/postgresql/data
|
|
||||||
environment:
|
|
||||||
POSTGRES_DB: pgrok
|
|
||||||
POSTGRES_USER: pgrok
|
|
||||||
POSTGRES_PASSWORD: "{{ pgrok_db_password }}"
|
|
||||||
@@ -1,29 +0,0 @@
|
|||||||
external_url: "https://pgrok.{{ domain }}"
|
|
||||||
web:
|
|
||||||
port: 3320
|
|
||||||
proxy:
|
|
||||||
port: 3000
|
|
||||||
scheme: https
|
|
||||||
domain: "pgrok.{{ domain }}"
|
|
||||||
sshd:
|
|
||||||
port: 2222
|
|
||||||
|
|
||||||
database:
|
|
||||||
host: db
|
|
||||||
port: 5432
|
|
||||||
user: pgrok
|
|
||||||
password: "{{ pgrok_db_password }}"
|
|
||||||
database: pgrok
|
|
||||||
|
|
||||||
identity_provider:
|
|
||||||
type: oidc
|
|
||||||
display_name: Authentik
|
|
||||||
issuer: "https://auth.{{ domain }}/application/o/pgrok/"
|
|
||||||
client_id: "pgrok"
|
|
||||||
client_secret: "{{ auth_pgrok_client_secret }}"
|
|
||||||
field_mapping:
|
|
||||||
identifier: "preferred_username"
|
|
||||||
display_name: "name"
|
|
||||||
email: "email"
|
|
||||||
# # The required domain name, "field_mapping.email" is required to set for this to work.
|
|
||||||
# required_domain: "example.com"
|
|
||||||
@@ -1,16 +0,0 @@
|
|||||||
{% import 'contrib/compose_helpers.j2' as helpers with context %}
|
|
||||||
|
|
||||||
networks:
|
|
||||||
{{ helpers.default_network(193) | indent(2) }}
|
|
||||||
|
|
||||||
services:
|
|
||||||
syncthing:
|
|
||||||
image: linuxserver/syncthing
|
|
||||||
container_name: syncthing
|
|
||||||
labels:
|
|
||||||
- {{ helpers.traefik_labels('sync', port='8384', auth=true) | indent(6) }}
|
|
||||||
restart: unless-stopped
|
|
||||||
network_mode: host
|
|
||||||
volumes:
|
|
||||||
- {{ base_volume_path }}/syncthing/config:/config
|
|
||||||
- {{ base_volume_path }}/syncthing/data:/data
|
|
||||||
@@ -1,29 +0,0 @@
|
|||||||
DATABASE_URL=file:/data/vpgen.db
|
|
||||||
|
|
||||||
PUBLIC_AUTH_AUTHENTIK_ENABLE=1
|
|
||||||
AUTH_AUTHENTIK_REQUIRE_INVITE=0
|
|
||||||
AUTH_AUTHENTIK_DOMAIN="auth.{{ domain }}"
|
|
||||||
AUTH_AUTHENTIK_CLIENT_ID=vpgen
|
|
||||||
AUTH_AUTHENTIK_CLIENT_SECRET="{{ auth_vpgen_client_secret }}"
|
|
||||||
|
|
||||||
PUBLIC_AUTH_GOOGLE_ENABLE=1
|
|
||||||
AUTH_GOOGLE_REQUIRE_INVITE=1
|
|
||||||
AUTH_GOOGLE_CLIENT_ID="{{ google_consumer_key }}"
|
|
||||||
AUTH_GOOGLE_CLIENT_SECRET="{{ google_consumer_secret }}"
|
|
||||||
|
|
||||||
AUTH_INVITE_TOKEN="{{ vpgen_auth_invite_token }}"
|
|
||||||
|
|
||||||
OPNSENSE_API_URL={{ vpgen_opnsense_api_url }}
|
|
||||||
OPNSENSE_API_KEY={{ vpgen_opnsense_api_key }}
|
|
||||||
OPNSENSE_API_SECRET={{ vpgen_opnsense_api_secret }}
|
|
||||||
OPNSENSE_WG_IFNAME={{ vpgen_opnsense_wg_ifname }}
|
|
||||||
|
|
||||||
IPV4_STARTING_ADDR={{ vpgen_ipv4_starting_addr }}
|
|
||||||
IPV6_STARTING_ADDR={{ vpgen_ipv6_starting_addr }}
|
|
||||||
IPV6_CLIENT_PREFIX_SIZE={{ vpgen_ipv6_client_prefix_size }}
|
|
||||||
IP_MAX_INDEX={{ vpgen_ip_max_index }}
|
|
||||||
VPN_ENDPOINT={{ vpgen_vpn_endpoint }}
|
|
||||||
VPN_DNS={{ vpgen_vpn_dns }}
|
|
||||||
MAX_CLIENTS_PER_USER={{ vpgen_max_clients_per_user }}
|
|
||||||
|
|
||||||
ORIGIN=https://vpgen.{{ domain }}
|
|
||||||
@@ -1,16 +0,0 @@
|
|||||||
{% import 'contrib/compose_helpers.j2' as helpers with context %}
|
|
||||||
|
|
||||||
networks:
|
|
||||||
{{ helpers.default_network(196) | indent(2) }}
|
|
||||||
|
|
||||||
services:
|
|
||||||
vpgen:
|
|
||||||
image: gitea.cazzzer.com/cazzzer/vpgen:develop
|
|
||||||
container_name: vpgen
|
|
||||||
labels:
|
|
||||||
- {{ helpers.traefik_labels('vpgen', port='3000') | indent(6) }}
|
|
||||||
restart: unless-stopped
|
|
||||||
env_file:
|
|
||||||
- .env.vpgen
|
|
||||||
volumes:
|
|
||||||
- {{ base_volume_path }}/vpgen:/data
|
|
||||||
@@ -1,35 +0,0 @@
|
|||||||
{% import 'contrib/compose_helpers.j2' as helpers with context %}
|
|
||||||
|
|
||||||
networks:
|
|
||||||
{{ helpers.default_network(195) | indent(2) }}
|
|
||||||
|
|
||||||
services:
|
|
||||||
woodpecker-server:
|
|
||||||
image: woodpeckerci/woodpecker-server:v3
|
|
||||||
container_name: woodpecker_server
|
|
||||||
labels:
|
|
||||||
- {{ helpers.traefik_labels('woodpecker', port='8000') | indent(6) }}
|
|
||||||
restart: unless-stopped
|
|
||||||
volumes:
|
|
||||||
- {{ base_volume_path }}/woodpecker/data:/var/lib/woodpecker
|
|
||||||
environment:
|
|
||||||
- WOODPECKER_OPEN=true
|
|
||||||
- WOODPECKER_HOST=https://woodpecker.{{ domain }}
|
|
||||||
- WOODPECKER_GITEA=true
|
|
||||||
- WOODPECKER_GITEA_URL=https://gitea.{{ domain }}
|
|
||||||
- WOODPECKER_GITEA_CLIENT={{ woodpecker_gitea_client_id }}
|
|
||||||
- WOODPECKER_GITEA_SECRET={{ woodpecker_gitea_client_secret }}
|
|
||||||
- WOODPECKER_AGENT_SECRET={{ woodpecker_agent_secret }}
|
|
||||||
|
|
||||||
woodpecker-agent:
|
|
||||||
image: woodpeckerci/woodpecker-agent:v3
|
|
||||||
container_name: woodpecker_agent
|
|
||||||
restart: unless-stopped
|
|
||||||
depends_on:
|
|
||||||
- woodpecker-server
|
|
||||||
volumes:
|
|
||||||
- {{ base_volume_path }}/woodpecker/agent_config:/etc/woodpecker
|
|
||||||
- /var/run/docker.sock:/var/run/docker.sock
|
|
||||||
environment:
|
|
||||||
- WOODPECKER_SERVER=woodpecker-server:9000
|
|
||||||
- WOODPECKER_AGENT_SECRET={{ woodpecker_agent_secret }}
|
|
||||||
@@ -1,225 +0,0 @@
|
|||||||
version: 1
|
|
||||||
metadata:
|
|
||||||
labels:
|
|
||||||
blueprints.goauthentik.io/instantiate: "true"
|
|
||||||
name: Alpina - Enrollment by Invitation (Internal)
|
|
||||||
entries:
|
|
||||||
# Flow for internal enrollment by invitation
|
|
||||||
- identifiers:
|
|
||||||
slug: enrollment-internal-invitation-flow
|
|
||||||
model: authentik_flows.flow
|
|
||||||
id: flow
|
|
||||||
attrs:
|
|
||||||
name: Alpina Enrollment Flow
|
|
||||||
title: Sign Up
|
|
||||||
designation: enrollment
|
|
||||||
authentication: require_unauthenticated
|
|
||||||
|
|
||||||
# Prompt fields
|
|
||||||
- identifiers:
|
|
||||||
name: alpina-enrollment-field-name
|
|
||||||
model: authentik_stages_prompt.prompt
|
|
||||||
id: prompt-field-name
|
|
||||||
attrs:
|
|
||||||
field_key: name
|
|
||||||
label: Name
|
|
||||||
type: text
|
|
||||||
required: true
|
|
||||||
placeholder: Name
|
|
||||||
placeholder_expression: false
|
|
||||||
order: 0
|
|
||||||
- identifiers:
|
|
||||||
name: alpina-enrollment-field-password
|
|
||||||
model: authentik_stages_prompt.prompt
|
|
||||||
id: prompt-field-password
|
|
||||||
attrs:
|
|
||||||
field_key: password
|
|
||||||
label: Password
|
|
||||||
type: password
|
|
||||||
required: true
|
|
||||||
placeholder: Password
|
|
||||||
placeholder_expression: false
|
|
||||||
order: 1
|
|
||||||
- identifiers:
|
|
||||||
name: alpina-enrollment-field-password-repeat
|
|
||||||
model: authentik_stages_prompt.prompt
|
|
||||||
id: prompt-field-password-repeat
|
|
||||||
attrs:
|
|
||||||
field_key: password_repeat
|
|
||||||
label: Password (repeat)
|
|
||||||
type: password
|
|
||||||
required: true
|
|
||||||
placeholder: Password (repeat)
|
|
||||||
placeholder_expression: false
|
|
||||||
order: 2
|
|
||||||
|
|
||||||
# Flow stages
|
|
||||||
- identifiers:
|
|
||||||
name: alpina-enrollment-invitation
|
|
||||||
model: authentik_stages_invitation.invitationstage
|
|
||||||
id: enrollment-invitation
|
|
||||||
- identifiers:
|
|
||||||
name: alpina-enrollment-identification-oauth
|
|
||||||
model: authentik_stages_identification.identificationstage
|
|
||||||
id: enrollment-identification-oauth
|
|
||||||
attrs:
|
|
||||||
user_fields:
|
|
||||||
- email
|
|
||||||
pretend_user_exists: true
|
|
||||||
show_matched_user: false
|
|
||||||
sources:
|
|
||||||
- !Find [authentik_sources_oauth.oauthsource, [slug, github-enrollment]]
|
|
||||||
- !Find [authentik_sources_oauth.oauthsource, [slug, google-enrollment]]
|
|
||||||
- identifiers:
|
|
||||||
name: alpina-enrollment-deny-existing-email
|
|
||||||
model: authentik_stages_deny.denystage
|
|
||||||
id: enrollment-deny-existing-email
|
|
||||||
attrs:
|
|
||||||
deny_message: "An account with this email already exists"
|
|
||||||
- identifiers:
|
|
||||||
name: alpina-enrollment-prompt-name-password
|
|
||||||
model: authentik_stages_prompt.promptstage
|
|
||||||
id: enrollment-prompt-name-password
|
|
||||||
attrs:
|
|
||||||
fields:
|
|
||||||
- !KeyOf prompt-field-name
|
|
||||||
- !KeyOf prompt-field-password
|
|
||||||
- !KeyOf prompt-field-password-repeat
|
|
||||||
validation_policies:
|
|
||||||
- !Find [authentik_policies_password.passwordpolicy, [name, default-password-change-password-policy]]
|
|
||||||
- identifiers:
|
|
||||||
name: alpina-enrollment-user-write
|
|
||||||
model: authentik_stages_user_write.userwritestage
|
|
||||||
id: enrollment-user-write
|
|
||||||
attrs:
|
|
||||||
user_type: internal
|
|
||||||
create_users_group: !Find [authentik_core.group, [name, {{ auth_default_enrollment_group }}]]
|
|
||||||
- identifiers:
|
|
||||||
name: alpina-enrollment-email-verify
|
|
||||||
model: authentik_stages_email.emailstage
|
|
||||||
id: enrollment-email-verify
|
|
||||||
attrs:
|
|
||||||
use_global_settings: true
|
|
||||||
template: email/account_confirmation.html
|
|
||||||
activate_user_on_success: true
|
|
||||||
- identifiers:
|
|
||||||
name: alpina-enrollment-user-login
|
|
||||||
model: authentik_stages_user_login.userloginstage
|
|
||||||
id: enrollment-user-login
|
|
||||||
|
|
||||||
# Policies
|
|
||||||
- identifiers:
|
|
||||||
name: alpina-enrollment-invited-used-policy
|
|
||||||
model: authentik_policies_event_matcher.eventmatcherpolicy
|
|
||||||
id: enrollment-invited-used-policy
|
|
||||||
attrs:
|
|
||||||
action: invitation_used
|
|
||||||
- identifiers:
|
|
||||||
name: alpina-enrollment-unique-email-policy
|
|
||||||
model: authentik_policies_expression.expressionpolicy
|
|
||||||
id: enrollment-unique-email-policy
|
|
||||||
attrs:
|
|
||||||
expression: |
|
|
||||||
# https://docs.goauthentik.io/docs/customize/policies/expression/unique_email
|
|
||||||
from authentik.core.models import User
|
|
||||||
email = request.context["flow_plan"].context["pending_user"].email
|
|
||||||
|
|
||||||
if User.objects.filter(email=email).exists():
|
|
||||||
ak_message("Email address in use")
|
|
||||||
return False
|
|
||||||
|
|
||||||
if request.context["flow_plan"].context.get("prompt_data") is None:
|
|
||||||
request.context["flow_plan"].context["prompt_data"] = {}
|
|
||||||
|
|
||||||
request.context["flow_plan"].context["prompt_data"]["email"] = email
|
|
||||||
request.context["flow_plan"].context["prompt_data"]["username"] = email
|
|
||||||
return True
|
|
||||||
|
|
||||||
- identifiers:
|
|
||||||
name: alpina-enrollment-user-write-add-groups-policy
|
|
||||||
model: authentik_policies_expression.expressionpolicy
|
|
||||||
id: enrollment-user-write-add-groups-policy
|
|
||||||
attrs:
|
|
||||||
expression: |
|
|
||||||
# https://docs.goauthentik.io/docs/add-secure-apps/flows-stages/stages/user_write
|
|
||||||
from authentik.core.models import Group
|
|
||||||
ak_logger.info("Adding groups", request=request, prompt_data=request.context["prompt_data"], invitation=request.context.get("invitation"))
|
|
||||||
|
|
||||||
requested_groups = request.context["prompt_data"].get("alpina_add_groups")
|
|
||||||
if requested_groups is None:
|
|
||||||
return True
|
|
||||||
|
|
||||||
groups = []
|
|
||||||
for group_name in requested_groups:
|
|
||||||
group, _ = Group.objects.get_or_create(name=group_name)
|
|
||||||
groups.append(group)
|
|
||||||
|
|
||||||
# ["groups"] *must* be set to an array of Group objects, names alone are not enough.
|
|
||||||
request.context["flow_plan"].context["groups"] = groups
|
|
||||||
return True
|
|
||||||
|
|
||||||
# Flow stage bindings
|
|
||||||
- identifiers:
|
|
||||||
target: !KeyOf flow
|
|
||||||
stage: !KeyOf enrollment-invitation
|
|
||||||
order: 0
|
|
||||||
model: authentik_flows.flowstagebinding
|
|
||||||
id: enrollment-invitation-binding
|
|
||||||
- identifiers:
|
|
||||||
target: !KeyOf flow
|
|
||||||
stage: !KeyOf enrollment-identification-oauth
|
|
||||||
order: 1
|
|
||||||
model: authentik_flows.flowstagebinding
|
|
||||||
- identifiers:
|
|
||||||
target: !KeyOf flow
|
|
||||||
stage: !KeyOf enrollment-deny-existing-email
|
|
||||||
order: 2
|
|
||||||
model: authentik_flows.flowstagebinding
|
|
||||||
id: enrollment-deny-existing-email-binding
|
|
||||||
- identifiers:
|
|
||||||
target: !KeyOf flow
|
|
||||||
stage: !KeyOf enrollment-prompt-name-password
|
|
||||||
order: 10
|
|
||||||
model: authentik_flows.flowstagebinding
|
|
||||||
- identifiers:
|
|
||||||
target: !KeyOf flow
|
|
||||||
stage: !KeyOf enrollment-user-write
|
|
||||||
order: 20
|
|
||||||
model: authentik_flows.flowstagebinding
|
|
||||||
id: enrollment-user-write-binding
|
|
||||||
- identifiers:
|
|
||||||
target: !KeyOf flow
|
|
||||||
stage: !KeyOf enrollment-email-verify
|
|
||||||
order: 30
|
|
||||||
model: authentik_flows.flowstagebinding
|
|
||||||
- identifiers:
|
|
||||||
target: !KeyOf flow
|
|
||||||
stage: !KeyOf enrollment-user-login
|
|
||||||
order: 100
|
|
||||||
model: authentik_flows.flowstagebinding
|
|
||||||
|
|
||||||
# Stage policy bindings
|
|
||||||
# Log used invitations
|
|
||||||
- identifiers:
|
|
||||||
target: !KeyOf enrollment-invitation-binding
|
|
||||||
policy: !KeyOf enrollment-invited-used-policy
|
|
||||||
order: 0
|
|
||||||
model: authentik_policies.policybinding
|
|
||||||
attrs:
|
|
||||||
negate: true
|
|
||||||
# Deny existing email addresses
|
|
||||||
- identifiers:
|
|
||||||
target: !KeyOf enrollment-deny-existing-email-binding
|
|
||||||
policy: !KeyOf enrollment-unique-email-policy
|
|
||||||
order: 0
|
|
||||||
model: authentik_policies.policybinding
|
|
||||||
attrs:
|
|
||||||
negate: true
|
|
||||||
# Add groups to user from invitation "alpina_add_groups" field
|
|
||||||
# This only work for email sign up, as the invitation flow context isn't
|
|
||||||
# preserved for the default-source-enrollment flow
|
|
||||||
- identifiers:
|
|
||||||
target: !KeyOf enrollment-user-write-binding
|
|
||||||
policy: !KeyOf enrollment-user-write-add-groups-policy
|
|
||||||
order: 0
|
|
||||||
model: authentik_policies.policybinding
|
|
||||||
@@ -1,45 +0,0 @@
|
|||||||
version: 1
|
|
||||||
metadata:
|
|
||||||
labels:
|
|
||||||
blueprints.goauthentik.io/instantiate: "true"
|
|
||||||
name: Alpina - Default Groups
|
|
||||||
entries:
|
|
||||||
- identifiers:
|
|
||||||
name: "admins"
|
|
||||||
model: authentik_core.group
|
|
||||||
id: "admins"
|
|
||||||
attrs:
|
|
||||||
is_superuser: true
|
|
||||||
|
|
||||||
- identifiers:
|
|
||||||
name: "users"
|
|
||||||
model: authentik_core.group
|
|
||||||
id: "users"
|
|
||||||
|
|
||||||
- identifiers:
|
|
||||||
name: "arrstack"
|
|
||||||
model: authentik_core.group
|
|
||||||
id: "arrstack"
|
|
||||||
attrs:
|
|
||||||
arrstack_username: "arr"
|
|
||||||
arrstack_password: "{{ arrstack_password }}"
|
|
||||||
|
|
||||||
- identifiers:
|
|
||||||
scope_name: "minio"
|
|
||||||
model: authentik_providers_oauth2.scopemapping
|
|
||||||
id: "scope-minio"
|
|
||||||
attrs:
|
|
||||||
name: "Minio Policy"
|
|
||||||
expression: |
|
|
||||||
policy = "default"
|
|
||||||
if ak_is_group_member(request.user, name="admins"):
|
|
||||||
policy = "consoleAdmin"
|
|
||||||
|
|
||||||
return {
|
|
||||||
"policy": policy,
|
|
||||||
}
|
|
||||||
|
|
||||||
- identifiers:
|
|
||||||
name: "vpgen"
|
|
||||||
model: authentik_core.group
|
|
||||||
id: "vpgen"
|
|
||||||
@@ -1,79 +0,0 @@
|
|||||||
version: 1
|
|
||||||
metadata:
|
|
||||||
labels:
|
|
||||||
blueprints.goauthentik.io/instantiate: "true"
|
|
||||||
name: Alpina - External OAuth
|
|
||||||
entries:
|
|
||||||
{% set sources = {
|
|
||||||
"GitHub": {
|
|
||||||
"provider_type": "github",
|
|
||||||
"consumer_key": github_consumer_key,
|
|
||||||
"consumer_secret": github_consumer_secret,
|
|
||||||
},
|
|
||||||
"Google": {
|
|
||||||
"provider_type": "google",
|
|
||||||
"consumer_key": google_consumer_key,
|
|
||||||
"consumer_secret": google_consumer_secret,
|
|
||||||
},
|
|
||||||
} -%}
|
|
||||||
{% for source in sources.keys() -%}
|
|
||||||
- identifiers:
|
|
||||||
slug: {{ source | lower }}-auth
|
|
||||||
model: authentik_sources_oauth.oauthsource
|
|
||||||
attrs:
|
|
||||||
provider_type: {{ sources[source]["provider_type"] }}
|
|
||||||
name: {{ source }} (Auth Only)
|
|
||||||
consumer_key: {{ sources[source]["consumer_key"] }}
|
|
||||||
consumer_secret: {{ sources[source]["consumer_secret"] }}
|
|
||||||
user_matching_mode: email_link
|
|
||||||
user_path_template: goauthentik.io/sources/%(slug)s
|
|
||||||
authentication_flow: !Find [authentik_flows.flow, [slug, default-source-authentication]]
|
|
||||||
- identifiers:
|
|
||||||
slug: {{ source | lower }}-enrollment
|
|
||||||
model: authentik_sources_oauth.oauthsource
|
|
||||||
attrs:
|
|
||||||
provider_type: {{ sources[source]["provider_type"] }}
|
|
||||||
name: {{ source }} (Auth and Enrollment)
|
|
||||||
consumer_key: {{ sources[source]["consumer_key"] }}
|
|
||||||
consumer_secret: {{ sources[source]["consumer_secret"] }}
|
|
||||||
user_matching_mode: email_link
|
|
||||||
user_path_template: goauthentik.io/sources/%(slug)s
|
|
||||||
authentication_flow: !Find [authentik_flows.flow, [slug, default-source-authentication]]
|
|
||||||
enrollment_flow: !Find [authentik_flows.flow, [slug, default-source-enrollment]]
|
|
||||||
{% endfor %}
|
|
||||||
|
|
||||||
# Modify default source enrollment to use email as username
|
|
||||||
- identifiers:
|
|
||||||
slug: default-source-enrollment
|
|
||||||
model: authentik_flows.flow
|
|
||||||
id: source-enrollment-flow
|
|
||||||
attrs:
|
|
||||||
policy_engine_mode: all
|
|
||||||
- identifiers:
|
|
||||||
name: alpina-email-as-username-policy
|
|
||||||
model: authentik_policies_expression.expressionpolicy
|
|
||||||
id: email-as-username-policy
|
|
||||||
attrs:
|
|
||||||
expression: |
|
|
||||||
# https://docs.goauthentik.io/docs/users-sources/sources/social-logins/google/#username-mapping
|
|
||||||
email = request.context["prompt_data"].get("email")
|
|
||||||
# Direct set username to email
|
|
||||||
request.context["prompt_data"]["username"] = email
|
|
||||||
# Set username to email without domain
|
|
||||||
# request.context["prompt_data"]["username"] = email.split("@")[0]
|
|
||||||
return True
|
|
||||||
- identifiers:
|
|
||||||
policy: !KeyOf email-as-username-policy
|
|
||||||
target: !KeyOf source-enrollment-flow
|
|
||||||
model: authentik_policies.policybinding
|
|
||||||
attrs:
|
|
||||||
order: 0
|
|
||||||
|
|
||||||
# Modify default source enrollment to create internal users
|
|
||||||
# with the internal user type and the users group
|
|
||||||
- identifiers:
|
|
||||||
name: default-source-enrollment-write
|
|
||||||
model: authentik_stages_user_write.userwritestage
|
|
||||||
attrs:
|
|
||||||
user_type: internal
|
|
||||||
create_users_group: !Find [authentik_core.group, [name, {{ auth_default_enrollment_group }}]]
|
|
||||||
@@ -5,94 +5,46 @@ metadata:
|
|||||||
name: Alpina - OAuth2 Apps
|
name: Alpina - OAuth2 Apps
|
||||||
entries:
|
entries:
|
||||||
{% set apps = {
|
{% set apps = {
|
||||||
"Grafana": {
|
|
||||||
"redirect_uri": "https://grafana."~ domain ~"/login/generic_oauth",
|
|
||||||
"icon": "https://grafana."~ domain ~"/public/img/grafana_icon.svg",
|
|
||||||
"client_secret": auth_grafana_client_secret,
|
|
||||||
"ui_group": "Services",
|
|
||||||
"allowed_for_groups": ["admins"],
|
|
||||||
},
|
|
||||||
"Minio": {
|
|
||||||
"redirect_uri": "https://minio."~ domain ~"/oauth_callback",
|
|
||||||
"icon": "https://minio."~ domain ~"/logo192.png",
|
|
||||||
"client_secret": auth_minio_client_secret,
|
|
||||||
"ui_group": "Services",
|
|
||||||
"allowed_for_groups": ["admins"],
|
|
||||||
},
|
|
||||||
"Gitea": {
|
"Gitea": {
|
||||||
"redirect_uri": "https://gitea."~ domain ~"/user/oauth2/Authentik/callback",
|
"redirect_uris": "https://gitea."~ domain ~"/user/oauth2/Authentik/callback",
|
||||||
"icon": "https://gitea."~ domain ~"/assets/img/logo.svg",
|
"icon": "https://gitea."~ domain ~"/assets/img/logo.svg",
|
||||||
"client_secret": auth_gitea_client_secret,
|
|
||||||
"ui_group": "Apps",
|
|
||||||
"allowed_for_groups": ["admins", "users"],
|
|
||||||
},
|
},
|
||||||
"Nextcloud": {
|
"Nextcloud": {
|
||||||
"redirect_uri": "https://nc."~ domain ~"/apps/sociallogin/custom_oidc/authentik",
|
"redirect_uris": "https://nc."~ domain ~"/apps/sociallogin/custom_oidc/authentik",
|
||||||
"icon": "https://nc."~ domain ~"/apps/theming/favicon",
|
"icon": "https://nc."~ domain ~"/apps/theming/favicon",
|
||||||
"client_secret": auth_nextcloud_client_secret,
|
|
||||||
"ui_group": "Apps",
|
|
||||||
"allowed_for_groups": ["admins", "users"],
|
|
||||||
},
|
|
||||||
"VPGen": {
|
|
||||||
"redirect_uri": "https://vpgen."~ domain ~"/auth/authentik/callback",
|
|
||||||
"icon": "https://vpgen."~ domain ~"/favicon.png",
|
|
||||||
"client_secret": auth_vpgen_client_secret,
|
|
||||||
"ui_group": "Apps",
|
|
||||||
"allowed_for_groups": ["admins", "users", "vpgen"],
|
|
||||||
},
|
|
||||||
"Pgrok": {
|
|
||||||
"redirect_uri": "https://pgrok."~ domain ~"/-/oidc/callback",
|
|
||||||
"icon": "https://pgrok."~ domain ~"/pgrok.svg",
|
|
||||||
"client_secret": auth_pgrok_client_secret,
|
|
||||||
"ui_group": "Apps",
|
|
||||||
"allowed_for_groups": ["admins", "users"],
|
|
||||||
},
|
},
|
||||||
} -%}
|
} -%}
|
||||||
{% for app in apps.keys() -%}
|
{% for app in apps.keys() -%}
|
||||||
- identifiers:
|
- identifiers:
|
||||||
name: {{ app }}
|
name: {{ app }}
|
||||||
model: authentik_providers_oauth2.oauth2provider
|
model: authentik_providers_oauth2.oauth2provider
|
||||||
id: {{ app }}
|
id: {{ app | lower }}
|
||||||
attrs:
|
attrs:
|
||||||
|
access_code_validity: minutes=1
|
||||||
|
access_token_validity: minutes=5
|
||||||
authorization_flow: !Find [authentik_flows.flow, [slug, default-provider-authorization-implicit-consent]]
|
authorization_flow: !Find [authentik_flows.flow, [slug, default-provider-authorization-implicit-consent]]
|
||||||
invalidation_flow: !Find [authentik_flows.flow, [slug, default-provider-invalidation-flow]]
|
|
||||||
client_type: confidential
|
client_type: confidential
|
||||||
client_id: {{ app | lower }}
|
issuer_mode: per_provider
|
||||||
client_secret: {{ apps[app]["client_secret"] }}
|
sub_mode: hashed_user_id
|
||||||
property_mappings:
|
property_mappings:
|
||||||
- !Find [authentik_providers_oauth2.scopemapping, [scope_name, openid]]
|
- !Find [authentik_providers_oauth2.scopemapping, [scope_name, openid]]
|
||||||
- !Find [authentik_providers_oauth2.scopemapping, [scope_name, email]]
|
- !Find [authentik_providers_oauth2.scopemapping, [scope_name, email]]
|
||||||
- !Find [authentik_providers_oauth2.scopemapping, [scope_name, profile]]
|
- !Find [authentik_providers_oauth2.scopemapping, [scope_name, profile]]
|
||||||
{% if app == "Minio" -%}
|
redirect_uris: {{ apps[app]["redirect_uris"] }}
|
||||||
- !Find [authentik_providers_oauth2.scopemapping, [scope_name, minio]]
|
refresh_token_validity: days=30
|
||||||
{%- endif %}
|
|
||||||
|
|
||||||
redirect_uris:
|
|
||||||
- matching_mode: strict
|
|
||||||
url: {{ apps[app]["redirect_uri"] }}
|
|
||||||
# Necessary for JWKS to be generated correctly
|
|
||||||
signing_key: !Find [authentik_crypto.certificatekeypair, [name, "authentik Self-signed Certificate"]]
|
signing_key: !Find [authentik_crypto.certificatekeypair, [name, "authentik Self-signed Certificate"]]
|
||||||
|
|
||||||
- identifiers:
|
- identifiers:
|
||||||
slug: {{ app | lower }}
|
slug: {{ app | lower }}
|
||||||
model: authentik_core.application
|
model: authentik_core.application
|
||||||
id: app-{{ app }}
|
id: {{ app | lower }}
|
||||||
attrs:
|
attrs:
|
||||||
name: {{ app }}
|
name: {{ app }}
|
||||||
group: "{{ apps[app]["ui_group"] }}"
|
group: "Apps"
|
||||||
meta_description: "Hello, I'm {{ app }}!"
|
meta_description: "Hello, I'm {{ app }}!"
|
||||||
meta_publisher: Alpina
|
meta_publisher: Alpina
|
||||||
icon: "{{ apps[app]["icon"] }}"
|
icon: "{{ apps[app]["icon"] }}"
|
||||||
open_in_new_tab: true
|
open_in_new_tab: true
|
||||||
provider: !KeyOf {{ app }}
|
policy_engine_mode: any
|
||||||
|
provider: !KeyOf {{ app | lower }}
|
||||||
{% for group in apps[app]["allowed_for_groups"] -%}
|
|
||||||
- identifiers:
|
|
||||||
group: !Find [authentik_core.group, [name, {{ group }}]]
|
|
||||||
target: !KeyOf app-{{ app }}
|
|
||||||
model: authentik_policies.policybinding
|
|
||||||
attrs:
|
|
||||||
order: 10
|
|
||||||
{% endfor %}
|
|
||||||
|
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
|
|||||||
@@ -4,54 +4,61 @@ metadata:
|
|||||||
blueprints.goauthentik.io/instantiate: "true"
|
blueprints.goauthentik.io/instantiate: "true"
|
||||||
name: Alpina - Proxied Apps
|
name: Alpina - Proxied Apps
|
||||||
entries:
|
entries:
|
||||||
# TODO: Possibly refactor this into a jinja macro (?)
|
- 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 = {
|
{% set apps = {
|
||||||
"Uptime Kuma": {
|
"uptime-kuma": {
|
||||||
"host": "uptime",
|
"host": "uptime",
|
||||||
|
"name": "Uptime Kuma",
|
||||||
"icon": "https://uptime."~ domain ~"/icon.svg",
|
"icon": "https://uptime."~ domain ~"/icon.svg",
|
||||||
"unauthenticated_paths": "^/icon.svg$",
|
"unauthenticated_paths": "^/icon.svg$",
|
||||||
"ui_group": "Services",
|
"group": "Services",
|
||||||
"allowed_for_groups": ["admins"],
|
"create_admin_group": true,
|
||||||
},
|
},
|
||||||
"Syncthing": {
|
"qbit": {
|
||||||
"host": "sync",
|
|
||||||
"icon": "https://sync."~ domain ~"/assets/img/favicon-default.png",
|
|
||||||
"unauthenticated_paths": "^/assets/img/favicon-default.png$",
|
|
||||||
"ui_group": "Apps",
|
|
||||||
"allowed_for_groups": ["admins"],
|
|
||||||
},
|
|
||||||
"qBit": {
|
|
||||||
"host": "qbit",
|
"host": "qbit",
|
||||||
|
"name": "qBit",
|
||||||
"icon": "https://qbit."~ domain ~"/images/qbittorrent-tray.svg",
|
"icon": "https://qbit."~ domain ~"/images/qbittorrent-tray.svg",
|
||||||
"unauthenticated_paths": "^/images/qbittorrent-tray.svg$",
|
"unauthenticated_paths": "^/images/qbittorrent-tray.svg$",
|
||||||
"ui_group": "Arrstack",
|
"group": "Arrstack",
|
||||||
"allowed_for_groups": ["arrstack"],
|
"create_admin_group": false,
|
||||||
},
|
},
|
||||||
"Prowlarr": {
|
"prowlarr": {
|
||||||
"host": "prowlarr",
|
"host": "prowlarr",
|
||||||
|
"name": "Prowlarr",
|
||||||
"icon": "https://prowlarr."~ domain ~"/Content/Images/logo.svg",
|
"icon": "https://prowlarr."~ domain ~"/Content/Images/logo.svg",
|
||||||
"unauthenticated_paths": "^/Content/Images/logo.svg$",
|
"unauthenticated_paths": "^/Content/Images/logo.svg$",
|
||||||
"ui_group": "Arrstack",
|
"group": "Arrstack",
|
||||||
"allowed_for_groups": ["arrstack"],
|
"create_admin_group": false,
|
||||||
},
|
},
|
||||||
"Sonarr": {
|
"sonarr": {
|
||||||
"host": "sonarr",
|
"host": "sonarr",
|
||||||
|
"name": "Sonarr",
|
||||||
"icon": "https://sonarr."~ domain ~"/Content/Images/logo.svg",
|
"icon": "https://sonarr."~ domain ~"/Content/Images/logo.svg",
|
||||||
"unauthenticated_paths": "^/Content/Images/logo.svg$",
|
"unauthenticated_paths": "^/Content/Images/logo.svg$",
|
||||||
"ui_group": "Arrstack",
|
"group": "Arrstack",
|
||||||
"allowed_for_groups": ["arrstack"],
|
"create_admin_group": false,
|
||||||
},
|
},
|
||||||
"Radarr": {
|
"radarr": {
|
||||||
"host": "radarr",
|
"host": "radarr",
|
||||||
|
"name": "Radarr",
|
||||||
"icon": "https://radarr."~ domain ~"/Content/Images/logo.svg",
|
"icon": "https://radarr."~ domain ~"/Content/Images/logo.svg",
|
||||||
"unauthenticated_paths": "^/Content/Images/logo.svg$",
|
"unauthenticated_paths": "^/Content/Images/logo.svg$",
|
||||||
"ui_group": "Arrstack",
|
"group": "Arrstack",
|
||||||
"allowed_for_groups": ["arrstack"],
|
"create_admin_group": false,
|
||||||
},
|
},
|
||||||
} -%}
|
} -%}
|
||||||
|
|
||||||
{% for app in apps.keys() -%}
|
{% for app in apps.keys() -%}
|
||||||
- identifiers:
|
- identifiers:
|
||||||
name: {{ app }}
|
name: {{ apps[app]["name"] }}
|
||||||
model: authentik_providers_proxy.proxyprovider
|
model: authentik_providers_proxy.proxyprovider
|
||||||
id: {{ app }}
|
id: {{ app }}
|
||||||
attrs:
|
attrs:
|
||||||
@@ -61,26 +68,39 @@ entries:
|
|||||||
skip_path_regex: "{{ apps[app]["unauthenticated_paths"] }}"
|
skip_path_regex: "{{ apps[app]["unauthenticated_paths"] }}"
|
||||||
|
|
||||||
- identifiers:
|
- identifiers:
|
||||||
slug: {{ app | lower | replace(" ", "-") }}
|
slug: {{ app }}
|
||||||
model: authentik_core.application
|
model: authentik_core.application
|
||||||
id: app-{{ app }}
|
|
||||||
attrs:
|
attrs:
|
||||||
name: {{ app }}
|
name: {{ apps[app]["name"] }}
|
||||||
group: {{ apps[app]["ui_group"] }}
|
group: {{ apps[app]["group"] }}
|
||||||
meta_description: "Hello, I'm {{ app }}!"
|
meta_description: "Hello, I'm {{ apps[app]["name"] }}!"
|
||||||
meta_publisher: Alpina
|
meta_publisher: Alpina
|
||||||
icon: "{{ apps[app]["icon"] }}"
|
icon: "{{ apps[app]["icon"] }}"
|
||||||
open_in_new_tab: true
|
open_in_new_tab: true
|
||||||
provider: !KeyOf {{ app }}
|
provider: !KeyOf {{ app }}
|
||||||
|
|
||||||
{% for group in apps[app]["allowed_for_groups"] -%}
|
{% if apps[app]["create_admin_group"] -%}
|
||||||
- identifiers:
|
- identifiers:
|
||||||
group: !Find [authentik_core.group, [name, {{ group }}]]
|
name: "{{ apps[app]["name"] }} Admins"
|
||||||
target: !KeyOf app-{{ app }}
|
model: authentik_core.group
|
||||||
|
id: "{{ app }} Admins"
|
||||||
|
|
||||||
|
- identifiers:
|
||||||
|
group: !KeyOf "{{ app }} Admins"
|
||||||
|
target: !Find [authentik_core.application, [ slug, {{ app }}] ]
|
||||||
model: authentik_policies.policybinding
|
model: authentik_policies.policybinding
|
||||||
attrs:
|
attrs:
|
||||||
order: 10
|
order: 0
|
||||||
{% endfor %}
|
{% 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 %}
|
{% endfor %}
|
||||||
|
|
||||||
|
|||||||
@@ -48,8 +48,7 @@ entries:
|
|||||||
passwordless_flow: !Find [authentik_flows.flow, [slug, authentication-passwordless-flow]]
|
passwordless_flow: !Find [authentik_flows.flow, [slug, authentication-passwordless-flow]]
|
||||||
sources:
|
sources:
|
||||||
- !Find [authentik_core.source, [slug, authentik-built-in]]
|
- !Find [authentik_core.source, [slug, authentik-built-in]]
|
||||||
- !Find [authentik_sources_oauth.oauthsource, [slug, github-auth]]
|
- !Find [authentik_sources_oauth.oauthsource, [slug, github]]
|
||||||
- !Find [authentik_sources_oauth.oauthsource, [slug, google-auth]]
|
|
||||||
|
|
||||||
# Enable compatibility mode for the default authentication flow for better autofill support
|
# Enable compatibility mode for the default authentication flow for better autofill support
|
||||||
- identifiers:
|
- identifiers:
|
||||||
|
|||||||
@@ -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 %}
|
||||||
@@ -2,6 +2,8 @@
|
|||||||
|
|
||||||
networks:
|
networks:
|
||||||
{{ helpers.default_network(253) | indent(2) }}
|
{{ helpers.default_network(253) | indent(2) }}
|
||||||
|
traefik_traefik:
|
||||||
|
external: true
|
||||||
|
|
||||||
services:
|
services:
|
||||||
server:
|
server:
|
||||||
@@ -15,11 +17,13 @@ services:
|
|||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
# Port forward is needed because traefik can't resolve the container name from the host network
|
# Port forward is needed because traefik can't resolve the container name from the host network
|
||||||
ports:
|
ports:
|
||||||
- "127.0.0.1:9000:9000"
|
- "9000:9000"
|
||||||
- "[::1]:9000:9000"
|
|
||||||
command: server
|
command: server
|
||||||
env_file:
|
env_file:
|
||||||
- .env.authentik
|
- .env.authentik
|
||||||
|
networks:
|
||||||
|
- default
|
||||||
|
- traefik_traefik
|
||||||
|
|
||||||
worker:
|
worker:
|
||||||
image: ghcr.io/goauthentik/server:latest
|
image: ghcr.io/goauthentik/server:latest
|
||||||
@@ -5,16 +5,11 @@ MINIO_DOMAIN=s3.{{ domain }}
|
|||||||
MINIO_SERVER_URL=https://s3.{{ domain }}
|
MINIO_SERVER_URL=https://s3.{{ domain }}
|
||||||
MINIO_BROWSER_REDIRECT_URL=https://minio.{{ domain }}
|
MINIO_BROWSER_REDIRECT_URL=https://minio.{{ domain }}
|
||||||
|
|
||||||
# https://min.io/docs/minio/linux/reference/minio-server/settings/iam/openid.html
|
#MINIO_IDENTITY_OPENID_CONFIG_URL=https://auth.{{ domain }}/application/o/minio/.well-known/openid-configuration
|
||||||
MINIO_IDENTITY_OPENID_CONFIG_URL=https://auth.{{ domain }}/application/o/minio/.well-known/openid-configuration
|
#MINIO_IDENTITY_OPENID_CLIENT_ID=
|
||||||
MINIO_IDENTITY_OPENID_CLIENT_ID=minio
|
#MINIO_IDENTITY_OPENID_CLIENT_SECRET=
|
||||||
MINIO_IDENTITY_OPENID_CLIENT_SECRET={{ auth_minio_client_secret }}
|
#MINIO_IDENTITY_OPENID_CLAIM_NAME=
|
||||||
# defaults to "policy"
|
#MINIO_IDENTITY_OPENID_CLAIM_PREFIX=
|
||||||
#MINIO_IDENTITY_OPENID_CLAIM_NAME=policy
|
#MINIO_IDENTITY_OPENID_SCOPES=
|
||||||
MINIO_IDENTITY_OPENID_DISPLAY_NAME=Authentik
|
#MINIO_IDENTITY_OPENID_REDIRECT_URI=
|
||||||
# no need to specify scopes,
|
|
||||||
# as it defaults to the ones advertised at the discovery url
|
|
||||||
#MINIO_IDENTITY_OPENID_SCOPES=openid,profile,email,minio
|
|
||||||
#MINIO_IDENTITY_OPENID_REDIRECT_URI_DYNAMIC=off
|
|
||||||
#MINIO_IDENTITY_OPENID_CLAIM_USERINFO=on
|
|
||||||
#MINIO_IDENTITY_OPENID_COMMENT=
|
#MINIO_IDENTITY_OPENID_COMMENT=
|
||||||
|
|||||||
@@ -1,19 +0,0 @@
|
|||||||
{% import 'contrib/compose_helpers.j2' as helpers with context %}
|
|
||||||
|
|
||||||
networks:
|
|
||||||
{{ helpers.default_network(252) | indent(2) }}
|
|
||||||
|
|
||||||
services:
|
|
||||||
minio:
|
|
||||||
image: minio/minio:latest
|
|
||||||
container_name: minio
|
|
||||||
labels:
|
|
||||||
- {{ helpers.traefik_labels('minio', port='9090') | indent(6) }}
|
|
||||||
- {{ helpers.traefik_labels('s3', port='9000') | indent(6) }}
|
|
||||||
- {{ helpers.traefik_labels('s3', port='9000', wildcard=true) | indent(6) }}
|
|
||||||
restart: unless-stopped
|
|
||||||
command: server --console-address ":9090" /data
|
|
||||||
env_file:
|
|
||||||
- .env.minio
|
|
||||||
volumes:
|
|
||||||
- {{ base_volume_path }}/minio/data:/data
|
|
||||||
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 @@
|
|||||||
|
DISCORD_WEBHOOK={{ alertmanager_discord_webhook }}
|
||||||
@@ -4,10 +4,6 @@ RUN pip install grafanalib
|
|||||||
|
|
||||||
COPY ./grafana_config/dashboards /dashboards
|
COPY ./grafana_config/dashboards /dashboards
|
||||||
|
|
||||||
# Required for grafanalib to find the shared python files like common.py
|
|
||||||
# https://github.com/weaveworks/grafanalib/issues/58
|
|
||||||
ENV PYTHONPATH=/dashboards
|
|
||||||
|
|
||||||
RUN generate-dashboards /dashboards/*.dashboard.py
|
RUN generate-dashboards /dashboards/*.dashboard.py
|
||||||
|
|
||||||
FROM grafana/grafana:latest
|
FROM grafana/grafana:latest
|
||||||
|
|||||||
@@ -0,0 +1,68 @@
|
|||||||
|
# The root route on which each incoming alert enters.
|
||||||
|
route:
|
||||||
|
group_by: ["alertname", "job"]
|
||||||
|
group_wait: 20s
|
||||||
|
group_interval: 5m
|
||||||
|
repeat_interval: 3h
|
||||||
|
receiver: discord_webhook
|
||||||
|
|
||||||
|
receivers:
|
||||||
|
- name: "discord_webhook"
|
||||||
|
discord_configs:
|
||||||
|
- webhook_url: "{{ alertmanager_discord_webhook }}"
|
||||||
|
{# - send_resolved: true#}
|
||||||
|
{# username: 'Alertmanager'#}
|
||||||
|
{# webhook_configs:#}
|
||||||
|
{# - send_resolved: true#}
|
||||||
|
{# url: '{{ alertmanager_discord_webhook }}'#}
|
||||||
|
{# username: 'Alertmanager'#}
|
||||||
|
{# icon_url: 'https://prometheus.io/assets/icon.png'#}
|
||||||
|
{# icon_emoji: ':alert:'#}
|
||||||
|
{# send_resolved: true#}
|
||||||
|
{# text: "{{ .CommonAnnotations.summary }}"#}
|
||||||
|
{# title: "{{ .CommonLabels.alertname }}"#}
|
||||||
|
{# color: '{{ if eq .Status "firing" }}#FF0000{{ else }}#00FF00{{ end }}'#}
|
||||||
|
{# footer: '{{ .CommonLabels.monitor }}'#}
|
||||||
|
{# footer_icon: 'https://prometheus.io/assets/icon.png'#}
|
||||||
|
{# actions:#}
|
||||||
|
{# - type: 'button'#}
|
||||||
|
{# text: 'Open in Grafana'#}
|
||||||
|
{# url: '{{ .ExternalURL }}'#}
|
||||||
|
{# style: 'primary'#}
|
||||||
|
{# send_resolved: true#}
|
||||||
|
{# confirm:#}
|
||||||
|
{# title: 'Are you sure?'#}
|
||||||
|
{# text: 'This will open Grafana in a new tab.'#}
|
||||||
|
{# ok_text: 'Yes'#}
|
||||||
|
{# dismiss_text: 'No'#}
|
||||||
|
{# fields:#}
|
||||||
|
{# - title: 'Description'#}
|
||||||
|
{# value: "{{ .CommonAnnotations.description }}"#}
|
||||||
|
{# short: false#}
|
||||||
|
{# - title: 'Details'#}
|
||||||
|
{# value: "{{ .CommonAnnotations.details }}"#}
|
||||||
|
{# short: false#}
|
||||||
|
{# - title: 'Severity'#}
|
||||||
|
{# value: '{{ if eq .Labels.severity "critical" }}Critical{{ else if eq .Labels.severity "warning" }}Warning{{ else }}Info{{ end }}'#}
|
||||||
|
{# short: true#}
|
||||||
|
{# - title: 'Host'#}
|
||||||
|
{# value: '{{ .CommonLabels.monitor }}'#}
|
||||||
|
{# short: true#}
|
||||||
|
{# - title: 'Starts At'#}
|
||||||
|
{# value: '{{ .StartsAt.Format "2006-01-02 15:04:05" }}'#}
|
||||||
|
{# short: true#}
|
||||||
|
{# - title: 'Ends At'#}
|
||||||
|
{# value: '{{ .EndsAt.Format "2006-01-02 15:04:05" }}'#}
|
||||||
|
{# short: true#}
|
||||||
|
{# - title: 'Runbook'#}
|
||||||
|
{# value: '{{ .CommonAnnotations.runbook_url }}'#}
|
||||||
|
{# short: true#}
|
||||||
|
{# - title: 'Dashboard'#}
|
||||||
|
{# value: '{{ .CommonAnnotations.dashboard_url }}'#}
|
||||||
|
{# short: true#}
|
||||||
|
{# - title: 'Alerting Rule'#}
|
||||||
|
{# value: '{{ .CommonLabels.alertname }}'#}
|
||||||
|
{# short: true#}
|
||||||
|
{# - title: 'Alerting Rule Description'#}
|
||||||
|
{# value: '{{ .CommonLabels.alertname }}'#}
|
||||||
|
{# short: true#}
|
||||||
@@ -2,6 +2,8 @@
|
|||||||
|
|
||||||
networks:
|
networks:
|
||||||
{{ helpers.default_network(251) | indent(2) }}
|
{{ helpers.default_network(251) | indent(2) }}
|
||||||
|
traefik_traefik:
|
||||||
|
external: true
|
||||||
|
|
||||||
services:
|
services:
|
||||||
grafana:
|
grafana:
|
||||||
@@ -15,6 +17,9 @@ services:
|
|||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
# Needed to make config files readable (not anymore, TODO: remove)
|
# Needed to make config files readable (not anymore, TODO: remove)
|
||||||
user: "{{ remote_uid }}"
|
user: "{{ remote_uid }}"
|
||||||
|
networks:
|
||||||
|
- default
|
||||||
|
- traefik_traefik
|
||||||
volumes:
|
volumes:
|
||||||
- {{ base_volume_path }}/monitoring/grafana:/var/lib/grafana
|
- {{ base_volume_path }}/monitoring/grafana:/var/lib/grafana
|
||||||
- ./grafana_config/grafana.ini:/etc/grafana/grafana.ini:ro
|
- ./grafana_config/grafana.ini:/etc/grafana/grafana.ini:ro
|
||||||
@@ -22,7 +27,7 @@ services:
|
|||||||
{# - ./grafana_config:/etc/grafana:ro#}
|
{# - ./grafana_config:/etc/grafana:ro#}
|
||||||
|
|
||||||
loki:
|
loki:
|
||||||
image: grafana/loki:3.6
|
image: grafana/loki:latest
|
||||||
container_name: loki
|
container_name: loki
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
# Needed to make config files readable (not anymore, TODO: remove)
|
# Needed to make config files readable (not anymore, TODO: remove)
|
||||||
@@ -31,8 +36,7 @@ services:
|
|||||||
- -config.file=/etc/loki/loki-config.yaml
|
- -config.file=/etc/loki/loki-config.yaml
|
||||||
# Port forward is needed because not possible to resolve the container name from the host network
|
# Port forward is needed because not possible to resolve the container name from the host network
|
||||||
ports:
|
ports:
|
||||||
- "127.0.0.1:3100:3100"
|
- 3100:3100
|
||||||
- "[::1]:3100:3100"
|
|
||||||
volumes:
|
volumes:
|
||||||
- {{ base_volume_path }}/monitoring/loki:/loki
|
- {{ base_volume_path }}/monitoring/loki:/loki
|
||||||
- ./loki_config:/etc/loki:ro
|
- ./loki_config:/etc/loki:ro
|
||||||
@@ -40,7 +44,7 @@ services:
|
|||||||
- /tmp/loki
|
- /tmp/loki
|
||||||
|
|
||||||
promtail:
|
promtail:
|
||||||
image: grafana/promtail:3.6
|
image: grafana/promtail:latest
|
||||||
container_name: promtail
|
container_name: promtail
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
command:
|
command:
|
||||||
@@ -56,17 +60,33 @@ services:
|
|||||||
prometheus:
|
prometheus:
|
||||||
image: prom/prometheus:latest
|
image: prom/prometheus:latest
|
||||||
container_name: prometheus
|
container_name: prometheus
|
||||||
|
labels:
|
||||||
|
- {{ helpers.traefik_labels('prom', port='9090') | indent(6) }}
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
# Needed to make config files readable (not anymore, TODO: remove)
|
# Needed to make config files readable (not anymore, TODO: remove)
|
||||||
user: "{{ remote_uid }}"
|
user: "{{ remote_uid }}"
|
||||||
command:
|
command:
|
||||||
- --config.file=/etc/prometheus/prometheus.yml
|
- --config.file=/etc/prometheus/prometheus.yml
|
||||||
- --storage.tsdb.retention.time=30d
|
- --storage.tsdb.retention.time=30d
|
||||||
|
- --web.external-url=https://prom.{{ domain }}/
|
||||||
volumes:
|
volumes:
|
||||||
- ./prometheus_config:/etc/prometheus:ro
|
- ./prometheus_config:/etc/prometheus:ro
|
||||||
- {{ base_volume_path }}/monitoring/prometheus_configs:/etc/prometheus/extra:ro
|
- {{ base_volume_path }}/monitoring/prometheus_configs:/etc/prometheus/extra:ro
|
||||||
- {{ base_volume_path }}/monitoring/prometheus:/prometheus
|
- {{ base_volume_path }}/monitoring/prometheus:/prometheus
|
||||||
|
|
||||||
|
alertmanager:
|
||||||
|
image: prom/alertmanager:latest
|
||||||
|
container_name: alertmanager
|
||||||
|
labels:
|
||||||
|
- {{ helpers.traefik_labels('alert', port='9093') | indent(6) }}
|
||||||
|
restart: unless-stopped
|
||||||
|
command:
|
||||||
|
- --config.file=/etc/alertmanager/alertmanager.yml
|
||||||
|
- --web.external-url=https://alert.{{ domain }}/
|
||||||
|
volumes:
|
||||||
|
- ./alertmanager_config:/etc/alertmanager:ro
|
||||||
|
- {{ base_volume_path }}/monitoring/alertmanager:/alertmanager
|
||||||
|
|
||||||
node-exporter:
|
node-exporter:
|
||||||
image: prom/node-exporter:latest
|
image: prom/node-exporter:latest
|
||||||
container_name: node-exporter
|
container_name: node-exporter
|
||||||
@@ -77,14 +97,9 @@ services:
|
|||||||
- /:/host:ro,rslave
|
- /:/host:ro,rslave
|
||||||
|
|
||||||
cadvisor:
|
cadvisor:
|
||||||
image: ghcr.io/google/cadvisor:v0.53.0
|
image: gcr.io/cadvisor/cadvisor:latest
|
||||||
container_name: cadvisor
|
container_name: cadvisor
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
command:
|
|
||||||
- --docker_only=true
|
|
||||||
- --store_container_labels=false
|
|
||||||
- --whitelisted_container_labels=com.docker.compose.project,com.docker.compose.service
|
|
||||||
- --enable_metrics=cpu,cpuLoad,diskIO,memory,network,oom_event,process
|
|
||||||
volumes:
|
volumes:
|
||||||
- /:/rootfs:ro
|
- /:/rootfs:ro
|
||||||
- /var/run:/var/run:rw
|
- /var/run:/var/run:rw
|
||||||
@@ -99,11 +114,14 @@ services:
|
|||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
env_file:
|
env_file:
|
||||||
- .env.influxdb
|
- .env.influxdb
|
||||||
|
networks:
|
||||||
|
- default
|
||||||
|
- traefik_traefik
|
||||||
volumes:
|
volumes:
|
||||||
- {{ base_volume_path }}/monitoring/influxdb:/var/lib/influxdb2
|
- {{ base_volume_path }}/monitoring/influxdb:/var/lib/influxdb2
|
||||||
|
|
||||||
uptime-kuma:
|
uptime-kuma:
|
||||||
image: louislam/uptime-kuma:2
|
image: louislam/uptime-kuma:1
|
||||||
container_name: uptime-kuma
|
container_name: uptime-kuma
|
||||||
labels:
|
labels:
|
||||||
- {{ helpers.traefik_labels('uptime', port='3001', auth=true) | indent(6) }}
|
- {{ helpers.traefik_labels('uptime', port='3001', auth=true) | indent(6) }}
|
||||||
@@ -3,7 +3,7 @@ apiVersion: 1
|
|||||||
providers:
|
providers:
|
||||||
- name: "Grafana"
|
- name: "Grafana"
|
||||||
org_id: 1
|
org_id: 1
|
||||||
folder: "Alpina"
|
folder: "Services"
|
||||||
type: "file"
|
type: "file"
|
||||||
options:
|
options:
|
||||||
path: "/etc/grafana/provisioning/dashboards"
|
path: "/etc/grafana/provisioning/dashboards"
|
||||||
|
|||||||
@@ -1,81 +0,0 @@
|
|||||||
from attrs import define
|
|
||||||
from grafanalib.core import Template, TimeSeries, Dashboard, HIDE_VARIABLE, Target
|
|
||||||
|
|
||||||
CONF_SUPPORT_LOKI = True
|
|
||||||
CONF_SUPPORT_ZFS = True
|
|
||||||
|
|
||||||
CONF_DATASOURCE_VAR_PROM = 'prom_datasource'
|
|
||||||
CONF_DATASOURCE_VAR_LOKI = 'loki_datasource'
|
|
||||||
|
|
||||||
prom_datasource = f'${{{CONF_DATASOURCE_VAR_PROM}}}'
|
|
||||||
loki_datasource = f'${{{CONF_DATASOURCE_VAR_LOKI}}}'
|
|
||||||
|
|
||||||
prom_template = Template(
|
|
||||||
name=CONF_DATASOURCE_VAR_PROM,
|
|
||||||
type='datasource',
|
|
||||||
label='Prometheus',
|
|
||||||
query='prometheus',
|
|
||||||
hide=HIDE_VARIABLE,
|
|
||||||
)
|
|
||||||
|
|
||||||
loki_template = Template(
|
|
||||||
name=CONF_DATASOURCE_VAR_LOKI,
|
|
||||||
type='datasource',
|
|
||||||
label='Loki',
|
|
||||||
query='loki',
|
|
||||||
hide=HIDE_VARIABLE,
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
@define
|
|
||||||
class MyDashboard(Dashboard):
|
|
||||||
"""Wrapper class for Dashboard with some default values"""
|
|
||||||
timezone: str = 'browser'
|
|
||||||
sharedCrosshair: bool = True
|
|
||||||
|
|
||||||
|
|
||||||
@define
|
|
||||||
class MyTimeSeries(TimeSeries):
|
|
||||||
"""Wrapper class for TimeSeries with some default values and custom fields"""
|
|
||||||
fillOpacity: int = 10
|
|
||||||
lineWidth: int = 1
|
|
||||||
showPoints: str = 'never'
|
|
||||||
tooltipMode: str = 'multi'
|
|
||||||
maxDataPoints: int = None
|
|
||||||
|
|
||||||
# new fields
|
|
||||||
axisCenteredZero: bool = False
|
|
||||||
|
|
||||||
def to_json_data(self):
|
|
||||||
data = super().to_json_data()
|
|
||||||
data['fieldConfig']['defaults']['custom']['axisCenteredZero'] = self.axisCenteredZero
|
|
||||||
return data
|
|
||||||
|
|
||||||
|
|
||||||
@define
|
|
||||||
class PromTarget(Target):
|
|
||||||
"""Wrapper class for Target with default prometheus datasource"""
|
|
||||||
datasource: str = prom_datasource
|
|
||||||
|
|
||||||
|
|
||||||
@define
|
|
||||||
class LokiTarget(object):
|
|
||||||
"""Custom class for Loki Target, because normal Target gave errors in grafana"""
|
|
||||||
expr: str
|
|
||||||
legendFormat: str
|
|
||||||
datasource: str = loki_datasource
|
|
||||||
refId: str = None
|
|
||||||
queryType: str = 'range'
|
|
||||||
|
|
||||||
def to_json_data(self):
|
|
||||||
return {
|
|
||||||
'datasource': self.datasource,
|
|
||||||
'expr': self.expr,
|
|
||||||
'legendFormat': self.legendFormat,
|
|
||||||
'refId': self.refId,
|
|
||||||
'queryType': self.queryType,
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
def filter_none(l: list):
|
|
||||||
return [i for i in l if i is not None]
|
|
||||||
@@ -1,20 +1,32 @@
|
|||||||
from grafanalib.core import GridPos, Templating, Template, Logs
|
from grafanalib.core import (
|
||||||
|
Dashboard, TimeSeries,
|
||||||
|
Target, GridPos,
|
||||||
|
Templating, Template, REFRESH_ON_TIME_RANGE_CHANGE, Logs
|
||||||
|
)
|
||||||
from grafanalib.formatunits import BYTES_IEC, SECONDS, BYTES_SEC_IEC
|
from grafanalib.formatunits import BYTES_IEC, SECONDS, BYTES_SEC_IEC
|
||||||
|
|
||||||
from common import LokiTarget, prom_template, loki_template, MyTimeSeries, MyDashboard, CONF_SUPPORT_LOKI, filter_none, \
|
prom_datasource='prometheus'
|
||||||
prom_datasource, PromTarget
|
loki_datasource='loki'
|
||||||
|
|
||||||
dashboard = MyDashboard(
|
# TODO: this is (clown emoji), normal Target gave me errors in grafana
|
||||||
|
class LokiTarget(object):
|
||||||
|
def to_json_data(self):
|
||||||
|
return {
|
||||||
|
'datasource': loki_datasource,
|
||||||
|
'expr': '{compose_project=~"$compose_project", container_name=~"$container_name"} |= `$logs_query`',
|
||||||
|
'legendFormat': '{{ container_name }}',
|
||||||
|
'refId': 'A',
|
||||||
|
'queryType': 'range',
|
||||||
|
}
|
||||||
|
|
||||||
|
dashboard = Dashboard(
|
||||||
title='Containers',
|
title='Containers',
|
||||||
uid='containers',
|
uid='containers',
|
||||||
description='Data for compose projects from default Prometheus datasource collected by Cadvisor',
|
description='Data for compose projects from default Prometheus datasource collected by Cadvisor',
|
||||||
tags=[
|
tags=[
|
||||||
'linux',
|
'example'
|
||||||
'docker',
|
|
||||||
],
|
],
|
||||||
templating=Templating(list=filter_none([
|
templating=Templating(list=[
|
||||||
prom_template,
|
|
||||||
loki_template if CONF_SUPPORT_LOKI else None,
|
|
||||||
Template(
|
Template(
|
||||||
name='compose_project',
|
name='compose_project',
|
||||||
label='Compose Project',
|
label='Compose Project',
|
||||||
@@ -22,6 +34,7 @@ dashboard = MyDashboard(
|
|||||||
query='label_values({__name__=~"container.*"}, container_label_com_docker_compose_project)',
|
query='label_values({__name__=~"container.*"}, container_label_com_docker_compose_project)',
|
||||||
includeAll=True,
|
includeAll=True,
|
||||||
multi=True,
|
multi=True,
|
||||||
|
refresh=REFRESH_ON_TIME_RANGE_CHANGE,
|
||||||
),
|
),
|
||||||
Template(
|
Template(
|
||||||
name='container_name',
|
name='container_name',
|
||||||
@@ -30,6 +43,8 @@ dashboard = MyDashboard(
|
|||||||
query='label_values({__name__=~"container.*", container_label_com_docker_compose_project=~"$compose_project"}, name)',
|
query='label_values({__name__=~"container.*", container_label_com_docker_compose_project=~"$compose_project"}, name)',
|
||||||
includeAll=True,
|
includeAll=True,
|
||||||
multi=True,
|
multi=True,
|
||||||
|
refresh=REFRESH_ON_TIME_RANGE_CHANGE,
|
||||||
|
|
||||||
),
|
),
|
||||||
Template(
|
Template(
|
||||||
name='logs_query',
|
name='logs_query',
|
||||||
@@ -37,52 +52,73 @@ dashboard = MyDashboard(
|
|||||||
query='',
|
query='',
|
||||||
type='textbox',
|
type='textbox',
|
||||||
),
|
),
|
||||||
])),
|
]),
|
||||||
panels=filter_none([
|
timezone='browser',
|
||||||
MyTimeSeries(
|
panels=[
|
||||||
|
TimeSeries(
|
||||||
|
id=1,
|
||||||
title='Container Memory Usage',
|
title='Container Memory Usage',
|
||||||
unit=BYTES_IEC,
|
unit=BYTES_IEC,
|
||||||
gridPos=GridPos(h=8, w=12, x=0, y=0),
|
gridPos=GridPos(h=8, w=12, x=0, y=0),
|
||||||
tooltipSort='desc',
|
lineWidth=2,
|
||||||
|
fillOpacity=10,
|
||||||
|
showPoints='never',
|
||||||
stacking={'mode': 'normal'},
|
stacking={'mode': 'normal'},
|
||||||
|
tooltipMode='all',
|
||||||
|
tooltipSort='desc',
|
||||||
targets=[
|
targets=[
|
||||||
PromTarget(
|
Target(
|
||||||
|
datasource=prom_datasource,
|
||||||
expr='max by (name) (container_memory_usage_bytes{name=~"$container_name", container_label_com_docker_compose_project=~"$compose_project"})',
|
expr='max by (name) (container_memory_usage_bytes{name=~"$container_name", container_label_com_docker_compose_project=~"$compose_project"})',
|
||||||
legendFormat='{{ name }}',
|
legendFormat='{{ name }}',
|
||||||
|
refId='A',
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
MyTimeSeries(
|
TimeSeries(
|
||||||
|
id=2,
|
||||||
title='Container CPU Usage',
|
title='Container CPU Usage',
|
||||||
unit=SECONDS,
|
unit=SECONDS,
|
||||||
gridPos=GridPos(h=8, w=12, x=12, y=0),
|
gridPos=GridPos(h=8, w=12, x=12, y=0),
|
||||||
tooltipSort='desc',
|
lineWidth=2,
|
||||||
stacking={'mode': 'normal'},
|
fillOpacity=10,
|
||||||
|
showPoints='never',
|
||||||
targets=[
|
targets=[
|
||||||
PromTarget(
|
Target(
|
||||||
expr='max by (name) (irate(container_cpu_usage_seconds_total{name=~"$container_name", container_label_com_docker_compose_project=~"$compose_project"}[$__rate_interval]))',
|
datasource=prom_datasource,
|
||||||
|
expr='max by (name) (rate(container_cpu_usage_seconds_total{name=~"$container_name", container_label_com_docker_compose_project=~"$compose_project"}[$__rate_interval]))',
|
||||||
legendFormat='{{ name }}',
|
legendFormat='{{ name }}',
|
||||||
|
refId='A',
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
MyTimeSeries(
|
TimeSeries(
|
||||||
|
id=3,
|
||||||
title='Container Network Traffic',
|
title='Container Network Traffic',
|
||||||
unit=BYTES_SEC_IEC,
|
unit=BYTES_SEC_IEC,
|
||||||
gridPos=GridPos(h=8, w=12, x=0, y=8),
|
gridPos=GridPos(h=8, w=12, x=0, y=8),
|
||||||
|
lineWidth=2,
|
||||||
|
fillOpacity=10,
|
||||||
|
showPoints='never',
|
||||||
|
tooltipMode='all',
|
||||||
tooltipSort='desc',
|
tooltipSort='desc',
|
||||||
axisCenteredZero=True,
|
|
||||||
targets=[
|
targets=[
|
||||||
PromTarget(
|
Target(
|
||||||
expr='max by (name) (irate(container_network_receive_bytes_total{name=~"$container_name", container_label_com_docker_compose_project=~"$compose_project"}[$__rate_interval]))',
|
datasource=prom_datasource,
|
||||||
|
expr='max by (name) (rate(container_network_receive_bytes_total{name=~"$container_name", container_label_com_docker_compose_project=~"$compose_project"}[$__rate_interval]))',
|
||||||
legendFormat="rx {{ name }}",
|
legendFormat="rx {{ name }}",
|
||||||
|
refId='A',
|
||||||
),
|
),
|
||||||
PromTarget(
|
Target(
|
||||||
expr='-max by (name) (irate(container_network_transmit_bytes_total{name=~"$container_name", container_label_com_docker_compose_project=~"$compose_project"}[$__rate_interval]))',
|
datasource=prom_datasource,
|
||||||
|
expr='-max by (name) (rate(container_network_transmit_bytes_total{name=~"$container_name", container_label_com_docker_compose_project=~"$compose_project"}[$__rate_interval]))',
|
||||||
legendFormat="tx {{ name }}",
|
legendFormat="tx {{ name }}",
|
||||||
|
refId='B',
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
Logs(
|
Logs(
|
||||||
|
id=4,
|
||||||
title='',
|
title='',
|
||||||
gridPos=GridPos(h=8, w=12, x=12, y=8),
|
gridPos=GridPos(h=8, w=12, x=12, y=8),
|
||||||
showLabels=True,
|
showLabels=True,
|
||||||
@@ -91,11 +127,14 @@ dashboard = MyDashboard(
|
|||||||
prettifyLogMessage=True,
|
prettifyLogMessage=True,
|
||||||
dedupStrategy='numbers',
|
dedupStrategy='numbers',
|
||||||
targets=[
|
targets=[
|
||||||
LokiTarget(
|
LokiTarget(),
|
||||||
expr='{compose_project=~"$compose_project", container_name=~"$container_name"} |= `$logs_query`',
|
# Target(
|
||||||
legendFormat='{{ container_name }}',
|
# datasource=loki_datasource,
|
||||||
|
# expr='{compose_project=~"$compose_project", container_name=~"$container_name"} |= `$logs_query`',
|
||||||
|
# legendFormat='{{ container_name }}',
|
||||||
|
# refId='A',
|
||||||
|
# ),
|
||||||
|
],
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
) if CONF_SUPPORT_LOKI else None,
|
|
||||||
]),
|
|
||||||
).auto_panel_ids()
|
).auto_panel_ids()
|
||||||
|
|||||||
@@ -0,0 +1,51 @@
|
|||||||
|
from grafanalib.core import (
|
||||||
|
Dashboard, TimeSeries, GaugePanel,
|
||||||
|
Target, GridPos,
|
||||||
|
OPS_FORMAT
|
||||||
|
)
|
||||||
|
|
||||||
|
dashboard = Dashboard(
|
||||||
|
title="Python generated example dashboard",
|
||||||
|
description="Example dashboard using the Random Walk and default Prometheus datasource",
|
||||||
|
tags=[
|
||||||
|
'example'
|
||||||
|
],
|
||||||
|
timezone="browser",
|
||||||
|
panels=[
|
||||||
|
TimeSeries(
|
||||||
|
title="Random Walk",
|
||||||
|
dataSource='default',
|
||||||
|
targets=[
|
||||||
|
Target(
|
||||||
|
datasource='grafana',
|
||||||
|
expr='example',
|
||||||
|
),
|
||||||
|
],
|
||||||
|
gridPos=GridPos(h=8, w=16, x=0, y=0),
|
||||||
|
),
|
||||||
|
GaugePanel(
|
||||||
|
title="Random Walk",
|
||||||
|
dataSource='default',
|
||||||
|
targets=[
|
||||||
|
Target(
|
||||||
|
datasource='grafana',
|
||||||
|
expr='example',
|
||||||
|
),
|
||||||
|
],
|
||||||
|
gridPos=GridPos(h=4, w=4, x=17, y=0),
|
||||||
|
),
|
||||||
|
TimeSeries(
|
||||||
|
title="Prometheus http requests",
|
||||||
|
dataSource='prometheus',
|
||||||
|
targets=[
|
||||||
|
Target(
|
||||||
|
expr='rate(prometheus_http_requests_total[5m])',
|
||||||
|
legendFormat="{{ handler }}",
|
||||||
|
refId='A',
|
||||||
|
),
|
||||||
|
],
|
||||||
|
unit=OPS_FORMAT,
|
||||||
|
gridPos=GridPos(h=8, w=16, x=0, y=10),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
).auto_panel_ids()
|
||||||
@@ -1,159 +0,0 @@
|
|||||||
from grafanalib.core import Templating, Template, GridPos
|
|
||||||
from grafanalib.formatunits import BYTES_IEC, BITS_SEC, PERCENT_UNIT
|
|
||||||
|
|
||||||
from common import prom_template, MyTimeSeries, MyDashboard, CONF_SUPPORT_ZFS, PromTarget, prom_datasource
|
|
||||||
|
|
||||||
dashboard = MyDashboard(
|
|
||||||
title='Node Exporter',
|
|
||||||
uid='node',
|
|
||||||
description='Node Exporter (not quite full)',
|
|
||||||
tags=[
|
|
||||||
'linux',
|
|
||||||
],
|
|
||||||
templating=Templating(list=[
|
|
||||||
# Datasource
|
|
||||||
prom_template,
|
|
||||||
# Job
|
|
||||||
Template(
|
|
||||||
name='job',
|
|
||||||
label='Job',
|
|
||||||
dataSource=prom_datasource,
|
|
||||||
query='label_values(node_uname_info, job)',
|
|
||||||
),
|
|
||||||
# Instance
|
|
||||||
Template(
|
|
||||||
name='instance',
|
|
||||||
label='Instance',
|
|
||||||
dataSource=prom_datasource,
|
|
||||||
query='label_values(node_uname_info{job="$job"}, instance)',
|
|
||||||
),
|
|
||||||
]),
|
|
||||||
panels=[
|
|
||||||
# CPU Basic
|
|
||||||
MyTimeSeries(
|
|
||||||
title='CPU Basic',
|
|
||||||
description='Basic CPU usage info',
|
|
||||||
unit=PERCENT_UNIT,
|
|
||||||
gridPos=GridPos(h=8, w=12, x=0, y=0),
|
|
||||||
stacking={'mode': 'percent'},
|
|
||||||
targets=[
|
|
||||||
PromTarget(
|
|
||||||
expr='sum(irate(node_cpu_seconds_total{instance="$instance",job="$job", mode="system"}[$__rate_interval])) / scalar(count(count(node_cpu_seconds_total{instance="$instance",job="$job"}) by (cpu)))',
|
|
||||||
legendFormat='Busy System',
|
|
||||||
),
|
|
||||||
PromTarget(
|
|
||||||
expr='sum(irate(node_cpu_seconds_total{instance="$instance",job="$job", mode="user"}[$__rate_interval])) / scalar(count(count(node_cpu_seconds_total{instance="$instance",job="$job"}) by (cpu)))',
|
|
||||||
legendFormat='Busy User',
|
|
||||||
),
|
|
||||||
PromTarget(
|
|
||||||
expr='sum(irate(node_cpu_seconds_total{instance="$instance",job="$job", mode="iowait"}[$__rate_interval])) / scalar(count(count(node_cpu_seconds_total{instance="$instance",job="$job"}) by (cpu)))',
|
|
||||||
legendFormat='Busy Iowait',
|
|
||||||
),
|
|
||||||
PromTarget(
|
|
||||||
expr='sum(irate(node_cpu_seconds_total{instance="$instance",job="$job", mode=~".*irq"}[$__rate_interval])) / scalar(count(count(node_cpu_seconds_total{instance="$instance",job="$job"}) by (cpu)))',
|
|
||||||
legendFormat='Busy IRQs',
|
|
||||||
),
|
|
||||||
PromTarget(
|
|
||||||
expr='sum(irate(node_cpu_seconds_total{instance="$instance",job="$job", mode!="idle",mode!="user",mode!="system",mode!="iowait",mode!="irq",mode!="softirq"}[$__rate_interval])) / scalar(count(count(node_cpu_seconds_total{instance="$instance",job="$job"}) by (cpu)))',
|
|
||||||
legendFormat='Busy Other',
|
|
||||||
),
|
|
||||||
PromTarget(
|
|
||||||
expr='sum(irate(node_cpu_seconds_total{instance="$instance",job="$job", mode="idle"}[$__rate_interval])) / scalar(count(count(node_cpu_seconds_total{instance="$instance",job="$job"}) by (cpu)))',
|
|
||||||
legendFormat='Idle',
|
|
||||||
),
|
|
||||||
],
|
|
||||||
),
|
|
||||||
# Memory Basic
|
|
||||||
MyTimeSeries(
|
|
||||||
title='Memory Basic',
|
|
||||||
description='Basic memory usage',
|
|
||||||
unit=BYTES_IEC,
|
|
||||||
gridPos=GridPos(h=8, w=12, x=12, y=0),
|
|
||||||
stacking={'mode': 'normal'},
|
|
||||||
valueMin=0,
|
|
||||||
targets=[
|
|
||||||
PromTarget(
|
|
||||||
expr='node_memory_MemTotal_bytes{instance="$instance",job="$job"}',
|
|
||||||
format='time_series',
|
|
||||||
legendFormat='RAM Total',
|
|
||||||
),
|
|
||||||
PromTarget(
|
|
||||||
expr='node_memory_MemTotal_bytes{instance="$instance",job="$job"} - node_memory_MemFree_bytes{instance="$instance",job="$job"} - (node_memory_Cached_bytes{instance="$instance",job="$job"} + node_memory_Buffers_bytes{instance="$instance",job="$job"} + node_memory_SReclaimable_bytes{instance="$instance",job="$job"})',
|
|
||||||
format='time_series',
|
|
||||||
legendFormat='RAM Used',
|
|
||||||
hide=CONF_SUPPORT_ZFS,
|
|
||||||
),
|
|
||||||
PromTarget(
|
|
||||||
expr='node_memory_MemTotal_bytes{instance="$instance",job="$job"} - node_memory_MemFree_bytes{instance="$instance",job="$job"} - (node_memory_Cached_bytes{instance="$instance",job="$job"} + node_memory_Buffers_bytes{instance="$instance",job="$job"} + node_memory_SReclaimable_bytes{instance="$instance",job="$job"}) - node_zfs_arc_size{instance="$instance",job="$job"}',
|
|
||||||
format='time_series',
|
|
||||||
legendFormat='RAM Used',
|
|
||||||
hide=not CONF_SUPPORT_ZFS,
|
|
||||||
),
|
|
||||||
PromTarget(
|
|
||||||
expr='node_memory_Cached_bytes{instance="$instance",job="$job"} + node_memory_Buffers_bytes{instance="$instance",job="$job"} + node_memory_SReclaimable_bytes{instance="$instance",job="$job"}',
|
|
||||||
legendFormat='RAM Cache + Buffer',
|
|
||||||
),
|
|
||||||
PromTarget(
|
|
||||||
expr='node_zfs_arc_size{instance="$instance",job="$job"}',
|
|
||||||
legendFormat='ZFS Arc',
|
|
||||||
hide=not CONF_SUPPORT_ZFS,
|
|
||||||
),
|
|
||||||
PromTarget(
|
|
||||||
expr='node_memory_MemFree_bytes{instance="$instance",job="$job"}',
|
|
||||||
legendFormat='RAM Free',
|
|
||||||
),
|
|
||||||
PromTarget(
|
|
||||||
expr='(node_memory_SwapTotal_bytes{instance="$instance",job="$job"} - node_memory_SwapFree_bytes{instance="$instance",job="$job"})',
|
|
||||||
legendFormat='SWAP Used',
|
|
||||||
),
|
|
||||||
],
|
|
||||||
overrides=[
|
|
||||||
# Prevent total memory from being stacked
|
|
||||||
{
|
|
||||||
'matcher': {
|
|
||||||
'id': 'byName',
|
|
||||||
'options': 'RAM Total'
|
|
||||||
},
|
|
||||||
'properties': [
|
|
||||||
{
|
|
||||||
'id': 'custom.stacking',
|
|
||||||
'value': {'mode': 'none'}
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
],
|
|
||||||
),
|
|
||||||
# Network Traffic Basic
|
|
||||||
MyTimeSeries(
|
|
||||||
title='Network Traffic Basic',
|
|
||||||
description='Basic network usage info per interface',
|
|
||||||
unit=BITS_SEC,
|
|
||||||
gridPos=GridPos(h=8, w=12, x=0, y=8),
|
|
||||||
tooltipSort='desc',
|
|
||||||
axisCenteredZero=True,
|
|
||||||
targets=[
|
|
||||||
PromTarget(
|
|
||||||
expr='irate(node_network_receive_bytes_total{instance="$instance",job="$job"}[$__rate_interval]) * 8',
|
|
||||||
legendFormat='rx {{ device }}',
|
|
||||||
),
|
|
||||||
PromTarget(
|
|
||||||
expr='-irate(node_network_transmit_bytes_total{instance="$instance",job="$job"}[$__rate_interval]) * 8',
|
|
||||||
legendFormat='tx {{ device }}',
|
|
||||||
),
|
|
||||||
],
|
|
||||||
),
|
|
||||||
# Disk Space Basic
|
|
||||||
MyTimeSeries(
|
|
||||||
title='Disk Space Used Basic',
|
|
||||||
description='Disk space used of all filesystems mounted',
|
|
||||||
unit=PERCENT_UNIT,
|
|
||||||
gridPos=GridPos(h=8, w=12, x=12, y=8),
|
|
||||||
targets=[
|
|
||||||
PromTarget(
|
|
||||||
expr='1 - (node_filesystem_avail_bytes{instance="$instance",job="$job",device!~"rootfs"} / node_filesystem_size_bytes{instance="$instance",job="$job",device!~"rootfs"})',
|
|
||||||
legendFormat='{{ mountpoint }}',
|
|
||||||
),
|
|
||||||
],
|
|
||||||
),
|
|
||||||
],
|
|
||||||
).auto_panel_ids()
|
|
||||||
@@ -15,6 +15,18 @@ datasources:
|
|||||||
url: http://prometheus:9090
|
url: http://prometheus:9090
|
||||||
editable: false
|
editable: false
|
||||||
|
|
||||||
|
- name: Alertmanager
|
||||||
|
type: alertmanager
|
||||||
|
access: proxy
|
||||||
|
uid: alertmanager
|
||||||
|
url: http://alertmanager:9093
|
||||||
|
jsonData:
|
||||||
|
# Valid options for implementation include mimir, cortex and prometheus
|
||||||
|
implementation: prometheus
|
||||||
|
# Whether Grafana should send alert instances to this Alertmanager
|
||||||
|
handleGrafanaManagedAlerts: true
|
||||||
|
editable: false
|
||||||
|
|
||||||
- name: InfluxDB
|
- name: InfluxDB
|
||||||
type: influxdb
|
type: influxdb
|
||||||
access: proxy
|
access: proxy
|
||||||
|
|||||||
@@ -31,4 +31,4 @@ name_attribute_path = name
|
|||||||
|
|
||||||
# Optionally map user groups to Grafana roles
|
# Optionally map user groups to Grafana roles
|
||||||
allow_assign_grafana_admin = true
|
allow_assign_grafana_admin = true
|
||||||
role_attribute_path = contains(groups[*], 'admins') && 'GrafanaAdmin' || 'Viewer'
|
role_attribute_path = contains(groups[*], 'Grafana Admins') && 'GrafanaAdmin' || 'Viewer'
|
||||||
|
|||||||
@@ -17,6 +17,13 @@ common:
|
|||||||
|
|
||||||
schema_config:
|
schema_config:
|
||||||
configs:
|
configs:
|
||||||
|
- from: 2020-10-24
|
||||||
|
store: boltdb-shipper
|
||||||
|
object_store: filesystem
|
||||||
|
schema: v12
|
||||||
|
index:
|
||||||
|
prefix: index_
|
||||||
|
period: 24h
|
||||||
- from: 2024-10-18
|
- from: 2024-10-18
|
||||||
index:
|
index:
|
||||||
period: 24h
|
period: 24h
|
||||||
@@ -26,5 +33,5 @@ schema_config:
|
|||||||
store: tsdb
|
store: tsdb
|
||||||
|
|
||||||
# TODO: Figure this out
|
# TODO: Figure this out
|
||||||
# ruler:
|
ruler:
|
||||||
# alertmanager_url: http://localhost:9093
|
alertmanager_url: http://localhost:9093
|
||||||
|
|||||||
@@ -0,0 +1,23 @@
|
|||||||
|
groups:
|
||||||
|
- name: qbit-low-traffic
|
||||||
|
interval: 1m
|
||||||
|
rules:
|
||||||
|
- alert: QbitLowTraffic
|
||||||
|
expr: |
|
||||||
|
rate(container_network_transmit_bytes_total{name=~"gluetun"}[1m]) < 1024
|
||||||
|
for: 2m
|
||||||
|
labels:
|
||||||
|
severity: warning
|
||||||
|
annotations:
|
||||||
|
title: 'Low traffic on qBit'
|
||||||
|
description: |
|
||||||
|
The traffic on qBittorrent is lower than 1KiB/s for 2 minutes.
|
||||||
|
|
||||||
|
Last value was x bytes/s.
|
||||||
|
|
||||||
|
[Grafana Dashboard](https://grafana.{{ domain }}/d/containers?orgId=1)
|
||||||
|
[View in Grafana](https://grafana.{{ domain }}/d/containers?orgId=1&viewPanel=3)
|
||||||
|
|
||||||
|
__dashboard__uid: 'containers'
|
||||||
|
__orgId__: 1
|
||||||
|
__panelId__: 3
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
groups:
|
||||||
|
- name: demo-service-alerts
|
||||||
|
rules:
|
||||||
|
- alert: DemoServiceHighErrorRate
|
||||||
|
expr: |
|
||||||
|
(
|
||||||
|
sum without(status, instance) (
|
||||||
|
rate(demo_api_request_duration_seconds_count{status=~"5..",job="demo"}[1m])
|
||||||
|
)
|
||||||
|
/
|
||||||
|
sum without(status, instance) (
|
||||||
|
rate(demo_api_request_duration_seconds_count{job="demo"}[1m])
|
||||||
|
) * 100 > 0.5
|
||||||
|
)
|
||||||
|
for: 1m
|
||||||
|
labels:
|
||||||
|
severity: critical
|
||||||
|
annotations:
|
||||||
|
title: 'High 5xx rate for {{'{{ $labels.method }}'}} on {{'{{ $labels.path }}'}}'
|
||||||
|
description: 'The 5xx error rate for path {{'{{ $labels.path }}'}} with method {{'{{ $labels.method }}'}} in {{'{{ $labels.job }}'}} is {{'{{ printf "%.2f" $value }}'}}%.'
|
||||||
@@ -5,6 +5,11 @@ global:
|
|||||||
external_labels:
|
external_labels:
|
||||||
monitor: "{{ ansible_host }}"
|
monitor: "{{ ansible_host }}"
|
||||||
|
|
||||||
|
alerting:
|
||||||
|
alertmanagers:
|
||||||
|
- static_configs:
|
||||||
|
- targets: ["alertmanager:9093"]
|
||||||
|
|
||||||
scrape_configs:
|
scrape_configs:
|
||||||
- job_name: "prometheus"
|
- job_name: "prometheus"
|
||||||
static_configs:
|
static_configs:
|
||||||
@@ -30,7 +35,15 @@ scrape_configs:
|
|||||||
static_configs:
|
static_configs:
|
||||||
- targets: ["promtail:9080"]
|
- targets: ["promtail:9080"]
|
||||||
|
|
||||||
|
- job_name: 'demo'
|
||||||
|
static_configs:
|
||||||
|
- targets:
|
||||||
|
- 'demo.promlabs.com:10000'
|
||||||
|
- 'demo.promlabs.com:10001'
|
||||||
|
- 'demo.promlabs.com:10002'
|
||||||
|
|
||||||
rule_files:
|
rule_files:
|
||||||
|
- "/etc/prometheus/container.alerts.yml"
|
||||||
- "/etc/prometheus/extra/rules/*.yml"
|
- "/etc/prometheus/extra/rules/*.yml"
|
||||||
- "/etc/prometheus/extra/rules/*.json"
|
- "/etc/prometheus/extra/rules/*.json"
|
||||||
|
|
||||||
|
|||||||
@@ -1,11 +1,18 @@
|
|||||||
{% import 'contrib/compose_helpers.j2' as helpers with context %}
|
{% import 'contrib/compose_helpers.j2' as helpers with context %}
|
||||||
|
|
||||||
networks:
|
networks:
|
||||||
{{ helpers.default_network(254) | indent(2) }}
|
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:
|
services:
|
||||||
traefik:
|
traefik:
|
||||||
image: traefik:v3.6
|
image: traefik:v3.0
|
||||||
container_name: traefik
|
container_name: traefik
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
env_file:
|
env_file:
|
||||||
@@ -16,10 +23,14 @@ services:
|
|||||||
- ./rules:/rules:ro
|
- ./rules:/rules:ro
|
||||||
- /var/run/docker.sock:/var/run/docker.sock:ro
|
- /var/run/docker.sock:/var/run/docker.sock:ro
|
||||||
- {{ base_volume_path }}/traefik/rules:/rules/extra:ro
|
- {{ base_volume_path }}/traefik/rules:/rules/extra:ro
|
||||||
|
- {{ base_volume_path }}/traefik/logs:/logs
|
||||||
- {{ base_volume_path }}/traefik/acme:/acme
|
- {{ base_volume_path }}/traefik/acme:/acme
|
||||||
|
|
||||||
|
# This is mostly just so that the traefik network gets created
|
||||||
whoami:
|
whoami:
|
||||||
image: containous/whoami
|
image: containous/whoami
|
||||||
container_name: whoami
|
container_name: whoami
|
||||||
labels:
|
labels:
|
||||||
- {{ helpers.traefik_labels('whoami', port='80') | indent(6) }}
|
- {{ helpers.traefik_labels('whoami', port=80) | indent(6) }}
|
||||||
|
networks:
|
||||||
|
- traefik
|
||||||
@@ -2,8 +2,11 @@ api:
|
|||||||
insecure: true
|
insecure: true
|
||||||
|
|
||||||
log:
|
log:
|
||||||
|
filePath: /logs/traefik.log
|
||||||
level: INFO
|
level: INFO
|
||||||
accessLog:
|
accessLog:
|
||||||
|
filePath: /logs/access.log
|
||||||
|
bufferingSize: 100
|
||||||
|
|
||||||
entryPoints:
|
entryPoints:
|
||||||
web:
|
web:
|
||||||
@@ -12,16 +15,6 @@ entryPoints:
|
|||||||
address: ":443"
|
address: ":443"
|
||||||
http3:
|
http3:
|
||||||
advertisedPort: 443
|
advertisedPort: 443
|
||||||
forwardedHeaders:
|
|
||||||
trustedIPs:
|
|
||||||
# https://www.cloudflare.com/ips-v6
|
|
||||||
- 2400:cb00::/32
|
|
||||||
- 2606:4700::/32
|
|
||||||
- 2803:f800::/32
|
|
||||||
- 2405:b500::/32
|
|
||||||
- 2405:8100::/32
|
|
||||||
- 2a06:98c0::/29
|
|
||||||
- 2c0f:f248::/32
|
|
||||||
metrics:
|
metrics:
|
||||||
address: ":8082"
|
address: ":8082"
|
||||||
|
|
||||||
@@ -46,6 +39,7 @@ certificatesResolvers:
|
|||||||
providers:
|
providers:
|
||||||
docker:
|
docker:
|
||||||
exposedByDefault: false
|
exposedByDefault: false
|
||||||
|
network: traefik_traefik
|
||||||
file:
|
file:
|
||||||
directory: /rules
|
directory: /rules
|
||||||
watch: true
|
watch: true
|
||||||
|
|||||||
@@ -1,22 +0,0 @@
|
|||||||
- name: Get list of running Docker containers
|
|
||||||
docker_host_info:
|
|
||||||
containers: yes
|
|
||||||
register: docker_container_list
|
|
||||||
|
|
||||||
- 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
|
|
||||||
|
|
||||||
- name: Prune all Docker containers and networks
|
|
||||||
docker_prune:
|
|
||||||
containers: yes
|
|
||||||
networks: yes
|
|
||||||
|
|
||||||
- name: Clean alpina directory
|
|
||||||
file:
|
|
||||||
path: "{{ alpina_svc_path }}"
|
|
||||||
state: absent
|
|
||||||
@@ -32,7 +32,7 @@
|
|||||||
state: enabled
|
state: enabled
|
||||||
immediate: yes
|
immediate: yes
|
||||||
|
|
||||||
- name: Disallow Web
|
- name: Allow Web
|
||||||
become: yes
|
become: yes
|
||||||
firewalld:
|
firewalld:
|
||||||
service: http
|
service: http
|
||||||
@@ -64,46 +64,6 @@
|
|||||||
state: enabled
|
state: enabled
|
||||||
immediate: yes
|
immediate: yes
|
||||||
|
|
||||||
- name: Allow 2222 tcp for pgrok ssh tunnel
|
|
||||||
become: yes
|
|
||||||
firewalld:
|
|
||||||
port: 2222/tcp
|
|
||||||
permanent: yes
|
|
||||||
state: enabled
|
|
||||||
immediate: yes
|
|
||||||
|
|
||||||
- name: Allow Syncthing
|
|
||||||
become: yes
|
|
||||||
firewalld:
|
|
||||||
service: syncthing
|
|
||||||
permanent: yes
|
|
||||||
state: enabled
|
|
||||||
immediate: yes
|
|
||||||
|
|
||||||
- name: Allow 25565 tcp for minecruft
|
|
||||||
become: yes
|
|
||||||
firewalld:
|
|
||||||
port: 25565/tcp
|
|
||||||
permanent: yes
|
|
||||||
state: enabled
|
|
||||||
immediate: yes
|
|
||||||
|
|
||||||
- name: Allow 25565 udp for minecruft
|
|
||||||
become: yes
|
|
||||||
firewalld:
|
|
||||||
port: 25565/udp
|
|
||||||
permanent: yes
|
|
||||||
state: enabled
|
|
||||||
immediate: yes
|
|
||||||
|
|
||||||
- name: Allow 24454 udp for minecruft voice chat
|
|
||||||
become: yes
|
|
||||||
firewalld:
|
|
||||||
port: 24454/udp
|
|
||||||
permanent: yes
|
|
||||||
state: enabled
|
|
||||||
immediate: yes
|
|
||||||
|
|
||||||
- name: Reboot if needed
|
- name: Reboot if needed
|
||||||
become: yes
|
become: yes
|
||||||
ansible.builtin.reboot:
|
ansible.builtin.reboot:
|
||||||
|
|||||||
@@ -1,5 +1,12 @@
|
|||||||
- name: IPv6 subnet for Docker
|
- name: Get IPv6 subnet for Docker
|
||||||
debug:
|
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
|
var: docker_ipv6_subnet
|
||||||
|
|
||||||
- name: Configure Docker daemon
|
- name: Configure Docker daemon
|
||||||
@@ -28,6 +35,33 @@
|
|||||||
state: disabled
|
state: disabled
|
||||||
register: docker0_firewalld
|
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:
|
||||||
|
path: "{{ alpina_svc_path }}"
|
||||||
|
state: absent
|
||||||
|
when: clean_desired is true
|
||||||
|
|
||||||
- name: Restart Docker daemon
|
- name: Restart Docker daemon
|
||||||
become: yes
|
become: yes
|
||||||
service:
|
service:
|
||||||
|
|||||||
10
services.yml
10
services.yml
@@ -1,14 +1,14 @@
|
|||||||
- hosts: alpina
|
- hosts: alpina
|
||||||
roles:
|
roles:
|
||||||
|
- docker_host
|
||||||
- alpina
|
- alpina
|
||||||
post_tasks:
|
post_tasks:
|
||||||
- name: Docker prune objects
|
- name: Docker prune objects
|
||||||
docker_prune:
|
docker_prune:
|
||||||
containers: true
|
containers: yes
|
||||||
# Keep images for building grafana
|
images: yes
|
||||||
images: true
|
|
||||||
images_filters:
|
images_filters:
|
||||||
until: "720h"
|
dangling: false
|
||||||
networks: true
|
networks: true
|
||||||
volumes: true
|
volumes: true
|
||||||
builder_cache: false
|
builder_cache: true
|
||||||
|
|||||||
12
site.yml
12
site.yml
@@ -1,4 +1,12 @@
|
|||||||
- hosts: alpina
|
- hosts: all
|
||||||
roles:
|
roles:
|
||||||
- common
|
- common
|
||||||
- docker_host
|
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