Properties
name
string — required
Environment identifier. Must be lowercase, alphanumeric with hyphens only.
labels
object — optional
Key-value labels for grouping and filtering environments. Use labels to organize environments by team, region, customer, or any other dimension.
Constraints:
- Maximum 50 labels per environment
- Keys must start with an alphanumeric character and contain only alphanumerics, dots, hyphens, and underscores
- Keys and values are each limited to 63 characters
releaseChannel
string — optional
Default release channel for installations in this environment. When installations
don’t specify a release channel, they use the environment’s channel.
maintenanceWindow
string — optional
Maintenance window for this environment. Automated deployments will only occur during specified intervals.
config
object — optional
Configuration passed to the Ryvn environment provisioner.
config.region
string — required
GCP region where resources will be provisioned.
config.zones
array — optional
List of zones for the GKE cluster. If not specified, uses up to three zones in
the region.
config.internal_root_domain
string — optional
Internal root domain for services using internal networking. If not specified, Ryvn
generates an internal domain for the environment, separate from its public domain.
config.public_root_domain
string — optional
Public root domain for services using public networking. If not specified, Ryvn
generates a default domain in the format {environment}.{org-slug}.ryvn.run.
config.subnet_cidr
string — optional
CIDR block for the subnet. Defaults to 10.0.0.0/17.
config.pod_cidr
string — optional
CIDR block for pods. Defaults to 192.168.0.0/18.
config.service_cidr
string — optional
CIDR block for services. Defaults to 192.168.64.0/18.
config.node_pools
object — optional
Map of node pool definitions to create.
location_policy controls which zone the cluster autoscaler scales a regional pool into. BALANCED (the GKE default) spreads nodes evenly across zones; ANY prefers zones with unused reservations and available capacity, which helps pools that scale from zero onto zonal reservations.
config.node_pools_labels
object — optional
Map of node pool labels to apply to each node pool.
config.flow_logs
object — optional
Configuration for VPC flow logs.
config.external_dns_namespace
string — optional
Kubernetes namespace where external-dns is deployed. Defaults to
external-dns.
config.skip_dns_provisioning
boolean — optional
If true, skips provisioning DNS managed zones. Defaults to false.
config.cluster_bootstrap_perms
boolean — managed by Ryvn
Grants the provisioning identity cluster admin permissions so Ryvn can install
the agent and its access RBAC after the cluster is created. Ryvn always sets
this to true; a value in config is ignored.
config.terraform_executor_policies
object — optional
IAM grants for the Ryvn Agent, the in-cluster identity that runs Terraform for
your installations. Leave it unset to keep the default custom role, which is
shaped as management-without-data-access (see
default_permissions
in the platform module).
Anything you supply replaces the default grants outright, the same way
terraform_executor_policies on AWS
replaces the default policy. Only the grants you list are bound, so include
everything the agent needs for the services you install. roles,
permissions, and bindings can be combined.
config.terraform_executor_policies.roles
array — optional
Predefined GCP roles to bind to the agent at the project level.
config.terraform_executor_policies.permissions
array — optional
Permissions for the agent’s custom role (ryvn_agent_role_ENVIRONMENT), in
place of the defaults.
config.terraform_executor_policies.bindings
array — optional
Role bindings for the agent, each optionally scoped by an IAM condition. Use
this to grant a role only on the resources you intend the agent to manage.
resource.name condition scopes
operations on existing resources but not their creation. Grant the sensitive
operations (setIamPolicy, update, destroy) under a condition and leave
creation unconditional.
With the default grants, the agent’s destructive Cloud SQL permissions
(creating and dropping databases and users, updating or deleting instances,
managing backups) are granted through a separate role whose binding is
conditioned on a
ryvn-managed-ENVIRONMENT tag that the agent attaches to the
Cloud SQL instances it provisions — so it cannot touch Cloud SQL instances it
did not create. Instances created before this behavior existed carry no tag;
re-running the postgres installation attaches it. Supplying any
terraform_executor_policies replaces the defaults and drops this scoping.
The tag is still attached, so you can restate it with a bindings entry
whose condition is
resource.matchTag('PROJECT_ID/ryvn-managed-ENVIRONMENT', 'true').setup
string — optional
Environment setup type. Controls who provisions the environment infrastructure.
Available values:
self- Ryvn Control Plane uses workload identity to provision the infrastructure (default)pre-provisioned- Use existing or externally managed infrastructure
requireApproval
boolean — optional (default: false)
When true, deployments require approval before executing. See Deployment Approvals.
provider
object — required
GCP provider configuration.
provider.type
string — required
Must be gcp.
provider.projectId
string — optional
GCP project ID where resources will be provisioned.
provider.credentialConfig
string — optional
Credential configuration JSON generated from the workload identity application.
This is a JSON string that contains the credential configuration.
namespaces
array — optional
Kubernetes namespaces to create in this environment, with optional labels.
Ryvn creates each one, adds its own labels, and reapplies yours on every sync.
The default namespace (same name as the environment) exists either way; list it
only to label it. Removing an entry does not delete the namespace. See
Namespaces.
name(required): a DNS-1123 label, lowercase alphanumerics and hyphens, up to 63 characterslabels(optional): labels to apply to the namespace
platform
object — optional
Platform blueprint used to provision the environment and its inputs. Self-provisioned environments default to the Ryvn-managed platform blueprint for the cloud (ryvn.app/gcp-platform); pre-provisioned environments (setup: pre-provisioned) default to ryvn.app/base-platform. See Platform blueprint configuration for the available inputs.
installations
array — read-only
Present in the API representation of an environment only. Git export emits each deployed installation as a standalone resource, and git sync does not read this field. To deploy into an environment, declare standalone
ServiceInstallation or
BlueprintInstallation resources whose
spec.environment references the environment:
Platform blueprint configuration
The GCP platform blueprint (ryvn.app/gcp-platform) accepts the following inputs via the environment’s platform field:
Observability configuration
Apart from workload logs, which the Ryvn collector handles, GKE writes system and control-plane logs to Cloud Logging and system metrics to Cloud Monitoring in your project.Outputs
Environment outputs are available in service installation configs using template syntax. Reference these values to configure services with infrastructure details provisioned by Ryvn..ryvn.env.name
The name of the environment.
.ryvn.env.orgId
The organization ID.
.ryvn.env.defaultNamespace
The default Kubernetes namespace for the environment (typically same as environment name).
.ryvn.env.releaseChannel
The release channel for this environment.
.ryvn.env.provider.type
The provider type (e.g., aws, gcp, azure).