Blueprint¶
The blueprint stores references and configuration specific to a context. It's configured in a blueprint.yaml file located in your context's configuration folder, such as contexts/local/blueprint.yaml.
When you run windsor init local, a default local blueprint file is created. The sections in this file are outlined below.
kind: Blueprint
apiVersion: blueprints.windsorcli.dev/v1alpha1
metadata: # ...
repository: #...
sources: #...
terraform: #...
kustomize: #...
| Field | Type | Description | 
|---|---|---|
| kind | string | Specifies the blueprint type, adhering to Kubernetes conventions. | 
| apiVersion | string | Indicates the API schema version of the blueprint. | 
| metadata | Metadata | Contains core information about the blueprint, such as identity and authors. | 
| repository | Repository | Provides details about the source repository of the blueprint. | 
| sources | []Source | Lists external resources referenced by the blueprint. | 
| terraform | []TerraformComponent | Includes Terraform modules within the blueprint. | 
| kustomize | []Kustomization | Contains Kustomization configurations in the blueprint. | 
Metadata¶
Core information about the blueprint, including its identity and authors.
metadata:
  name: local
  description: Builds a local cloud environment
  authors:
    - "@rmvangun"
    - "@tvangundy"
| Field | Type | Description | 
|---|---|---|
| name | string | The blueprint's unique identifier. | 
| description | string | A brief overview of the blueprint. | 
| authors | []string | Creators or maintainers of the blueprint. | 
Repository¶
Details the source repository of the blueprint.
repository:
  url: https://github.com/sample-org/blueprint
  ref:
    branch: main
  secretName: git-creds
| Field | Type | Description | 
|---|---|---|
| url | string | The repository location. | 
| ref | Reference | Details the branch, tag, or commit to use. | 
| secretName | string | The name of the k8s secret containing git credentials. | 
Source¶
A dependency from which Terraform and Kustomize components may be sourced
sources:
  - name: core
    url: github.com/windsorcli/core
    ref:
      tag: v0.3.0
| Field | Type | Description | 
|---|---|---|
| name | string | Identifies the source. | 
| url | string | The source location. | 
| ref | Reference | Details the branch, tag, or commit to use. | 
| secretName | string | The secret for source access. | 
Reference¶
A reference to a specific git state or version
reference:
  branch: main
  tag: v1.0.0
  name: refs/heads/main
  commit: 1a2b3c4d5e6f7g8h9i0j
| Field | Type | Description | 
|---|---|---|
| branch | string | Branch to use. | 
| tag | string | Tag to use. | 
| name | string | Name of the reference. | 
| commit | string | Commit hash to use. | 
TerraformComponent¶
A local or remote reference to a Terraform module or "component" of the blueprint.
terraform:
  # A Terraform module defined in the "core" repository source
  - source: core
    path: cluster/talos
  # A Terraform module defined within the current blueprint source
  - path: apps/my-infra
| Field | Type | Description | 
|---|---|---|
| source | string | Source of the Terraform module. Must be included in the list of sources. | 
| path | string | Path of the Terraform module relative to the terraform/folder. | 
| values | map[string]interface{} | Configuration values for the module. | 
| variables | map[string]TerraformVariable | Input variables for the module. | 
Kustomization¶
For more information on Flux Kustomizations, which are sets of resources and configurations applied to a Kubernetes cluster, visit Flux Kustomizations Documentation. Most parameters are not necessary to define.
kustomize:
  # A reference to a csi driver from the "core" source that implements longhorn
  - name: system-csi
    source: core
    path: csi 
    components:
      - longhorn
  # A reference to a local folder containing kubernetes manifests outlining "my-app"
  - name: my-app
    dependsOn:
      - system-csi
    path: apps/my-app
| Field | Type | Description | 
|---|---|---|
| name | string | Name of the kustomization. | 
| path | string | Path of the kustomization. | 
| source | string | Source of the kustomization. | 
| dependsOn | []string | Dependencies of this kustomization. | 
| interval | *metav1.Duration | Interval for applying the kustomization. | 
| retryInterval | *metav1.Duration | Retry interval for a failed kustomization. | 
| timeout | *metav1.Duration | Timeout for the kustomization to complete. | 
| patches | []kustomize.Patch | Patches to apply to the kustomization. | 
| wait | *bool | Wait for the kustomization to be fully applied. | 
| force | *bool | Force apply the kustomization. | 
| components | []string | Components to include in the kustomization. | 
Cluster Variables¶
When running windsor install, Kubernetes resources are applied. These resources include a configmap that introduces post-build variables into the Kubernetes manifests. These variables are outlined as follows:
| Key | Description | 
|---|---|
| CONTEXT | Specifies the context name, e.g., local. | 
| DOMAIN | The domain used for subdomain registration, e.g., test. | 
| LOADBALANCER_IP_END | The final IP in the range for load balancer assignments. | 
| LOADBALANCER_IP_RANGE | Complete range of load balancer IPs, e.g., 10.5.1.1-10.5.1.10. | 
| LOADBALANCER_IP_START | The initial IP in the range for load balancer assignments. | 
| LOCAL_VOLUME_PATH | Directory path for local volume storage, e.g., /var/local. | 
| REGISTRY_URL | Base URL for the container image registry, e.g., registry.test. | 
Example: Local Blueprint¶
When you run windsor init local, a default local blueprint is generated:
kind: Blueprint
apiVersion: blueprints.windsorcli.dev/v1alpha1
metadata:
  name: local
  description: This blueprint configures core for running on docker desktop
repository:
  url: http://git.test/git/core
  ref:
    branch: main
  secretName: flux-system
sources:
- name: core
  url: github.com/windsorcli/core
  ref:
    branch: main
terraform:
- path: cluster/talos
- path: gitops/flux
kustomize:
- name: policy-base
  path: policy/base
  components:
  - kyverno
- name: policy-resources
  path: policy/resources
  dependsOn:
  - policy-base
- name: csi
  path: csi
  dependsOn:
  - policy-resources
  components:
  - openebs
  - openebs/dynamic-localpv
- name: ingress-base
  path: ingress/base
  dependsOn:
  - pki-resources
  force: true
  components:
  - nginx
  - nginx/nodeport
  - nginx/coredns
  - nginx/flux-webhook
  - nginx/web
- name: pki-base
  path: pki/base
  dependsOn:
  - policy-resources
  force: true
  components:
  - cert-manager
  - trust-manager
- name: pki-resources
  path: pki/resources
  dependsOn:
  - pki-base
  force: true
  components:
  - private-issuer/ca
  - public-issuer/selfsigned
- name: dns
  path: dns
  dependsOn:
  - ingress-base
  - pki-base
  force: true
  components:
  - coredns
  - coredns/etcd
  - external-dns
  - external-dns/localhost
  - external-dns/coredns
  - external-dns/ingress
- name: gitops
  path: gitops/flux
  dependsOn:
  - ingress-base
  force: true
  components:
  - webhook
- name: demo
  path: demo
  dependsOn:
  - ingress-base
  force: true
  components:
  - bookinfo
  - bookinfo/ingress