{
  "manifest_version": "1.0.0",
  "template": {
    "id": "493617f9-cfc2-4aab-80f3-bb600ebfc7e9",
    "slug": "openmetadata",
    "name": "OpenMetadata",
    "description": "OpenMetadata with search, PostgreSQL, and managed ingestion workflows.",
    "url": "https://railway.com/deploy/openmetadata",
    "upstream": {
      "image": "openmetadata/server@sha256:eaa318584c52d4a492a2c56c95818b5564c6ea28b2e9695ac532c856b2c61bc9"
    }
  },
  "services": [
    {
      "name": "PostgreSQL",
      "source": {
        "image": "openmetadata/postgresql@sha256:5ce479f417601dbc288bec8fae48312beec03c56847d9f5bb706f871b4e0853a"
      },
      "needs_volume": true,
      "volume_mount_path": "/var/lib/postgresql/data",
      "http": false
    },
    {
      "name": "Elasticsearch",
      "source": {
        "image": "elasticsearch@sha256:d6dbcf006047aafb87719e6e0b673c2067a760c902bd207059e84b27b22e2bb2"
      },
      "needs_volume": true,
      "volume_mount_path": "/usr/share/elasticsearch/data",
      "http": false
    },
    {
      "name": "OpenMetadata",
      "source": {
        "image": "openmetadata/server@sha256:eaa318584c52d4a492a2c56c95818b5564c6ea28b2e9695ac532c856b2c61bc9"
      },
      "needs_volume": true,
      "volume_mount_path": "/data",
      "http": true
    },
    {
      "name": "OpenMetadata Ingestion",
      "source": {
        "image": "openmetadata/ingestion@sha256:12e0cde89ecebdfa046bfbbb54d22c841f24e502159f82ece0062bf176f4088d"
      },
      "needs_volume": true,
      "volume_mount_path": "/data",
      "http": false
    }
  ],
  "required_inputs": [
    {
      "key": "PGDATA",
      "service": "PostgreSQL",
      "description": "Provide a value for PGDATA.",
      "secret": false,
      "strategy": "default",
      "default": "/var/lib/postgresql/data/pgdata"
    },
    {
      "key": "POSTGRES_USER",
      "service": "PostgreSQL",
      "description": "Provide a value for POSTGRES_USER.",
      "secret": false,
      "strategy": "default",
      "default": "postgres"
    },
    {
      "key": "POSTGRES_PASSWORD",
      "service": "PostgreSQL",
      "description": "Provide a value for POSTGRES_PASSWORD.",
      "secret": true,
      "strategy": "generate",
      "generate": "strong_password"
    },
    {
      "key": "PORT",
      "service": "Elasticsearch",
      "description": "Provide a value for PORT.",
      "secret": false,
      "strategy": "default",
      "default": "9200"
    },
    {
      "key": "ES_JAVA_OPTS",
      "service": "Elasticsearch",
      "description": "Provide a value for ES_JAVA_OPTS.",
      "secret": false,
      "strategy": "default",
      "default": "-Xms512m -Xmx512m"
    },
    {
      "key": "discovery.type",
      "service": "Elasticsearch",
      "description": "Provide a value for discovery.type.",
      "secret": false,
      "strategy": "default",
      "default": "single-node"
    },
    {
      "key": "RAILWAY_RUN_UID",
      "service": "Elasticsearch",
      "description": "Provide a value for RAILWAY_RUN_UID.",
      "secret": false,
      "strategy": "default",
      "default": "0"
    },
    {
      "key": "xpack.security.enabled",
      "service": "Elasticsearch",
      "description": "Provide a value for xpack.security.enabled.",
      "secret": false,
      "strategy": "default",
      "default": "false"
    },
    {
      "key": "PORT",
      "service": "OpenMetadata",
      "description": "Provide a value for PORT.",
      "secret": false,
      "strategy": "default",
      "default": "8586"
    },
    {
      "key": "DB_HOST",
      "service": "OpenMetadata",
      "description": "Provide a value for DB_HOST.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "DB_PORT",
      "service": "OpenMetadata",
      "description": "Provide a value for DB_PORT.",
      "secret": false,
      "strategy": "default",
      "default": "5432"
    },
    {
      "key": "DB_USER",
      "service": "OpenMetadata",
      "description": "Provide a value for DB_USER.",
      "secret": false,
      "strategy": "default",
      "default": "openmetadata_user"
    },
    {
      "key": "DB_PARAMS",
      "service": "OpenMetadata",
      "description": "Provide a value for DB_PARAMS.",
      "secret": false,
      "strategy": "default",
      "default": "allowPublicKeyRetrieval=true&useSSL=false&serverTimezone=UTC"
    },
    {
      "key": "DB_SCHEME",
      "service": "OpenMetadata",
      "description": "Provide a value for DB_SCHEME.",
      "secret": false,
      "strategy": "default",
      "default": "postgresql"
    },
    {
      "key": "OM_DATABASE",
      "service": "OpenMetadata",
      "description": "Provide a value for OM_DATABASE.",
      "secret": false,
      "strategy": "default",
      "default": "openmetadata_db"
    },
    {
      "key": "SEARCH_TYPE",
      "service": "OpenMetadata",
      "description": "Provide a value for SEARCH_TYPE.",
      "secret": false,
      "strategy": "default",
      "default": "elasticsearch"
    },
    {
      "key": "SERVER_PORT",
      "service": "OpenMetadata",
      "description": "Provide a value for SERVER_PORT.",
      "secret": false,
      "strategy": "default",
      "default": "8585"
    },
    {
      "key": "SECRET_MANAGER",
      "service": "OpenMetadata",
      "description": "Provide a value for SECRET_MANAGER.",
      "secret": true,
      "strategy": "default",
      "default": "db"
    },
    {
      "key": "DB_DRIVER_CLASS",
      "service": "OpenMetadata",
      "description": "Provide a value for DB_DRIVER_CLASS.",
      "secret": false,
      "strategy": "default",
      "default": "org.postgresql.Driver"
    },
    {
      "key": "RAILWAY_RUN_UID",
      "service": "OpenMetadata",
      "description": "Provide a value for RAILWAY_RUN_UID.",
      "secret": false,
      "strategy": "default",
      "default": "0"
    },
    {
      "key": "AIRFLOW_PASSWORD",
      "service": "OpenMetadata",
      "description": "Provide a value for AIRFLOW_PASSWORD.",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "AIRFLOW_USERNAME",
      "service": "OpenMetadata",
      "description": "Provide a value for AIRFLOW_USERNAME.",
      "secret": false,
      "strategy": "default",
      "default": "admin"
    },
    {
      "key": "DB_USER_PASSWORD",
      "service": "OpenMetadata",
      "description": "Provide a value for DB_USER_PASSWORD.",
      "secret": true,
      "strategy": "default",
      "default": "openmetadata_password"
    },
    {
      "key": "SERVER_ADMIN_PORT",
      "service": "OpenMetadata",
      "description": "Provide a value for SERVER_ADMIN_PORT.",
      "secret": false,
      "strategy": "default",
      "default": "8586"
    },
    {
      "key": "ELASTICSEARCH_HOST",
      "service": "OpenMetadata",
      "description": "Provide a value for ELASTICSEARCH_HOST.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "ELASTICSEARCH_PORT",
      "service": "OpenMetadata",
      "description": "Provide a value for ELASTICSEARCH_PORT.",
      "secret": false,
      "strategy": "default",
      "default": "9200"
    },
    {
      "key": "SERVER_HOST_API_URL",
      "service": "OpenMetadata",
      "description": "Provide a value for SERVER_HOST_API_URL.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "ELASTICSEARCH_SCHEME",
      "service": "OpenMetadata",
      "description": "Provide a value for ELASTICSEARCH_SCHEME.",
      "secret": false,
      "strategy": "default",
      "default": "http"
    },
    {
      "key": "OPENMETADATA_HEAP_OPTS",
      "service": "OpenMetadata",
      "description": "Provide a value for OPENMETADATA_HEAP_OPTS.",
      "secret": false,
      "strategy": "default",
      "default": "-Xmx512m -Xms512m"
    },
    {
      "key": "AUTHENTICATION_PROVIDER",
      "service": "OpenMetadata",
      "description": "Provide a value for AUTHENTICATION_PROVIDER.",
      "secret": false,
      "strategy": "default",
      "default": "basic"
    },
    {
      "key": "RSA_PUBLIC_KEY_FILE_PATH",
      "service": "OpenMetadata",
      "description": "Provide a value for RSA_PUBLIC_KEY_FILE_PATH.",
      "secret": true,
      "strategy": "default",
      "default": "/data/public_key.der"
    },
    {
      "key": "OPENMETADATA_CLUSTER_NAME",
      "service": "OpenMetadata",
      "description": "Provide a value for OPENMETADATA_CLUSTER_NAME.",
      "secret": false,
      "strategy": "default",
      "default": "openmetadata"
    },
    {
      "key": "RSA_PRIVATE_KEY_FILE_PATH",
      "service": "OpenMetadata",
      "description": "Provide a value for RSA_PRIVATE_KEY_FILE_PATH.",
      "secret": true,
      "strategy": "default",
      "default": "/data/private_key.der"
    },
    {
      "key": "AUTHENTICATION_PUBLIC_KEYS",
      "service": "OpenMetadata",
      "description": "Provide a value for AUTHENTICATION_PUBLIC_KEYS.",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "AUTHORIZER_ADMIN_PRINCIPALS",
      "service": "OpenMetadata",
      "description": "Provide a value for AUTHORIZER_ADMIN_PRINCIPALS.",
      "secret": false,
      "strategy": "default",
      "default": "[admin]"
    },
    {
      "key": "AUTHORIZER_PRINCIPAL_DOMAIN",
      "service": "OpenMetadata",
      "description": "Provide a value for AUTHORIZER_PRINCIPAL_DOMAIN.",
      "secret": false,
      "strategy": "default",
      "default": "open-metadata.org"
    },
    {
      "key": "FORCE_SECURE_SESSION_COOKIE",
      "service": "OpenMetadata",
      "description": "Provide a value for FORCE_SECURE_SESSION_COOKIE.",
      "secret": false,
      "strategy": "default",
      "default": "true"
    },
    {
      "key": "OPENMETADATA_ADMIN_PASSWORD",
      "service": "OpenMetadata",
      "description": "Provide a value for OPENMETADATA_ADMIN_PASSWORD.",
      "secret": true,
      "strategy": "generate",
      "generate": "strong_password"
    },
    {
      "key": "AUTHORIZER_INGESTION_PRINCIPALS",
      "service": "OpenMetadata",
      "description": "Provide a value for AUTHORIZER_INGESTION_PRINCIPALS.",
      "secret": false,
      "strategy": "default",
      "default": "[ingestion-bot]"
    },
    {
      "key": "PIPELINE_SERVICE_CLIENT_ENABLED",
      "service": "OpenMetadata",
      "description": "Provide a value for PIPELINE_SERVICE_CLIENT_ENABLED.",
      "secret": false,
      "strategy": "default",
      "default": "true"
    },
    {
      "key": "PIPELINE_SERVICE_CLIENT_ENDPOINT",
      "service": "OpenMetadata",
      "description": "Provide a value for PIPELINE_SERVICE_CLIENT_ENDPOINT.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "AUTHENTICATION_ENABLE_SELF_SIGNUP",
      "service": "OpenMetadata",
      "description": "Provide a value for AUTHENTICATION_ENABLE_SELF_SIGNUP.",
      "secret": false,
      "strategy": "default",
      "default": "false"
    },
    {
      "key": "AUTHORIZER_ALLOWED_REGISTRATION_DOMAIN",
      "service": "OpenMetadata",
      "description": "Provide a value for AUTHORIZER_ALLOWED_REGISTRATION_DOMAIN.",
      "secret": false,
      "strategy": "default",
      "default": "[\"all\"]"
    },
    {
      "key": "PORT",
      "service": "OpenMetadata Ingestion",
      "description": "Provide a value for PORT.",
      "secret": false,
      "strategy": "default",
      "default": "8080"
    },
    {
      "key": "TMPDIR",
      "service": "OpenMetadata Ingestion",
      "description": "Provide a value for TMPDIR.",
      "secret": false,
      "strategy": "default",
      "default": "/data/tmp"
    },
    {
      "key": "DB_HOST",
      "service": "OpenMetadata Ingestion",
      "description": "Provide a value for DB_HOST.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "DB_PORT",
      "service": "OpenMetadata Ingestion",
      "description": "Provide a value for DB_PORT.",
      "secret": false,
      "strategy": "default",
      "default": "5432"
    },
    {
      "key": "DB_USER",
      "service": "OpenMetadata Ingestion",
      "description": "Provide a value for DB_USER.",
      "secret": false,
      "strategy": "default",
      "default": "airflow_user"
    },
    {
      "key": "DB_SCHEME",
      "service": "OpenMetadata Ingestion",
      "description": "Provide a value for DB_SCHEME.",
      "secret": false,
      "strategy": "default",
      "default": "postgresql+psycopg2"
    },
    {
      "key": "AIRFLOW_DB",
      "service": "OpenMetadata Ingestion",
      "description": "Provide a value for AIRFLOW_DB.",
      "secret": false,
      "strategy": "default",
      "default": "airflow_db"
    },
    {
      "key": "DB_PASSWORD",
      "service": "OpenMetadata Ingestion",
      "description": "Provide a value for DB_PASSWORD.",
      "secret": true,
      "strategy": "default",
      "default": "airflow_pass"
    },
    {
      "key": "RAILWAY_RUN_UID",
      "service": "OpenMetadata Ingestion",
      "description": "Provide a value for RAILWAY_RUN_UID.",
      "secret": false,
      "strategy": "default",
      "default": "0"
    },
    {
      "key": "AIRFLOW_ADMIN_USER",
      "service": "OpenMetadata Ingestion",
      "description": "Provide a value for AIRFLOW_ADMIN_USER.",
      "secret": false,
      "strategy": "default",
      "default": "admin"
    },
    {
      "key": "AIRFLOW_ADMIN_PASSWORD",
      "service": "OpenMetadata Ingestion",
      "description": "Provide a value for AIRFLOW_ADMIN_PASSWORD.",
      "secret": true,
      "strategy": "generate",
      "generate": "strong_password"
    },
    {
      "key": "AIRFLOW__CORE__EXECUTOR",
      "service": "OpenMetadata Ingestion",
      "description": "Provide a value for AIRFLOW__CORE__EXECUTOR.",
      "secret": false,
      "strategy": "default",
      "default": "LocalExecutor"
    },
    {
      "key": "AIRFLOW__CORE__DAGS_FOLDER",
      "service": "OpenMetadata Ingestion",
      "description": "Provide a value for AIRFLOW__CORE__DAGS_FOLDER.",
      "secret": false,
      "strategy": "default",
      "default": "/data/dags"
    },
    {
      "key": "AIRFLOW__CORE__PARALLELISM",
      "service": "OpenMetadata Ingestion",
      "description": "Provide a value for AIRFLOW__CORE__PARALLELISM.",
      "secret": false,
      "strategy": "default",
      "default": "4"
    },
    {
      "key": "AIRFLOW__API__AUTH_BACKENDS",
      "service": "OpenMetadata Ingestion",
      "description": "Provide a value for AIRFLOW__API__AUTH_BACKENDS.",
      "secret": false,
      "strategy": "default",
      "default": "airflow.api.auth.backend.basic_auth,airflow.api.auth.backend.session"
    },
    {
      "key": "AIRFLOW__CORE__MAX_ACTIVE_TASKS_PER_DAG",
      "service": "OpenMetadata Ingestion",
      "description": "Provide a value for AIRFLOW__CORE__MAX_ACTIVE_TASKS_PER_DAG.",
      "secret": false,
      "strategy": "default",
      "default": "4"
    },
    {
      "key": "AIRFLOW__OPENMETADATA_AIRFLOW_APIS__DAG_GENERATED_CONFIGS",
      "service": "OpenMetadata Ingestion",
      "description": "Provide a value for AIRFLOW__OPENMETADATA_AIRFLOW_APIS__DAG_GENERATED_CONFIGS.",
      "secret": false,
      "strategy": "default",
      "default": "/data/dag_generated_configs"
    }
  ],
  "deploy": {
    "mcp": {
      "server": "railway",
      "tool": "deploy_template",
      "args": {
        "template_code": "openmetadata"
      }
    },
    "cli": "railway deploy --template openmetadata",
    "api": {
      "method": "POST",
      "path": "/graphql/v2",
      "body": {
        "query": "mutation templateDeploy($input: TemplateDeployV2Input!) { templateDeployV2(input: $input) { projectId workflowId } }",
        "variables": {
          "input": {
            "templateId": "493617f9-cfc2-4aab-80f3-bb600ebfc7e9",
            "serializedConfig": {
              "buckets": {},
              "services": {
                "23db950f-48d3-4c18-aa18-af71065afd74": {
                  "icon": null,
                  "name": "PostgreSQL",
                  "deploy": {
                    "startCommand": "postgres --work_mem=20MB",
                    "healthcheckPath": null,
                    "restartPolicyType": "ON_FAILURE",
                    "restartPolicyMaxRetries": 10
                  },
                  "source": {
                    "image": "openmetadata/postgresql@sha256:5ce479f417601dbc288bec8fae48312beec03c56847d9f5bb706f871b4e0853a"
                  },
                  "variables": {
                    "PGDATA": {
                      "isOptional": false,
                      "defaultValue": "/var/lib/postgresql/data/pgdata"
                    },
                    "POSTGRES_USER": {
                      "isOptional": false,
                      "defaultValue": "postgres"
                    },
                    "POSTGRES_PASSWORD": {
                      "isOptional": false,
                      "defaultValue": "{{POSTGRES_PASSWORD}}"
                    }
                  },
                  "volumeMounts": {
                    "23db950f-48d3-4c18-aa18-af71065afd74": {
                      "mountPath": "/var/lib/postgresql/data"
                    }
                  }
                },
                "8ff2147d-e15a-45ad-b0bd-f820e6cd10a2": {
                  "icon": null,
                  "name": "Elasticsearch",
                  "deploy": {
                    "startCommand": "/bin/bash -ec 'chown 1000:0 /usr/share/elasticsearch/data && exec /usr/sbin/chroot --userspec=1000:0 / /usr/local/bin/docker-entrypoint.sh eswrapper'",
                    "healthcheckPath": "/_cluster/health",
                    "restartPolicyType": "ON_FAILURE",
                    "restartPolicyMaxRetries": 10
                  },
                  "source": {
                    "image": "elasticsearch@sha256:d6dbcf006047aafb87719e6e0b673c2067a760c902bd207059e84b27b22e2bb2"
                  },
                  "variables": {
                    "PORT": {
                      "isOptional": false,
                      "defaultValue": "9200"
                    },
                    "ES_JAVA_OPTS": {
                      "isOptional": false,
                      "defaultValue": "-Xms512m -Xmx512m"
                    },
                    "discovery.type": {
                      "isOptional": false,
                      "defaultValue": "single-node"
                    },
                    "RAILWAY_RUN_UID": {
                      "isOptional": false,
                      "defaultValue": "0"
                    },
                    "xpack.security.enabled": {
                      "isOptional": false,
                      "defaultValue": "false"
                    }
                  },
                  "volumeMounts": {
                    "8ff2147d-e15a-45ad-b0bd-f820e6cd10a2": {
                      "mountPath": "/usr/share/elasticsearch/data"
                    }
                  }
                },
                "eaf55f59-cae7-47eb-922e-34c3ac624b17": {
                  "icon": null,
                  "name": "OpenMetadata",
                  "deploy": {
                    "startCommand": "/bin/bash -ec \"if [[ ! -s /data/private_key.der || ! -s /data/public_key.der ]]; then printf '%s' 'aW1wb3J0IGphdmEubmlvLmZpbGUuRmlsZXM7CmltcG9ydCBqYXZhLm5pby5maWxlLlBhdGg7CmltcG9ydCBqYXZhLnNlY3VyaXR5LktleVBhaXJHZW5lcmF0b3I7CgpwdWJsaWMgZmluYWwgY2xhc3MgR2VuZXJhdGVLZXlzIHsKICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgIEtleVBhaXJHZW5lcmF0b3IgZ2VuZXJhdG9yID0gS2V5UGFpckdlbmVyYXRvci5nZXRJbnN0YW5jZSgiUlNBIik7CiAgICBnZW5lcmF0b3IuaW5pdGlhbGl6ZSgyMDQ4KTsKICAgIHZhciBrZXlzID0gZ2VuZXJhdG9yLmdlbmVyYXRlS2V5UGFpcigpOwogICAgRmlsZXMud3JpdGUoUGF0aC5vZihhcmdzWzBdKSwga2V5cy5nZXRQcml2YXRlKCkuZ2V0RW5jb2RlZCgpKTsKICAgIEZpbGVzLndyaXRlKFBhdGgub2YoYXJnc1sxXSksIGtleXMuZ2V0UHVibGljKCkuZ2V0RW5jb2RlZCgpKTsKICB9Cn0K' | base64 -d > /tmp/GenerateKeys.java; java /tmp/GenerateKeys.java /data/private_key.der /data/public_key.der; chown 1000:1000 /data/private_key.der /data/public_key.der; chmod 600 /data/private_key.der; chmod 644 /data/public_key.der; fi; printf '%s' 'aW1wb3J0IGphdmEubmV0LlVSSTsKaW1wb3J0IGphdmEubmV0Lmh0dHAuSHR0cENsaWVudDsKaW1wb3J0IGphdmEubmV0Lmh0dHAuSHR0cFJlcXVlc3Q7CmltcG9ydCBqYXZhLm5ldC5odHRwLkh0dHBSZXNwb25zZTsKaW1wb3J0IGphdmEubmlvLmNoYXJzZXQuU3RhbmRhcmRDaGFyc2V0czsKaW1wb3J0IGphdmEudGltZS5EdXJhdGlvbjsKaW1wb3J0IGphdmEudXRpbC5CYXNlNjQ7CmltcG9ydCBqYXZhLnV0aWwucmVnZXguTWF0Y2hlcjsKaW1wb3J0IGphdmEudXRpbC5yZWdleC5QYXR0ZXJuOwoKY2xhc3MgUm90YXRlQWRtaW4gewogIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBCQVNFX1VSTCA9CiAgICAgIFN5c3RlbS5nZXRlbnYoKS5nZXRPckRlZmF1bHQoCiAgICAgICAgICAiT1BFTk1FVEFEQVRBX1JPVEFUSU9OX0JBU0VfVVJMIiwgImh0dHA6Ly9sb2NhbGhvc3Q6ODU4NSIpOwogIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBBRE1JTl9FTUFJTCA9ICJhZG1pbkBvcGVuLW1ldGFkYXRhLm9yZyI7CiAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgUGF0dGVybiBBQ0NFU1NfVE9LRU4gPQogICAgICBQYXR0ZXJuLmNvbXBpbGUoIlwiYWNjZXNzVG9rZW5cIlxccyo6XFxzKlwiKFteXCJdKylcIiIpOwogIHByaXZhdGUgc3RhdGljIGZpbmFsIEh0dHBDbGllbnQgSFRUUCA9CiAgICAgIEh0dHBDbGllbnQubmV3QnVpbGRlcigpLmNvbm5lY3RUaW1lb3V0KER1cmF0aW9uLm9mU2Vjb25kcyg1KSkuYnVpbGQoKTsKCiAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICBTdHJpbmcgdGFyZ2V0UGFzc3dvcmQgPSBTeXN0ZW0uZ2V0ZW52KCJPUEVOTUVUQURBVEFfQURNSU5fUEFTU1dPUkQiKTsKICAgIGlmICh0YXJnZXRQYXNzd29yZCA9PSBudWxsIHx8IHRhcmdldFBhc3N3b3JkLmxlbmd0aCgpIDwgOCB8fCB0YXJnZXRQYXNzd29yZC5sZW5ndGgoKSA+IDU2KSB7CiAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oCiAgICAgICAgICAiT1BFTk1FVEFEQVRBX0FETUlOX1BBU1NXT1JEIG11c3QgY29udGFpbiA4IHRvIDU2IGNoYXJhY3RlcnMiKTsKICAgIH0KCiAgICB3YWl0Rm9yQXBpKCk7CgogICAgU3RyaW5nIGRlZmF1bHRUb2tlbiA9IGxvZ2luKCJhZG1pbiIpOwogICAgaWYgKGRlZmF1bHRUb2tlbiAhPSBudWxsKSB7CiAgICAgIGNoYW5nZVBhc3N3b3JkKGRlZmF1bHRUb2tlbiwgdGFyZ2V0UGFzc3dvcmQpOwogICAgfQoKICAgIGlmIChsb2dpbih0YXJnZXRQYXNzd29yZCkgPT0gbnVsbCkgewogICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKAogICAgICAgICAgIlRoZSBnZW5lcmF0ZWQgYWRtaW4gcGFzc3dvcmQgd2FzIG5vdCBhY2NlcHRlZCBhZnRlciByb3RhdGlvbiIpOwogICAgfQoKICAgIFN5c3RlbS5vdXQucHJpbnRsbigiT3Blbk1ldGFkYXRhIGRlZmF1bHQgYWRtaW5pc3RyYXRvciBwYXNzd29yZCBpcyByb3RhdGVkLiIpOwogIH0KCiAgcHJpdmF0ZSBzdGF0aWMgdm9pZCB3YWl0Rm9yQXBpKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICBIdHRwUmVxdWVzdCByZXF1ZXN0ID0KICAgICAgICBIdHRwUmVxdWVzdC5uZXdCdWlsZGVyKFVSSS5jcmVhdGUoQkFTRV9VUkwgKyAiL2FwaS92MS9zeXN0ZW0vdmVyc2lvbiIpKQogICAgICAgICAgICAudGltZW91dChEdXJhdGlvbi5vZlNlY29uZHMoNSkpCiAgICAgICAgICAgIC5HRVQoKQogICAgICAgICAgICAuYnVpbGQoKTsKCiAgICBmb3IgKGludCBhdHRlbXB0ID0gMDsgYXR0ZW1wdCA8IDMwMDsgYXR0ZW1wdCsrKSB7CiAgICAgIHRyeSB7CiAgICAgICAgaWYgKEhUVFAuc2VuZChyZXF1ZXN0LCBIdHRwUmVzcG9uc2UuQm9keUhhbmRsZXJzLmRpc2NhcmRpbmcoKSkuc3RhdHVzQ29kZSgpID09IDIwMCkgewogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGlnbm9yZWQpIHsKICAgICAgICAvLyBUaGUgc2VydmVyIGlzIHN0aWxsIHN0YXJ0aW5nLgogICAgICB9CiAgICAgIFRocmVhZC5zbGVlcCgyXzAwMCk7CiAgICB9CgogICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigiT3Blbk1ldGFkYXRhIEFQSSBkaWQgbm90IGJlY29tZSByZWFkeSBmb3IgYWRtaW4gcm90YXRpb24iKTsKICB9CgogIHByaXZhdGUgc3RhdGljIFN0cmluZyBsb2dpbihTdHJpbmcgcGFzc3dvcmQpIHRocm93cyBFeGNlcHRpb24gewogICAgU3RyaW5nIGVuY29kZWRQYXNzd29yZCA9CiAgICAgICAgQmFzZTY0LmdldEVuY29kZXIoKS5lbmNvZGVUb1N0cmluZyhwYXNzd29yZC5nZXRCeXRlcyhTdGFuZGFyZENoYXJzZXRzLlVURl84KSk7CiAgICBTdHJpbmcgYm9keSA9CiAgICAgICAgIntcImVtYWlsXCI6XCIiCiAgICAgICAgICAgICsgQURNSU5fRU1BSUwKICAgICAgICAgICAgKyAiXCIsXCJwYXNzd29yZFwiOlwiIgogICAgICAgICAgICArIGVuY29kZWRQYXNzd29yZAogICAgICAgICAgICArICJcIn0iOwogICAgSHR0cFJlcXVlc3QgcmVxdWVzdCA9CiAgICAgICAgSHR0cFJlcXVlc3QubmV3QnVpbGRlcihVUkkuY3JlYXRlKEJBU0VfVVJMICsgIi9hcGkvdjEvdXNlcnMvbG9naW4iKSkKICAgICAgICAgICAgLnRpbWVvdXQoRHVyYXRpb24ub2ZTZWNvbmRzKDEwKSkKICAgICAgICAgICAgLmhlYWRlcigiQ29udGVudC1UeXBlIiwgImFwcGxpY2F0aW9uL2pzb24iKQogICAgICAgICAgICAuUE9TVChIdHRwUmVxdWVzdC5Cb2R5UHVibGlzaGVycy5vZlN0cmluZyhib2R5KSkKICAgICAgICAgICAgLmJ1aWxkKCk7CiAgICBIdHRwUmVzcG9uc2U8U3RyaW5nPiByZXNwb25zZSA9IEhUVFAuc2VuZChyZXF1ZXN0LCBIdHRwUmVzcG9uc2UuQm9keUhhbmRsZXJzLm9mU3RyaW5nKCkpOwoKICAgIGlmIChyZXNwb25zZS5zdGF0dXNDb2RlKCkgIT0gMjAwKSB7CiAgICAgIHJldHVybiBudWxsOwogICAgfQoKICAgIE1hdGNoZXIgdG9rZW4gPSBBQ0NFU1NfVE9LRU4ubWF0Y2hlcihyZXNwb25zZS5ib2R5KCkpOwogICAgcmV0dXJuIHRva2VuLmZpbmQoKSA/IHRva2VuLmdyb3VwKDEpIDogbnVsbDsKICB9CgogIHByaXZhdGUgc3RhdGljIHZvaWQgY2hhbmdlUGFzc3dvcmQoU3RyaW5nIHRva2VuLCBTdHJpbmcgdGFyZ2V0UGFzc3dvcmQpIHRocm93cyBFeGNlcHRpb24gewogICAgU3RyaW5nIGVzY2FwZWRQYXNzd29yZCA9IGpzb25Fc2NhcGUodGFyZ2V0UGFzc3dvcmQpOwogICAgU3RyaW5nIGJvZHkgPQogICAgICAgICJ7XCJ1c2VybmFtZVwiOlwiYWRtaW5cIixcIm9sZFBhc3N3b3JkXCI6XCJhZG1pblwiLFwibmV3UGFzc3dvcmRcIjpcIiIKICAgICAgICAgICAgKyBlc2NhcGVkUGFzc3dvcmQKICAgICAgICAgICAgKyAiXCIsXCJjb25maXJtUGFzc3dvcmRcIjpcIiIKICAgICAgICAgICAgKyBlc2NhcGVkUGFzc3dvcmQKICAgICAgICAgICAgKyAiXCIsXCJyZXF1ZXN0VHlwZVwiOlwiVVNFUlwifSI7CiAgICBIdHRwUmVxdWVzdCByZXF1ZXN0ID0KICAgICAgICBIdHRwUmVxdWVzdC5uZXdCdWlsZGVyKFVSSS5jcmVhdGUoQkFTRV9VUkwgKyAiL2FwaS92MS91c2Vycy9jaGFuZ2VQYXNzd29yZCIpKQogICAgICAgICAgICAudGltZW91dChEdXJhdGlvbi5vZlNlY29uZHMoMTApKQogICAgICAgICAgICAuaGVhZGVyKCJDb250ZW50LVR5cGUiLCAiYXBwbGljYXRpb24vanNvbiIpCiAgICAgICAgICAgIC5oZWFkZXIoIkF1dGhvcml6YXRpb24iLCAiQmVhcmVyICIgKyB0b2tlbikKICAgICAgICAgICAgLlBVVChIdHRwUmVxdWVzdC5Cb2R5UHVibGlzaGVycy5vZlN0cmluZyhib2R5KSkKICAgICAgICAgICAgLmJ1aWxkKCk7CiAgICBIdHRwUmVzcG9uc2U8U3RyaW5nPiByZXNwb25zZSA9IEhUVFAuc2VuZChyZXF1ZXN0LCBIdHRwUmVzcG9uc2UuQm9keUhhbmRsZXJzLm9mU3RyaW5nKCkpOwoKICAgIGlmIChyZXNwb25zZS5zdGF0dXNDb2RlKCkgIT0gMjAwKSB7CiAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oCiAgICAgICAgICAiT3Blbk1ldGFkYXRhIHJlamVjdGVkIHRoZSBhZG1pbmlzdHJhdG9yIHBhc3N3b3JkIHJvdGF0aW9uIHdpdGggSFRUUCAiCiAgICAgICAgICAgICAgKyByZXNwb25zZS5zdGF0dXNDb2RlKCkpOwogICAgfQogIH0KCiAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGpzb25Fc2NhcGUoU3RyaW5nIHZhbHVlKSB7CiAgICByZXR1cm4gdmFsdWUKICAgICAgICAucmVwbGFjZSgiXFwiLCAiXFxcXCIpCiAgICAgICAgLnJlcGxhY2UoIlwiIiwgIlxcXCIiKQogICAgICAgIC5yZXBsYWNlKCJcbiIsICJcXG4iKQogICAgICAgIC5yZXBsYWNlKCJcciIsICJcXHIiKQogICAgICAgIC5yZXBsYWNlKCJcdCIsICJcXHQiKTsKICB9Cn0K' | base64 -d > /tmp/RotateAdmin.java; printf '%s' 'aW1wb3J0IGphdmEubmlvLmZpbGUuRmlsZXM7CmltcG9ydCBqYXZhLm5pby5maWxlLlBhdGg7CmltcG9ydCBqYXZhLnNxbC5Db25uZWN0aW9uOwppbXBvcnQgamF2YS5zcWwuRHJpdmVyTWFuYWdlcjsKaW1wb3J0IGphdmEuc3FsLlJlc3VsdFNldDsKaW1wb3J0IGphdmEuc3FsLlN0YXRlbWVudDsKCnB1YmxpYyBmaW5hbCBjbGFzcyBCb290c3RyYXBGbG93YWJsZSB7CiAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgUGF0aCBGTE9XQUJMRV9TQ0hFTUEgPQogICAgICBQYXRoLm9mKAogICAgICAgICAgIi9vcHQvb3Blbm1ldGFkYXRhL2Jvb3RzdHJhcC9zcWwvbWlncmF0aW9ucy9uYXRpdmUvMS42LjAvcG9zdGdyZXMvc2NoZW1hQ2hhbmdlcy5zcWwiKTsKICBwcml2YXRlIHN0YXRpYyBmaW5hbCBQYXRoIEZMT1dBQkxFX0JBVENIX1NDSEVNQSA9CiAgICAgIFBhdGgub2YoCiAgICAgICAgICAiL29wdC9vcGVubWV0YWRhdGEvYm9vdHN0cmFwL3NxbC9taWdyYXRpb25zL25hdGl2ZS8xLjExLjEvcG9zdGdyZXMvc2NoZW1hQ2hhbmdlcy5zcWwiKTsKICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgRkxPV0FCTEVfU1RBUlQgPSAiLS0gRmxvd2FibGUgUmVsYXRlZCBUYWJsZXMiOwogIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBGTE9XQUJMRV9FTkQgPQogICAgICAiLS0gQ2xlYW4gZGFuZ2xpbmcgd29ya2Zsb3dzIG5vdCByZW1vdmVkIGFmdGVyIHRlc3QgY29ubmVjdGlvbiI7CiAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEZMT1dBQkxFX0JBVENIX0VORCA9CiAgICAgICItLSBVcGRhdGUgd29ya2Zsb3cgc2V0dGluZ3Mgd2l0aCBuZXcgaGlzdG9yeSBjbGVhbnVwIGNvbmZpZ3VyYXRpb24gZmllbGRzIjsKCiAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICBTdHJpbmcgamRiY1VybCA9CiAgICAgICAgImpkYmM6cG9zdGdyZXNxbDovLyIKICAgICAgICAgICAgKyByZXF1aXJlZCgiREJfSE9TVCIpCiAgICAgICAgICAgICsgIjoiCiAgICAgICAgICAgICsgcmVxdWlyZWQoIkRCX1BPUlQiKQogICAgICAgICAgICArICIvIgogICAgICAgICAgICArIHJlcXVpcmVkKCJPTV9EQVRBQkFTRSIpOwoKICAgIHRyeSAoQ29ubmVjdGlvbiBjb25uZWN0aW9uID0KICAgICAgICBEcml2ZXJNYW5hZ2VyLmdldENvbm5lY3Rpb24oCiAgICAgICAgICAgIGpkYmNVcmwsIHJlcXVpcmVkKCJEQl9VU0VSIiksIHJlcXVpcmVkKCJEQl9VU0VSX1BBU1NXT1JEIikpKSB7CiAgICAgIGNvbm5lY3Rpb24uc2V0QXV0b0NvbW1pdChmYWxzZSk7CgogICAgICBpZiAoYXJncy5sZW5ndGggPT0gMSAmJiBhcmdzWzBdLmVxdWFscygiY29yZS1zY2hlbWEtZXhpc3RzIikpIHsKICAgICAgICBTeXN0ZW0uZXhpdCh0YWJsZUV4aXN0cyhjb25uZWN0aW9uLCAib3Blbm1ldGFkYXRhX3NldHRpbmdzIikgPyAwIDogMTApOwogICAgICB9CgogICAgICBpZiAoIXRhYmxlRXhpc3RzKGNvbm5lY3Rpb24sICJhY3RfZ2VfcHJvcGVydHkiKSkgewogICAgICAgIFN0cmluZyBtaWdyYXRpb24gPSBGaWxlcy5yZWFkU3RyaW5nKEZMT1dBQkxFX1NDSEVNQSk7CiAgICAgICAgaW50IHN0YXJ0ID0gbWlncmF0aW9uLmluZGV4T2YoRkxPV0FCTEVfU1RBUlQpOwogICAgICAgIGludCBlbmQgPSBtaWdyYXRpb24uaW5kZXhPZihGTE9XQUJMRV9FTkQsIHN0YXJ0KTsKICAgICAgICBpZiAoc3RhcnQgPCAwIHx8IGVuZCA8IDApIHsKICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oIkNvdWxkIG5vdCBsb2NhdGUgdGhlIHVwc3RyZWFtIEZsb3dhYmxlIHNjaGVtYSBibG9jayIpOwogICAgICAgIH0KICAgICAgICBleGVjdXRlKGNvbm5lY3Rpb24sIG1pZ3JhdGlvbi5zdWJzdHJpbmcoc3RhcnQsIGVuZCkpOwogICAgICB9CgogICAgICBpZiAoIXRhYmxlRXhpc3RzKGNvbm5lY3Rpb24sICJmbHdfcnVfYmF0Y2giKSkgewogICAgICAgIFN0cmluZyBiYXRjaE1pZ3JhdGlvbiA9IEZpbGVzLnJlYWRTdHJpbmcoRkxPV0FCTEVfQkFUQ0hfU0NIRU1BKTsKICAgICAgICBpbnQgZW5kID0gYmF0Y2hNaWdyYXRpb24uaW5kZXhPZihGTE9XQUJMRV9CQVRDSF9FTkQpOwogICAgICAgIGlmIChlbmQgPCAwKSB7CiAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCJDb3VsZCBub3QgbG9jYXRlIHRoZSB1cHN0cmVhbSBGbG93YWJsZSBiYXRjaCBzY2hlbWEgYmxvY2siKTsKICAgICAgICB9CiAgICAgICAgZXhlY3V0ZShjb25uZWN0aW9uLCBiYXRjaE1pZ3JhdGlvbi5zdWJzdHJpbmcoMCwgZW5kKSk7CiAgICAgIH0KCiAgICAgIGNvbm5lY3Rpb24uY29tbWl0KCk7CiAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRmxvd2FibGUgd29ya2Zsb3cgc2NoZW1hIGlzIHJlYWR5LiIpOwogICAgfQogIH0KCiAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiB0YWJsZUV4aXN0cyhDb25uZWN0aW9uIGNvbm5lY3Rpb24sIFN0cmluZyB0YWJsZSkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICB0cnkgKFN0YXRlbWVudCBzdGF0ZW1lbnQgPSBjb25uZWN0aW9uLmNyZWF0ZVN0YXRlbWVudCgpOwogICAgICAgIFJlc3VsdFNldCByZXN1bHQgPQogICAgICAgICAgICBzdGF0ZW1lbnQuZXhlY3V0ZVF1ZXJ5KAogICAgICAgICAgICAgICAgInNlbGVjdCB0b19yZWdjbGFzcygncHVibGljLiIgKyB0YWJsZS5yZXBsYWNlKCInIiwgIicnIikgKyAiJykgaXMgbm90IG51bGwiKSkgewogICAgICByZXR1cm4gcmVzdWx0Lm5leHQoKSAmJiByZXN1bHQuZ2V0Qm9vbGVhbigxKTsKICAgIH0KICB9CgogIHByaXZhdGUgc3RhdGljIHZvaWQgZXhlY3V0ZShDb25uZWN0aW9uIGNvbm5lY3Rpb24sIFN0cmluZyBzcWwpIHRocm93cyBFeGNlcHRpb24gewogICAgdHJ5IChTdGF0ZW1lbnQgc3RhdGVtZW50ID0gY29ubmVjdGlvbi5jcmVhdGVTdGF0ZW1lbnQoKSkgewogICAgICBzdGF0ZW1lbnQuZXhlY3V0ZShzcWwpOwogICAgfQogIH0KCiAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIHJlcXVpcmVkKFN0cmluZyBuYW1lKSB7CiAgICBTdHJpbmcgdmFsdWUgPSBTeXN0ZW0uZ2V0ZW52KG5hbWUpOwogICAgaWYgKHZhbHVlID09IG51bGwgfHwgdmFsdWUuaXNCbGFuaygpKSB7CiAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oIk1pc3NpbmcgcmVxdWlyZWQgZW52aXJvbm1lbnQgdmFyaWFibGUgIiArIG5hbWUpOwogICAgfQogICAgcmV0dXJuIHZhbHVlOwogIH0KfQo=' | base64 -d > /tmp/BootstrapFlowable.java; printf '%s' 'IyEvdXNyL2Jpbi9lbnYgYmFzaApzZXQgLWV1byBwaXBlZmFpbAoKYWRtaW5fcm90YXRvcl9wYXRoPSIke0FETUlOX1JPVEFUT1JfUEFUSDotL3RtcC9Sb3RhdGVBZG1pbi5qYXZhfSIKZmxvd2FibGVfYm9vdHN0cmFwX3BhdGg9IiR7RkxPV0FCTEVfQk9PVFNUUkFQX1BBVEg6LS90bXAvQm9vdHN0cmFwRmxvd2FibGUuamF2YX0iCgppZiBqYXZhIC0tY2xhc3MtcGF0aCAiL29wdC9vcGVubWV0YWRhdGEvbGlicy8qIiBcCiAgIiR7Zmxvd2FibGVfYm9vdHN0cmFwX3BhdGh9IiBjb3JlLXNjaGVtYS1leGlzdHM7IHRoZW4KICAuL2Jvb3RzdHJhcC9vcGVubWV0YWRhdGEtb3BzLnNoIG1pZ3JhdGUKZWxzZQogIHByaW50ZiAnREVMRVRFXG4nIHwgLi9ib290c3RyYXAvb3Blbm1ldGFkYXRhLW9wcy5zaCBkcm9wLWNyZWF0ZQpmaQpqYXZhIC0tY2xhc3MtcGF0aCAiL29wdC9vcGVubWV0YWRhdGEvbGlicy8qIiAiJHtmbG93YWJsZV9ib290c3RyYXBfcGF0aH0iClNFUlZFUl9QT1JUPTE4NTg1IFNFUlZFUl9BRE1JTl9QT1JUPTE4NTg2IC9vcGVubWV0YWRhdGEtc3RhcnQuc2ggJgpib290c3RyYXBfcGlkPSQhCgpzdG9wX2Jvb3RzdHJhcF9zZXJ2ZXIoKSB7CiAga2lsbCAiJHtib290c3RyYXBfcGlkfSIgMj4vZGV2L251bGwgfHwgdHJ1ZQp9CnRyYXAgc3RvcF9ib290c3RyYXBfc2VydmVyIElOVCBURVJNCgppZiAhIE9QRU5NRVRBREFUQV9ST1RBVElPTl9CQVNFX1VSTD1odHRwOi8vbG9jYWxob3N0OjE4NTg1IGphdmEgIiR7YWRtaW5fcm90YXRvcl9wYXRofSI7IHRoZW4KICBzdG9wX2Jvb3RzdHJhcF9zZXJ2ZXIKICB3YWl0ICIke2Jvb3RzdHJhcF9waWR9IiB8fCB0cnVlCiAgZXhpdCAxCmZpCgpzdG9wX2Jvb3RzdHJhcF9zZXJ2ZXIKd2FpdCAiJHtib290c3RyYXBfcGlkfSIgfHwgdHJ1ZQp0cmFwIC0gSU5UIFRFUk0KCmV4ZWMgL29wZW5tZXRhZGF0YS1zdGFydC5zaAo=' | base64 -d > /tmp/start-openmetadata.sh; chown 1000:1000 /tmp/RotateAdmin.java /tmp/BootstrapFlowable.java /tmp/start-openmetadata.sh; exec su -s /bin/bash openmetadata -c 'exec /bin/bash /tmp/start-openmetadata.sh'\"",
                    "healthcheckPath": "/healthcheck",
                    "restartPolicyType": "ON_FAILURE",
                    "restartPolicyMaxRetries": 10
                  },
                  "source": {
                    "image": "openmetadata/server@sha256:eaa318584c52d4a492a2c56c95818b5564c6ea28b2e9695ac532c856b2c61bc9"
                  },
                  "variables": {
                    "PORT": {
                      "isOptional": false,
                      "defaultValue": "8586"
                    },
                    "DB_HOST": {
                      "isOptional": false,
                      "defaultValue": "${{PostgreSQL.RAILWAY_PRIVATE_DOMAIN}}"
                    },
                    "DB_PORT": {
                      "isOptional": false,
                      "defaultValue": "5432"
                    },
                    "DB_USER": {
                      "isOptional": false,
                      "defaultValue": "openmetadata_user"
                    },
                    "DB_PARAMS": {
                      "isOptional": false,
                      "defaultValue": "allowPublicKeyRetrieval=true&useSSL=false&serverTimezone=UTC"
                    },
                    "DB_SCHEME": {
                      "isOptional": false,
                      "defaultValue": "postgresql"
                    },
                    "OM_DATABASE": {
                      "isOptional": false,
                      "defaultValue": "openmetadata_db"
                    },
                    "SEARCH_TYPE": {
                      "isOptional": false,
                      "defaultValue": "elasticsearch"
                    },
                    "SERVER_PORT": {
                      "isOptional": false,
                      "defaultValue": "8585"
                    },
                    "SECRET_MANAGER": {
                      "isOptional": false,
                      "defaultValue": "db"
                    },
                    "DB_DRIVER_CLASS": {
                      "isOptional": false,
                      "defaultValue": "org.postgresql.Driver"
                    },
                    "RAILWAY_RUN_UID": {
                      "isOptional": false,
                      "defaultValue": "0"
                    },
                    "AIRFLOW_PASSWORD": {
                      "isOptional": false,
                      "defaultValue": "${{OpenMetadata Ingestion.AIRFLOW_ADMIN_PASSWORD}}"
                    },
                    "AIRFLOW_USERNAME": {
                      "isOptional": false,
                      "defaultValue": "admin"
                    },
                    "DB_USER_PASSWORD": {
                      "isOptional": false,
                      "defaultValue": "openmetadata_password"
                    },
                    "SERVER_ADMIN_PORT": {
                      "isOptional": false,
                      "defaultValue": "8586"
                    },
                    "ELASTICSEARCH_HOST": {
                      "isOptional": false,
                      "defaultValue": "${{Elasticsearch.RAILWAY_PRIVATE_DOMAIN}}"
                    },
                    "ELASTICSEARCH_PORT": {
                      "isOptional": false,
                      "defaultValue": "9200"
                    },
                    "SERVER_HOST_API_URL": {
                      "isOptional": false,
                      "defaultValue": "http://${{OpenMetadata.RAILWAY_PRIVATE_DOMAIN}}:8585/api"
                    },
                    "ELASTICSEARCH_SCHEME": {
                      "isOptional": false,
                      "defaultValue": "http"
                    },
                    "OPENMETADATA_HEAP_OPTS": {
                      "isOptional": false,
                      "defaultValue": "-Xmx512m -Xms512m"
                    },
                    "AUTHENTICATION_PROVIDER": {
                      "isOptional": false,
                      "defaultValue": "basic"
                    },
                    "RSA_PUBLIC_KEY_FILE_PATH": {
                      "isOptional": false,
                      "defaultValue": "/data/public_key.der"
                    },
                    "OPENMETADATA_CLUSTER_NAME": {
                      "isOptional": false,
                      "defaultValue": "openmetadata"
                    },
                    "RSA_PRIVATE_KEY_FILE_PATH": {
                      "isOptional": false,
                      "defaultValue": "/data/private_key.der"
                    },
                    "AUTHENTICATION_PUBLIC_KEYS": {
                      "isOptional": false,
                      "defaultValue": "[http://${{OpenMetadata.RAILWAY_PRIVATE_DOMAIN}}:8585/api/v1/system/config/jwks]"
                    },
                    "AUTHORIZER_ADMIN_PRINCIPALS": {
                      "isOptional": false,
                      "defaultValue": "[admin]"
                    },
                    "AUTHORIZER_PRINCIPAL_DOMAIN": {
                      "isOptional": false,
                      "defaultValue": "open-metadata.org"
                    },
                    "FORCE_SECURE_SESSION_COOKIE": {
                      "isOptional": false,
                      "defaultValue": "true"
                    },
                    "OPENMETADATA_ADMIN_PASSWORD": {
                      "isOptional": false,
                      "defaultValue": "{{OPENMETADATA_ADMIN_PASSWORD}}"
                    },
                    "AUTHORIZER_INGESTION_PRINCIPALS": {
                      "isOptional": false,
                      "defaultValue": "[ingestion-bot]"
                    },
                    "PIPELINE_SERVICE_CLIENT_ENABLED": {
                      "isOptional": false,
                      "defaultValue": "true"
                    },
                    "PIPELINE_SERVICE_CLIENT_ENDPOINT": {
                      "isOptional": false,
                      "defaultValue": "http://${{OpenMetadata Ingestion.RAILWAY_PRIVATE_DOMAIN}}:8080"
                    },
                    "AUTHENTICATION_ENABLE_SELF_SIGNUP": {
                      "isOptional": false,
                      "defaultValue": "false"
                    },
                    "AUTHORIZER_ALLOWED_REGISTRATION_DOMAIN": {
                      "isOptional": false,
                      "defaultValue": "[\"all\"]"
                    }
                  },
                  "networking": {
                    "serviceDomains": {
                      "<hasDomain>": {}
                    }
                  },
                  "volumeMounts": {
                    "eaf55f59-cae7-47eb-922e-34c3ac624b17": {
                      "mountPath": "/data"
                    }
                  }
                },
                "f5f5f953-2465-4147-aa12-a3012cda76ae": {
                  "icon": null,
                  "name": "OpenMetadata Ingestion",
                  "deploy": {
                    "startCommand": "/bin/bash -ec 'mkdir -p /data/dag_generated_configs /data/dags /data/tmp && chown -R 50000:0 /data && chmod 0775 /data/dag_generated_configs /data/dags && chmod 1777 /data/tmp && rm -rf /opt/airflow/dag_generated_configs /opt/airflow/dags && ln -s /data/dag_generated_configs /opt/airflow/dag_generated_configs && ln -s /data/dags /opt/airflow/dags && exec runuser -u airflow -- /bin/bash /opt/airflow/ingestion_dependency.sh'",
                    "healthcheckPath": "/api/v2/monitor/health",
                    "restartPolicyType": "ON_FAILURE",
                    "restartPolicyMaxRetries": 10
                  },
                  "source": {
                    "image": "openmetadata/ingestion@sha256:12e0cde89ecebdfa046bfbbb54d22c841f24e502159f82ece0062bf176f4088d"
                  },
                  "variables": {
                    "PORT": {
                      "isOptional": false,
                      "defaultValue": "8080"
                    },
                    "TMPDIR": {
                      "isOptional": false,
                      "defaultValue": "/data/tmp"
                    },
                    "DB_HOST": {
                      "isOptional": false,
                      "defaultValue": "${{PostgreSQL.RAILWAY_PRIVATE_DOMAIN}}"
                    },
                    "DB_PORT": {
                      "isOptional": false,
                      "defaultValue": "5432"
                    },
                    "DB_USER": {
                      "isOptional": false,
                      "defaultValue": "airflow_user"
                    },
                    "DB_SCHEME": {
                      "isOptional": false,
                      "defaultValue": "postgresql+psycopg2"
                    },
                    "AIRFLOW_DB": {
                      "isOptional": false,
                      "defaultValue": "airflow_db"
                    },
                    "DB_PASSWORD": {
                      "isOptional": false,
                      "defaultValue": "airflow_pass"
                    },
                    "RAILWAY_RUN_UID": {
                      "isOptional": false,
                      "defaultValue": "0"
                    },
                    "AIRFLOW_ADMIN_USER": {
                      "isOptional": false,
                      "defaultValue": "admin"
                    },
                    "AIRFLOW_ADMIN_PASSWORD": {
                      "isOptional": false,
                      "defaultValue": "{{AIRFLOW_ADMIN_PASSWORD}}"
                    },
                    "AIRFLOW__CORE__EXECUTOR": {
                      "isOptional": false,
                      "defaultValue": "LocalExecutor"
                    },
                    "AIRFLOW__CORE__DAGS_FOLDER": {
                      "isOptional": false,
                      "defaultValue": "/data/dags"
                    },
                    "AIRFLOW__CORE__PARALLELISM": {
                      "isOptional": false,
                      "defaultValue": "4"
                    },
                    "AIRFLOW__API__AUTH_BACKENDS": {
                      "isOptional": false,
                      "defaultValue": "airflow.api.auth.backend.basic_auth,airflow.api.auth.backend.session"
                    },
                    "AIRFLOW__CORE__MAX_ACTIVE_TASKS_PER_DAG": {
                      "isOptional": false,
                      "defaultValue": "4"
                    },
                    "AIRFLOW__OPENMETADATA_AIRFLOW_APIS__DAG_GENERATED_CONFIGS": {
                      "isOptional": false,
                      "defaultValue": "/data/dag_generated_configs"
                    }
                  },
                  "volumeMounts": {
                    "f5f5f953-2465-4147-aa12-a3012cda76ae": {
                      "mountPath": "/data"
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  },
  "post_deploy": {
    "healthcheck": {
      "service": "OpenMetadata",
      "method": "GET",
      "path": "/healthcheck",
      "expect_status": 200
    }
  },
  "resources": {
    "expected_services": 4,
    "needs_volume": true
  },
  "generated_at": "2026-09-10T10:14:45.332Z",
  "generator_version": "0.1.0",
  "status": "degraded",
  "validated_at": "2026-09-08T20:43:53.912Z",
  "success_rate_30d": 0,
  "validation": {
    "last_run_id": "run_6a3a5877969342898f4a",
    "checks": [
      {
        "name": "workflow_completed",
        "passed": true
      },
      {
        "name": "all_services_deployed",
        "passed": false,
        "detail": "QUEUED,DEPLOYING,DEPLOYING,CRASHED"
      }
    ]
  }
}
