{
  "manifest_version": "1.0.0",
  "template": {
    "id": "ba13613c-8461-4439-adce-78f17c5881be",
    "slug": "patroni",
    "name": "Patroni",
    "description": "Patroni is a template for high availability (HA) PostgreSQL.",
    "url": "https://railway.com/deploy/patroni",
    "upstream": {
      "repo_url": "https://github.com/thesamgordon/patroni-haproxy"
    }
  },
  "services": [
    {
      "name": "Patroni Worker 1",
      "source": {
        "repo": "https://github.com/patroni/patroni"
      },
      "needs_volume": true,
      "volume_mount_path": "/data",
      "http": false
    },
    {
      "name": "ETCD Worker 3",
      "source": {
        "repo": "https://github.com/patroni/patroni"
      },
      "needs_volume": true,
      "volume_mount_path": "/var/lib/etcd",
      "http": false
    },
    {
      "name": "Patroni Worker 3",
      "source": {
        "repo": "https://github.com/patroni/patroni"
      },
      "needs_volume": true,
      "volume_mount_path": "/data",
      "http": false
    },
    {
      "name": "HAProxy",
      "source": {
        "repo": "https://github.com/thesamgordon/patroni-haproxy"
      },
      "needs_volume": false,
      "tcp_ports": [
        5000
      ],
      "http": true
    },
    {
      "name": "ETCD Worker 2",
      "source": {
        "repo": "https://github.com/patroni/patroni"
      },
      "needs_volume": true,
      "volume_mount_path": "/var/lib/etcd",
      "http": false
    },
    {
      "name": "Patroni Worker 2",
      "source": {
        "repo": "https://github.com/patroni/patroni"
      },
      "needs_volume": true,
      "volume_mount_path": "/data",
      "http": false
    },
    {
      "name": "ETCD Worker 1",
      "source": {
        "repo": "https://github.com/patroni/patroni"
      },
      "needs_volume": true,
      "volume_mount_path": "/var/lib/etcd",
      "http": false
    }
  ],
  "required_inputs": [
    {
      "key": "PATRONI_NAME",
      "service": "Patroni Worker 1",
      "description": "Provide a value for PATRONI_NAME.",
      "secret": false,
      "strategy": "default",
      "default": "patroni1"
    },
    {
      "key": "PATRONI_SCOPE",
      "service": "Patroni Worker 1",
      "description": "Provide a value for PATRONI_SCOPE.",
      "secret": false,
      "strategy": "default",
      "default": "batman"
    },
    {
      "key": "RAILWAY_RUN_UID",
      "service": "Patroni Worker 1",
      "description": "Provide a value for RAILWAY_RUN_UID.",
      "secret": false,
      "strategy": "default",
      "default": "0"
    },
    {
      "key": "ETCDCTL_ENDPOINTS",
      "service": "Patroni Worker 1",
      "description": "Provide a value for ETCDCTL_ENDPOINTS.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "PATRONI_NAMESPACE",
      "service": "Patroni Worker 1",
      "description": "Provide a value for PATRONI_NAMESPACE.",
      "secret": false,
      "strategy": "default",
      "default": "/service"
    },
    {
      "key": "PATRONI_ETCD3_HOSTS",
      "service": "Patroni Worker 1",
      "description": "Provide a value for PATRONI_ETCD3_HOSTS.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "PATRONI_admin_OPTIONS",
      "service": "Patroni Worker 1",
      "description": "Provide a value for PATRONI_admin_OPTIONS.",
      "secret": false,
      "strategy": "default",
      "default": "createdb, createrole"
    },
    {
      "key": "PATRONI_RESTAPI_LISTEN",
      "service": "Patroni Worker 1",
      "description": "Provide a value for PATRONI_RESTAPI_LISTEN.",
      "secret": false,
      "strategy": "default",
      "default": "0.0.0.0:8008"
    },
    {
      "key": "PATRONI_admin_PASSWORD",
      "service": "Patroni Worker 1",
      "description": "Provide a value for PATRONI_admin_PASSWORD.",
      "secret": true,
      "strategy": "default",
      "default": "admin"
    },
    {
      "key": "PATRONI_RESTAPI_PASSWORD",
      "service": "Patroni Worker 1",
      "description": "Provide a value for PATRONI_RESTAPI_PASSWORD.",
      "secret": true,
      "strategy": "default",
      "default": "admin"
    },
    {
      "key": "PATRONI_RESTAPI_USERNAME",
      "service": "Patroni Worker 1",
      "description": "Provide a value for PATRONI_RESTAPI_USERNAME.",
      "secret": false,
      "strategy": "default",
      "default": "admin"
    },
    {
      "key": "PATRONI_POSTGRESQL_LISTEN",
      "service": "Patroni Worker 1",
      "description": "Provide a value for PATRONI_POSTGRESQL_LISTEN.",
      "secret": false,
      "strategy": "default",
      "default": "[::]:5432"
    },
    {
      "key": "PATRONI_SUPERUSER_PASSWORD",
      "service": "Patroni Worker 1",
      "description": "Postgres password. Please note this cannot be changed.",
      "secret": true,
      "strategy": "generate",
      "generate": "strong_password"
    },
    {
      "key": "PATRONI_SUPERUSER_USERNAME",
      "service": "Patroni Worker 1",
      "description": "Postgres username. Please note this cannot be changed.",
      "secret": false,
      "strategy": "generate",
      "generate": "random_base64_32"
    },
    {
      "key": "PATRONI_POSTGRESQL_DATA_DIR",
      "service": "Patroni Worker 1",
      "description": "Provide a value for PATRONI_POSTGRESQL_DATA_DIR.",
      "secret": false,
      "strategy": "default",
      "default": "/data/data"
    },
    {
      "key": "PATRONI_REPLICATION_PASSWORD",
      "service": "Patroni Worker 1",
      "description": "Provide a value for PATRONI_REPLICATION_PASSWORD.",
      "secret": true,
      "strategy": "default",
      "default": "replicate"
    },
    {
      "key": "PATRONI_REPLICATION_USERNAME",
      "service": "Patroni Worker 1",
      "description": "Provide a value for PATRONI_REPLICATION_USERNAME.",
      "secret": false,
      "strategy": "default",
      "default": "replicator"
    },
    {
      "key": "PATRONI_RESTAPI_CONNECT_ADDRESS",
      "service": "Patroni Worker 1",
      "description": "Provide a value for PATRONI_RESTAPI_CONNECT_ADDRESS.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "PATRONI_POSTGRESQL_CONNECT_ADDRESS",
      "service": "Patroni Worker 1",
      "description": "Provide a value for PATRONI_POSTGRESQL_CONNECT_ADDRESS.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "PATRONI_POSTGRESQL_AUTHENTICATION_REPLICATION_PASSWORD",
      "service": "Patroni Worker 1",
      "description": "Provide a value for PATRONI_POSTGRESQL_AUTHENTICATION_REPLICATION_PASSWORD.",
      "secret": true,
      "strategy": "default",
      "default": "replicate"
    },
    {
      "key": "PATRONI_POSTGRESQL_AUTHENTICATION_REPLICATION_USERNAME",
      "service": "Patroni Worker 1",
      "description": "Provide a value for PATRONI_POSTGRESQL_AUTHENTICATION_REPLICATION_USERNAME.",
      "secret": false,
      "strategy": "default",
      "default": "replicator"
    },
    {
      "key": "ETCD_DATA_DIR",
      "service": "ETCD Worker 3",
      "description": "Provide a value for ETCD_DATA_DIR.",
      "secret": false,
      "strategy": "default",
      "default": "/var/lib/etcd"
    },
    {
      "key": "RAILWAY_RUN_UID",
      "service": "ETCD Worker 3",
      "description": "Provide a value for RAILWAY_RUN_UID.",
      "secret": false,
      "strategy": "default",
      "default": "0"
    },
    {
      "key": "ETCD_INITIAL_CLUSTER",
      "service": "ETCD Worker 3",
      "description": "Provide a value for ETCD_INITIAL_CLUSTER.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "ETCD_LISTEN_PEER_URLS",
      "service": "ETCD Worker 3",
      "description": "Provide a value for ETCD_LISTEN_PEER_URLS.",
      "secret": false,
      "strategy": "default",
      "default": "http://0.0.0.0:2380"
    },
    {
      "key": "ETCD_LISTEN_CLIENT_URLS",
      "service": "ETCD Worker 3",
      "description": "Provide a value for ETCD_LISTEN_CLIENT_URLS.",
      "secret": false,
      "strategy": "default",
      "default": "http://0.0.0.0:2379"
    },
    {
      "key": "ETCD_ADVERTISE_CLIENT_URLS",
      "service": "ETCD Worker 3",
      "description": "Provide a value for ETCD_ADVERTISE_CLIENT_URLS.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "ETCD_INITIAL_CLUSTER_STATE",
      "service": "ETCD Worker 3",
      "description": "Provide a value for ETCD_INITIAL_CLUSTER_STATE.",
      "secret": false,
      "strategy": "default",
      "default": "new"
    },
    {
      "key": "ETCD_INITIAL_CLUSTER_TOKEN",
      "service": "ETCD Worker 3",
      "description": "Provide a value for ETCD_INITIAL_CLUSTER_TOKEN.",
      "secret": true,
      "strategy": "default",
      "default": "tutorial"
    },
    {
      "key": "ETCD_INITIAL_ADVERTISE_PEER_URLS",
      "service": "ETCD Worker 3",
      "description": "Provide a value for ETCD_INITIAL_ADVERTISE_PEER_URLS.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "PATRONI_NAME",
      "service": "Patroni Worker 3",
      "description": "Provide a value for PATRONI_NAME.",
      "secret": false,
      "strategy": "default",
      "default": "patroni1"
    },
    {
      "key": "PATRONI_SCOPE",
      "service": "Patroni Worker 3",
      "description": "Provide a value for PATRONI_SCOPE.",
      "secret": false,
      "strategy": "default",
      "default": "batman"
    },
    {
      "key": "RAILWAY_RUN_UID",
      "service": "Patroni Worker 3",
      "description": "Provide a value for RAILWAY_RUN_UID.",
      "secret": false,
      "strategy": "default",
      "default": "0"
    },
    {
      "key": "ETCDCTL_ENDPOINTS",
      "service": "Patroni Worker 3",
      "description": "Provide a value for ETCDCTL_ENDPOINTS.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "PATRONI_NAMESPACE",
      "service": "Patroni Worker 3",
      "description": "Provide a value for PATRONI_NAMESPACE.",
      "secret": false,
      "strategy": "default",
      "default": "/service"
    },
    {
      "key": "PATRONI_ETCD3_HOSTS",
      "service": "Patroni Worker 3",
      "description": "Provide a value for PATRONI_ETCD3_HOSTS.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "PATRONI_admin_OPTIONS",
      "service": "Patroni Worker 3",
      "description": "Provide a value for PATRONI_admin_OPTIONS.",
      "secret": false,
      "strategy": "default",
      "default": "createdb, createrole"
    },
    {
      "key": "PATRONI_RESTAPI_LISTEN",
      "service": "Patroni Worker 3",
      "description": "Provide a value for PATRONI_RESTAPI_LISTEN.",
      "secret": false,
      "strategy": "default",
      "default": "0.0.0.0:8008"
    },
    {
      "key": "PATRONI_admin_PASSWORD",
      "service": "Patroni Worker 3",
      "description": "Provide a value for PATRONI_admin_PASSWORD.",
      "secret": true,
      "strategy": "default",
      "default": "admin"
    },
    {
      "key": "PATRONI_RESTAPI_PASSWORD",
      "service": "Patroni Worker 3",
      "description": "Provide a value for PATRONI_RESTAPI_PASSWORD.",
      "secret": true,
      "strategy": "default",
      "default": "admin"
    },
    {
      "key": "PATRONI_RESTAPI_USERNAME",
      "service": "Patroni Worker 3",
      "description": "Provide a value for PATRONI_RESTAPI_USERNAME.",
      "secret": false,
      "strategy": "default",
      "default": "admin"
    },
    {
      "key": "PATRONI_POSTGRESQL_LISTEN",
      "service": "Patroni Worker 3",
      "description": "Provide a value for PATRONI_POSTGRESQL_LISTEN.",
      "secret": false,
      "strategy": "default",
      "default": "[::]:5432"
    },
    {
      "key": "PATRONI_SUPERUSER_PASSWORD",
      "service": "Patroni Worker 3",
      "description": "Provide a value for PATRONI_SUPERUSER_PASSWORD.",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "PATRONI_SUPERUSER_USERNAME",
      "service": "Patroni Worker 3",
      "description": "Provide a value for PATRONI_SUPERUSER_USERNAME.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "PATRONI_POSTGRESQL_DATA_DIR",
      "service": "Patroni Worker 3",
      "description": "Provide a value for PATRONI_POSTGRESQL_DATA_DIR.",
      "secret": false,
      "strategy": "default",
      "default": "/data/data"
    },
    {
      "key": "PATRONI_REPLICATION_PASSWORD",
      "service": "Patroni Worker 3",
      "description": "Provide a value for PATRONI_REPLICATION_PASSWORD.",
      "secret": true,
      "strategy": "default",
      "default": "replicate"
    },
    {
      "key": "PATRONI_REPLICATION_USERNAME",
      "service": "Patroni Worker 3",
      "description": "Provide a value for PATRONI_REPLICATION_USERNAME.",
      "secret": false,
      "strategy": "default",
      "default": "replicator"
    },
    {
      "key": "PATRONI_RESTAPI_CONNECT_ADDRESS",
      "service": "Patroni Worker 3",
      "description": "Provide a value for PATRONI_RESTAPI_CONNECT_ADDRESS.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "PATRONI_POSTGRESQL_CONNECT_ADDRESS",
      "service": "Patroni Worker 3",
      "description": "Provide a value for PATRONI_POSTGRESQL_CONNECT_ADDRESS.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "PATRONI_POSTGRESQL_AUTHENTICATION_REPLICATION_PASSWORD",
      "service": "Patroni Worker 3",
      "description": "Provide a value for PATRONI_POSTGRESQL_AUTHENTICATION_REPLICATION_PASSWORD.",
      "secret": true,
      "strategy": "default",
      "default": "replicate"
    },
    {
      "key": "PATRONI_POSTGRESQL_AUTHENTICATION_REPLICATION_USERNAME",
      "service": "Patroni Worker 3",
      "description": "Provide a value for PATRONI_POSTGRESQL_AUTHENTICATION_REPLICATION_USERNAME.",
      "secret": false,
      "strategy": "default",
      "default": "replicator"
    },
    {
      "key": "PATRONI1_IP",
      "service": "HAProxy",
      "description": "Provide a value for PATRONI1_IP.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "PATRONI2_IP",
      "service": "HAProxy",
      "description": "Provide a value for PATRONI2_IP.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "PATRONI3_IP",
      "service": "HAProxy",
      "description": "Provide a value for PATRONI3_IP.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "STATS_PASSWORD",
      "service": "HAProxy",
      "description": "Statistics page password hosted on port 7000.",
      "secret": true,
      "strategy": "generate",
      "generate": "strong_password"
    },
    {
      "key": "RAILWAY_RUN_UID",
      "service": "HAProxy",
      "description": "Provide a value for RAILWAY_RUN_UID.",
      "secret": false,
      "strategy": "default",
      "default": "0"
    },
    {
      "key": "ETCD_DATA_DIR",
      "service": "ETCD Worker 2",
      "description": "Provide a value for ETCD_DATA_DIR.",
      "secret": false,
      "strategy": "default",
      "default": "/var/lib/etcd"
    },
    {
      "key": "RAILWAY_RUN_UID",
      "service": "ETCD Worker 2",
      "description": "Provide a value for RAILWAY_RUN_UID.",
      "secret": false,
      "strategy": "default",
      "default": "0"
    },
    {
      "key": "ETCD_INITIAL_CLUSTER",
      "service": "ETCD Worker 2",
      "description": "Provide a value for ETCD_INITIAL_CLUSTER.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "ETCD_LISTEN_PEER_URLS",
      "service": "ETCD Worker 2",
      "description": "Provide a value for ETCD_LISTEN_PEER_URLS.",
      "secret": false,
      "strategy": "default",
      "default": "http://0.0.0.0:2380"
    },
    {
      "key": "ETCD_LISTEN_CLIENT_URLS",
      "service": "ETCD Worker 2",
      "description": "Provide a value for ETCD_LISTEN_CLIENT_URLS.",
      "secret": false,
      "strategy": "default",
      "default": "http://0.0.0.0:2379"
    },
    {
      "key": "ETCD_ADVERTISE_CLIENT_URLS",
      "service": "ETCD Worker 2",
      "description": "Provide a value for ETCD_ADVERTISE_CLIENT_URLS.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "ETCD_INITIAL_CLUSTER_STATE",
      "service": "ETCD Worker 2",
      "description": "Provide a value for ETCD_INITIAL_CLUSTER_STATE.",
      "secret": false,
      "strategy": "default",
      "default": "new"
    },
    {
      "key": "ETCD_INITIAL_CLUSTER_TOKEN",
      "service": "ETCD Worker 2",
      "description": "Provide a value for ETCD_INITIAL_CLUSTER_TOKEN.",
      "secret": true,
      "strategy": "default",
      "default": "tutorial"
    },
    {
      "key": "ETCD_INITIAL_ADVERTISE_PEER_URLS",
      "service": "ETCD Worker 2",
      "description": "Provide a value for ETCD_INITIAL_ADVERTISE_PEER_URLS.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "PATRONI_NAME",
      "service": "Patroni Worker 2",
      "description": "Provide a value for PATRONI_NAME.",
      "secret": false,
      "strategy": "default",
      "default": "patroni1"
    },
    {
      "key": "PATRONI_SCOPE",
      "service": "Patroni Worker 2",
      "description": "Provide a value for PATRONI_SCOPE.",
      "secret": false,
      "strategy": "default",
      "default": "batman"
    },
    {
      "key": "RAILWAY_RUN_UID",
      "service": "Patroni Worker 2",
      "description": "Provide a value for RAILWAY_RUN_UID.",
      "secret": false,
      "strategy": "default",
      "default": "0"
    },
    {
      "key": "ETCDCTL_ENDPOINTS",
      "service": "Patroni Worker 2",
      "description": "Provide a value for ETCDCTL_ENDPOINTS.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "PATRONI_NAMESPACE",
      "service": "Patroni Worker 2",
      "description": "Provide a value for PATRONI_NAMESPACE.",
      "secret": false,
      "strategy": "default",
      "default": "/service"
    },
    {
      "key": "PATRONI_ETCD3_HOSTS",
      "service": "Patroni Worker 2",
      "description": "Provide a value for PATRONI_ETCD3_HOSTS.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "PATRONI_admin_OPTIONS",
      "service": "Patroni Worker 2",
      "description": "Provide a value for PATRONI_admin_OPTIONS.",
      "secret": false,
      "strategy": "default",
      "default": "createdb, createrole"
    },
    {
      "key": "PATRONI_RESTAPI_LISTEN",
      "service": "Patroni Worker 2",
      "description": "Provide a value for PATRONI_RESTAPI_LISTEN.",
      "secret": false,
      "strategy": "default",
      "default": "0.0.0.0:8008"
    },
    {
      "key": "PATRONI_admin_PASSWORD",
      "service": "Patroni Worker 2",
      "description": "Provide a value for PATRONI_admin_PASSWORD.",
      "secret": true,
      "strategy": "default",
      "default": "admin"
    },
    {
      "key": "PATRONI_RESTAPI_PASSWORD",
      "service": "Patroni Worker 2",
      "description": "Provide a value for PATRONI_RESTAPI_PASSWORD.",
      "secret": true,
      "strategy": "default",
      "default": "admin"
    },
    {
      "key": "PATRONI_RESTAPI_USERNAME",
      "service": "Patroni Worker 2",
      "description": "Provide a value for PATRONI_RESTAPI_USERNAME.",
      "secret": false,
      "strategy": "default",
      "default": "admin"
    },
    {
      "key": "PATRONI_POSTGRESQL_LISTEN",
      "service": "Patroni Worker 2",
      "description": "Provide a value for PATRONI_POSTGRESQL_LISTEN.",
      "secret": false,
      "strategy": "default",
      "default": "[::]:5432"
    },
    {
      "key": "PATRONI_SUPERUSER_PASSWORD",
      "service": "Patroni Worker 2",
      "description": "Provide a value for PATRONI_SUPERUSER_PASSWORD.",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "PATRONI_SUPERUSER_USERNAME",
      "service": "Patroni Worker 2",
      "description": "Provide a value for PATRONI_SUPERUSER_USERNAME.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "PATRONI_POSTGRESQL_DATA_DIR",
      "service": "Patroni Worker 2",
      "description": "Provide a value for PATRONI_POSTGRESQL_DATA_DIR.",
      "secret": false,
      "strategy": "default",
      "default": "/data/data"
    },
    {
      "key": "PATRONI_REPLICATION_PASSWORD",
      "service": "Patroni Worker 2",
      "description": "Provide a value for PATRONI_REPLICATION_PASSWORD.",
      "secret": true,
      "strategy": "default",
      "default": "replicate"
    },
    {
      "key": "PATRONI_REPLICATION_USERNAME",
      "service": "Patroni Worker 2",
      "description": "Provide a value for PATRONI_REPLICATION_USERNAME.",
      "secret": false,
      "strategy": "default",
      "default": "replicator"
    },
    {
      "key": "PATRONI_RESTAPI_CONNECT_ADDRESS",
      "service": "Patroni Worker 2",
      "description": "Provide a value for PATRONI_RESTAPI_CONNECT_ADDRESS.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "PATRONI_POSTGRESQL_CONNECT_ADDRESS",
      "service": "Patroni Worker 2",
      "description": "Provide a value for PATRONI_POSTGRESQL_CONNECT_ADDRESS.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "PATRONI_POSTGRESQL_AUTHENTICATION_REPLICATION_PASSWORD",
      "service": "Patroni Worker 2",
      "description": "Provide a value for PATRONI_POSTGRESQL_AUTHENTICATION_REPLICATION_PASSWORD.",
      "secret": true,
      "strategy": "default",
      "default": "replicate"
    },
    {
      "key": "PATRONI_POSTGRESQL_AUTHENTICATION_REPLICATION_USERNAME",
      "service": "Patroni Worker 2",
      "description": "Provide a value for PATRONI_POSTGRESQL_AUTHENTICATION_REPLICATION_USERNAME.",
      "secret": false,
      "strategy": "default",
      "default": "replicator"
    },
    {
      "key": "ETCD_DATA_DIR",
      "service": "ETCD Worker 1",
      "description": "Provide a value for ETCD_DATA_DIR.",
      "secret": false,
      "strategy": "default",
      "default": "/var/lib/etcd"
    },
    {
      "key": "RAILWAY_RUN_UID",
      "service": "ETCD Worker 1",
      "description": "Provide a value for RAILWAY_RUN_UID.",
      "secret": false,
      "strategy": "default",
      "default": "0"
    },
    {
      "key": "ETCD_INITIAL_CLUSTER",
      "service": "ETCD Worker 1",
      "description": "Provide a value for ETCD_INITIAL_CLUSTER.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "ETCD_LISTEN_PEER_URLS",
      "service": "ETCD Worker 1",
      "description": "Provide a value for ETCD_LISTEN_PEER_URLS.",
      "secret": false,
      "strategy": "default",
      "default": "http://0.0.0.0:2380"
    },
    {
      "key": "ETCD_LISTEN_CLIENT_URLS",
      "service": "ETCD Worker 1",
      "description": "Provide a value for ETCD_LISTEN_CLIENT_URLS.",
      "secret": false,
      "strategy": "default",
      "default": "http://0.0.0.0:2379"
    },
    {
      "key": "ETCD_ADVERTISE_CLIENT_URLS",
      "service": "ETCD Worker 1",
      "description": "Provide a value for ETCD_ADVERTISE_CLIENT_URLS.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "ETCD_INITIAL_CLUSTER_STATE",
      "service": "ETCD Worker 1",
      "description": "Provide a value for ETCD_INITIAL_CLUSTER_STATE.",
      "secret": false,
      "strategy": "default",
      "default": "new"
    },
    {
      "key": "ETCD_INITIAL_CLUSTER_TOKEN",
      "service": "ETCD Worker 1",
      "description": "Provide a value for ETCD_INITIAL_CLUSTER_TOKEN.",
      "secret": true,
      "strategy": "default",
      "default": "tutorial"
    },
    {
      "key": "ETCD_INITIAL_ADVERTISE_PEER_URLS",
      "service": "ETCD Worker 1",
      "description": "Provide a value for ETCD_INITIAL_ADVERTISE_PEER_URLS.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    }
  ],
  "deploy": {
    "mcp": {
      "server": "railway",
      "tool": "deploy_template",
      "args": {
        "template_code": "patroni"
      }
    },
    "cli": "railway deploy --template patroni",
    "api": {
      "method": "POST",
      "path": "/graphql/v2",
      "body": {
        "query": "mutation templateDeploy($input: TemplateDeployV2Input!) { templateDeployV2(input: $input) { projectId workflowId } }",
        "variables": {
          "input": {
            "templateId": "ba13613c-8461-4439-adce-78f17c5881be",
            "serializedConfig": {
              "services": {
                "12f23775-2e00-4501-a8ad-e4e846ceeb9f": {
                  "icon": "https://avatars.githubusercontent.com/u/141222901?v=4",
                  "name": "Patroni Worker 1",
                  "deploy": {
                    "startCommand": "/bin/sh -c 'chown -R 999:999 /data && apt update && apt install gosu && export DOCKER_IP=$(hostname -I | tr \" \" \"\\n\" | grep -E \"^fd12:\" | head -1) && export PATRONI_NAME=$(hostname) PATRONI_RESTAPI_CONNECT_ADDRESS=$DOCKER_IP:8008 PATRONI_POSTGRESQL_CONNECT_ADDRESS=$DOCKER_IP:5432 && exec gosu postgres dumb-init python3 /patroni.py postgres0.yml'"
                  },
                  "source": {
                    "repo": "patroni/patroni",
                    "branch": null,
                    "rootDirectory": null
                  },
                  "variables": {
                    "PATRONI_NAME": {
                      "defaultValue": "patroni1"
                    },
                    "PATRONI_SCOPE": {
                      "defaultValue": "batman"
                    },
                    "RAILWAY_RUN_UID": {
                      "defaultValue": "0"
                    },
                    "ETCDCTL_ENDPOINTS": {
                      "defaultValue": "etcd1=http://${{ETCD Worker 1.RAILWAY_PRIVATE_DOMAIN}}:2379,etcd2=http://${{ETCD Worker 2.RAILWAY_PRIVATE_DOMAIN}}:2379,etcd3=http://${{ETCD Worker 3.RAILWAY_PRIVATE_DOMAIN}}:2379"
                    },
                    "PATRONI_NAMESPACE": {
                      "defaultValue": "/service"
                    },
                    "PATRONI_ETCD3_HOSTS": {
                      "defaultValue": "${{ETCD Worker 1.RAILWAY_PRIVATE_DOMAIN}}:2379,${{ETCD Worker 2.RAILWAY_PRIVATE_DOMAIN}}:2379,${{ETCD Worker 3.RAILWAY_PRIVATE_DOMAIN}}:2379"
                    },
                    "PATRONI_admin_OPTIONS": {
                      "defaultValue": "createdb, createrole"
                    },
                    "PATRONI_RESTAPI_LISTEN": {
                      "defaultValue": "0.0.0.0:8008"
                    },
                    "PATRONI_admin_PASSWORD": {
                      "defaultValue": "admin"
                    },
                    "PATRONI_RESTAPI_PASSWORD": {
                      "defaultValue": "admin"
                    },
                    "PATRONI_RESTAPI_USERNAME": {
                      "description": "",
                      "defaultValue": "admin"
                    },
                    "PATRONI_POSTGRESQL_LISTEN": {
                      "defaultValue": "[::]:5432"
                    },
                    "PATRONI_SUPERUSER_PASSWORD": {
                      "description": "Postgres password. Please note this cannot be changed.",
                      "defaultValue": "{{PATRONI_SUPERUSER_PASSWORD}}"
                    },
                    "PATRONI_SUPERUSER_USERNAME": {
                      "description": "Postgres username. Please note this cannot be changed.",
                      "defaultValue": "{{PATRONI_SUPERUSER_USERNAME}}"
                    },
                    "PATRONI_POSTGRESQL_DATA_DIR": {
                      "defaultValue": "/data/data"
                    },
                    "PATRONI_REPLICATION_PASSWORD": {
                      "defaultValue": "replicate"
                    },
                    "PATRONI_REPLICATION_USERNAME": {
                      "defaultValue": "replicator"
                    },
                    "PATRONI_RESTAPI_CONNECT_ADDRESS": {
                      "defaultValue": "${{RAILWAY_PRIVATE_DOMAIN}}:8008"
                    },
                    "PATRONI_POSTGRESQL_CONNECT_ADDRESS": {
                      "defaultValue": "${{RAILWAY_PRIVATE_DOMAIN}}:5432"
                    },
                    "PATRONI_POSTGRESQL_AUTHENTICATION_REPLICATION_PASSWORD": {
                      "defaultValue": "replicate"
                    },
                    "PATRONI_POSTGRESQL_AUTHENTICATION_REPLICATION_USERNAME": {
                      "defaultValue": "replicator"
                    }
                  },
                  "volumeMounts": {
                    "12f23775-2e00-4501-a8ad-e4e846ceeb9f": {
                      "mountPath": "/data"
                    }
                  }
                },
                "2727d8b6-dd68-40e0-9034-e20732e792d1": {
                  "icon": "https://www.svgrepo.com/show/353714/etcd.svg",
                  "name": "ETCD Worker 3",
                  "deploy": {
                    "startCommand": "etcd --name etcd3"
                  },
                  "source": {
                    "repo": "patroni/patroni",
                    "branch": null,
                    "rootDirectory": null
                  },
                  "variables": {
                    "ETCD_DATA_DIR": {
                      "defaultValue": "/var/lib/etcd"
                    },
                    "RAILWAY_RUN_UID": {
                      "defaultValue": "0"
                    },
                    "ETCD_INITIAL_CLUSTER": {
                      "defaultValue": "etcd1=http://${{ETCD Worker 1.RAILWAY_PRIVATE_DOMAIN}}:2380,etcd2=http://${{ETCD Worker 2.RAILWAY_PRIVATE_DOMAIN}}:2380,etcd3=http://${{ETCD Worker 3.RAILWAY_PRIVATE_DOMAIN}}:2380"
                    },
                    "ETCD_LISTEN_PEER_URLS": {
                      "defaultValue": "http://0.0.0.0:2380"
                    },
                    "ETCD_LISTEN_CLIENT_URLS": {
                      "defaultValue": "http://0.0.0.0:2379"
                    },
                    "ETCD_ADVERTISE_CLIENT_URLS": {
                      "defaultValue": "http://${{RAILWAY_PRIVATE_DOMAIN}}:2379"
                    },
                    "ETCD_INITIAL_CLUSTER_STATE": {
                      "defaultValue": "new"
                    },
                    "ETCD_INITIAL_CLUSTER_TOKEN": {
                      "defaultValue": "tutorial"
                    },
                    "ETCD_INITIAL_ADVERTISE_PEER_URLS": {
                      "defaultValue": "http://${{RAILWAY_PRIVATE_DOMAIN}}:2380"
                    }
                  },
                  "volumeMounts": {
                    "2727d8b6-dd68-40e0-9034-e20732e792d1": {
                      "mountPath": "/var/lib/etcd"
                    }
                  }
                },
                "4b110405-dcea-4006-b1fc-1827db4868d4": {
                  "icon": "https://avatars.githubusercontent.com/u/141222901?v=4",
                  "name": "Patroni Worker 3",
                  "deploy": {
                    "startCommand": "/bin/sh -c 'chown -R 999:999 /data && apt update && apt install gosu && export DOCKER_IP=$(hostname -I | tr \" \" \"\\n\" | grep -E \"^fd12:\" | head -1) && export PATRONI_NAME=$(hostname) PATRONI_RESTAPI_CONNECT_ADDRESS=$DOCKER_IP:8008 PATRONI_POSTGRESQL_CONNECT_ADDRESS=$DOCKER_IP:5432 && exec gosu postgres dumb-init python3 /patroni.py postgres0.yml'"
                  },
                  "source": {
                    "repo": "patroni/patroni",
                    "branch": null,
                    "rootDirectory": null
                  },
                  "variables": {
                    "PATRONI_NAME": {
                      "defaultValue": "patroni1"
                    },
                    "PATRONI_SCOPE": {
                      "defaultValue": "batman"
                    },
                    "RAILWAY_RUN_UID": {
                      "defaultValue": "0"
                    },
                    "ETCDCTL_ENDPOINTS": {
                      "defaultValue": "etcd1=http://${{ETCD Worker 1.RAILWAY_PRIVATE_DOMAIN}}:2379,etcd2=http://${{ETCD Worker 2.RAILWAY_PRIVATE_DOMAIN}}:2379,etcd3=http://${{ETCD Worker 3.RAILWAY_PRIVATE_DOMAIN}}:2379"
                    },
                    "PATRONI_NAMESPACE": {
                      "defaultValue": "/service"
                    },
                    "PATRONI_ETCD3_HOSTS": {
                      "defaultValue": "${{ETCD Worker 1.RAILWAY_PRIVATE_DOMAIN}}:2379,${{ETCD Worker 2.RAILWAY_PRIVATE_DOMAIN}}:2379,${{ETCD Worker 3.RAILWAY_PRIVATE_DOMAIN}}:2379"
                    },
                    "PATRONI_admin_OPTIONS": {
                      "defaultValue": "createdb, createrole"
                    },
                    "PATRONI_RESTAPI_LISTEN": {
                      "defaultValue": "0.0.0.0:8008"
                    },
                    "PATRONI_admin_PASSWORD": {
                      "defaultValue": "admin"
                    },
                    "PATRONI_RESTAPI_PASSWORD": {
                      "defaultValue": "admin"
                    },
                    "PATRONI_RESTAPI_USERNAME": {
                      "defaultValue": "admin"
                    },
                    "PATRONI_POSTGRESQL_LISTEN": {
                      "defaultValue": "[::]:5432"
                    },
                    "PATRONI_SUPERUSER_PASSWORD": {
                      "defaultValue": "${{\"Patroni Worker 1\".PATRONI_SUPERUSER_PASSWORD}}"
                    },
                    "PATRONI_SUPERUSER_USERNAME": {
                      "defaultValue": "${{\"Patroni Worker 1\".PATRONI_SUPERUSER_USERNAME}}"
                    },
                    "PATRONI_POSTGRESQL_DATA_DIR": {
                      "defaultValue": "/data/data"
                    },
                    "PATRONI_REPLICATION_PASSWORD": {
                      "defaultValue": "replicate"
                    },
                    "PATRONI_REPLICATION_USERNAME": {
                      "defaultValue": "replicator"
                    },
                    "PATRONI_RESTAPI_CONNECT_ADDRESS": {
                      "defaultValue": "${{RAILWAY_PRIVATE_DOMAIN}}:8008"
                    },
                    "PATRONI_POSTGRESQL_CONNECT_ADDRESS": {
                      "defaultValue": "${{RAILWAY_PRIVATE_DOMAIN}}:5432"
                    },
                    "PATRONI_POSTGRESQL_AUTHENTICATION_REPLICATION_PASSWORD": {
                      "defaultValue": "replicate"
                    },
                    "PATRONI_POSTGRESQL_AUTHENTICATION_REPLICATION_USERNAME": {
                      "defaultValue": "replicator"
                    }
                  },
                  "volumeMounts": {
                    "4b110405-dcea-4006-b1fc-1827db4868d4": {
                      "mountPath": "/data"
                    }
                  }
                },
                "82726053-5723-4e27-b31d-906fcb53e6ad": {
                  "icon": "https://upload.wikimedia.org/wikipedia/commons/a/ab/Haproxy-logo.png",
                  "name": "HAProxy",
                  "source": {
                    "repo": "thesamgordon/patroni-haproxy",
                    "branch": null,
                    "rootDirectory": null
                  },
                  "variables": {
                    "PATRONI1_IP": {
                      "defaultValue": "${{Patroni Worker 1.RAILWAY_PRIVATE_DOMAIN}}"
                    },
                    "PATRONI2_IP": {
                      "defaultValue": "${{Patroni Worker 2.RAILWAY_PRIVATE_DOMAIN}}"
                    },
                    "PATRONI3_IP": {
                      "defaultValue": "${{Patroni Worker 3.RAILWAY_PRIVATE_DOMAIN}}"
                    },
                    "STATS_PASSWORD": {
                      "isOptional": false,
                      "description": "Statistics page password hosted on port 7000.",
                      "defaultValue": "{{STATS_PASSWORD}}"
                    },
                    "RAILWAY_RUN_UID": {
                      "defaultValue": "0"
                    }
                  },
                  "networking": {
                    "tcpProxies": {
                      "5000": {}
                    },
                    "serviceDomains": {
                      "<hasDomain>:7000": {
                        "port": 7000
                      }
                    }
                  }
                },
                "ac9ee056-1a15-4eb1-bb32-ac384a28eb89": {
                  "icon": "https://www.svgrepo.com/show/353714/etcd.svg",
                  "name": "ETCD Worker 2",
                  "deploy": {
                    "startCommand": "etcd --name etcd2"
                  },
                  "source": {
                    "repo": "patroni/patroni",
                    "branch": null,
                    "rootDirectory": null
                  },
                  "variables": {
                    "ETCD_DATA_DIR": {
                      "defaultValue": "/var/lib/etcd"
                    },
                    "RAILWAY_RUN_UID": {
                      "defaultValue": "0"
                    },
                    "ETCD_INITIAL_CLUSTER": {
                      "defaultValue": "etcd1=http://${{ETCD Worker 1.RAILWAY_PRIVATE_DOMAIN}}:2380,etcd2=http://${{ETCD Worker 2.RAILWAY_PRIVATE_DOMAIN}}:2380,etcd3=http://${{ETCD Worker 3.RAILWAY_PRIVATE_DOMAIN}}:2380"
                    },
                    "ETCD_LISTEN_PEER_URLS": {
                      "defaultValue": "http://0.0.0.0:2380"
                    },
                    "ETCD_LISTEN_CLIENT_URLS": {
                      "defaultValue": "http://0.0.0.0:2379"
                    },
                    "ETCD_ADVERTISE_CLIENT_URLS": {
                      "defaultValue": "http://${{RAILWAY_PRIVATE_DOMAIN}}:2379"
                    },
                    "ETCD_INITIAL_CLUSTER_STATE": {
                      "defaultValue": "new"
                    },
                    "ETCD_INITIAL_CLUSTER_TOKEN": {
                      "defaultValue": "tutorial"
                    },
                    "ETCD_INITIAL_ADVERTISE_PEER_URLS": {
                      "defaultValue": "http://${{RAILWAY_PRIVATE_DOMAIN}}:2380"
                    }
                  },
                  "volumeMounts": {
                    "ac9ee056-1a15-4eb1-bb32-ac384a28eb89": {
                      "mountPath": "/var/lib/etcd"
                    }
                  }
                },
                "d27ae557-5943-47ae-8433-6c12ba04f026": {
                  "icon": "https://avatars.githubusercontent.com/u/141222901?v=4",
                  "name": "Patroni Worker 2",
                  "deploy": {
                    "startCommand": "/bin/sh -c 'chown -R 999:999 /data && apt update && apt install gosu && export DOCKER_IP=$(hostname -I | tr \" \" \"\\n\" | grep -E \"^fd12:\" | head -1) && export PATRONI_NAME=$(hostname) PATRONI_RESTAPI_CONNECT_ADDRESS=$DOCKER_IP:8008 PATRONI_POSTGRESQL_CONNECT_ADDRESS=$DOCKER_IP:5432 && exec gosu postgres dumb-init python3 /patroni.py postgres0.yml'"
                  },
                  "source": {
                    "repo": "patroni/patroni",
                    "branch": null,
                    "rootDirectory": null
                  },
                  "variables": {
                    "PATRONI_NAME": {
                      "defaultValue": "patroni1"
                    },
                    "PATRONI_SCOPE": {
                      "defaultValue": "batman"
                    },
                    "RAILWAY_RUN_UID": {
                      "defaultValue": "0"
                    },
                    "ETCDCTL_ENDPOINTS": {
                      "defaultValue": "etcd1=http://${{ETCD Worker 1.RAILWAY_PRIVATE_DOMAIN}}:2379,etcd2=http://${{ETCD Worker 2.RAILWAY_PRIVATE_DOMAIN}}:2379,etcd3=http://${{ETCD Worker 3.RAILWAY_PRIVATE_DOMAIN}}:2379"
                    },
                    "PATRONI_NAMESPACE": {
                      "defaultValue": "/service"
                    },
                    "PATRONI_ETCD3_HOSTS": {
                      "defaultValue": "${{ETCD Worker 1.RAILWAY_PRIVATE_DOMAIN}}:2379,${{ETCD Worker 2.RAILWAY_PRIVATE_DOMAIN}}:2379,${{ETCD Worker 3.RAILWAY_PRIVATE_DOMAIN}}:2379"
                    },
                    "PATRONI_admin_OPTIONS": {
                      "defaultValue": "createdb, createrole"
                    },
                    "PATRONI_RESTAPI_LISTEN": {
                      "defaultValue": "0.0.0.0:8008"
                    },
                    "PATRONI_admin_PASSWORD": {
                      "defaultValue": "admin"
                    },
                    "PATRONI_RESTAPI_PASSWORD": {
                      "defaultValue": "admin"
                    },
                    "PATRONI_RESTAPI_USERNAME": {
                      "defaultValue": "admin"
                    },
                    "PATRONI_POSTGRESQL_LISTEN": {
                      "defaultValue": "[::]:5432"
                    },
                    "PATRONI_SUPERUSER_PASSWORD": {
                      "defaultValue": "${{\"Patroni Worker 1\".PATRONI_SUPERUSER_PASSWORD}}"
                    },
                    "PATRONI_SUPERUSER_USERNAME": {
                      "defaultValue": "${{\"Patroni Worker 1\".PATRONI_SUPERUSER_USERNAME}}"
                    },
                    "PATRONI_POSTGRESQL_DATA_DIR": {
                      "defaultValue": "/data/data"
                    },
                    "PATRONI_REPLICATION_PASSWORD": {
                      "defaultValue": "replicate"
                    },
                    "PATRONI_REPLICATION_USERNAME": {
                      "defaultValue": "replicator"
                    },
                    "PATRONI_RESTAPI_CONNECT_ADDRESS": {
                      "defaultValue": "${{RAILWAY_PRIVATE_DOMAIN}}:8008"
                    },
                    "PATRONI_POSTGRESQL_CONNECT_ADDRESS": {
                      "defaultValue": "${{RAILWAY_PRIVATE_DOMAIN}}:5432"
                    },
                    "PATRONI_POSTGRESQL_AUTHENTICATION_REPLICATION_PASSWORD": {
                      "defaultValue": "replicate"
                    },
                    "PATRONI_POSTGRESQL_AUTHENTICATION_REPLICATION_USERNAME": {
                      "defaultValue": "replicator"
                    }
                  },
                  "volumeMounts": {
                    "d27ae557-5943-47ae-8433-6c12ba04f026": {
                      "mountPath": "/data"
                    }
                  }
                },
                "d5494e7c-88e7-4acd-9ade-710dcdd58b24": {
                  "icon": "https://www.svgrepo.com/show/353714/etcd.svg",
                  "name": "ETCD Worker 1",
                  "deploy": {
                    "startCommand": "etcd --name etcd1"
                  },
                  "source": {
                    "repo": "patroni/patroni",
                    "branch": null,
                    "rootDirectory": null
                  },
                  "variables": {
                    "ETCD_DATA_DIR": {
                      "defaultValue": "/var/lib/etcd"
                    },
                    "RAILWAY_RUN_UID": {
                      "defaultValue": "0"
                    },
                    "ETCD_INITIAL_CLUSTER": {
                      "defaultValue": "etcd1=http://${{ETCD Worker 1.RAILWAY_PRIVATE_DOMAIN}}:2380,etcd2=http://${{ETCD Worker 2.RAILWAY_PRIVATE_DOMAIN}}:2380,etcd3=http://${{ETCD Worker 3.RAILWAY_PRIVATE_DOMAIN}}:2380"
                    },
                    "ETCD_LISTEN_PEER_URLS": {
                      "defaultValue": "http://0.0.0.0:2380"
                    },
                    "ETCD_LISTEN_CLIENT_URLS": {
                      "defaultValue": "http://0.0.0.0:2379"
                    },
                    "ETCD_ADVERTISE_CLIENT_URLS": {
                      "defaultValue": "http://${{RAILWAY_PRIVATE_DOMAIN}}:2379"
                    },
                    "ETCD_INITIAL_CLUSTER_STATE": {
                      "defaultValue": "new"
                    },
                    "ETCD_INITIAL_CLUSTER_TOKEN": {
                      "defaultValue": "tutorial"
                    },
                    "ETCD_INITIAL_ADVERTISE_PEER_URLS": {
                      "defaultValue": "http://${{RAILWAY_PRIVATE_DOMAIN}}:2380"
                    }
                  },
                  "volumeMounts": {
                    "d5494e7c-88e7-4acd-9ade-710dcdd58b24": {
                      "mountPath": "/var/lib/etcd"
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  },
  "post_deploy": {},
  "resources": {
    "expected_services": 7,
    "needs_volume": true
  },
  "generated_at": "2026-09-10T10:14:45.332Z",
  "generator_version": "0.1.0",
  "status": "validated",
  "validated_at": "2026-09-09T19:02:10.862Z",
  "success_rate_30d": 1,
  "validation": {
    "last_run_id": "run_0ff0cb8b902b4a5a9705",
    "checks": [
      {
        "name": "workflow_completed",
        "passed": true
      },
      {
        "name": "all_services_deployed",
        "passed": true
      },
      {
        "name": "stays_up",
        "passed": true
      }
    ],
    "typical_ready_seconds": 283,
    "typical_build_seconds": 22,
    "typical_start_seconds": 10,
    "slowest_service": "HAProxy"
  }
}
