assert node.has_bundle('docker-engine')

defaults = {
    'docker-engine': {
        'containers': {
            'goauthentik-server': {
                'image': 'ghcr.io/goauthentik/server:latest',
                'command': 'server',
                'environment': {
                    'AUTHENTIK_POSTGRESQL__HOST': 'goauthentik-postgresql',
                    'AUTHENTIK_POSTGRESQL__NAME': 'goauthentik',
                    'AUTHENTIK_POSTGRESQL__PASSWORD': repo.vault.password_for(f'{node.name} postgresql goauthentik'),
                    'AUTHENTIK_POSTGRESQL__USER': 'goauthentik',
                    'AUTHENTIK_REDIS__HOST': 'goauthentik-redis',
                    'AUTHENTIK_SECRET_KEY': repo.vault.password_for(f'{node.name} goauthentik secret key'),
                },
                'volumes': {
                    'media': '/media',
                    'templates': '/templates',
                },
                'ports': {
                    '9000': '9000',
                    '9443': '9443',
                },
                'needs': {
                    'svc_systemd:docker-goauthentik-postgresql',
                    'svc_systemd:docker-goauthentik-redis',
                },
                'requires': {
                    'docker-goauthentik-postgresql.service',
                    'docker-goauthentik-redis.service',
                },
            },
            'goauthentik-worker': {
                'image': 'ghcr.io/goauthentik/server:latest',
                'command': 'worker',
                'user': 'docker-goauthentik-server',
                'environment': {
                    'AUTHENTIK_POSTGRESQL__HOST': 'goauthentik-postgresql',
                    'AUTHENTIK_POSTGRESQL__NAME': 'goauthentik',
                    'AUTHENTIK_POSTGRESQL__PASSWORD': repo.vault.password_for(f'{node.name} postgresql goauthentik'),
                    'AUTHENTIK_POSTGRESQL__USER': 'goauthentik',
                    'AUTHENTIK_REDIS__HOST': 'goauthentik-redis',
                    'AUTHENTIK_SECRET_KEY': repo.vault.password_for(f'{node.name} goauthentik secret key'),
                },
                'volumes': {
                    '/var/opt/docker-engine/goauthentik-server/media': '/media',
                    '/var/opt/docker-engine/goauthentik-server/certs': '/certs',
                    '/var/opt/docker-engine/goauthentik-server/templates': '/templates',
                },
                'needs': {
                    'svc_systemd:docker-goauthentik-postgresql',
                    'svc_systemd:docker-goauthentik-redis',
                },
                'requires': {
                    'docker-goauthentik-postgresql.service',
                    'docker-goauthentik-redis.service',
                },
            },
            'goauthentik-postgresql': {
                'image': 'docker.io/library/postgres:16-alpine',
                'environment': {
                    'POSTGRES_PASSWORD': repo.vault.password_for(f'{node.name} postgresql goauthentik'),
                    'POSTGRES_USER': 'goauthentik',
                    'POSTGRES_DB': 'goauthentik',
                },
                'volumes': {
                    'database': '/var/lib/postgresql/data',
                },
            },
            'goauthentik-redis': {
                'image': 'docker.io/library/redis:alpine',
            },
        },
    },
    'nginx': {
        'vhosts': {
            'goauthentik': {
                'locations': {
                    '/': {
                        'target': 'http://127.0.0.1:9000/',
                        'websockets': True,
                        'max_body_size': '5000m',
                    },
                },
            },
        },
    },
}