---
title: Basic Variables
nav_text: Basic
categories: variables
order: 1
---

## Basic Layering Example

Here's an example variables directory structure:

    .kubes/variables
    ├── base.rb
    ├── dev.rb
    └── prod.rb

base.rb

```ruby
@endpoint = "base-endpoint" # overriden by ENV specific variable files.
```

dev.rb

```ruby
@endpoint = "dev-endpoint"
```

prod.rb

```ruby
@endpoint = "prod-endpoint"
```

The `@endpoint` value will be overriden by the ENV specific variable files.

## Deployment YAML

Here's an example deployment.yaml

.kubes/resources/web/deployment.yaml

```yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: web
  labels:
    role: web
spec:
  replicas: 1  # overridden on a env basis
  selector:
    matchLabels:
      role: web
  template:
    metadata:
      labels:
        role: web
    spec:
      containers:
      - name: web
        image: <%= docker_image %>
        env:
        - name: endpoint
          value: <%= @endpoint %>
```

## Deploy

When you deploy you can use `KUBES_ENV` to and the ENV specific variables will be used:

    KUBES_ENV=dev  kubes deploy

Results in:

```yaml
metadata:
  namespace: demo-dev
  labels:
    app: demo
    role: web
  name: web
spec:
  selector:
    matchLabels:
      app: demo
      role: web
  template:
    metadata:
      labels:
        app: demo
        role: web
    spec:
      containers:
      - name: web
        image: gcr.io/GOOGLE_PROJECT/demo:kubes-2020-11-07T22-29-02
        env:
        - name: endpoint
          value: dev-endpoint
  replicas: 1
apiVersion: apps/v1
kind: Deployment
```

When using `KUBES_ENV=prod` the endpoint will use the `variables/prod.rb` values.

    KUBES_ENV=prod kubes deploy

Results in:

```yaml
metadata:
  namespace: demo-prod
  labels:
    app: demo
    role: web
  name: web
spec:
  selector:
    matchLabels:
      app: demo
      role: web
  template:
    metadata:
      labels:
        app: demo
        role: web
    spec:
      containers:
      - name: web
        image: gcr.io/GOOGLE_PROJECT/demo:kubes-2020-11-07T22-29-02
        env:
        - name: endpoint
          value: prod-endpoint
  replicas: 1
apiVersion: apps/v1
kind: Deployment
```

{% include variables/generator.md %}