docs snapshot for crossplane version `v0.4`

This commit is contained in:
Crossplane 2019-10-29 00:37:08 +00:00
parent b242a245fe
commit f76b162dd8
65 changed files with 15723 additions and 1 deletions

View File

@ -1 +1 @@
[{"version":"v0.3","path":"/docs/v0.3"},{"version":"v0.2","path":"/docs/v0.2"},{"version":"v0.1","path":"/docs/v0.1"},{"version":"master","path":"/docs/master"}]
[{"version":"v0.4","path":"/docs/v0.4"},{"version":"v0.3","path":"/docs/v0.3"},{"version":"v0.2","path":"/docs/v0.2"},{"version":"v0.1","path":"/docs/v0.1"},{"version":"master","path":"/docs/master"}]

177
docs/v0.4/README.md Normal file
View File

@ -0,0 +1,177 @@
# Welcome to Crossplane!
Crossplane is an open source multicloud control plane to manage your
cloud-native applications and infrastructure across environments, clusters,
regions and clouds. It enables provisioning and full-lifecycle management of
applications and managed services from your choice of cloud using `kubectl`.
Crossplane can be installed into an existing Kubernetes cluster to add managed
service provisioning or deployed as a dedicated control plane for multi-cluster
management and workload scheduling.
Crossplane enables the community to build and publish Stacks to add more clouds
and cloud services to Crossplane with support for out-of-tree extensibility and
independent release schedules. Crossplane includes Stacks for [GCP][stack-gcp],
[AWS][stack-aws], and [Azure][stack-azure] today.
<h4 align="center"><img src="media/crossplane-overview.png" alt="Crossplane"></h4>
Crossplane has four main feature areas that can be used independently:
1. Crossplane Services - provision managed services from kubectl.
1. Crossplane Stacks - extend Crossplane with new functionality.
1. Crossplane Workloads - define complete applications and schedule across
clusters, regions, and clouds.
1. Crossplane Clusters - manage multiple Kubernetes clusters from a single
control plane.
## Crossplane Services
Crossplane Services supports managed service provisioning using `kubectl`. It
applies the Kubernetes pattern for Persistent Volume (PV) claims and classes to
managed service provisioning with support for a strong separation of concern
between app teams and cluster administrators.
App teams can choose between cloud-specific and portable services including
managed databases, message queues, buckets, data pipelines, and more to define
complete applications, build once, and deploy into multiple clouds using
continuous delivery pipelines or GitOps flows.
Cluster administrators can define self-service policies and best-practice
configurations to accelerate app delivery and improve security, so app teams can
focus on delivering their app instead of cloud-specific infrastructure details.
Take a look at the [getting started guide][getting-started] for an introduction
to Crossplane Services. The [Crossplane Services Guide][services-user-guide]
also explores related concepts and shows how to use Crossplane Services to
deploy a Wordpress instance that securely consumes a managed `MySQLInstance`
from GCP, AWS, or Azure using `kubectl`.
## Crossplane Stacks
Stacks extend Crossplane with new functionality and can be installed using the
[Stack Manager][stacks-manager] via the [Kubernetes API][stack-install-docs] or
with the [crossplane kubectl plugin][crossplane-cli] [`stack
install`][crossplane-cli-usage] command.
Crossplane is built on the Kubernetes API machinery as a platform, and Stacks
simplify extending the Kubernetes API to provision and lifecycle manage apps and
the managed service infrastructure they depend on, including [Stack security and
isolation][stack-security-design].
The [Crossplane Stacks Guide][stack-user-guide] shows how to deploy a portable
[Wordpress Stack][stack-wordpress-registry] into multiple clouds using Infra
Stacks including [stack-gcp][stack-gcp], [stack-aws][stack-aws], and
[stack-azure][stack-azure].
### Infrastructure Stacks
Infra Stacks like [stack-gcp][stack-gcp], [stack-aws][stack-aws], and
[stack-azure][stack-azure] extend the Kubernetes API to support managed service
provisioning (DBaaS, cache, buckets), secure connectivity (VPCs, subnets,
peering, ACLs, secrets), and provisioning managed Kubernetes clusters on demand
to further isolate the blast radius of applications.
Infra Stacks are pre-built and published to the [Stacks
registry][stack-registry] where they can be installed by a Cluster Admin using a
[`ClusterStackInstall`][stack-install-docs] Kubernetes API kind or with the
[`stack install`][crossplane-cli-usage] command that installs a Stack with
permissions to watch resources at a cluster level, across all namespaces.
Infra Stacks are covered in both the [Crossplane Services
Guide][services-user-guide] and the [Crossplane Stacks Guide][stack-user-guide].
### Application Stacks
App Stacks depend on Infra Stacks like [stack-gcp][stack-gcp],
[stack-aws][stack-aws], and [stack-azure][stack-azure] to provide managed
services via the Kubernetes API.
App Stacks are pre-built and published to the [Stacks registry][stack-registry]
where they can be installed by an app team using a
[`StackInstall`][stack-install-docs] Kubernetes API kind or with the [`stack
install`][crossplane-cli-usage] command that installs Stacks with permissions
only within a single namespace.
The [Crossplane Stacks Guide][stack-user-guide] covers how to deploy a portable
[Wordpress Stack][stack-wordpress] into multiple clouds using Infra Stacks such
as [stack-gcp][stack-gcp], [stack-aws][stack-aws], and
[stack-azure][stack-azure].
### Build your own Stack
The [Crossplane Developer Guide][stack-developer-guide] shows how to build and
extend Infra Stacks and App Stacks.
## Crossplane Workloads
Crossplane includes an extensible workload scheduler that observes application
policies to select a suitable target cluster from a pool of available clusters.
The workload scheduler can be customized to consider a number of criteria
including capabilities, availability, reliability, cost, regions, and
performance while deploying workloads and their resources.
Complex workloads can be modelled as a [`KubernetesApplication`][k8s-app-design]
resource as done by the portable [Wordpress Stack][stack-wordpress] which
automates the lifecycle of a [`KubernetesApplication`][k8s-app-design] including
provisioning and secure connectivity to a managed `MySQLInstance`.
## Crossplane Clusters
Crossplane supports dynamic provisioning of managed Kubernetes clusters from a
single control plane with consistent multi-cluster best-practice configuration
and secure connectivity between target Kubernetes clusters and the managed
services provisioned for applications. Managed Kubernetes clusters can be
dynamically provisioned with a `KubernetesCluster` resource as done by the
portable [Wordpress Stack][stack-wordpress] which automates the lifecycle of a
`KubernetesCluster`.
## Architecture and Vision
The full architecture and vision of the Crossplane project is described in depth
in the [architecture document][arch-doc]. It is the best place to learn more
about how Crossplane fits into the Kubernetes ecosystem, the intended use cases,
and comparisons to existing projects.
## Learn More
If you have any questions, please drop us a note on [Crossplane Slack][join-crossplane-slack] or [contact us][contact-us]!
* [Quick Start Guide](quick-start.md)
* [Concepts](concepts.md)
* [Services Guide][services-user-guide] - upgrade an existing Kubernetes cluster
to support managed service provisioning from kubectl.
* [Stacks Guide][stack-user-guide] - deploy a portable Wordpress Stack into
multiple clouds.
* [API Reference](api.md)
* [Developer Guide](developer-guide.md)
* [Contributing](../CONTRIBUTING.md)
* [FAQs](faqs.md)
* [Learn More][learn-more]
<!-- Named links -->
[getting-started]: quick-start.md
[services-user-guide]: services-guide.md
[stack-user-guide]: stacks-guide.md
[stack-developer-guide]: developer-guide.md
[stacks-manager]: https://github.com/crossplaneio/crossplane/blob/master/design/design-doc-stacks.md#terminology
[crossplane-cli]: https://github.com/crossplaneio/crossplane-cli
[crossplane-cli-usage]: https://github.com/crossplaneio/crossplane-cli#usage
[stack-security-design]: https://github.com/crossplaneio/crossplane/blob/master/design/one-pager-stacks-security-isolation.md
[stack-wordpress-registry]: https://hub.docker.com/r/crossplane/sample-stack-wordpress
[stack-wordpress]: https://github.com/crossplaneio/sample-stack-wordpress
[stack-gcp]: https://github.com/crossplaneio/stack-gcp
[stack-aws]: https://github.com/crossplaneio/stack-aws
[stack-azure]: https://github.com/crossplaneio/stack-azure
[stack-registry]: https://hub.docker.com/search?q=crossplane&type=image
[stack-install-docs]: https://github.com/crossplaneio/crossplane/blob/master/design/design-doc-stacks.md#installation-flow
[k8s-app-design]: https://github.com/crossplaneio/crossplane/blob/master/design/design-doc-complex-workloads.md#design
[arch-doc]: https://docs.google.com/document/d/1whncqdUeU2cATGEJhHvzXWC9xdK29Er45NJeoemxebo/edit?usp=sharing
[contact-us]: https://github.com/crossplaneio/crossplane#contact
[join-crossplane-slack]: https://slack.crossplane.io
[learn-more]: learn-more.md

137
docs/v0.4/api.md Normal file
View File

@ -0,0 +1,137 @@
---
title: API Reference
toc: true
weight: 610
---
# API Reference
Crossplane is configured using a variety of Kubernetes resources. These
resources are separated into API groups. Core API groups are provided by
Crossplane, while cloud provider specific API groups are provided by each cloud
provider's stack.
Each API Group supported by Crossplane is assigned its own individual status to
reflect the varying maturity and stability. More details about API versioning
and status in Kubernetes can be found on the Kubernetes [API versioning] page,
but the key difference between the statuses are summarized below:
* **Alpha:** The API may change in incompatible ways in a later software release
without notice, recommended for use only in short-lived testing clusters, due
to increased risk of bugs and lack of long-term support.
* **Beta:** Support for the overall features will not be dropped, though details
may change. Support for upgrading or migrating between versions will be
provided, either through automation or manual steps.
* **Stable:** Features will appear in released software for many subsequent
versions and support for upgrading between versions will be provided with
software automation in the vast majority of scenarios.
## Crossplane
Crossplane is responsible for all portable resources, including resource claims
(for example `MySQLInstance`) and portable resource classes (for example
`MySQLInstanceClass). Crossplane currently supports the following API groups:
API Group | Status | Details
-------- | ------ | -------
[`cache.crossplane.io/v1alpha1`] | Alpha | Cache service claims and classes.
[`compute.crossplane.io/v1alpha1`] | Alpha | Compute service resource claims and classes.
[`database.crossplane.io/v1alpha1`] | Alpha | Database service resource claims and classes.
[`kubernetes.crossplane.io/v1alpha1`] | Alpha | Resources for connecting to Kubernetes clusters.
[`storage.crossplane.io/v1alpha1`] | Alpha | Blob storage service resource claims and classes.
[`stacks.crossplane.io/v1alpha1`] | Alpha | Resources for managing Crossplane Stacks.
[`workload.crossplane.io/v1alpha1`] | Alpha | Resources for managing Crossplane Workloads.
[`cache.crossplane.io/v1alpha1`]: api/crossplaneio/crossplane/cache-crossplane-io-v1alpha1.md
[`compute.crossplane.io/v1alpha1`]: api/crossplaneio/crossplane/compute-crossplane-io-v1alpha1.md
[`database.crossplane.io/v1alpha1`]: api/crossplaneio/crossplane/database-crossplane-io-v1alpha1.md
[`kubernetes.crossplane.io/v1alpha1`]: api/crossplaneio/crossplane/kubernetes-crossplane-io-v1alpha1.md
[`storage.crossplane.io/v1alpha1`]: api/crossplaneio/crossplane/storage-crossplane-io-v1alpha1.md
[`stacks.crossplane.io/v1alpha1`]: api/crossplaneio/crossplane/stacks-crossplane-io-v1alpha1.md
[`workload.crossplane.io/v1alpha1`]: api/crossplaneio/crossplane/workload-crossplane-io-v1alpha1.md
## AWS Stack
The AWS Stack is responsible for all AWS specific resources, including managed
resources (for example `EKSCluster`), and cloud specific resource classes (for
example `EKSClusterClass`) The AWS Stack currently supports the following API
groups:
API Group | Status | Details
-------- | ------ | -------
[`aws.crossplane.io/v1alpha3`] | Alpha | Core AWS resources.
[`cache.aws.crossplane.io/v1beta1`] | Beta | ElastiCache managed resources and classes.
[`compute.aws.crossplane.io/v1alpha3`] | Alpha | EKS managed resources and classes.
[`database.aws.crossplane.io/v1beta1`] | Beta | RDS managed resources and classes.
[`identity.aws.crossplane.io/v1alpha3`] | Alpha | IAM managed resources and classes.
[`network.aws.crossplane.io/v1alpha3`] | Alpha | VPC managed resources and classes.
[`storage.aws.crossplane.io/v1alpha3`] | Alpha | S3 managed resources and classes.
[`aws.crossplane.io/v1alpha3`]: api/crossplaneio/stack-aws/aws-crossplane-io-v1alpha3.md
[`cache.aws.crossplane.io/v1beta1`]: api/crossplaneio/stack-aws/cache-aws-crossplane-io-v1beta1.md
[`compute.aws.crossplane.io/v1alpha3`]: api/crossplaneio/stack-aws/compute-aws-crossplane-io-v1alpha3.md
[`database.aws.crossplane.io/v1beta1`]: api/crossplaneio/stack-aws/database-aws-crossplane-io-v1beta1.md
[`identity.aws.crossplane.io/v1alpha3`]: api/crossplaneio/stack-aws/identity-aws-crossplane-io-v1alpha3.md
[`network.aws.crossplane.io/v1alpha3`]: api/crossplaneio/stack-aws/network-aws-crossplane-io-v1alpha3.md
[`storage.aws.crossplane.io/v1alpha3`]: api/crossplaneio/stack-aws/storage-aws-crossplane-io-v1alpha3.md
## Azure Stack
The Azure Stack is responsible for all Azure specific resources, including
managed resources (for example `AKSCluster`), and cloud specific resource
classes (for example `AKSClusterClass`) The Azure Stack currently supports the
following API groups:
API Group | Status | Details
-------- | ------ | -------
[`azure.crossplane.io/v1alpha3`] | Alpha | Core Azure resources.
[`cache.azure.crossplane.io/v1alpha3`] | Alpha | Azure Redis managed resources and classes.
[`compute.azure.crossplane.io/v1alpha3`] | Alpha | AKS managed resources and classes.
[`database.azure.crossplane.io/v1alpha3`] | Alpha | Azure Database managed resources and classes.
[`network.azure.crossplane.io/v1alpha3`] | Alpha | Virtual network managed resources and classes.
[`storage.azure.crossplane.io/v1alpha3`] | Alpha | Azure Blob Storage managed resources and classes.
[`azure.crossplane.io/v1alpha3`]: api/crossplaneio/stack-azure/azure-crossplane-io-v1alpha3.md
[`cache.azure.crossplane.io/v1alpha3`]: api/crossplaneio/stack-azure/cache-azure-crossplane-io-v1alpha3.md
[`compute.azure.crossplane.io/v1alpha3`]: api/crossplaneio/stack-azure/compute-azure-crossplane-io-v1alpha3.md
[`database.azure.crossplane.io/v1alpha3`]: api/crossplaneio/stack-azure/database-azure-crossplane-io-v1alpha3.md
[`network.azure.crossplane.io/v1alpha3`]: api/crossplaneio/stack-azure/network-azure-crossplane-io-v1alpha3.md
[`storage.azure.crossplane.io/v1alpha3`]: api/crossplaneio/stack-azure/storage-azure-crossplane-io-v1alpha3.md
## GCP Stack
The GCP Stack is responsible for all GCP specific resources, including managed
resources (for example `GKECluster`), and cloud specific resource classes (for
example `GKEClusterClass`) The GCP Stack currently supports the following API
groups:
API Group | Status | Details
-------- | ------ | -------
[`gcp.crossplane.io/v1alpha3`] | Alpha | Core GCP resources.
[`cache.gcp.crossplane.io/v1beta1`] | Beta | CloudMemorystore managed resources and classes.
[`compute.gcp.crossplane.io/v1alpha3`] | Alpha | Compute and Kubernetes Engine managed resources and classes.
[`database.gcp.crossplane.io/v1beta1`] | Beta | CloudSQL managed resources and classes.
[`servicenetworking.gcp.crossplane.io/v1alpha3`] | Alpha | Service Networking managed resources and classes.
[`storage.gcp.crossplane.io/v1alpha3`] | Alpha | Cloud Storage managed resources and classes.
[`gcp.crossplane.io/v1alpha3`]: api/crossplaneio/stack-gcp/gcp-crossplane-io-v1alpha3.md
[`cache.gcp.crossplane.io/v1beta1`]: api/crossplaneio/stack-gcp/cache-gcp-crossplane-io-v1beta1.md
[`compute.gcp.crossplane.io/v1alpha3`]: api/crossplaneio/stack-gcp/compute-gcp-crossplane-io-v1alpha3.md
[`database.gcp.crossplane.io/v1beta1`]: api/crossplaneio/stack-gcp/database-gcp-crossplane-io-v1beta1.md
[`servicenetworking.gcp.crossplane.io/v1alpha3`]: api/crossplaneio/stack-gcp/servicenetworking-gcp-crossplane-io-v1alpha3.md
[`storage.gcp.crossplane.io/v1alpha3`]: api/crossplaneio/stack-gcp/storage-gcp-crossplane-io-v1alpha3.md
## Rook Stack
The Rook Stack is responsible for all Rook specific resources, including managed resources (for
example `YugabyteCluster`), and stroage provider specific resource classes (for example
`YugabyteClusterClass`) The Rook Stack currently supports the following API groups:
API Group | Status | Details
-------- | ------ | -------
[`rook.crossplane.io/v1alpha1`] | Alpha | Core Rook resources.
[`database.rook.crossplane.io/v1alpha1`] | Alpha | Database managed resources and classes, such as YugabyteDB and CockroachDB.
[`rook.crossplane.io/v1alpha1`]: api/crossplaneio/stack-rook/rook-crossplane-io-v1alpha1.md
[`database.rook.crossplane.io/v1alpha1`]: api/crossplaneio/stack-rook/database-rook-crossplane-io-v1alpha1.md
[API Versioning]: https://kubernetes.io/docs/concepts/overview/kubernetes-api/#api-versioning

View File

@ -0,0 +1,211 @@
# core.crossplane.io/v1alpha1 API Reference
Package v1alpha1 contains core API types used by most Crossplane resources.
This API group contains the following Crossplane resources:
## BindingPhase
BindingPhase represents the current binding phase of a resource or claim. Alias of string.
Appears in:
* [BindingStatus](#BindingStatus)
## BindingStatus
A BindingStatus represents the bindability and binding status of a resource.
Appears in:
* [ResourceClaimStatus](#ResourceClaimStatus)
* [ResourceStatus](#ResourceStatus)
Name | Type | Description
-----|------|------------
`bindingPhase` | Optional [BindingPhase](#BindingPhase) | Phase represents the binding phase of a managed resource or claim. Unbindable resources cannot be bound, typically because they are currently unavailable, or still being created. Unbound resource are available for binding, and Bound resources have successfully bound to another resource.
## ClassSpecTemplate
A ClassSpecTemplate defines a template that will be used to create the specifications of managed resources dynamically provisioned using a resource class.
Name | Type | Description
-----|------|------------
`writeConnectionSecretsToNamespace` | string | WriteConnectionSecretsToNamespace specifies the namespace in which the connection secrets of managed resources dynamically provisioned using this claim will be created.
`providerRef` | [core/v1.ObjectReference](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#objectreference-v1-core) | ProviderReference specifies the provider that will be used to create, observe, update, and delete managed resources that are dynamically provisioned using this resource class.
`reclaimPolicy` | Optional [ReclaimPolicy](#ReclaimPolicy) | ReclaimPolicy specifies what will happen to external resources when managed resources dynamically provisioned using this resource class are deleted. &#34;Delete&#34; deletes the external resource, while &#34;Retain&#34; (the default) does not. Note this behaviour is subtly different from other uses of the ReclaimPolicy concept within the Kubernetes ecosystem per https://github.com/crossplaneio/crossplane-runtime/issues/21
## Condition
A Condition that may apply to a managed resource.
Appears in:
* [ConditionedStatus](#ConditionedStatus)
Name | Type | Description
-----|------|------------
`type` | [ConditionType](#ConditionType) | Type of this condition. At most one of each condition type may apply to a resource at any point in time.
`status` | [core/v1.ConditionStatus](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#conditionstatus-v1-core) | Status of this condition; is it currently True, False, or Unknown?
`lastTransitionTime` | [meta/v1.Time](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#time-v1-meta) | LastTransitionTime is the last time this condition transitioned from one status to another.
`reason` | [ConditionReason](#ConditionReason) | A Reason for this condition&#39;s last transition from one status to another.
`message` | Optional string | A Message containing details about this condition&#39;s last transition from one status to another, if any.
## ConditionReason
A ConditionReason represents the reason a resource is in a condition. Alias of string.
Appears in:
* [Condition](#Condition)
## ConditionType
A ConditionType represents a condition a resource could be in. Alias of string.
Appears in:
* [Condition](#Condition)
## ConditionedStatus
A ConditionedStatus reflects the observed status of a managed resource. Only one condition of each type may exist.
Appears in:
* [ResourceClaimStatus](#ResourceClaimStatus)
* [ResourceStatus](#ResourceStatus)
Name | Type | Description
-----|------|------------
`conditions` | Optional [[]Condition](#Condition) | Conditions of the resource.
## LocalSecretReference
A LocalSecretReference is a reference to a secret in the same namespace as the referencer.
Appears in:
* [ResourceClaimSpec](#ResourceClaimSpec)
Name | Type | Description
-----|------|------------
`name` | string | Name of the secret.
## ReclaimPolicy
A ReclaimPolicy determines what should happen to managed resources when their bound resource claims are deleted. Alias of string.
Appears in:
* [ClassSpecTemplate](#ClassSpecTemplate)
* [ResourceSpec](#ResourceSpec)
## ResourceClaimSpec
A ResourceClaimSpec defines the desired state of a resource claim.
Name | Type | Description
-----|------|------------
`writeConnectionSecretToRef` | Optional [LocalSecretReference](#LocalSecretReference) | WriteConnectionSecretToReference specifies the name of a Secret, in the same namespace as this resource claim, to which any connection details for this resource claim should be written. Connection details frequently include the endpoint, username, and password required to connect to the managed resource bound to this resource claim.
`classSelector` | Optional [meta/v1.LabelSelector](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#labelselector-v1-meta) | A ClassSelector specifies labels that will be used to select a resource class for this claim. If multiple classes match the labels one will be chosen at random.
`classRef` | Optional [core/v1.ObjectReference](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#objectreference-v1-core) | A ClassReference specifies a resource class that will be used to dynamically provision a managed resource when the resource claim is created.
`resourceRef` | Optional [core/v1.ObjectReference](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#objectreference-v1-core) | A ResourceReference specifies an existing managed resource, in any namespace, to which this resource claim should attempt to bind. Omit the resource reference to enable dynamic provisioning using a resource class; the resource reference will be automatically populated by Crossplane.
## ResourceClaimStatus
A ResourceClaimStatus represents the observed status of a resource claim.
ResourceClaimStatus supports all fields of:
* [ConditionedStatus](#ConditionedStatus)
* [BindingStatus](#BindingStatus)
## ResourceSpec
A ResourceSpec defines the desired state of a managed resource.
Name | Type | Description
-----|------|------------
`writeConnectionSecretToRef` | Optional [SecretReference](#SecretReference) | WriteConnectionSecretToReference specifies the namespace and name of a Secret to which any connection details for this managed resource should be written. Connection details frequently include the endpoint, username, and password required to connect to the managed resource.
`claimRef` | Optional [core/v1.ObjectReference](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#objectreference-v1-core) | ClaimReference specifies the resource claim to which this managed resource will be bound. ClaimReference is set automatically during dynamic provisioning. Crossplane does not currently support setting this field manually, per https://github.com/crossplaneio/crossplane-runtime/issues/19
`classRef` | Optional [core/v1.ObjectReference](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#objectreference-v1-core) | ClassReference specifies the resource class that was used to dynamically provision this managed resource, if any. Crossplane does not currently support setting this field manually, per https://github.com/crossplaneio/crossplane-runtime/issues/20
`providerRef` | [core/v1.ObjectReference](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#objectreference-v1-core) | ProviderReference specifies the provider that will be used to create, observe, update, and delete this managed resource.
`reclaimPolicy` | Optional [ReclaimPolicy](#ReclaimPolicy) | ReclaimPolicy specifies what will happen to the external resource this managed resource manages when the managed resource is deleted. &#34;Delete&#34; deletes the external resource, while &#34;Retain&#34; (the default) does not. Note this behaviour is subtly different from other uses of the ReclaimPolicy concept within the Kubernetes ecosystem per https://github.com/crossplaneio/crossplane-runtime/issues/21
## ResourceStatus
ResourceStatus represents the observed state of a managed resource.
ResourceStatus supports all fields of:
* [ConditionedStatus](#ConditionedStatus)
* [BindingStatus](#BindingStatus)
## SecretKeySelector
A SecretKeySelector is a reference to a secret key in an arbitrary namespace.
Name | Type | Description
-----|------|------------
`key` | string | The key to select.
SecretKeySelector supports all fields of:
* [SecretReference](#SecretReference)
## SecretReference
A SecretReference is a reference to a secret in an arbitrary namespace.
Appears in:
* [ResourceSpec](#ResourceSpec)
* [SecretKeySelector](#SecretKeySelector)
Name | Type | Description
-----|------|------------
`name` | string | Name of the secret.
`namespace` | string | Namespace of the secret.
This API documentation was generated by `crossdocs`.

View File

@ -0,0 +1,43 @@
# cache.crossplane.io/v1alpha1 API Reference
Package v1alpha1 contains portable resource claims for caching services such as Redis clusters.
This API group contains the following Crossplane resources:
* [RedisCluster](#RedisCluster)
## RedisCluster
A RedisCluster is a portable resource claim that may be satisfied by binding to a Redis managed resource such as a GCP CloudMemorystore instance or an AWS ReplicationGroup. Despite the name RedisCluster claims may bind to Redis managed resources that are a single node, or not in cluster mode.
Name | Type | Description
-----|------|------------
`apiVersion` | string | `cache.crossplane.io/v1alpha1`
`kind` | string | `RedisCluster`
`metadata` | [meta/v1.ObjectMeta](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#objectmeta-v1-meta) | Kubernetes object metadata.
`spec` | [RedisClusterSpec](#RedisClusterSpec) | RedisClusterSpec specifies the desired state of a RedisCluster.
`status` | [v1alpha1.ResourceClaimStatus](../crossplane-runtime/core-crossplane-io-v1alpha1.md#resourceclaimstatus) |
## RedisClusterSpec
RedisClusterSpec specifies the desired state of a RedisCluster.
Appears in:
* [RedisCluster](#RedisCluster)
Name | Type | Description
-----|------|------------
`engineVersion` | string | EngineVersion specifies the desired Redis version.
RedisClusterSpec supports all fields of:
* [v1alpha1.ResourceClaimSpec](../crossplane-runtime/core-crossplane-io-v1alpha1.md#resourceclaimspec)
This API documentation was generated by `crossdocs`.

View File

@ -0,0 +1,75 @@
# compute.crossplane.io/v1alpha1 API Reference
Package v1alpha1 contains portable resource claims for compute services such as Kubernetes clusters.
This API group contains the following Crossplane resources:
* [KubernetesCluster](#KubernetesCluster)
* [MachineInstance](#MachineInstance)
## KubernetesCluster
A KubernetesCluster is a portable resource claim that may be satisfied by binding to a Kubernetes cluster managed resource such as an AWS EKS cluster or an Azure AKS cluster.
Name | Type | Description
-----|------|------------
`apiVersion` | string | `compute.crossplane.io/v1alpha1`
`kind` | string | `KubernetesCluster`
`metadata` | [meta/v1.ObjectMeta](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#objectmeta-v1-meta) | Kubernetes object metadata.
`spec` | [KubernetesClusterSpec](#KubernetesClusterSpec) | KubernetesClusterSpec specifies the desired state of a KubernetesCluster.
`status` | [v1alpha1.ResourceClaimStatus](../crossplane-runtime/core-crossplane-io-v1alpha1.md#resourceclaimstatus) |
## MachineInstance
A MachineInstance is a portable resource claim that may be satisfied by binding to a machine instance, which may include Virtual Machine managed resources such as an AWS EC2 instance or bare metal managed resources such as a Packet Device.
Name | Type | Description
-----|------|------------
`apiVersion` | string | `compute.crossplane.io/v1alpha1`
`kind` | string | `MachineInstance`
`metadata` | [meta/v1.ObjectMeta](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#objectmeta-v1-meta) | Kubernetes object metadata.
`spec` | [MachineInstanceSpec](#MachineInstanceSpec) | MachineInstanceSpec specifies the desired state of a MachineInstance.
`status` | [v1alpha1.ResourceClaimStatus](../crossplane-runtime/core-crossplane-io-v1alpha1.md#resourceclaimstatus) |
## KubernetesClusterSpec
KubernetesClusterSpec specifies the desired state of a KubernetesCluster.
Appears in:
* [KubernetesCluster](#KubernetesCluster)
Name | Type | Description
-----|------|------------
`clusterVersion` | string | ClusterVersion specifies the desired Kubernetes version, e.g. 1.15.
KubernetesClusterSpec supports all fields of:
* [v1alpha1.ResourceClaimSpec](../crossplane-runtime/core-crossplane-io-v1alpha1.md#resourceclaimspec)
## MachineInstanceSpec
MachineInstanceSpec specifies the desired state of a MachineInstance.
Appears in:
* [MachineInstance](#MachineInstance)
MachineInstanceSpec supports all fields of:
* [v1alpha1.ResourceClaimSpec](../crossplane-runtime/core-crossplane-io-v1alpha1.md#resourceclaimspec)
This API documentation was generated by `crossdocs`.

View File

@ -0,0 +1,78 @@
# database.crossplane.io/v1alpha1 API Reference
Package v1alpha1 contains portable resource claims for database services such as MySQL or PostgreSQL.
This API group contains the following Crossplane resources:
* [MySQLInstance](#MySQLInstance)
* [PostgreSQLInstance](#PostgreSQLInstance)
## MySQLInstance
A MySQLInstance is a portable resource claim that may be satisfied by binding to a MySQL managed resource such as an AWS RDS instance or a GCP CloudSQL instance.
Name | Type | Description
-----|------|------------
`apiVersion` | string | `database.crossplane.io/v1alpha1`
`kind` | string | `MySQLInstance`
`metadata` | [meta/v1.ObjectMeta](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#objectmeta-v1-meta) | Kubernetes object metadata.
`spec` | [MySQLInstanceSpec](#MySQLInstanceSpec) | MySQLInstanceSpec specifies the desired state of a MySQLInstance.
`status` | [v1alpha1.ResourceClaimStatus](../crossplane-runtime/core-crossplane-io-v1alpha1.md#resourceclaimstatus) |
## PostgreSQLInstance
A PostgreSQLInstance is a portable resource claim that may be satisfied by binding to a PostgreSQL managed resource such as an AWS RDS instance or a GCP CloudSQL instance.
Name | Type | Description
-----|------|------------
`apiVersion` | string | `database.crossplane.io/v1alpha1`
`kind` | string | `PostgreSQLInstance`
`metadata` | [meta/v1.ObjectMeta](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#objectmeta-v1-meta) | Kubernetes object metadata.
`spec` | [PostgreSQLInstanceSpec](#PostgreSQLInstanceSpec) | PostgreSQLInstanceSpec specifies the desired state of a PostgreSQLInstance. PostgreSQLInstance.
`status` | [v1alpha1.ResourceClaimStatus](../crossplane-runtime/core-crossplane-io-v1alpha1.md#resourceclaimstatus) |
## MySQLInstanceSpec
MySQLInstanceSpec specifies the desired state of a MySQLInstance.
Appears in:
* [MySQLInstance](#MySQLInstance)
Name | Type | Description
-----|------|------------
`engineVersion` | string | EngineVersion specifies the desired MySQL engine version, e.g. 5.7.
MySQLInstanceSpec supports all fields of:
* [v1alpha1.ResourceClaimSpec](../crossplane-runtime/core-crossplane-io-v1alpha1.md#resourceclaimspec)
## PostgreSQLInstanceSpec
PostgreSQLInstanceSpec specifies the desired state of a PostgreSQLInstance. PostgreSQLInstance.
Appears in:
* [PostgreSQLInstance](#PostgreSQLInstance)
Name | Type | Description
-----|------|------------
`engineVersion` | string | EngineVersion specifies the desired PostgreSQL engine version, e.g. 9.6.
PostgreSQLInstanceSpec supports all fields of:
* [v1alpha1.ResourceClaimSpec](../crossplane-runtime/core-crossplane-io-v1alpha1.md#resourceclaimspec)
This API documentation was generated by `crossdocs`.

View File

@ -0,0 +1,38 @@
# kubernetes.crossplane.io/v1alpha1 API Reference
Package v1alpha1 contains resources relating to Crossplane Kubernetes.
This API group contains the following Crossplane resources:
* [Provider](#Provider)
## Provider
A Provider configures a Kubernetes &#39;provider&#39;, i.e. a connection to a particular Kubernetes cluster using the referenced Secret.
Name | Type | Description
-----|------|------------
`apiVersion` | string | `kubernetes.crossplane.io/v1alpha1`
`kind` | string | `Provider`
`metadata` | [meta/v1.ObjectMeta](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#objectmeta-v1-meta) | Kubernetes object metadata.
`spec` | [ProviderSpec](#ProviderSpec) | A ProviderSpec defines the desired state of a Provider.
## ProviderSpec
A ProviderSpec defines the desired state of a Provider.
Appears in:
* [Provider](#Provider)
Name | Type | Description
-----|------|------------
`credentialsSecretRef` | [v1alpha1.SecretReference](../crossplane-runtime/core-crossplane-io-v1alpha1.md#secretreference) | A Secret containing connection credentials for a Kubernetes cluster client that will be used to authenticate to this Kubernetes Provider. This will typically be the connection secret of a KubernetesCluster claim, or the secret created by a Kubernetes service account, but could also be manually configured to connect to a preexisting cluster.
This API documentation was generated by `crossdocs`.

View File

@ -0,0 +1,260 @@
# stacks.crossplane.io/v1alpha1 API Reference
Package v1alpha1 contains resources relating to Crossplane Stacks.
This API group contains the following Crossplane resources:
* [ClusterStackInstall](#ClusterStackInstall)
* [Stack](#Stack)
* [StackInstall](#StackInstall)
## ClusterStackInstall
ClusterStackInstall is the CRD type for a request to add a stack to Crossplane.
Name | Type | Description
-----|------|------------
`apiVersion` | string | `stacks.crossplane.io/v1alpha1`
`kind` | string | `ClusterStackInstall`
`metadata` | [meta/v1.ObjectMeta](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#objectmeta-v1-meta) | Kubernetes object metadata.
`spec` | [StackInstallSpec](#StackInstallSpec) | StackInstallSpec specifies details about a request to install a stack to Crossplane.
`status` | [StackInstallStatus](#StackInstallStatus) | StackInstallStatus represents the observed state of a StackInstall.
## Stack
A Stack that has been added to Crossplane.
Name | Type | Description
-----|------|------------
`apiVersion` | string | `stacks.crossplane.io/v1alpha1`
`kind` | string | `Stack`
`metadata` | [meta/v1.ObjectMeta](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#objectmeta-v1-meta) | Kubernetes object metadata.
`spec` | [StackSpec](#StackSpec) | StackSpec specifies the desired state of a Stack.
`status` | [StackStatus](#StackStatus) | StackStatus represents the observed state of a Stack.
## StackInstall
A StackInstall requests a stack be installed to Crossplane.
Name | Type | Description
-----|------|------------
`apiVersion` | string | `stacks.crossplane.io/v1alpha1`
`kind` | string | `StackInstall`
`metadata` | [meta/v1.ObjectMeta](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#objectmeta-v1-meta) | Kubernetes object metadata.
`spec` | [StackInstallSpec](#StackInstallSpec) | StackInstallSpec specifies details about a request to install a stack to Crossplane.
`status` | [StackInstallStatus](#StackInstallStatus) | StackInstallStatus represents the observed state of a StackInstall.
## AppMetadataSpec
AppMetadataSpec defines metadata about the stack application
Appears in:
* [StackSpec](#StackSpec)
Name | Type | Description
-----|------|------------
`title` | string |
`overviewShort` | string |
`overview` | string |
`readme` | string |
`version` | string |
`icons` | [[]IconSpec](#IconSpec) |
`maintainers` | [[]ContributorSpec](#ContributorSpec) |
`owners` | [[]ContributorSpec](#ContributorSpec) |
`company` | string |
`category` | string |
`keywords` | []string |
`website` | string |
`source` | string |
`license` | string |
`dependsOn` | [[]StackInstallSpec](#StackInstallSpec) | DependsOn is the list of CRDs that this stack depends on. This data drives the dependency resolution process.
`permissionScope` | string |
## ContributorSpec
ContributorSpec defines a contributor for a stack (e.g., maintainer, owner, etc.)
Appears in:
* [AppMetadataSpec](#AppMetadataSpec)
Name | Type | Description
-----|------|------------
`name` | string |
`email` | string |
## ControllerDeployment
ControllerDeployment defines a controller for a stack that is managed by a Deployment.
Appears in:
* [ControllerSpec](#ControllerSpec)
Name | Type | Description
-----|------|------------
`name` | string |
`spec` | [apps/v1.DeploymentSpec](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#deploymentspec-v1-apps) |
## ControllerJob
ControllerJob defines a controller for a stack that is installed by a Job.
Appears in:
* [ControllerSpec](#ControllerSpec)
Name | Type | Description
-----|------|------------
`name` | string |
`spec` | [batch/v1.JobSpec](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#jobspec-v1-batch) |
## ControllerSpec
ControllerSpec defines the controller that implements the logic for a stack, which can come in different flavors. A golang code (controller-runtime) controller with a managing Deployment is all that is supported currently, but more types will come in the future (e.g., templates, functions/hooks, templates, a new DSL, etc.
Appears in:
* [StackSpec](#StackSpec)
Name | Type | Description
-----|------|------------
`deployment` | [ControllerDeployment](#ControllerDeployment) |
`job` | [ControllerJob](#ControllerJob) |
## IconSpec
IconSpec defines the icon for a stack
Appears in:
* [AppMetadataSpec](#AppMetadataSpec)
Name | Type | Description
-----|------|------------
`base64Data` | string |
`mediatype` | string |
## PermissionsSpec
PermissionsSpec defines the permissions that a stack will require to operate.
Appears in:
* [StackSpec](#StackSpec)
Name | Type | Description
-----|------|------------
`rules` | [[]rbac/v1.PolicyRule](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#policyrule-v1-rbac) |
## StackInstallSpec
StackInstallSpec specifies details about a request to install a stack to Crossplane.
Appears in:
* [ClusterStackInstall](#ClusterStackInstall)
* [StackInstall](#StackInstall)
* [AppMetadataSpec](#AppMetadataSpec)
Name | Type | Description
-----|------|------------
`source` | string | Source is the domain name for the stack registry hosting the stack being requested, e.g., registry.crossplane.io
`package` | string | Package is the name of the stack package that is being requested, e.g., myapp. Either Package or CustomResourceDefinition can be specified.
`crd` | string | CustomResourceDefinition is the full name of a CRD that is owned by the stack being requested. This can be a convenient way of installing a stack when the desired CRD is known, but the package name that contains it is not known. Either Package or CustomResourceDefinition can be specified.
## StackInstallStatus
StackInstallStatus represents the observed state of a StackInstall.
Appears in:
* [ClusterStackInstall](#ClusterStackInstall)
* [StackInstall](#StackInstall)
Name | Type | Description
-----|------|------------
`conditionedStatus` | [v1alpha1.ConditionedStatus](../crossplane-runtime/core-crossplane-io-v1alpha1.md#conditionedstatus) |
`installJob` | [core/v1.ObjectReference](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#objectreference-v1-core) |
`stackRecord` | [core/v1.ObjectReference](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#objectreference-v1-core) |
## StackInstaller
StackInstaller provides a common interface for StackInstall and ClusterStackInstall to share controller and reconciler logic
## StackSpec
StackSpec specifies the desired state of a Stack.
Appears in:
* [Stack](#Stack)
Name | Type | Description
-----|------|------------
`customresourcedefinitions` | [CRDList](#CRDList) | CRDList is the full list of CRDs that this stack owns and depends on
`controller` | [ControllerSpec](#ControllerSpec) | ControllerSpec defines the controller that implements the logic for a stack, which can come in different flavors. A golang code (controller-runtime) controller with a managing Deployment is all that is supported currently, but more types will come in the future (e.g., templates, functions/hooks, templates, a new DSL, etc.
`permissions` | [PermissionsSpec](#PermissionsSpec) | PermissionsSpec defines the permissions that a stack will require to operate.
StackSpec supports all fields of:
* [AppMetadataSpec](#AppMetadataSpec)
## StackStatus
StackStatus represents the observed state of a Stack.
Appears in:
* [Stack](#Stack)
Name | Type | Description
-----|------|------------
`conditionedStatus` | [v1alpha1.ConditionedStatus](../crossplane-runtime/core-crossplane-io-v1alpha1.md#conditionedstatus) |
`controllerRef` | [core/v1.ObjectReference](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#objectreference-v1-core) |
This API documentation was generated by `crossdocs`.

View File

@ -0,0 +1,63 @@
# storage.crossplane.io/v1alpha1 API Reference
Package v1alpha1 contains portable resource claims for storage services such as buckets.
This API group contains the following Crossplane resources:
* [Bucket](#Bucket)
## Bucket
A Bucket is a portable resource claim that may be satisfied by binding to a storage bucket PostgreSQL managed resource such as an AWS S3 bucket or Azure storage container.
Name | Type | Description
-----|------|------------
`apiVersion` | string | `storage.crossplane.io/v1alpha1`
`kind` | string | `Bucket`
`metadata` | [meta/v1.ObjectMeta](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#objectmeta-v1-meta) | Kubernetes object metadata.
`spec` | [BucketSpec](#BucketSpec) | BucketSpec specifies the desired state of a Bucket.
`status` | [v1alpha1.ResourceClaimStatus](../crossplane-runtime/core-crossplane-io-v1alpha1.md#resourceclaimstatus) |
## BucketSpec
BucketSpec specifies the desired state of a Bucket.
Appears in:
* [Bucket](#Bucket)
Name | Type | Description
-----|------|------------
`name` | string | Name specifies the desired name of the bucket.
`predefinedACL` | [PredefinedACL](#PredefinedACL) | PredefinedACL specifies a predefined ACL (e.g. Private, ReadWrite, etc) to be applied to the bucket.
`localPermission` | [LocalPermissionType](#LocalPermissionType) | LocalPermission specifies permissions granted to a provider specific service account for this bucket, e.g. Read, ReadWrite, or Write.
BucketSpec supports all fields of:
* [v1alpha1.ResourceClaimSpec](../crossplane-runtime/core-crossplane-io-v1alpha1.md#resourceclaimspec)
## LocalPermissionType
A LocalPermissionType is a type of permission that may be granted to a Bucket. Alias of string.
Appears in:
* [BucketSpec](#BucketSpec)
## PredefinedACL
A PredefinedACL is a predefined ACL that may be applied to a Bucket. Alias of string.
Appears in:
* [BucketSpec](#BucketSpec)
This API documentation was generated by `crossdocs`.

View File

@ -0,0 +1,160 @@
# workload.crossplane.io/v1alpha1 API Reference
Package v1alpha1 contains resources relating to Crossplane Workloads.
This API group contains the following Crossplane resources:
* [KubernetesApplication](#KubernetesApplication)
* [KubernetesApplicationResource](#KubernetesApplicationResource)
## KubernetesApplication
A KubernetesApplication defines an application deployed by Crossplane to a Kubernetes cluster, i.e. a portable KubernetesCluster resource claim.
Name | Type | Description
-----|------|------------
`apiVersion` | string | `workload.crossplane.io/v1alpha1`
`kind` | string | `KubernetesApplication`
`metadata` | [meta/v1.ObjectMeta](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#objectmeta-v1-meta) | Kubernetes object metadata.
`spec` | [KubernetesApplicationSpec](#KubernetesApplicationSpec) | A KubernetesApplicationSpec specifies the resources of a Kubernetes application.
`status` | [KubernetesApplicationStatus](#KubernetesApplicationStatus) | KubernetesApplicationStatus represents the observed state of a KubernetesApplication.
## KubernetesApplicationResource
A KubernetesApplicationResource is a resource of a Kubernetes application. Each resource templates a single Kubernetes resource to be deployed to its scheduled KubernetesCluster.
Name | Type | Description
-----|------|------------
`apiVersion` | string | `workload.crossplane.io/v1alpha1`
`kind` | string | `KubernetesApplicationResource`
`metadata` | [meta/v1.ObjectMeta](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#objectmeta-v1-meta) | Kubernetes object metadata.
`spec` | [KubernetesApplicationResourceSpec](#KubernetesApplicationResourceSpec) | KubernetesApplicationResourceSpec specifies the desired state of a KubernetesApplicationResource.
`status` | [KubernetesApplicationResourceStatus](#KubernetesApplicationResourceStatus) | KubernetesApplicationResourceStatus represents the observed state of a KubernetesApplicationResource.
## KubernetesApplicationResourceSpec
KubernetesApplicationResourceSpec specifies the desired state of a KubernetesApplicationResource.
Appears in:
* [KubernetesApplicationResource](#KubernetesApplicationResource)
* [KubernetesApplicationResourceTemplate](#KubernetesApplicationResourceTemplate)
Name | Type | Description
-----|------|------------
`template` | [meta/v1/unstructured.Unstructured](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#unstructured-unstructured-v1) | A Template for a Kubernetes resource to be submitted to the KubernetesCluster to which this application resource is scheduled. The resource must be understood by the KubernetesCluster. Crossplane requires only that the resource contains standard Kubernetes type and object metadata.
`secrets` | [[]core/v1.LocalObjectReference](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#localobjectreference-v1-core) | Secrets upon which this application resource depends. These secrets will be propagated to the Kubernetes cluster to which this application is scheduled.
## KubernetesApplicationResourceState
KubernetesApplicationResourceState represents the state of a KubernetesApplicationResource. Alias of string.
Appears in:
* [KubernetesApplicationResourceStatus](#KubernetesApplicationResourceStatus)
## KubernetesApplicationResourceStatus
KubernetesApplicationResourceStatus represents the observed state of a KubernetesApplicationResource.
Appears in:
* [KubernetesApplicationResource](#KubernetesApplicationResource)
Name | Type | Description
-----|------|------------
`conditionedStatus` | [v1alpha1.ConditionedStatus](../crossplane-runtime/core-crossplane-io-v1alpha1.md#conditionedstatus) |
`state` | [KubernetesApplicationResourceState](#KubernetesApplicationResourceState) | State of the application.
`clusterRef` | [core/v1.ObjectReference](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#objectreference-v1-core) | Cluster to which this application has been scheduled.
`remote` | [RemoteStatus](#RemoteStatus) | Remote status of the resource templated by this application resource.
## KubernetesApplicationResourceTemplate
A KubernetesApplicationResourceTemplate is used to instantiate new KubernetesApplicationResources.
Appears in:
* [KubernetesApplicationSpec](#KubernetesApplicationSpec)
Name | Type | Description
-----|------|------------
`metadata` | [meta/v1.ObjectMeta](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#objectmeta-v1-meta) | Kubernetes object metadata.
`spec` | [KubernetesApplicationResourceSpec](#KubernetesApplicationResourceSpec) | KubernetesApplicationResourceSpec specifies the desired state of a KubernetesApplicationResource.
## KubernetesApplicationSpec
A KubernetesApplicationSpec specifies the resources of a Kubernetes application.
Appears in:
* [KubernetesApplication](#KubernetesApplication)
Name | Type | Description
-----|------|------------
`resourceSelector` | [meta/v1.LabelSelector](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#labelselector-v1-meta) | ResourceSelector selects the KubernetesApplicationResources that are managed by this KubernetesApplication. Note that a KubernetesApplication will never adopt orphaned KubernetesApplicationResources, and thus this selector serves only to help match a KubernetesApplication to its KubernetesApplicationResources.
`clusterSelector` | [meta/v1.LabelSelector](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#labelselector-v1-meta) | ClusterSelector selects the clusters to which this application may be scheduled. Leave both match labels and expressions empty to match any cluster.
`resourceTemplates` | [[]KubernetesApplicationResourceTemplate](#KubernetesApplicationResourceTemplate) | ResourceTemplates specifies a set of Kubernetes application resources managed by this application.
## KubernetesApplicationState
KubernetesApplicationState represents the state of a Kubernetes application. Alias of string.
Appears in:
* [KubernetesApplicationStatus](#KubernetesApplicationStatus)
## KubernetesApplicationStatus
KubernetesApplicationStatus represents the observed state of a KubernetesApplication.
Appears in:
* [KubernetesApplication](#KubernetesApplication)
Name | Type | Description
-----|------|------------
`conditionedStatus` | [v1alpha1.ConditionedStatus](../crossplane-runtime/core-crossplane-io-v1alpha1.md#conditionedstatus) |
`state` | [KubernetesApplicationState](#KubernetesApplicationState) | State of the application.
`clusterRef` | [core/v1.ObjectReference](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#objectreference-v1-core) | Cluster to which this application has been scheduled.
`desiredResources` | int | Desired resources of this application, i.e. the number of resources that match this application&#39;s resource selector.
`submittedResources` | int | Submitted resources of this workload, i.e. the subset of desired resources that have been successfully submitted to their scheduled Kubernetes cluster.
## RemoteStatus
RemoteStatus represents the observed state of a remote cluster.
Appears in:
* [KubernetesApplicationResourceStatus](#KubernetesApplicationResourceStatus)
Name | Type | Description
-----|------|------------
`raw` | [encoding/json.RawMessage](https://golang.org/pkg/encoding/json#RawMessage) | Raw JSON representation of the remote status as a byte array.
This API documentation was generated by `crossdocs`.

View File

@ -0,0 +1,39 @@
# aws.crossplane.io/v1alpha3 API Reference
Package v1alpha3 contains core AWS resources.
This API group contains the following Crossplane resources:
* [Provider](#Provider)
## Provider
A Provider configures an AWS &#39;provider&#39;, i.e. a connection to a particular AWS account using a particular AWS IAM role.
Name | Type | Description
-----|------|------------
`apiVersion` | string | `aws.crossplane.io/v1alpha3`
`kind` | string | `Provider`
`metadata` | [meta/v1.ObjectMeta](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#objectmeta-v1-meta) | Kubernetes object metadata.
`spec` | [ProviderSpec](#ProviderSpec) | A ProviderSpec defines the desired state of a Provider.
## ProviderSpec
A ProviderSpec defines the desired state of a Provider.
Appears in:
* [Provider](#Provider)
Name | Type | Description
-----|------|------------
`region` | string | Region for managed resources created using this AWS provider.
`credentialsSecretRef` | [v1alpha1.SecretKeySelector](../crossplane-runtime/core-crossplane-io-v1alpha1.md#secretkeyselector) | A Secret containing INI encoded credentials for an AWS IAM role that will be used to authenticate to this AWS account.
This API documentation was generated by `crossdocs`.

View File

@ -0,0 +1,308 @@
# cache.aws.crossplane.io/v1beta1 API Reference
Package v1beta1 contains managed resources for AWS caching services such as ElastiCache.
This API group contains the following Crossplane resources:
* [ReplicationGroup](#ReplicationGroup)
* [ReplicationGroupClass](#ReplicationGroupClass)
## ReplicationGroup
A ReplicationGroup is a managed resource that represents an AWS ElastiCache Replication Group.
Name | Type | Description
-----|------|------------
`apiVersion` | string | `cache.aws.crossplane.io/v1beta1`
`kind` | string | `ReplicationGroup`
`metadata` | [meta/v1.ObjectMeta](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#objectmeta-v1-meta) | Kubernetes object metadata.
`spec` | [ReplicationGroupSpec](#ReplicationGroupSpec) | A ReplicationGroupSpec defines the desired state of a ReplicationGroup.
`status` | [ReplicationGroupStatus](#ReplicationGroupStatus) | A ReplicationGroupStatus defines the observed state of a ReplicationGroup.
## ReplicationGroupClass
A ReplicationGroupClass is a resource class. It defines the desired spec of resource claims that use it to dynamically provision a managed resource.
Name | Type | Description
-----|------|------------
`apiVersion` | string | `cache.aws.crossplane.io/v1beta1`
`kind` | string | `ReplicationGroupClass`
`metadata` | [meta/v1.ObjectMeta](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#objectmeta-v1-meta) | Kubernetes object metadata.
`specTemplate` | [ReplicationGroupClassSpecTemplate](#ReplicationGroupClassSpecTemplate) | SpecTemplate is a template for the spec of a dynamically provisioned ReplicationGroup.
## Endpoint
Endpoint represents the information required for client programs to connect to a cache node. Please also see https://docs.aws.amazon.com/goto/WebAPI/elasticache-2015-02-02/Endpoint
Appears in:
* [NodeGroup](#NodeGroup)
* [NodeGroupMember](#NodeGroupMember)
* [ReplicationGroupObservation](#ReplicationGroupObservation)
Name | Type | Description
-----|------|------------
`address` | string | Address is the DNS hostname of the cache node.
`port` | int | Port number that the cache engine is listening on.
## MinorVersion
MinorVersion represents a supported minor version of Redis. Alias of string.
## NodeGroup
NodeGroup represents a collection of cache nodes in a replication group. One node in the node group is the read/write primary node. All the other nodes are read-only Replica nodes. Please also see https://docs.aws.amazon.com/goto/WebAPI/elasticache-2015-02-02/NodeGroup
Appears in:
* [ReplicationGroupObservation](#ReplicationGroupObservation)
Name | Type | Description
-----|------|------------
`port` | string | NodeGroupID is the identifier for the node group (shard). A Redis (cluster mode disabled) replication group contains only 1 node group; therefore, the node group ID is 0001. A Redis (cluster mode enabled) replication group contains 1 to 15 node groups numbered 0001 to 0015.
`nodeGroupMembers` | [[]NodeGroupMember](#NodeGroupMember) | NodeGroupMembers is a list containing information about individual nodes within the node group (shard).
`primaryEndpoint` | [Endpoint](#Endpoint) | PrimaryEndpoint is the endpoint of the primary node in this node group (shard).
`slots` | string | Slots is the keyspace for this node group (shard).
`status` | string | Status of this replication group - creating, available, etc.
## NodeGroupConfigurationSpec
A NodeGroupConfigurationSpec specifies the desired state of a node group.
Appears in:
* [ReplicationGroupParameters](#ReplicationGroupParameters)
Name | Type | Description
-----|------|------------
`primaryAvailabilityZone` | Optional string | PrimaryAvailabilityZone specifies the Availability Zone where the primary node of this node group (shard) is launched.
`replicaAvailabilityZones` | Optional []string | ReplicaAvailabilityZones specifies a list of Availability Zones to be used for the read replicas. The number of Availability Zones in this list must match the value of ReplicaCount or ReplicasPerNodeGroup if not specified.
`replicaCount` | Optional int | ReplicaCount specifies the number of read replica nodes in this node group (shard).
`slots` | Optional string | Slots specifies the keyspace for a particular node group. Keyspaces range from 0 to 16,383. The string is in the format startkey-endkey. Example: &#34;0-3999&#34;
## NodeGroupMember
NodeGroupMember represents a single node within a node group (shard). Please also see https://docs.aws.amazon.com/goto/WebAPI/elasticache-2015-02-02/NodeGroupMember
Appears in:
* [NodeGroup](#NodeGroup)
Name | Type | Description
-----|------|------------
`cacheClusterId` | string | CacheClusterID is the ID of the cluster to which the node belongs.
`cacheNodeId` | string | CacheNodeID is the ID of the node within its cluster. A node ID is a numeric identifier (0001, 0002, etc.).
`currentRole` | string | CurrentRole is the role that is currently assigned to the node - primary or replica. This member is only applicable for Redis (cluster mode disabled) replication groups.
`preferredAvailabilityZone` | string | PreferredAvailabilityZone is the name of the Availability Zone in which the node is located.
`readEndpoint` | [Endpoint](#Endpoint) | ReadEndpoint is the information required for client programs to connect to a node for read operations. The read endpoint is only applicable on Redis (cluster mode disabled) clusters.
## PatchVersion
PatchVersion represents a supported patch version of Redis. Alias of string.
## ReplicationGroupClassSpecTemplate
A ReplicationGroupClassSpecTemplate is a template for the spec of a dynamically provisioned ReplicationGroup.
Appears in:
* [ReplicationGroupClass](#ReplicationGroupClass)
Name | Type | Description
-----|------|------------
`forProvider` | [ReplicationGroupParameters](#ReplicationGroupParameters) | ReplicationGroupParameters define the desired state of an AWS ElastiCache Replication Group. Most fields map directly to an AWS ReplicationGroup: https://docs.aws.amazon.com/AmazonElastiCache/latest/APIReference/API_CreateReplicationGroup.html#API_CreateReplicationGroup_RequestParameters
ReplicationGroupClassSpecTemplate supports all fields of:
* [v1alpha1.ClassSpecTemplate](../crossplane-runtime/core-crossplane-io-v1alpha1.md#classspectemplate)
## ReplicationGroupObservation
ReplicationGroupObservation contains the observation of the status of the given ReplicationGroup.
Appears in:
* [ReplicationGroupStatus](#ReplicationGroupStatus)
Name | Type | Description
-----|------|------------
`automaticFailoverStatus` | string | AutomaticFailover indicates the status of Multi-AZ with automatic failover for this Redis replication group.
`clusterEnabled` | bool | ClusterEnabled is a flag indicating whether or not this replication group is cluster enabled; i.e., whether its data can be partitioned across multiple shards (API/CLI: node groups).
`configurationEndpoint` | [Endpoint](#Endpoint) | ConfigurationEndpoint for this replication group. Use the configuration endpoint to connect to this replication group.
`memberClusters` | []string | MemberClusters is the list of names of all the cache clusters that are part of this replication group.
`nodeGroups` | [[]NodeGroup](#NodeGroup) | NodeGroups is a list of node groups in this replication group. For Redis (cluster mode disabled) replication groups, this is a single-element list. For Redis (cluster mode enabled) replication groups, the list contains an entry for each node group (shard).
`pendingModifiedValues` | [ReplicationGroupPendingModifiedValues](#ReplicationGroupPendingModifiedValues) | PendingModifiedValues is a group of settings to be applied to the replication group, either immediately or during the next maintenance window.
`status` | string | Status is the current state of this replication group - creating, available, modifying, deleting, create-failed, snapshotting.
## ReplicationGroupParameters
ReplicationGroupParameters define the desired state of an AWS ElastiCache Replication Group. Most fields map directly to an AWS ReplicationGroup: https://docs.aws.amazon.com/AmazonElastiCache/latest/APIReference/API_CreateReplicationGroup.html#API_CreateReplicationGroup_RequestParameters
Appears in:
* [ReplicationGroupClassSpecTemplate](#ReplicationGroupClassSpecTemplate)
* [ReplicationGroupSpec](#ReplicationGroupSpec)
Name | Type | Description
-----|------|------------
`applyModificationsImmediately` | bool | If true, this parameter causes the modifications in this request and any pending modifications to be applied, asynchronously and as soon as possible, regardless of the PreferredMaintenanceWindow setting for the replication group. If false, changes to the nodes in the replication group are applied on the next maintenance reboot, or the next failure reboot, whichever occurs first.
`atRestEncryptionEnabled` | Optional bool | AtRestEncryptionEnabled enables encryption at rest when set to true. You cannot modify the value of AtRestEncryptionEnabled after the replication group is created. To enable encryption at rest on a replication group you must set AtRestEncryptionEnabled to true when you create the replication group. Only available when creating a replication group in an Amazon VPC using redis version 3.2.6 or 4.x.
`authEnabled` | Optional bool | AuthEnabled enables mandatory authentication when connecting to the managed replication group. AuthEnabled requires TransitEncryptionEnabled to be true. While ReplicationGroupSpec mirrors the fields of the upstream replication group object as closely as possible, we expose a boolean here rather than requiring the operator pass in a string authentication token. Crossplane will generate a token automatically and expose it via a Secret.
`automaticFailoverEnabled` | Optional bool | AutomaticFailoverEnabled specifies whether a read-only replica is automatically promoted to read/write primary if the existing primary fails. If true, Multi-AZ is enabled for this replication group. If false, Multi-AZ is disabled for this replication group. AutomaticFailoverEnabled must be enabled for Redis (cluster mode enabled) replication groups. Amazon ElastiCache for Redis does not support Multi-AZ with automatic failover on: * Redis versions earlier than 2.8.6. * Redis (cluster mode disabled): T1 and T2 cache node types. * Redis (cluster mode enabled): T1 node types.
`cacheNodeType` | string | CacheNodeType specifies the compute and memory capacity of the nodes in the node group (shard). For a complete listing of node types and specifications, see: * Amazon ElastiCache Product Features and Details (http://aws.amazon.com/elasticache/details) * Cache Node Type-Specific Parameters for Memcached (http://docs.aws.amazon.com/AmazonElastiCache/latest/mem-ug/ParameterGroups.Memcached.html#ParameterGroups.Memcached.NodeSpecific) * Cache Node Type-Specific Parameters for Redis (http://docs.aws.amazon.com/AmazonElastiCache/latest/red-ug/ParameterGroups.Redis.html#ParameterGroups.Redis.NodeSpecific)
`cacheParameterGroupName` | Optional string | CacheParameterGroupName specifies the name of the parameter group to associate with this replication group. If this argument is omitted, the default cache parameter group for the specified engine is used. If you are running Redis version 3.2.4 or later, only one node group (shard), and want to use a default parameter group, we recommend that you specify the parameter group by name. * To create a Redis (cluster mode disabled) replication group, use CacheParameterGroupName=default.redis3.2. * To create a Redis (cluster mode enabled) replication group, use CacheParameterGroupName=default.redis3.2.cluster.on.
`cacheSecurityGroupNames` | Optional []string | CacheSecurityGroupNames specifies a list of cache security group names to associate with this replication group.
`cacheSubnetGroupName` | Optional string | CacheSubnetGroupName specifies the name of the cache subnet group to be used for the replication group. If you&#39;re going to launch your cluster in an Amazon VPC, you need to create a subnet group before you start creating a cluster. For more information, see Subnets and Subnet Groups (http://docs.aws.amazon.com/AmazonElastiCache/latest/red-ug/SubnetGroups.html).
`engine` | string | Engine is the name of the cache engine (memcached or redis) to be used for the clusters in this replication group.
`engineVersion` | Optional string | EngineVersion specifies the version number of the cache engine to be used for the clusters in this replication group. To view the supported cache engine versions, use the DescribeCacheEngineVersions operation. Important: You can upgrade to a newer engine version (see Selecting a Cache Engine and Version (http://docs.aws.amazon.com/AmazonElastiCache/latest/red-ug/SelectEngine.html#VersionManagement)) in the ElastiCache User Guide, but you cannot downgrade to an earlier engine version. If you want to use an earlier engine version, you must delete the existing cluster or replication group and create it anew with the earlier engine version.
`nodeGroupConfiguration` | Optional [[]NodeGroupConfigurationSpec](#NodeGroupConfigurationSpec) | NodeGroupConfigurationSpec specifies a list of node group (shard) configuration options. If you&#39;re creating a Redis (cluster mode disabled) or a Redis (cluster mode enabled) replication group, you can use this parameter to individually configure each node group (shard), or you can omit this parameter. However, when seeding a Redis (cluster mode enabled) cluster from a S3 rdb file, you must configure each node group (shard) using this parameter because you must specify the slots for each node group.
`notificationTopicArn` | Optional string | NotificationTopicARN specifies the Amazon Resource Name (ARN) of the Amazon Simple Notification Service (SNS) topic to which notifications are sent. The Amazon SNS topic owner must be the same as the cluster owner.
`notificationTopicStatus` | Optional string | NotificationTopicStatus is the status of the Amazon SNS notification topic for the replication group. Notifications are sent only if the status is active. Valid values: active | inactive
`numCacheClusters` | Optional int | NumCacheClusters specifies the number of clusters this replication group initially has. This parameter is not used if there is more than one node group (shard). You should use ReplicasPerNodeGroup instead. If AutomaticFailoverEnabled is true, the value of this parameter must be at least 2. If AutomaticFailoverEnabled is false you can omit this parameter (it will default to 1), or you can explicitly set it to a value between 2 and 6. The maximum permitted value for NumCacheClusters is 6 (1 primary plus 5 replicas).
`numNodeGroups` | Optional int | NumNodeGroups specifies the number of node groups (shards) for this Redis (cluster mode enabled) replication group. For Redis (cluster mode disabled) either omit this parameter or set it to 1. Default: 1
`port` | Optional int | Port number on which each member of the replication group accepts connections.
`preferredCacheClusterAzs` | Optional []string | PreferredCacheClusterAZs specifies a list of EC2 Availability Zones in which the replication group&#39;s clusters are created. The order of the Availability Zones in the list is the order in which clusters are allocated. The primary cluster is created in the first AZ in the list. This parameter is not used if there is more than one node group (shard). You should use NodeGroupConfigurationSpec instead. If you are creating your replication group in an Amazon VPC (recommended), you can only locate clusters in Availability Zones associated with the subnets in the selected subnet group. The number of Availability Zones listed must equal the value of NumCacheClusters. Default: system chosen Availability Zones.
`preferredMaintenanceWindow` | Optional string | PreferredMaintenanceWindow specifies the weekly time range during which maintenance on the cluster is performed. It is specified as a range in the format ddd:hh24:mi-ddd:hh24:mi (24H Clock UTC). The minimum maintenance window is a 60 minute period. Example: sun:23:00-mon:01:30
`primaryClusterId` | Optional string | PrimaryClusterId is the identifier of the cluster that serves as the primary for this replication group. This cluster must already exist and have a status of available. This parameter is not required if NumCacheClusters, NumNodeGroups or ReplicasPerNodeGroup is specified.
`replicasPerNodeGroup` | Optional int | ReplicasPerNodeGroup specifies the number of replica nodes in each node group (shard). Valid values are 0 to 5.
`replicationGroupDescription` | string | ReplicationGroupDescription is the description for the replication group.
`securityGroupIds` | Optional []string | SecurityGroupIDs specifies one or more Amazon VPC security groups associated with this replication group. Use this parameter only when you are creating a replication group in an Amazon VPC.
`snapshotArns` | Optional []string | SnapshotARNs specifies a list of Amazon Resource Names (ARN) that uniquely identify the Redis RDB snapshot files stored in Amazon S3. The snapshot files are used to populate the new replication group. The Amazon S3 object name in the ARN cannot contain any commas. The new replication group will have the number of node groups (console: shards) specified by the parameter NumNodeGroups or the number of node groups configured by NodeGroupConfigurationSpec regardless of the number of ARNs specified here.
`snapshotName` | Optional string | SnapshotName specifies the name of a snapshot from which to restore data into the new replication group. The snapshot status changes to restoring while the new replication group is being created.
`snapshotRetentionLimit` | Optional int | SnapshotRetentionLimit specifies the number of days for which ElastiCache retains automatic snapshots before deleting them. For example, if you set SnapshotRetentionLimit to 5, a snapshot that was taken today is retained for 5 days before being deleted. Default: 0 (i.e., automatic backups are disabled for this cluster).
`snapshotWindow` | Optional string | SnapshotWindow specifies the daily time range (in UTC) during which ElastiCache begins taking a daily snapshot of your node group (shard). Example: 05:00-09:00 If you do not specify this parameter, ElastiCache automatically chooses an appropriate time range.
`snapshottingClusterID` | Optional string | SnapshottingClusterID is used as the daily snapshot source for the replication group. This parameter cannot be set for Redis (cluster mode enabled) replication groups.
`tags` | Optional [[]Tag](#Tag) | A list of cost allocation tags to be added to this resource. A tag is a key-value pair.
`transitEncryptionEnabled` | Optional bool | TransitEncryptionEnabled enables in-transit encryption when set to true. You cannot modify the value of TransitEncryptionEnabled after the cluster is created. To enable in-transit encryption on a cluster you must TransitEncryptionEnabled to true when you create a cluster. This parameter is valid only if the Engine parameter is redis, the EngineVersion parameter is 3.2.6 or 4.x, and the cluster is being created in an Amazon VPC. If you enable in-transit encryption, you must also specify a value for CacheSubnetGroup. Required: Only available when creating a replication group in an Amazon VPC using redis version 3.2.6 or 4.x. Default: false For HIPAA compliance, you must specify TransitEncryptionEnabled as true, an AuthToken, and a CacheSubnetGroup.
## ReplicationGroupPendingModifiedValues
ReplicationGroupPendingModifiedValues are the settings to be applied to the Redis replication group, either immediately or during the next maintenance window. Please also see https://docs.aws.amazon.com/goto/WebAPI/elasticache-2015-02-02/ReplicationGroupPendingModifiedValues
Appears in:
* [ReplicationGroupObservation](#ReplicationGroupObservation)
Name | Type | Description
-----|------|------------
`automaticFailoverStatus` | string | AutomaticFailoverStatus indicates the status of Multi-AZ with automatic failover for this Redis replication group.
`primaryClusterId` | string | PrimaryClusterID that is applied immediately or during the next maintenance window.
`resharding` | [ReshardingStatus](#ReshardingStatus) | Resharding is the status of an online resharding operation.
## ReplicationGroupSpec
A ReplicationGroupSpec defines the desired state of a ReplicationGroup.
Appears in:
* [ReplicationGroup](#ReplicationGroup)
Name | Type | Description
-----|------|------------
`forProvider` | [ReplicationGroupParameters](#ReplicationGroupParameters) | ReplicationGroupParameters define the desired state of an AWS ElastiCache Replication Group. Most fields map directly to an AWS ReplicationGroup: https://docs.aws.amazon.com/AmazonElastiCache/latest/APIReference/API_CreateReplicationGroup.html#API_CreateReplicationGroup_RequestParameters
ReplicationGroupSpec supports all fields of:
* [v1alpha1.ResourceSpec](../crossplane-runtime/core-crossplane-io-v1alpha1.md#resourcespec)
## ReplicationGroupStatus
A ReplicationGroupStatus defines the observed state of a ReplicationGroup.
Appears in:
* [ReplicationGroup](#ReplicationGroup)
Name | Type | Description
-----|------|------------
`atProvider` | [ReplicationGroupObservation](#ReplicationGroupObservation) | ReplicationGroupObservation contains the observation of the status of the given ReplicationGroup.
ReplicationGroupStatus supports all fields of:
* [v1alpha1.ResourceStatus](../crossplane-runtime/core-crossplane-io-v1alpha1.md#resourcestatus)
## ReshardingStatus
ReshardingStatus is the status of an online resharding operation. Please also see https://docs.aws.amazon.com/goto/WebAPI/elasticache-2015-02-02/ReshardingStatus
Appears in:
* [ReplicationGroupPendingModifiedValues](#ReplicationGroupPendingModifiedValues)
Name | Type | Description
-----|------|------------
`slotMigration` | [SlotMigration](#SlotMigration) | Represents the progress of an online resharding operation.
## SlotMigration
SlotMigration represents the progress of an online resharding operation. Please also see https://docs.aws.amazon.com/goto/WebAPI/elasticache-2015-02-02/SlotMigration
Appears in:
* [ReshardingStatus](#ReshardingStatus)
Name | Type | Description
-----|------|------------
`progressPercentage` | int | ProgressPercentage is the percentage of the slot migration that is complete.
## Tag
A Tag is used to tag the ElastiCache resources in AWS.
Appears in:
* [ReplicationGroupParameters](#ReplicationGroupParameters)
Name | Type | Description
-----|------|------------
`key` | string | Key for the tag.
`value` | string | Value of the tag.
This API documentation was generated by `crossdocs`.

View File

@ -0,0 +1,263 @@
# compute.aws.crossplane.io/v1alpha3 API Reference
Package v1alpha3 contains managed resources for AWS compute services such as EKS.
This API group contains the following Crossplane resources:
* [EKSCluster](#EKSCluster)
* [EKSClusterClass](#EKSClusterClass)
## EKSCluster
An EKSCluster is a managed resource that represents an AWS Elastic Kubernetes Service cluster.
Name | Type | Description
-----|------|------------
`apiVersion` | string | `compute.aws.crossplane.io/v1alpha3`
`kind` | string | `EKSCluster`
`metadata` | [meta/v1.ObjectMeta](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#objectmeta-v1-meta) | Kubernetes object metadata.
`spec` | [EKSClusterSpec](#EKSClusterSpec) | An EKSClusterSpec defines the desired state of an EKSCluster.
`status` | [EKSClusterStatus](#EKSClusterStatus) | An EKSClusterStatus represents the observed state of an EKSCluster.
## EKSClusterClass
An EKSClusterClass is a resource class. It defines the desired spec of resource claims that use it to dynamically provision a managed resource.
Name | Type | Description
-----|------|------------
`apiVersion` | string | `compute.aws.crossplane.io/v1alpha3`
`kind` | string | `EKSClusterClass`
`metadata` | [meta/v1.ObjectMeta](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#objectmeta-v1-meta) | Kubernetes object metadata.
`specTemplate` | [EKSClusterClassSpecTemplate](#EKSClusterClassSpecTemplate) | SpecTemplate is a template for the spec of a dynamically provisioned EKSCluster.
## EKSClusterClassSpecTemplate
An EKSClusterClassSpecTemplate is a template for the spec of a dynamically provisioned EKSCluster.
Appears in:
* [EKSClusterClass](#EKSClusterClass)
EKSClusterClassSpecTemplate supports all fields of:
* [v1alpha1.ClassSpecTemplate](../crossplane-runtime/core-crossplane-io-v1alpha1.md#classspectemplate)
* [EKSClusterParameters](#EKSClusterParameters)
## EKSClusterParameters
EKSClusterParameters define the desired state of an AWS Elastic Kubernetes Service cluster.
Appears in:
* [EKSClusterClassSpecTemplate](#EKSClusterClassSpecTemplate)
* [EKSClusterSpec](#EKSClusterSpec)
Name | Type | Description
-----|------|------------
`region` | [EKSRegion](#EKSRegion) | Region for this EKS Cluster.
`roleARN` | string | RoleARN: The Amazon Resource Name (ARN) of the IAM role that provides permis sions for Amazon EKS to make calls to other AWS API operations on your behalf. For more information, see &#39;Amazon EKS Service IAM Role&#39; in the Amazon EKS User Guide.
`roleARNRef` | [IAMRoleARNReferencerForEKSCluster](#IAMRoleARNReferencerForEKSCluster) | RoleARNRef references to an IAMRole to retrieve its ARN
`vpcId` | string | VPCID is the ID of the VPC.
`vpcIdRef` | [VPCIDReferencerForEKSCluster](#VPCIDReferencerForEKSCluster) | VPCIDRef references to a VPC to and retrieves its vpcId
`subnetIds` | []string | SubnetIDs of this EKS cluster.
`subnetIdRefs` | [[]*github.com/crossplaneio/stack-aws/apis/compute/v1alpha3.SubnetIDReferencerForEKSCluster](#*github.com/crossplaneio/stack-aws/apis/compute/v1alpha3.SubnetIDReferencerForEKSCluster) | SubnetIDRefs is a set of referencers that each retrieve the subnetID from the referenced Subnet
`securityGroupIds` | []string | SecurityGroupIDs of this EKS cluster.
`securityGroupIdRefs` | [[]*github.com/crossplaneio/stack-aws/apis/compute/v1alpha3.SecurityGroupIDReferencerForEKSCluster](#*github.com/crossplaneio/stack-aws/apis/compute/v1alpha3.SecurityGroupIDReferencerForEKSCluster) | SecurityGroupIDRefs is a set of referencers that each retrieve the ID from the referenced SecurityGroup
`clusterVersion` | Optional string | ClusterVersion: The desired Kubernetes version of this EKS Cluster. If you do not specify a value here, the latest version available is used.
`workerNodes` | [WorkerNodesSpec](#WorkerNodesSpec) | WorkerNodes configuration for cloudformation
`mapRoles` | Optional [[]MapRole](#MapRole) | MapRoles map AWS roles to one or more Kubernetes groups. A Default role that allows nodes access to communicate with master is autogenerated when a node pool comes online.
`mapUsers` | Optional [[]MapUser](#MapUser) | MapUsers map AWS users to one or more Kubernetes groups.
## EKSClusterSpec
An EKSClusterSpec defines the desired state of an EKSCluster.
Appears in:
* [EKSCluster](#EKSCluster)
EKSClusterSpec supports all fields of:
* [v1alpha1.ResourceSpec](../crossplane-runtime/core-crossplane-io-v1alpha1.md#resourcespec)
* [EKSClusterParameters](#EKSClusterParameters)
## EKSClusterStatus
An EKSClusterStatus represents the observed state of an EKSCluster.
Appears in:
* [EKSCluster](#EKSCluster)
Name | Type | Description
-----|------|------------
`state` | string | State of the cluster.
`resourceName` | string | ClusterName of the cluster.
`resourceVersion` | string | ClusterVersion of the cluster.
`endpoint` | string | Endpoint for connecting to the cluster.
`cloudformationStackId` | string | CloudFormationStackID of the Stack used to create node groups.
EKSClusterStatus supports all fields of:
* [v1alpha1.ResourceStatus](../crossplane-runtime/core-crossplane-io-v1alpha1.md#resourcestatus)
## EKSRegion
EKSRegion represents an EKS enabled AWS region. Alias of string.
Appears in:
* [EKSClusterParameters](#EKSClusterParameters)
## IAMRoleARNReferencerForEKSCluster
IAMRoleARNReferencerForEKSCluster is an attribute referencer that retrieves IAMRoleARN from a referenced IAMRole
Appears in:
* [EKSClusterParameters](#EKSClusterParameters)
IAMRoleARNReferencerForEKSCluster supports all fields of:
* github.com/crossplaneio/stack-aws/apis/identity/v1alpha3.IAMRoleARNReferencer
## MapRole
MapRole maps an AWS IAM role to one or more Kubernetes groups. See https://docs.aws.amazon.com/eks/latest/userguide/add-user-role.html and https://github.com/kubernetes-sigs/aws-iam-authenticator/blob/master/README.md
Appears in:
* [EKSClusterParameters](#EKSClusterParameters)
Name | Type | Description
-----|------|------------
`rolearn` | string | RoleARN to match, e.g. &#39;arn:aws:iam::000000000000:role/KubernetesNode&#39;.
`username` | string | Username (in Kubernetes) the RoleARN should map to.
`groups` | []string | Groups (in Kubernetes) the RoleARN should map to.
## MapUser
MapUser maps an AWS IAM user to one or more Kubernetes groups. See https://docs.aws.amazon.com/eks/latest/userguide/add-user-role.html and https://github.com/kubernetes-sigs/aws-iam-authenticator/blob/master/README.md
Appears in:
* [EKSClusterParameters](#EKSClusterParameters)
Name | Type | Description
-----|------|------------
`userarn` | string | UserARN to match, e.g. &#39;arn:aws:iam::000000000000:user/Alice&#39;
`username` | string | Username (in Kubernetes) the UserARN should map to.
`groups` | []string | Groups (in Kubernetes) the UserARN should map to.
## SecurityGroupIDReferencerForEKSCluster
SecurityGroupIDReferencerForEKSCluster is an attribute referencer that resolves ID from a referenced SecurityGroup
SecurityGroupIDReferencerForEKSCluster supports all fields of:
* github.com/crossplaneio/stack-aws/apis/network/v1alpha3.SecurityGroupIDReferencer
## SecurityGroupIDReferencerForEKSWorkerNodes
SecurityGroupIDReferencerForEKSWorkerNodes is an attribute referencer that resolves ID from a referenced SecurityGroup
Appears in:
* [WorkerNodesSpec](#WorkerNodesSpec)
SecurityGroupIDReferencerForEKSWorkerNodes supports all fields of:
* github.com/crossplaneio/stack-aws/apis/network/v1alpha3.SecurityGroupIDReferencer
## SubnetIDReferencerForEKSCluster
SubnetIDReferencerForEKSCluster is an attribute referencer that resolves SubnetID from a referenced Subnet
SubnetIDReferencerForEKSCluster supports all fields of:
* github.com/crossplaneio/stack-aws/apis/network/v1alpha3.SubnetIDReferencer
## VPCIDReferencerForEKSCluster
VPCIDReferencerForEKSCluster is an attribute referencer that resolves VPCID from a referenced VPC
Appears in:
* [EKSClusterParameters](#EKSClusterParameters)
VPCIDReferencerForEKSCluster supports all fields of:
* github.com/crossplaneio/stack-aws/apis/network/v1alpha3.VPCIDReferencer
## WorkerNodesSpec
WorkerNodesSpec - Worker node spec used to define cloudformation template that provisions workers for cluster
Appears in:
* [EKSClusterParameters](#EKSClusterParameters)
Name | Type | Description
-----|------|------------
`keyName` | Optional string | KeyName of the EC2 Key Pair to allow SSH access to the EC2 instances.
`nodeImageId` | Optional string | NodeImageId that the EC2 instances should run. Defaults to the region&#39;s standard AMI.
`nodeInstanceType` | string | NodeInstanceType of the EC2 instances.
`nodeAutoScalingGroupMinSize` | Optional int | NodeAutoScalingGroupMinSize configures the minimum size of this node group&#39;s Autoscaling Group. Defaults to 1.
`nodeAutoScalingGroupMaxSize` | Optional int | NodeAutoScalingGroupMaxSize configures the maximum size of this node group&#39;s Autoscaling Group. Defaults to 3.
`nodeVolumeSize` | Optional int | NodeVolumeSize configures the volume size in GB. Defaults to 20.
`bootstrapArguments` | Optional string | BootstrapArguments to pass to the bootstrap script. See files/bootstrap.sh in https://github.com/awslabs/amazon-eks-ami
`nodeGroupName` | Optional string | NodeGroupName is a unique identifier for the Node Group.
`clusterControlPlaneSecurityGroup` | Optional string | ClusterControlPlaneSecurityGroup configures the security group of the cluster control plane in order to allow communication to this node group.
`clusterControlPlaneSecurityGroupRef` | [SecurityGroupIDReferencerForEKSWorkerNodes](#SecurityGroupIDReferencerForEKSWorkerNodes) | ClusterControlPlaneSecurityGroupRef references to a SecurityGroup to retrieve its ID
This API documentation was generated by `crossdocs`.

View File

@ -0,0 +1,151 @@
# database.aws.crossplane.io/v1alpha3 API Reference
Package v1alpha3 contains managed resources for AWS database services such as RDS.
This API group contains the following Crossplane resources:
* [DBSubnetGroup](#DBSubnetGroup)
## DBSubnetGroup
A DBSubnetGroup is a managed resource that represents an AWS VPC Database Subnet Group.
Name | Type | Description
-----|------|------------
`apiVersion` | string | `database.aws.crossplane.io/v1alpha3`
`kind` | string | `DBSubnetGroup`
`metadata` | [meta/v1.ObjectMeta](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#objectmeta-v1-meta) | Kubernetes object metadata.
`spec` | [DBSubnetGroupSpec](#DBSubnetGroupSpec) | A DBSubnetGroupSpec defines the desired state of a DBSubnetGroup.
`status` | [DBSubnetGroupStatus](#DBSubnetGroupStatus) | A DBSubnetGroupStatus represents the observed state of a DBSubnetGroup.
## DBSubnetGroupExternalStatus
DBSubnetGroupExternalStatus keeps the state for the external resource
Appears in:
* [DBSubnetGroupStatus](#DBSubnetGroupStatus)
Name | Type | Description
-----|------|------------
`groupArn` | string | The Amazon Resource Name (ARN) for the DB subnet group.
`groupStatus` | string | Provides the status of the DB subnet group.
`subnets` | [[]Subnet](#Subnet) | Contains a list of Subnet elements.
`vpcId` | string | Provides the VpcId of the DB subnet group.
## DBSubnetGroupNameReferencer
DBSubnetGroupNameReferencer is used to get a Name from another DBSubnetGroup
DBSubnetGroupNameReferencer supports all fields of:
* [core/v1.LocalObjectReference](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#localobjectreference-v1-core)
## DBSubnetGroupParameters
DBSubnetGroupParameters define the desired state of an AWS VPC Database Subnet Group.
Appears in:
* [DBSubnetGroupSpec](#DBSubnetGroupSpec)
Name | Type | Description
-----|------|------------
`description` | string | The description for the DB subnet group.
`groupName` | string | The name for the DB subnet group. This value is stored as a lowercase string.
`subnetIds` | []string | The EC2 Subnet IDs for the DB subnet group.
`subnetIdRefs` | [[]*github.com/crossplaneio/stack-aws/apis/database/v1alpha3.SubnetIDReferencerForDBSubnetGroup](#*github.com/crossplaneio/stack-aws/apis/database/v1alpha3.SubnetIDReferencerForDBSubnetGroup) | SubnetIDRefs is a set of referencers that each retrieve the subnetID from the referenced Subnet
`tags` | [[]Tag](#Tag) | A list of tags. For more information, see Tagging Amazon RDS Resources (http://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_Tagging.html) in the Amazon RDS User Guide.
## DBSubnetGroupSpec
A DBSubnetGroupSpec defines the desired state of a DBSubnetGroup.
Appears in:
* [DBSubnetGroup](#DBSubnetGroup)
DBSubnetGroupSpec supports all fields of:
* [v1alpha1.ResourceSpec](../crossplane-runtime/core-crossplane-io-v1alpha1.md#resourcespec)
* [DBSubnetGroupParameters](#DBSubnetGroupParameters)
## DBSubnetGroupStatus
A DBSubnetGroupStatus represents the observed state of a DBSubnetGroup.
Appears in:
* [DBSubnetGroup](#DBSubnetGroup)
DBSubnetGroupStatus supports all fields of:
* [v1alpha1.ResourceStatus](../crossplane-runtime/core-crossplane-io-v1alpha1.md#resourcestatus)
* [DBSubnetGroupExternalStatus](#DBSubnetGroupExternalStatus)
## Subnet
Subnet represents a aws subnet
Appears in:
* [DBSubnetGroupExternalStatus](#DBSubnetGroupExternalStatus)
Name | Type | Description
-----|------|------------
`subnetID` | string | Specifies the identifier of the subnet.
`subnetStatus` | string | Specifies the status of the subnet.
## SubnetIDReferencerForDBSubnetGroup
SubnetIDReferencerForDBSubnetGroup is an attribute referencer that resolves SubnetID from a referenced Subnet
SubnetIDReferencerForDBSubnetGroup supports all fields of:
* github.com/crossplaneio/stack-aws/apis/network/v1alpha3.SubnetIDReferencer
## Tag
Tag defines a tag
Appears in:
* [DBSubnetGroupParameters](#DBSubnetGroupParameters)
Name | Type | Description
-----|------|------------
`key` | string | Key is the name of the tag.
`value` | string | Value is the value of the tag.
This API documentation was generated by `crossdocs`.

View File

@ -0,0 +1,545 @@
# database.aws.crossplane.io/v1beta1 API Reference
Package v1beta1 contains managed resources for AWS database services such as RDS.
This API group contains the following Crossplane resources:
* [RDSInstance](#RDSInstance)
* [RDSInstanceClass](#RDSInstanceClass)
## RDSInstance
An RDSInstance is a managed resource that represents an AWS Relational Database Service instance.
Name | Type | Description
-----|------|------------
`apiVersion` | string | `database.aws.crossplane.io/v1beta1`
`kind` | string | `RDSInstance`
`metadata` | [meta/v1.ObjectMeta](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#objectmeta-v1-meta) | Kubernetes object metadata.
`spec` | [RDSInstanceSpec](#RDSInstanceSpec) | An RDSInstanceSpec defines the desired state of an RDSInstance.
`status` | [RDSInstanceStatus](#RDSInstanceStatus) | An RDSInstanceStatus represents the observed state of an RDSInstance.
## RDSInstanceClass
An RDSInstanceClass is a resource class. It defines the desired spec of resource claims that use it to dynamically provision a managed resource.
Name | Type | Description
-----|------|------------
`apiVersion` | string | `database.aws.crossplane.io/v1beta1`
`kind` | string | `RDSInstanceClass`
`metadata` | [meta/v1.ObjectMeta](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#objectmeta-v1-meta) | Kubernetes object metadata.
`specTemplate` | [RDSInstanceClassSpecTemplate](#RDSInstanceClassSpecTemplate) | SpecTemplate is a template for the spec of a dynamically provisioned RDSInstance.
## AvailabilityZone
AvailabilityZone contains Availability Zone information. This data type is used as an element in the following data type: * OrderableDBInstanceOption Please also see https://docs.aws.amazon.com/goto/WebAPI/rds-2014-10-31/AvailabilityZone
Appears in:
* [SubnetInRDS](#SubnetInRDS)
Name | Type | Description
-----|------|------------
`name` | string | Name of the Availability Zone.
## CloudwatchLogsExportConfiguration
CloudwatchLogsExportConfiguration is the configuration setting for the log types to be enabled for export to CloudWatch Logs for a specific DB instance or DB cluster. The EnableLogTypes and DisableLogTypes arrays determine which logs will be exported (or not exported) to CloudWatch Logs. The values within these arrays depend on the DB engine being used. For more information, see Publishing Database Logs to Amazon CloudWatch Logs (http://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_LogAccess.html#USER_LogAccess.Procedural.UploadtoCloudWatch) in the Amazon RDS User Guide. Please also see https://docs.aws.amazon.com/goto/WebAPI/rds-2014-10-31/CloudwatchLogsExportConfiguration
Appears in:
* [RDSInstanceParameters](#RDSInstanceParameters)
Name | Type | Description
-----|------|------------
`disableLogTypes` | []string | DisableLogTypes is the list of log types to disable.
`enableLogTypes` | []string | EnableLogTypes is the list of log types to enable.
## DBInstanceStatusInfo
DBInstanceStatusInfo provides a list of status information for a DB instance. Please also see https://docs.aws.amazon.com/goto/WebAPI/rds-2014-10-31/DBInstanceStatusInfo
Appears in:
* [RDSInstanceObservation](#RDSInstanceObservation)
Name | Type | Description
-----|------|------------
`message` | string | Message is the details of the error if there is an error for the instance. If the instance is not in an error state, this value is blank.
`normal` | bool | Normal is true if the instance is operating normally, or false if the instance is in an error state.
`status` | string | Status of the DB instance. For a StatusType of read replica, the values can be replicating, replication stop point set, replication stop point reached, error, stopped, or terminated.
`statusType` | string | StatusType is currently &#34;read replication.&#34;
## DBParameterGroupStatus
DBParameterGroupStatus is the status of the DB parameter group. This data type is used as a response element in the following actions: * CreateDBInstance * CreateDBInstanceReadReplica * DeleteDBInstance * ModifyDBInstance * RebootDBInstance * RestoreDBInstanceFromDBSnapshot Please also see https://docs.aws.amazon.com/goto/WebAPI/rds-2014-10-31/DBParameterGroupStatus
Appears in:
* [RDSInstanceObservation](#RDSInstanceObservation)
Name | Type | Description
-----|------|------------
`dbParameterGroupName` | string | DBParameterGroupName is the name of the DP parameter group.
`parameterApplyStatus` | string | ParameterApplyStatus is the status of parameter updates.
## DBSecurityGroupMembership
DBSecurityGroupMembership is used as a response element in the following actions: * ModifyDBInstance * RebootDBInstance * RestoreDBInstanceFromDBSnapshot * RestoreDBInstanceToPointInTime Please also see https://docs.aws.amazon.com/goto/WebAPI/rds-2014-10-31/DBSecurityGroupMembership
Appears in:
* [RDSInstanceObservation](#RDSInstanceObservation)
Name | Type | Description
-----|------|------------
`dbSecurityGroupName` | string | DBSecurityGroupName is the name of the DB security group.
`status` | string | Status is the status of the DB security group.
## DBSubnetGroupInRDS
DBSubnetGroupInRDS contains the details of an Amazon RDS DB subnet group. This data type is used as a response element in the DescribeDBSubnetGroups action. Please also see https://docs.aws.amazon.com/goto/WebAPI/rds-2014-10-31/DBSubnetGroup
Appears in:
* [RDSInstanceObservation](#RDSInstanceObservation)
Name | Type | Description
-----|------|------------
`dbSubnetGroupArn` | string | DBSubnetGroupARN is the Amazon Resource Name (ARN) for the DB subnet group.
`dbSubnetGroupDescription` | string | DBSubnetGroupDescription provides the description of the DB subnet group.
`dbSubnetGroupName` | string | DBSubnetGroupName is the name of the DB subnet group.
`subnetGroupStatus` | string | SubnetGroupStatus provides the status of the DB subnet group.
`subnets` | [[]SubnetInRDS](#SubnetInRDS) | Subnets contains a list of Subnet elements.
`vpcId` | string | VPCID provides the VPCID of the DB subnet group.
## DBSubnetGroupNameReferencerForRDSInstance
DBSubnetGroupNameReferencerForRDSInstance is an attribute referencer that retrieves the name from a referenced DBSubnetGroup
Appears in:
* [RDSInstanceParameters](#RDSInstanceParameters)
DBSubnetGroupNameReferencerForRDSInstance supports all fields of:
* github.com/crossplaneio/stack-aws/apis/database/v1alpha3.DBSubnetGroupNameReferencer
## DomainMembership
DomainMembership is an Active Directory Domain membership record associated with the DB instance. Please also see https://docs.aws.amazon.com/goto/WebAPI/rds-2014-10-31/DomainMembership
Appears in:
* [RDSInstanceObservation](#RDSInstanceObservation)
Name | Type | Description
-----|------|------------
`domain` | string | Domain is the identifier of the Active Directory Domain.
`fqdn` | string | FQDN us the fully qualified domain name of the Active Directory Domain.
`iamRoleName` | string | IAMRoleName is the name of the IAM role to be used when making API calls to the Directory Service.
`status` | string | Status of the DB instance&#39;s Active Directory Domain membership, such as joined, pending-join, failed etc).
## Endpoint
Endpoint is used as a response element in the following actions: * CreateDBInstance * DescribeDBInstances * DeleteDBInstance Please also see https://docs.aws.amazon.com/goto/WebAPI/rds-2014-10-31/Endpoint
Appears in:
* [RDSInstanceObservation](#RDSInstanceObservation)
Name | Type | Description
-----|------|------------
`address` | string | Address specifies the DNS address of the DB instance.
`hostedZoneId` | string | HostedZoneID specifies the ID that Amazon Route 53 assigns when you create a hosted zone.
`port` | int | Port specifies the port that the database engine is listening on.
## IAMRoleARNReferencerForRDSInstanceMonitoringRole
IAMRoleARNReferencerForRDSInstanceMonitoringRole is an attribute referencer that retrieves an RDSInstance&#39;s MonitoringRoleARN from a referenced IAMRole.
Appears in:
* [RDSInstanceParameters](#RDSInstanceParameters)
IAMRoleARNReferencerForRDSInstanceMonitoringRole supports all fields of:
* github.com/crossplaneio/stack-aws/apis/identity/v1alpha3.IAMRoleARNReferencer
## IAMRoleNameReferencerForRDSInstanceDomainRole
IAMRoleNameReferencerForRDSInstanceDomainRole is an attribute referencer that retrieves an RDSInstance&#39;s DomainRoleName from a referenced IAMRole.
Appears in:
* [RDSInstanceParameters](#RDSInstanceParameters)
IAMRoleNameReferencerForRDSInstanceDomainRole supports all fields of:
* github.com/crossplaneio/stack-aws/apis/identity/v1alpha3.IAMRoleNameReferencer
## OptionGroupMembership
OptionGroupMembership provides information on the option groups the DB instance is a member of. Please also see https://docs.aws.amazon.com/goto/WebAPI/rds-2014-10-31/OptionGroupMembership
Appears in:
* [RDSInstanceObservation](#RDSInstanceObservation)
Name | Type | Description
-----|------|------------
`optionGroupName` | string | OptionGroupName is the name of the option group that the instance belongs to.
`status` | string | Status is the status of the DB instance&#39;s option group membership. Valid values are: in-sync, pending-apply, pending-removal, pending-maintenance-apply, pending-maintenance-removal, applying, removing, and failed.
## PendingCloudwatchLogsExports
PendingCloudwatchLogsExports is a list of the log types whose configuration is still pending. In other words, these log types are in the process of being activated or deactivated. Please also see https://docs.aws.amazon.com/goto/WebAPI/rds-2014-10-31/PendingCloudwatchLogsExports
Appears in:
* [PendingModifiedValues](#PendingModifiedValues)
Name | Type | Description
-----|------|------------
`logTypesToDisable` | []string | LogTypesToDisable is list of log types that are in the process of being enabled. After they are enabled, these log types are exported to CloudWatch Logs.
`logTypesToEnable` | []string | LogTypesToEnable is the log types that are in the process of being deactivated. After they are deactivated, these log types aren&#39;t exported to CloudWatch Logs.
## PendingModifiedValues
PendingModifiedValues is used as a response element in the ModifyDBInstance action. Please also see https://docs.aws.amazon.com/goto/WebAPI/rds-2014-10-31/PendingModifiedValues
Appears in:
* [RDSInstanceObservation](#RDSInstanceObservation)
Name | Type | Description
-----|------|------------
`allocatedStorage` | int | AllocatedStorage contains the new AllocatedStorage size for the DB instance that will be applied or is currently being applied.
`backupRetentionPeriod` | int | BackupRetentionPeriod specifies the pending number of days for which automated backups are retained.
`caCertificateIdentifier` | string | CACertificateIdentifier specifies the identifier of the CA certificate for the DB instance.
`dbInstanceClass` | string | DBInstanceClass contains the new DBInstanceClass for the DB instance that will be applied or is currently being applied.
`dbSubnetGroupName` | string | DBSubnetGroupName is the new DB subnet group for the DB instance.
`engineVersion` | string | EngineVersion indicates the database engine version.
`iops` | int | IOPS specifies the new Provisioned IOPS value for the DB instance that will be applied or is currently being applied.
`licenseModel` | string | LicenseModel is the license model for the DB instance. Valid values: license-included | bring-your-own-license | general-public-license
`multiAZ` | bool | MultiAZ indicates that the Single-AZ DB instance is to change to a Multi-AZ deployment.
`pendingCloudwatchLogsExports` | [PendingCloudwatchLogsExports](#PendingCloudwatchLogsExports) | PendingCloudwatchLogsExports is a list of the log types whose configuration is still pending. In other words, these log types are in the process of being activated or deactivated.
`port` | int | Port specifies the pending port for the DB instance.
`processorFeatures` | [[]ProcessorFeature](#ProcessorFeature) | ProcessorFeatures is the number of CPU cores and the number of threads per core for the DB instance class of the DB instance.
`storageType` | string | StorageType specifies the storage type to be associated with the DB instance.
## ProcessorFeature
ProcessorFeature is a processor feature entry. For more information, see Configuring the Processor of the DB Instance Class (http://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Concepts.DBInstanceClass.html#USER_ConfigureProcessor) in the Amazon RDS User Guide. Please also see https://docs.aws.amazon.com/goto/WebAPI/rds-2014-10-31/ProcessorFeature
Appears in:
* [PendingModifiedValues](#PendingModifiedValues)
* [RDSInstanceParameters](#RDSInstanceParameters)
Name | Type | Description
-----|------|------------
`name` | string | Name of the processor feature. Valid names are coreCount and threadsPerCore.
`value` | string | Value of a processor feature name.
## RDSInstanceClassSpecTemplate
An RDSInstanceClassSpecTemplate is a template for the spec of a dynamically provisioned RDSInstance.
Appears in:
* [RDSInstanceClass](#RDSInstanceClass)
Name | Type | Description
-----|------|------------
`forProvider` | [RDSInstanceParameters](#RDSInstanceParameters) | RDSInstanceParameters define the desired state of an AWS Relational Database Service instance.
RDSInstanceClassSpecTemplate supports all fields of:
* [v1alpha1.ClassSpecTemplate](../crossplane-runtime/core-crossplane-io-v1alpha1.md#classspectemplate)
## RDSInstanceObservation
RDSInstanceObservation is the representation of the current state that is observed.
Appears in:
* [RDSInstanceStatus](#RDSInstanceStatus)
Name | Type | Description
-----|------|------------
`dbInstanceStatus` | string | DBInstanceStatus specifies the current state of this database.
`dbInstanceArn` | string | DBInstanceArn is the Amazon Resource Name (ARN) for the DB instance.
`dbParameterGroups` | [[]DBParameterGroupStatus](#DBParameterGroupStatus) | DBParameterGroups provides the list of DB parameter groups applied to this DB instance.
`dbSecurityGroups` | [[]DBSecurityGroupMembership](#DBSecurityGroupMembership) | DBSecurityGroups provides List of DB security group elements containing only DBSecurityGroup.Name and DBSecurityGroup.Status subelements.
`dbSubnetGroup` | [DBSubnetGroupInRDS](#DBSubnetGroupInRDS) | DBSubnetGroup specifies information on the subnet group associated with the DB instance, including the name, description, and subnets in the subnet group.
`dbInstancePort` | int | DBInstancePort specifies the port that the DB instance listens on. If the DB instance is part of a DB cluster, this can be a different port than the DB cluster port.
`dbResourceId` | string | DBResourceID is the AWS Region-unique, immutable identifier for the DB instance. This identifier is found in AWS CloudTrail log entries whenever the AWS KMS key for the DB instance is accessed.
`domainMemberships` | [[]DomainMembership](#DomainMembership) | DomainMemberships is the Active Directory Domain membership records associated with the DB instance.
`instanceCreateTime` | [meta/v1.Time](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#time-v1-meta) | InstanceCreateTime provides the date and time the DB instance was created.
`endpoint` | [Endpoint](#Endpoint) | Endpoint specifies the connection endpoint.
`enhancedMonitoringResourceArn` | string | EnhancedMonitoringResourceArn is the Amazon Resource Name (ARN) of the Amazon CloudWatch Logs log stream that receives the Enhanced Monitoring metrics data for the DB instance.
`latestRestorableTime` | [meta/v1.Time](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#time-v1-meta) | LatestRestorableTime specifies the latest time to which a database can be restored with point-in-time restore.
`optionGroupMemberships` | [[]OptionGroupMembership](#OptionGroupMembership) | OptionGroupMemberships provides the list of option group memberships for this DB instance.
`pendingModifiedValues` | [PendingModifiedValues](#PendingModifiedValues) | PendingModifiedValues specifies that changes to the DB instance are pending. This element is only included when changes are pending. Specific changes are identified by subelements.
`performanceInsightsEnabled` | bool | PerformanceInsightsEnabled is true if Performance Insights is enabled for the DB instance, and otherwise false.
`readReplicaDBClusterIdentifiers` | []string | ReadReplicaDBClusterIdentifiers contains one or more identifiers of Aurora DB clusters to which the RDS DB instance is replicated as a Read Replica. For example, when you create an Aurora Read Replica of an RDS MySQL DB instance, the Aurora MySQL DB cluster for the Aurora Read Replica is shown. This output does not contain information about cross region Aurora Read Replicas.
`readReplicaDBInstanceIdentifiers` | []string | ReadReplicaDBInstanceIdentifiers contains one or more identifiers of the Read Replicas associated with this DB instance.
`readReplicaSourceDBInstanceIdentifier` | string | ReadReplicaSourceDBInstanceIdentifier contains the identifier of the source DB instance if this DB instance is a Read Replica.
`secondaryAvailabilityZone` | string | SecondaryAvailabilityZone specifies the name of the secondary Availability Zone for a DB instance with multi-AZ support when it is present.
`statusInfos` | [[]DBInstanceStatusInfo](#DBInstanceStatusInfo) | StatusInfos is the status of a Read Replica. If the instance is not a Read Replica, this is blank.
`vpcSecurityGroups` | [[]VPCSecurityGroupMembership](#VPCSecurityGroupMembership) | VPCSecurityGroups provides a list of VPC security group elements that the DB instance belongs to.
## RDSInstanceParameters
RDSInstanceParameters define the desired state of an AWS Relational Database Service instance.
Appears in:
* [RDSInstanceClassSpecTemplate](#RDSInstanceClassSpecTemplate)
* [RDSInstanceSpec](#RDSInstanceSpec)
Name | Type | Description
-----|------|------------
`allocatedStorage` | Optional int | AllocatedStorage is the amount of storage (in gibibytes) to allocate for the DB instance. Type: Integer Amazon Aurora Not applicable. Aurora cluster volumes automatically grow as the amount of data in your database increases, though you are only charged for the space that you use in an Aurora cluster volume. MySQL Constraints to the amount of storage for each storage type are the following: * General Purpose (SSD) storage (gp2): Must be an integer from 20 to 16384. * Provisioned IOPS storage (io1): Must be an integer from 100 to 16384. * Magnetic storage (standard): Must be an integer from 5 to 3072. MariaDB Constraints to the amount of storage for each storage type are the following: * General Purpose (SSD) storage (gp2): Must be an integer from 20 to 16384. * Provisioned IOPS storage (io1): Must be an integer from 100 to 16384. * Magnetic storage (standard): Must be an integer from 5 to 3072. PostgreSQL Constraints to the amount of storage for each storage type are the following: * General Purpose (SSD) storage (gp2): Must be an integer from 20 to 16384. * Provisioned IOPS storage (io1): Must be an integer from 100 to 16384. * Magnetic storage (standard): Must be an integer from 5 to 3072. Oracle Constraints to the amount of storage for each storage type are the following: * General Purpose (SSD) storage (gp2): Must be an integer from 20 to 16384. * Provisioned IOPS storage (io1): Must be an integer from 100 to 16384. * Magnetic storage (standard): Must be an integer from 10 to 3072. SQL Server Constraints to the amount of storage for each storage type are the following: * General Purpose (SSD) storage (gp2): Enterprise and Standard editions: Must be an integer from 200 to 16384. Web and Express editions: Must be an integer from 20 to 16384. * Provisioned IOPS storage (io1): Enterprise and Standard editions: Must be an integer from 200 to 16384. Web and Express editions: Must be an integer from 100 to 16384. * Magnetic storage (standard): Enterprise and Standard editions: Must be an integer from 200 to 1024. Web and Express editions: Must be an integer from 20 to 1024.
`autoMinorVersionUpgrade` | Optional bool | AutoMinorVersionUpgrade indicates that minor engine upgrades are applied automatically to the DB instance during the maintenance window. Default: true
`availabilityZone` | Optional string | AvailabilityZone is the EC2 Availability Zone that the DB instance is created in. For information on AWS Regions and Availability Zones, see Regions and Availability Zones (http://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Concepts.RegionsAndAvailabilityZones.html). Default: A random, system-chosen Availability Zone in the endpoint&#39;s AWS Region. Example: us-east-1d Constraint: The AvailabilityZone parameter can&#39;t be specified if the MultiAZ parameter is set to true. The specified Availability Zone must be in the same AWS Region as the current endpoint.
`backupRetentionPeriod` | Optional int | BackupRetentionPeriod is the number of days for which automated backups are retained. Setting this parameter to a positive number enables backups. Setting this parameter to 0 disables automated backups. Amazon Aurora Not applicable. The retention period for automated backups is managed by the DB cluster. For more information, see CreateDBCluster. Default: 1 Constraints: * Must be a value from 0 to 35 * Cannot be set to 0 if the DB instance is a source to Read Replicas
`caCertificateIdentifier` | Optional string | CACertificateIdentifier indicates the certificate that needs to be associated with the instance.
`characterSetName` | Optional string | CharacterSetName indicates that the DB instance should be associated with the specified CharacterSet for supported engines, Amazon Aurora Not applicable. The character set is managed by the DB cluster. For more information, see CreateDBCluster.
`copyTagsToSnapshot` | Optional bool | CopyTagsToSnapshot should be true to copy all tags from the DB instance to snapshots of the DB instance, and otherwise false. The default is false.
`dbClusterIdentifier` | Optional string | DBClusterIdentifier is the identifier of the DB cluster that the instance will belong to. For information on creating a DB cluster, see CreateDBCluster. Type: String
`dbClusterParameterGroupName` | Optional string | DBClusterParameterGroupName is the name of the DB cluster parameter group to use for the DB cluster.
`dbInstanceClass` | string | DBInstanceClass is the compute and memory capacity of the DB instance, for example, db.m4.large. Not all DB instance classes are available in all AWS Regions, or for all database engines. For the full list of DB instance classes, and availability for your engine, see DB Instance Class (http://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Concepts.DBInstanceClass.html) in the Amazon RDS User Guide.
`dbName` | Optional string | DBName is the meaning of this parameter differs according to the database engine you use. Type: String MySQL The name of the database to create when the DB instance is created. If this parameter is not specified, no database is created in the DB instance. Constraints: * Must contain 1 to 64 letters or numbers. * Cannot be a word reserved by the specified database engine MariaDB The name of the database to create when the DB instance is created. If this parameter is not specified, no database is created in the DB instance. Constraints: * Must contain 1 to 64 letters or numbers. * Cannot be a word reserved by the specified database engine PostgreSQL The name of the database to create when the DB instance is created. If this parameter is not specified, the default &#34;postgres&#34; database is created in the DB instance. Constraints: * Must contain 1 to 63 letters, numbers, or underscores. * Must begin with a letter or an underscore. Subsequent characters can be letters, underscores, or digits (0-9). * Cannot be a word reserved by the specified database engine Oracle The Oracle System ID (SID) of the created DB instance. If you specify null, the default value ORCL is used. You can&#39;t specify the string NULL, or any other reserved word, for DBName. Default: ORCL Constraints: * Cannot be longer than 8 characters SQL Server Not applicable. Must be null. Amazon Aurora The name of the database to create when the primary instance of the DB cluster is created. If this parameter is not specified, no database is created in the DB instance. Constraints: * Must contain 1 to 64 letters or numbers. * Cannot be a word reserved by the specified database engine
`dbSecurityGroups` | Optional []string | DBSecurityGroups is a list of DB security groups to associate with this DB instance. Default: The default DB security group for the database engine.
`dbSubnetGroupName` | Optional string | DBSubnetGroupName is a DB subnet group to associate with this DB instance. If there is no DB subnet group, then it is a non-VPC DB instance.
`dbSubnetGroupNameRef` | Optional [DBSubnetGroupNameReferencerForRDSInstance](#DBSubnetGroupNameReferencerForRDSInstance) | DBSubnetGroupNameRef is a reference to a DBSubnetGroup used to set DBSubnetGroupName.
`deletionProtection` | Optional bool | DeletionProtection indicates if the DB instance should have deletion protection enabled. The database can&#39;t be deleted when this value is set to true. The default is false. For more information, see Deleting a DB Instance (http://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_DeleteInstance.html).
`enableCloudwatchLogsExports` | Optional []string | EnableCloudwatchLogsExports is the list of log types that need to be enabled for exporting to CloudWatch Logs. The values in the list depend on the DB engine being used. For more information, see Publishing Database Logs to Amazon CloudWatch Logs (http://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_LogAccess.html#USER_LogAccess.Procedural.UploadtoCloudWatch) in the Amazon Relational Database Service User Guide.
`enableIAMDatabaseAuthentication` | Optional bool | EnableIAMDatabaseAuthentication should be true to enable mapping of AWS Identity and Access Management (IAM) accounts to database accounts, and otherwise false. You can enable IAM database authentication for the following database engines: Amazon Aurora Not applicable. Mapping AWS IAM accounts to database accounts is managed by the DB cluster. For more information, see CreateDBCluster. MySQL * For MySQL 5.6, minor version 5.6.34 or higher * For MySQL 5.7, minor version 5.7.16 or higher Default: false
`enablePerformanceInsights` | Optional bool | EnablePerformanceInsights should be true to enable Performance Insights for the DB instance, and otherwise false. For more information, see Using Amazon Performance Insights (http://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_PerfInsights.html) in the Amazon Relational Database Service User Guide.
`engine` | string | Engine is the name of the database engine to be used for this instance. Not every database engine is available for every AWS Region. Valid Values: * aurora (for MySQL 5.6-compatible Aurora) * aurora-mysql (for MySQL 5.7-compatible Aurora) * aurora-postgresql * mariadb * mysql * oracle-ee * oracle-se2 * oracle-se1 * oracle-se * postgres * sqlserver-ee * sqlserver-se * sqlserver-ex * sqlserver-web Engine is a required field
`engineVersion` | Optional string | EngineVersion is the version number of the database engine to use. For a list of valid engine versions, call DescribeDBEngineVersions. The following are the database engines and links to information about the major and minor versions that are available with Amazon RDS. Not every database engine is available for every AWS Region. Amazon Aurora Not applicable. The version number of the database engine to be used by the DB instance is managed by the DB cluster. For more information, see CreateDBCluster. MariaDB See MariaDB on Amazon RDS Versions (http://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_MariaDB.html#MariaDB.Concepts.VersionMgmt) in the Amazon RDS User Guide. Microsoft SQL Server See Version and Feature Support on Amazon RDS (http://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_SQLServer.html#SQLServer.Concepts.General.FeatureSupport) in the Amazon RDS User Guide. MySQL See MySQL on Amazon RDS Versions (http://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_MySQL.html#MySQL.Concepts.VersionMgmt) in the Amazon RDS User Guide. Oracle See Oracle Database Engine Release Notes (http://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Appendix.Oracle.PatchComposition.html) in the Amazon RDS User Guide. PostgreSQL See Supported PostgreSQL Database Versions (http://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_PostgreSQL.html#PostgreSQL.Concepts.General.DBVersions) in the Amazon RDS User Guide.
`iops` | Optional int | IOPS is the amount of Provisioned IOPS (input/output operations per second) to be initially allocated for the DB instance. For information about valid IOPS values, see see Amazon RDS Provisioned IOPS Storage to Improve Performance (http://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_Storage.html#USER_PIOPS) in the Amazon RDS User Guide. Constraints: Must be a multiple between 1 and 50 of the storage amount for the DB instance. Must also be an integer multiple of 1000. For example, if the size of your DB instance is 500 GiB, then your IOPS value can be 2000, 3000, 4000, or 5000.
`kmsKeyId` | Optional string | KMSKeyID for an encrypted DB instance. The KMS key identifier is the Amazon Resource Name (ARN) for the KMS encryption key. If you are creating a DB instance with the same AWS account that owns the KMS encryption key used to encrypt the new DB instance, then you can use the KMS key alias instead of the ARN for the KM encryption key. Amazon Aurora Not applicable. The KMS key identifier is managed by the DB cluster. For more information, see CreateDBCluster. If the StorageEncrypted parameter is true, and you do not specify a value for the KMSKeyID parameter, then Amazon RDS will use your default encryption key. AWS KMS creates the default encryption key for your AWS account. Your AWS account has a different default encryption key for each AWS Region.
`licenseModel` | Optional string | LicenseModel information for this DB instance. Valid values: license-included | bring-your-own-license | general-public-license
`masterUserPassword` | Optional string | MasterUserPassword is the password for the master user. The password can include any printable ASCII character except &#34;/&#34;, &#34;&#34;&#34;, or &#34;@&#34;. Amazon Aurora Not applicable. The password for the master user is managed by the DB cluster. For more information, see CreateDBCluster. MariaDB Constraints: Must contain from 8 to 41 characters. Microsoft SQL Server Constraints: Must contain from 8 to 128 characters. MySQL Constraints: Must contain from 8 to 41 characters. Oracle Constraints: Must contain from 8 to 30 characters. PostgreSQL Constraints: Must contain from 8 to 128 characters.
`masterUsername` | Optional string | MasterUsername is the name for the master user. Amazon Aurora Not applicable. The name for the master user is managed by the DB cluster. For more information, see CreateDBCluster. MariaDB Constraints: * Required for MariaDB. * Must be 1 to 16 letters or numbers. * Cannot be a reserved word for the chosen database engine. Microsoft SQL Server Constraints: * Required for SQL Server. * Must be 1 to 128 letters or numbers. * The first character must be a letter. * Cannot be a reserved word for the chosen database engine. MySQL Constraints: * Required for MySQL. * Must be 1 to 16 letters or numbers. * First character must be a letter. * Cannot be a reserved word for the chosen database engine. Oracle Constraints: * Required for Oracle. * Must be 1 to 30 letters or numbers. * First character must be a letter. * Cannot be a reserved word for the chosen database engine. PostgreSQL Constraints: * Required for PostgreSQL. * Must be 1 to 63 letters or numbers. * First character must be a letter. * Cannot be a reserved word for the chosen database engine.
`monitoringInterval` | Optional int | MonitoringInterval is the interval, in seconds, between points when Enhanced Monitoring metrics are collected for the DB instance. To disable collecting Enhanced Monitoring metrics, specify 0. The default is 0. If MonitoringRoleARN is specified, then you must also set MonitoringInterval to a value other than 0. Valid Values: 0, 1, 5, 10, 15, 30, 60
`monitoringRoleArn` | Optional string | MonitoringRoleARN is the ARN for the IAM role that permits RDS to send enhanced monitoring metrics to Amazon CloudWatch Logs. For example, arn:aws:iam:123456789012:role/emaccess. For information on creating a monitoring role, go to Setting Up and Enabling Enhanced Monitoring (http://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_Monitoring.OS.html#USER_Monitoring.OS.Enabling) in the Amazon RDS User Guide. If MonitoringInterval is set to a value other than 0, then you must supply a MonitoringRoleARN value.
`monitoringRoleArnRef` | Optional [IAMRoleARNReferencerForRDSInstanceMonitoringRole](#IAMRoleARNReferencerForRDSInstanceMonitoringRole) | MonitoringRoleARNRef is a reference to an IAMRole used to set MonitoringRoleARN.
`multiAZ` | Optional bool | MultiAZ specifies if the DB instance is a Multi-AZ deployment. You can&#39;t set the AvailabilityZone parameter if the MultiAZ parameter is set to true.
`performanceInsightsKMSKeyId` | Optional string | PerformanceInsightsKMSKeyID is the AWS KMS key identifier for encryption of Performance Insights data. The KMS key ID is the Amazon Resource Name (ARN), KMS key identifier, or the KMS key alias for the KMS encryption key.
`performanceInsightsRetentionPeriod` | Optional int | PerformanceInsightsRetentionPeriod is the amount of time, in days, to retain Performance Insights data. Valid values are 7 or 731 (2 years).
`port` | Optional int | Port number on which the database accepts connections. MySQL Default: 3306 Valid Values: 1150-65535 Type: Integer MariaDB Default: 3306 Valid Values: 1150-65535 Type: Integer PostgreSQL Default: 5432 Valid Values: 1150-65535 Type: Integer Oracle Default: 1521 Valid Values: 1150-65535 SQL Server Default: 1433 Valid Values: 1150-65535 except for 1434, 3389, 47001, 49152, and 49152 through 49156. Amazon Aurora Default: 3306 Valid Values: 1150-65535 Type: Integer
`preferredBackupWindow` | Optional string | PreferredBackupWindow is the daily time range during which automated backups are created if automated backups are enabled, using the BackupRetentionPeriod parameter. For more information, see The Backup Window (http://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_WorkingWithAutomatedBackups.html#USER_WorkingWithAutomatedBackups.BackupWindow) in the Amazon RDS User Guide. Amazon Aurora Not applicable. The daily time range for creating automated backups is managed by the DB cluster. For more information, see CreateDBCluster. The default is a 30-minute window selected at random from an 8-hour block of time for each AWS Region. To see the time blocks available, see Adjusting the Preferred DB Instance Maintenance Window (http://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_UpgradeDBInstance.Maintenance.html#AdjustingTheMaintenanceWindow) in the Amazon RDS User Guide. Constraints: * Must be in the format hh24:mi-hh24:mi. * Must be in Universal Coordinated Time (UTC). * Must not conflict with the preferred maintenance window. * Must be at least 30 minutes.
`preferredMaintenanceWindow` | Optional string | PreferredMaintenanceWindow is the time range each week during which system maintenance can occur, in Universal Coordinated Time (UTC). For more information, see Amazon RDS Maintenance Window (http://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_UpgradeDBInstance.Maintenance.html#Concepts.DBMaintenance). Format: ddd:hh24:mi-ddd:hh24:mi The default is a 30-minute window selected at random from an 8-hour block of time for each AWS Region, occurring on a random day of the week. Valid Days: Mon, Tue, Wed, Thu, Fri, Sat, Sun. Constraints: Minimum 30-minute window.
`processorFeatures` | Optional [[]ProcessorFeature](#ProcessorFeature) | ProcessorFeatures is the number of CPU cores and the number of threads per core for the DB instance class of the DB instance.
`promotionTier` | Optional int | PromotionTier specifies the order in which an Aurora Replica is promoted to the primary instance after a failure of the existing primary instance. For more information, see Fault Tolerance for an Aurora DB Cluster (http://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/Aurora.Managing.Backups.html#Aurora.Managing.FaultTolerance) in the Amazon Aurora User Guide. Default: 1 Valid Values: 0 - 15
`publiclyAccessible` | Optional bool | PubliclyAccessible specifies the accessibility options for the DB instance. A value of true specifies an Internet-facing instance with a publicly resolvable DNS name, which resolves to a public IP address. A value of false specifies an internal instance with a DNS name that resolves to a private IP address. Default: The default behavior varies depending on whether DBSubnetGroupName is specified. If DBSubnetGroupName is not specified, and PubliclyAccessible is not specified, the following applies: * If the default VPC in the target region doesnt have an Internet gateway attached to it, the DB instance is private. * If the default VPC in the target region has an Internet gateway attached to it, the DB instance is public. If DBSubnetGroupName is specified, and PubliclyAccessible is not specified, the following applies: * If the subnets are part of a VPC that doesnt have an Internet gateway attached to it, the DB instance is private. * If the subnets are part of a VPC that has an Internet gateway attached to it, the DB instance is public.
`scalingConfiguration` | Optional [ScalingConfiguration](#ScalingConfiguration) | ScalingConfiguration is the scaling properties of the DB cluster. You can only modify scaling properties for DB clusters in serverless DB engine mode.
`storageEncrypted` | Optional bool | StorageEncrypted specifies whether the DB instance is encrypted. Amazon Aurora Not applicable. The encryption for DB instances is managed by the DB cluster. For more information, see CreateDBCluster. Default: false
`storageType` | Optional string | StorageType specifies the storage type to be associated with the DB instance. Valid values: standard | gp2 | io1 If you specify io1, you must also include a value for the IOPS parameter. Default: io1 if the IOPS parameter is specified, otherwise standard
`tags` | Optional [[]Tag](#Tag) | Tags. For more information, see Tagging Amazon RDS Resources (http://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_Tagging.html) in the Amazon RDS User Guide.
`timezone` | Optional string | Timezone of the DB instance. The time zone parameter is currently supported only by Microsoft SQL Server (http://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_SQLServer.html#SQLServer.Concepts.General.TimeZone).
`vpcSecurityGroupIds` | Optional []string | VPCSecurityGroupIDs is a list of EC2 VPC security groups to associate with this DB instance. Amazon Aurora Not applicable. The associated list of EC2 VPC security groups is managed by the DB cluster. For more information, see CreateDBCluster. Default: The default EC2 VPC security group for the DB subnet group&#39;s VPC.
`vpcSecurityGroupIDRefs` | Optional [[]*github.com/crossplaneio/stack-aws/apis/database/v1beta1.VPCSecurityGroupIDReferencerForRDSInstance](#*github.com/crossplaneio/stack-aws/apis/database/v1beta1.VPCSecurityGroupIDReferencerForRDSInstance) | VPCSecurityGroupIDRefs are references to VPCSecurityGroups used to set the VPCSecurityGroupIDs.
`allowMajorVersionUpgrade` | Optional bool | AllowMajorVersionUpgrade indicates that major version upgrades are allowed. Changing this parameter doesn&#39;t result in an outage and the change is asynchronously applied as soon as possible. Constraints: This parameter must be set to true when specifying a value for the EngineVersion parameter that is a different major version than the DB instance&#39;s current version.
`applyModificationsImmediately` | Optional bool | ApplyModificationsImmediately specifies whether the modifications in this request and any pending modifications are asynchronously applied as soon as possible, regardless of the PreferredMaintenanceWindow setting for the DB instance. If this parameter is set to false, changes to the DB instance are applied during the next maintenance window. Some parameter changes can cause an outage and are applied on the next call to RebootDBInstance, or the next failure reboot. Review the table of parameters in Modifying a DB Instance and Using the Apply Immediately Parameter (http://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Overview.DBInstance.Modifying.html) in the Amazon RDS User Guide. to see the impact that setting ApplyImmediately to true or false has for each modified parameter and to determine when the changes are applied. Default: false
`cloudwatchLogsExportConfiguration` | Optional [CloudwatchLogsExportConfiguration](#CloudwatchLogsExportConfiguration) | CloudwatchLogsExportConfiguration is the configuration setting for the log types to be enabled for export to CloudWatch Logs for a specific DB instance.
`dbParameterGroupName` | Optional string | DBParameterGroupName is the name of the DB parameter group to associate with this DB instance. If this argument is omitted, the default DBParameterGroup for the specified engine is used. Constraints: * Must be 1 to 255 letters, numbers, or hyphens. * First character must be a letter * Cannot end with a hyphen or contain two consecutive hyphens
`domain` | Optional string | Domain specifies the Active Directory Domain to create the instance in.
`domainIAMRoleName` | Optional string | DomainIAMRoleName specifies the name of the IAM role to be used when making API calls to the Directory Service.
`domainIAMRoleNameRef` | Optional [IAMRoleNameReferencerForRDSInstanceDomainRole](#IAMRoleNameReferencerForRDSInstanceDomainRole) | DomainIAMRoleNameRef is a reference to an IAMRole used to set DomainIAMRoleName.
`optionGroupName` | Optional string | OptionGroupName indicates that the DB instance should be associated with the specified option group. Permanent options, such as the TDE option for Oracle Advanced Security TDE, can&#39;t be removed from an option group, and that option group can&#39;t be removed from a DB instance once it is associated with a DB instance
`useDefaultProcessorFeatures` | bool | A value that specifies that the DB instance class of the DB instance uses its default processor features.
`skipFinalSnapshotBeforeDeletion` | bool | Determines whether a final DB snapshot is created before the DB instance is deleted. If true is specified, no DBSnapshot is created. If false is specified, a DB snapshot is created before the DB instance is deleted. Note that when a DB instance is in a failure state and has a status of &#39;failed&#39;, &#39;incompatible-restore&#39;, or &#39;incompatible-network&#39;, it can only be deleted when the SkipFinalSnapshotBeforeDeletion parameter is set to &#34;true&#34;. Specify true when deleting a Read Replica. The FinalDBSnapshotIdentifier parameter must be specified if SkipFinalSnapshotBeforeDeletion is false. Default: false
`finalDBSnapshotIdentifier` | string | The DBSnapshotIdentifier of the new DBSnapshot created when SkipFinalSnapshot is set to false. Specifying this parameter and also setting the SkipFinalShapshot parameter to true results in an error. Constraints: * Must be 1 to 255 letters or numbers. * First character must be a letter * Cannot end with a hyphen or contain two consecutive hyphens * Cannot be specified when deleting a Read Replica.
## RDSInstanceSpec
An RDSInstanceSpec defines the desired state of an RDSInstance.
Appears in:
* [RDSInstance](#RDSInstance)
Name | Type | Description
-----|------|------------
`forProvider` | [RDSInstanceParameters](#RDSInstanceParameters) | RDSInstanceParameters define the desired state of an AWS Relational Database Service instance.
RDSInstanceSpec supports all fields of:
* [v1alpha1.ResourceSpec](../crossplane-runtime/core-crossplane-io-v1alpha1.md#resourcespec)
## RDSInstanceState
RDSInstanceState represents the state of an RDS instance. Alias of string.
## RDSInstanceStatus
An RDSInstanceStatus represents the observed state of an RDSInstance.
Appears in:
* [RDSInstance](#RDSInstance)
Name | Type | Description
-----|------|------------
`atProvider` | [RDSInstanceObservation](#RDSInstanceObservation) | RDSInstanceObservation is the representation of the current state that is observed.
RDSInstanceStatus supports all fields of:
* [v1alpha1.ResourceStatus](../crossplane-runtime/core-crossplane-io-v1alpha1.md#resourcestatus)
## ScalingConfiguration
ScalingConfiguration contains the scaling configuration of an Aurora Serverless DB cluster. For more information, see Using Amazon Aurora Serverless (http://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/aurora-serverless.html) in the Amazon Aurora User Guide. Please also see https://docs.aws.amazon.com/goto/WebAPI/rds-2014-10-31/ScalingConfiguration
Appears in:
* [RDSInstanceParameters](#RDSInstanceParameters)
Name | Type | Description
-----|------|------------
`autoPause` | Optional bool | AutoPause specifies whether to allow or disallow automatic pause for an Aurora DB cluster in serverless DB engine mode. A DB cluster can be paused only when it&#39;s idle (it has no connections). If a DB cluster is paused for more than seven days, the DB cluster might be backed up with a snapshot. In this case, the DB cluster is restored when there is a request to connect to it.
`maxCapacity` | Optional int | MaxCapacity is the maximum capacity for an Aurora DB cluster in serverless DB engine mode. Valid capacity values are 2, 4, 8, 16, 32, 64, 128, and 256. The maximum capacity must be greater than or equal to the minimum capacity.
`minCapacity` | Optional int | MinCapacity is the minimum capacity for an Aurora DB cluster in serverless DB engine mode. Valid capacity values are 2, 4, 8, 16, 32, 64, 128, and 256. The minimum capacity must be less than or equal to the maximum capacity.
`secondsUntilAutoPause` | Optional int | SecondsUntilAutoPause is the time, in seconds, before an Aurora DB cluster in serverless mode is paused.
## SubnetInRDS
SubnetInRDS is used as a response element in the DescribeDBSubnetGroups action. Please also see https://docs.aws.amazon.com/goto/WebAPI/rds-2014-10-31/Subnet
Appears in:
* [DBSubnetGroupInRDS](#DBSubnetGroupInRDS)
Name | Type | Description
-----|------|------------
`subnetAvailabilityZone` | [AvailabilityZone](#AvailabilityZone) | SubnetAvailabilityZone contains Availability Zone information. This data type is used as an element in the following data type: * OrderableDBInstanceOption
`subnetIdentifier` | string | SubnetIdentifier specifies the identifier of the subnet.
`subnetStatus` | string | SubnetStatus specifies the status of the subnet.
## Tag
Tag is a metadata assigned to an Amazon RDS resource consisting of a key-value pair. Please also see https://docs.aws.amazon.com/goto/WebAPI/rds-2014-10-31/Tag
Appears in:
* [RDSInstanceParameters](#RDSInstanceParameters)
Name | Type | Description
-----|------|------------
`key` | string | A key is the required name of the tag. The string value can be from 1 to 128 Unicode characters in length and can&#39;t be prefixed with &#34;aws:&#34; or &#34;rds:&#34;. The string can only contain only the set of Unicode letters, digits, white-space, &#39;_&#39;, &#39;.&#39;, &#39;/&#39;, &#39;=&#39;, &#39;&#43;&#39;, &#39;-&#39; (Java regex: &#34;^([\\p{L}\\p{Z}\\p{N}_.:/=&#43;\\-]*)$&#34;).
`value` | string | A value is the optional value of the tag. The string value can be from 1 to 256 Unicode characters in length and can&#39;t be prefixed with &#34;aws:&#34; or &#34;rds:&#34;. The string can only contain only the set of Unicode letters, digits, white-space, &#39;_&#39;, &#39;.&#39;, &#39;/&#39;, &#39;=&#39;, &#39;&#43;&#39;, &#39;-&#39; (Java regex: &#34;^([\\p{L}\\p{Z}\\p{N}_.:/=&#43;\\-]*)$&#34;).
## VPCSecurityGroupIDReferencerForRDSInstance
VPCSecurityGroupIDReferencerForRDSInstance is an attribute referencer that resolves SecurityGroupID from a referenced SecurityGroup
VPCSecurityGroupIDReferencerForRDSInstance supports all fields of:
* github.com/crossplaneio/stack-aws/apis/network/v1alpha3.SecurityGroupIDReferencer
## VPCSecurityGroupMembership
VPCSecurityGroupMembership is used as a response element for queries on VPC security group membership. Please also see https://docs.aws.amazon.com/goto/WebAPI/rds-2014-10-31/VpcSecurityGroupMembership
Appears in:
* [RDSInstanceObservation](#RDSInstanceObservation)
Name | Type | Description
-----|------|------------
`status` | string | Status is the status of the VPC security group.
`vpcSecurityGroupId` | string | VPCSecurityGroupID is the name of the VPC security group.
This API documentation was generated by `crossdocs`.

View File

@ -0,0 +1,217 @@
# identity.aws.crossplane.io/v1alpha3 API Reference
Package v1alpha3 contains managed resources for AWS identity services such as IAM.
This API group contains the following Crossplane resources:
* [IAMRole](#IAMRole)
* [IAMRolePolicyAttachment](#IAMRolePolicyAttachment)
## IAMRole
An IAMRole is a managed resource that represents an AWS IAM Role.
Name | Type | Description
-----|------|------------
`apiVersion` | string | `identity.aws.crossplane.io/v1alpha3`
`kind` | string | `IAMRole`
`metadata` | [meta/v1.ObjectMeta](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#objectmeta-v1-meta) | Kubernetes object metadata.
`spec` | [IAMRoleSpec](#IAMRoleSpec) | An IAMRoleSpec defines the desired state of an IAMRole.
`status` | [IAMRoleStatus](#IAMRoleStatus) | An IAMRoleStatus represents the observed state of an IAMRole.
## IAMRolePolicyAttachment
An IAMRolePolicyAttachment is a managed resource that represents an AWS IAM Role policy attachment.
Name | Type | Description
-----|------|------------
`apiVersion` | string | `identity.aws.crossplane.io/v1alpha3`
`kind` | string | `IAMRolePolicyAttachment`
`metadata` | [meta/v1.ObjectMeta](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#objectmeta-v1-meta) | Kubernetes object metadata.
`spec` | [IAMRolePolicyAttachmentSpec](#IAMRolePolicyAttachmentSpec) | An IAMRolePolicyAttachmentSpec defines the desired state of an IAMRolePolicyAttachment.
`status` | [IAMRolePolicyAttachmentStatus](#IAMRolePolicyAttachmentStatus) | An IAMRolePolicyAttachmentStatus represents the observed state of an IAMRolePolicyAttachment.
## IAMRoleARNReferencer
IAMRoleARNReferencer is used to get the ARN from a referenced IAMRole object
IAMRoleARNReferencer supports all fields of:
* [core/v1.LocalObjectReference](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#localobjectreference-v1-core)
## IAMRoleExternalStatus
IAMRoleExternalStatus keeps the state for the external resource
Appears in:
* [IAMRoleStatus](#IAMRoleStatus)
Name | Type | Description
-----|------|------------
`arn` | string | ARN is the Amazon Resource Name (ARN) specifying the role. For more information about ARNs and how to use them in policies, see IAM Identifiers (http://docs.aws.amazon.com/IAM/latest/UserGuide/Using_Identifiers.html) in the IAM User Guide guide.
`roleID` | string | RoleID is the stable and unique string identifying the role. For more information about IDs, see IAM Identifiers (http://docs.aws.amazon.com/IAM/latest/UserGuide/Using_Identifiers.html) in the Using IAM guide.
## IAMRoleNameReferencer
IAMRoleNameReferencer is used to get the Name from a referenced IAMRole object
Appears in:
* [IAMRoleNameReferencerForIAMRolePolicyAttachment](#IAMRoleNameReferencerForIAMRolePolicyAttachment)
IAMRoleNameReferencer supports all fields of:
* [core/v1.LocalObjectReference](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#localobjectreference-v1-core)
## IAMRoleNameReferencerForIAMRolePolicyAttachment
IAMRoleNameReferencerForIAMRolePolicyAttachment is an attribute referencer that retrieves Name from a referenced IAMRole
Appears in:
* [IAMRolePolicyAttachmentParameters](#IAMRolePolicyAttachmentParameters)
IAMRoleNameReferencerForIAMRolePolicyAttachment supports all fields of:
* [IAMRoleNameReferencer](#IAMRoleNameReferencer)
## IAMRoleParameters
IAMRoleParameters define the desired state of an AWS IAM Role.
Appears in:
* [IAMRoleSpec](#IAMRoleSpec)
Name | Type | Description
-----|------|------------
`assumeRolePolicyDocument` | string | AssumeRolePolicyDocument is the the trust relationship policy document that grants an entity permission to assume the role.
`description` | Optional string | Description is a description of the role.
`roleName` | string | RoleName presents the name of the IAM role.
## IAMRolePolicyAttachmentExternalStatus
IAMRolePolicyAttachmentExternalStatus keeps the state for the external resource
Appears in:
* [IAMRolePolicyAttachmentStatus](#IAMRolePolicyAttachmentStatus)
Name | Type | Description
-----|------|------------
`attachedPolicyArn` | string | AttachedPolicyARN is the arn for the attached policy. If nil, the policy is not yet attached
## IAMRolePolicyAttachmentParameters
IAMRolePolicyAttachmentParameters define the desired state of an AWS IAM Role policy attachment.
Appears in:
* [IAMRolePolicyAttachmentSpec](#IAMRolePolicyAttachmentSpec)
Name | Type | Description
-----|------|------------
`policyArn` | string | PolicyARN is the Amazon Resource Name (ARN) of the IAM policy you want to attach.
`roleName` | string | RoleName presents the name of the IAM role.
`roleNameRef` | [IAMRoleNameReferencerForIAMRolePolicyAttachment](#IAMRoleNameReferencerForIAMRolePolicyAttachment) | RoleNameRef references to an IAMRole to retrieve its Name
## IAMRolePolicyAttachmentSpec
An IAMRolePolicyAttachmentSpec defines the desired state of an IAMRolePolicyAttachment.
Appears in:
* [IAMRolePolicyAttachment](#IAMRolePolicyAttachment)
IAMRolePolicyAttachmentSpec supports all fields of:
* [v1alpha1.ResourceSpec](../crossplane-runtime/core-crossplane-io-v1alpha1.md#resourcespec)
* [IAMRolePolicyAttachmentParameters](#IAMRolePolicyAttachmentParameters)
## IAMRolePolicyAttachmentStatus
An IAMRolePolicyAttachmentStatus represents the observed state of an IAMRolePolicyAttachment.
Appears in:
* [IAMRolePolicyAttachment](#IAMRolePolicyAttachment)
IAMRolePolicyAttachmentStatus supports all fields of:
* [v1alpha1.ResourceStatus](../crossplane-runtime/core-crossplane-io-v1alpha1.md#resourcestatus)
* [IAMRolePolicyAttachmentExternalStatus](#IAMRolePolicyAttachmentExternalStatus)
## IAMRoleSpec
An IAMRoleSpec defines the desired state of an IAMRole.
Appears in:
* [IAMRole](#IAMRole)
IAMRoleSpec supports all fields of:
* [v1alpha1.ResourceSpec](../crossplane-runtime/core-crossplane-io-v1alpha1.md#resourcespec)
* [IAMRoleParameters](#IAMRoleParameters)
## IAMRoleStatus
An IAMRoleStatus represents the observed state of an IAMRole.
Appears in:
* [IAMRole](#IAMRole)
IAMRoleStatus supports all fields of:
* [v1alpha1.ResourceStatus](../crossplane-runtime/core-crossplane-io-v1alpha1.md#resourcestatus)
* [IAMRoleExternalStatus](#IAMRoleExternalStatus)
This API documentation was generated by `crossdocs`.

View File

@ -0,0 +1,733 @@
# network.aws.crossplane.io/v1alpha3 API Reference
Package v1alpha3 contains managed resources for AWS network services such as VPC and Subnet.
This API group contains the following Crossplane resources:
* [InternetGateway](#InternetGateway)
* [RouteTable](#RouteTable)
* [SecurityGroup](#SecurityGroup)
* [Subnet](#Subnet)
* [VPC](#VPC)
## InternetGateway
An InternetGateway is a managed resource that represents an AWS VPC Internet Gateway.
Name | Type | Description
-----|------|------------
`apiVersion` | string | `network.aws.crossplane.io/v1alpha3`
`kind` | string | `InternetGateway`
`metadata` | [meta/v1.ObjectMeta](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#objectmeta-v1-meta) | Kubernetes object metadata.
`spec` | [InternetGatewaySpec](#InternetGatewaySpec) | An InternetGatewaySpec defines the desired state of an InternetGateway.
`status` | [InternetGatewayStatus](#InternetGatewayStatus) | An InternetGatewayStatus represents the observed state of an InternetGateway.
## RouteTable
A RouteTable is a managed resource that represents an AWS VPC Route Table.
Name | Type | Description
-----|------|------------
`apiVersion` | string | `network.aws.crossplane.io/v1alpha3`
`kind` | string | `RouteTable`
`metadata` | [meta/v1.ObjectMeta](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#objectmeta-v1-meta) | Kubernetes object metadata.
`spec` | [RouteTableSpec](#RouteTableSpec) | A RouteTableSpec defines the desired state of a RouteTable.
`status` | [RouteTableStatus](#RouteTableStatus) | A RouteTableStatus represents the observed state of a RouteTable.
## SecurityGroup
A SecurityGroup is a managed resource that represents an AWS VPC Security Group.
Name | Type | Description
-----|------|------------
`apiVersion` | string | `network.aws.crossplane.io/v1alpha3`
`kind` | string | `SecurityGroup`
`metadata` | [meta/v1.ObjectMeta](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#objectmeta-v1-meta) | Kubernetes object metadata.
`spec` | [SecurityGroupSpec](#SecurityGroupSpec) | A SecurityGroupSpec defines the desired state of a SecurityGroup.
`status` | [SecurityGroupStatus](#SecurityGroupStatus) | A SecurityGroupStatus represents the observed state of a SecurityGroup.
## Subnet
A Subnet is a managed resource that represents an AWS VPC Subnet.
Name | Type | Description
-----|------|------------
`apiVersion` | string | `network.aws.crossplane.io/v1alpha3`
`kind` | string | `Subnet`
`metadata` | [meta/v1.ObjectMeta](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#objectmeta-v1-meta) | Kubernetes object metadata.
`spec` | [SubnetSpec](#SubnetSpec) | A SubnetSpec defines the desired state of a Subnet.
`status` | [SubnetStatus](#SubnetStatus) | A SubnetStatus represents the observed state of a Subnet.
## VPC
A VPC is a managed resource that represents an AWS Virtual Private Cloud.
Name | Type | Description
-----|------|------------
`apiVersion` | string | `network.aws.crossplane.io/v1alpha3`
`kind` | string | `VPC`
`metadata` | [meta/v1.ObjectMeta](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#objectmeta-v1-meta) | Kubernetes object metadata.
`spec` | [VPCSpec](#VPCSpec) | A VPCSpec defines the desired state of a VPC.
`status` | [VPCStatus](#VPCStatus) | A VPCStatus represents the observed state of a VPC.
## Association
Association describes an association between a route table and a subnet.
Appears in:
* [AssociationState](#AssociationState)
* [RouteTableParameters](#RouteTableParameters)
Name | Type | Description
-----|------|------------
`subnetId` | string | The ID of the subnet. A subnet ID is not returned for an implicit association.
`subnetIdRef` | [SubnetIDReferencerForRouteTable](#SubnetIDReferencerForRouteTable) | A referencer to retrieve the ID of a subnet
## AssociationState
AssociationState describes an association state in the route table.
Appears in:
* [RouteTableExternalStatus](#RouteTableExternalStatus)
Name | Type | Description
-----|------|------------
`main` | bool | Indicates whether this is the main route table.
`associationId` | string | The ID of the association between a route table and a subnet.
AssociationState supports all fields of:
* [Association](#Association)
## IPPermission
IPPermission Describes a set of permissions for a security group rule.
Appears in:
* [SecurityGroupParameters](#SecurityGroupParameters)
Name | Type | Description
-----|------|------------
`fromPort` | int64 | The start of port range for the TCP and UDP protocols, or an ICMP/ICMPv6 type number. A value of -1 indicates all ICMP/ICMPv6 types. If you specify all ICMP/ICMPv6 types, you must specify all codes.
`toPort` | int64 | The end of port range for the TCP and UDP protocols, or an ICMP/ICMPv6 code. A value of -1 indicates all ICMP/ICMPv6 codes for the specified ICMP type. If you specify all ICMP/ICMPv6 types, you must specify all codes.
`protocol` | string | The IP protocol name (tcp, udp, icmp) or number (see Protocol Numbers (http://www.iana.org/assignments/protocol-numbers/protocol-numbers.xhtml)). [EC2-VPC only] Use -1 to specify all protocols. When authorizing security group rules, specifying -1 or a protocol number other than tcp, udp, icmp, or 58 (ICMPv6) allows traffic on all ports, regardless of any port range you specify. For tcp, udp, and icmp, you must specify a port range. For 58 (ICMPv6), you can optionally specify a port range; if you don&#39;t, traffic for all types and codes is allowed when authorizing rules.
`cidrBlocks` | [[]IPRange](#IPRange) | One or more IPv4 ranges.
## IPRange
IPRange describes an IPv4 range.
Appears in:
* [IPPermission](#IPPermission)
Name | Type | Description
-----|------|------------
`cidrIp` | string | The IPv4 CIDR range. You can either specify a CIDR range or a source security group, not both. To specify a single IPv4 address, use the /32 prefix length.
`description` | string | A description for the ip range
## InternetGatewayAttachment
InternetGatewayAttachment describes the attachment of a VPC to an internet gateway or an egress-only internet gateway.
Appears in:
* [InternetGatewayExternalStatus](#InternetGatewayExternalStatus)
Name | Type | Description
-----|------|------------
`attachmentStatus` | string | The current state of the attachment. For an internet gateway, the state is available when attached to a VPC; otherwise, this value is not returned.
`vpcId` | string | VPCID is the ID of the attached VPC.
## InternetGatewayExternalStatus
InternetGatewayExternalStatus keeps the state for the external resource
Appears in:
* [InternetGatewayStatus](#InternetGatewayStatus)
Name | Type | Description
-----|------|------------
`attachments` | [[]InternetGatewayAttachment](#InternetGatewayAttachment) | Any VPCs attached to the internet gateway.
`internetGatewayId` | string | The ID of the internet gateway.
`tags` | [[]Tag](#Tag) | Tags represents to current ec2 tags.
## InternetGatewayIDReferencer
InternetGatewayIDReferencer is used to get a InternetGatewayID from a InternetGateway
Appears in:
* [InternetGatewayIDReferencerForRouteTable](#InternetGatewayIDReferencerForRouteTable)
InternetGatewayIDReferencer supports all fields of:
* [core/v1.LocalObjectReference](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#localobjectreference-v1-core)
## InternetGatewayIDReferencerForRouteTable
InternetGatewayIDReferencerForRouteTable is an attribute referencer that resolves VPCID from a referenced VPC
Appears in:
* [Route](#Route)
InternetGatewayIDReferencerForRouteTable supports all fields of:
* [InternetGatewayIDReferencer](#InternetGatewayIDReferencer)
## InternetGatewayParameters
InternetGatewayParameters define the desired state of an AWS VPC Internet Gateway.
Appears in:
* [InternetGatewaySpec](#InternetGatewaySpec)
Name | Type | Description
-----|------|------------
`vpcId` | string | VPCID is the ID of the VPC.
`vpcIdRef` | [VPCIDReferencerForInternetGateway](#VPCIDReferencerForInternetGateway) | VPCIDRef references to a VPC to and retrieves its vpcId
## InternetGatewaySpec
An InternetGatewaySpec defines the desired state of an InternetGateway.
Appears in:
* [InternetGateway](#InternetGateway)
InternetGatewaySpec supports all fields of:
* [v1alpha1.ResourceSpec](../crossplane-runtime/core-crossplane-io-v1alpha1.md#resourcespec)
* [InternetGatewayParameters](#InternetGatewayParameters)
## InternetGatewayStatus
An InternetGatewayStatus represents the observed state of an InternetGateway.
Appears in:
* [InternetGateway](#InternetGateway)
InternetGatewayStatus supports all fields of:
* [v1alpha1.ResourceStatus](../crossplane-runtime/core-crossplane-io-v1alpha1.md#resourcestatus)
* [InternetGatewayExternalStatus](#InternetGatewayExternalStatus)
## Route
Route describes a route in a route table.
Appears in:
* [RouteState](#RouteState)
* [RouteTableParameters](#RouteTableParameters)
Name | Type | Description
-----|------|------------
`destinationCidrBlock` | string | The IPv4 CIDR address block used for the destination match. Routing decisions are based on the most specific match.
`gatewayId` | string | The ID of an internet gateway or virtual private gateway attached to your VPC.
`gatewayIdRef` | [InternetGatewayIDReferencerForRouteTable](#InternetGatewayIDReferencerForRouteTable) | A referencer to retrieve the ID of a gateway
## RouteState
RouteState describes a route state in the route table.
Appears in:
* [RouteTableExternalStatus](#RouteTableExternalStatus)
Name | Type | Description
-----|------|------------
`routeState` | string | The state of the route. The blackhole state indicates that the route&#39;s target isn&#39;t available (for example, the specified gateway isn&#39;t attached to the VPC, or the specified NAT instance has been terminated).
RouteState supports all fields of:
* [Route](#Route)
## RouteTableExternalStatus
RouteTableExternalStatus keeps the state for the external resource
Appears in:
* [RouteTableStatus](#RouteTableStatus)
Name | Type | Description
-----|------|------------
`routeTableId` | string | RouteTableID is the ID of the RouteTable.
`routes` | [[]RouteState](#RouteState) | The actual routes created for the route table.
`associations` | [[]AssociationState](#AssociationState) | The actual associations created for the route table.
## RouteTableParameters
RouteTableParameters define the desired state of an AWS VPC Route Table.
Appears in:
* [RouteTableSpec](#RouteTableSpec)
Name | Type | Description
-----|------|------------
`vpcId` | string | VPCID is the ID of the VPC.
`vpcIdRef` | [VPCIDReferencerForRouteTable](#VPCIDReferencerForRouteTable) | VPCIDRef references to a VPC to and retrieves its vpcId
`routes` | [[]Route](#Route) | the routes in the route table
`associations` | [[]Association](#Association) | The associations between the route table and one or more subnets.
## RouteTableSpec
A RouteTableSpec defines the desired state of a RouteTable.
Appears in:
* [RouteTable](#RouteTable)
RouteTableSpec supports all fields of:
* [v1alpha1.ResourceSpec](../crossplane-runtime/core-crossplane-io-v1alpha1.md#resourcespec)
* [RouteTableParameters](#RouteTableParameters)
## RouteTableStatus
A RouteTableStatus represents the observed state of a RouteTable.
Appears in:
* [RouteTable](#RouteTable)
RouteTableStatus supports all fields of:
* [v1alpha1.ResourceStatus](../crossplane-runtime/core-crossplane-io-v1alpha1.md#resourcestatus)
* [RouteTableExternalStatus](#RouteTableExternalStatus)
## SecurityGroupExternalStatus
SecurityGroupExternalStatus keeps the state for the external resource
Appears in:
* [SecurityGroupStatus](#SecurityGroupStatus)
Name | Type | Description
-----|------|------------
`securityGroupID` | string | SecurityGroupID is the ID of the SecurityGroup.
`tags` | [[]Tag](#Tag) | Tags represents to current ec2 tags.
## SecurityGroupIDReferencer
SecurityGroupIDReferencer is used to get the ID from another SecurityGroup
SecurityGroupIDReferencer supports all fields of:
* [core/v1.LocalObjectReference](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#localobjectreference-v1-core)
## SecurityGroupParameters
SecurityGroupParameters define the desired state of an AWS VPC Security Group.
Appears in:
* [SecurityGroupSpec](#SecurityGroupSpec)
Name | Type | Description
-----|------|------------
`vpcId` | string | VPCID is the ID of the VPC.
`vpcIdRef` | [VPCIDReferencerForSecurityGroup](#VPCIDReferencerForSecurityGroup) | VPCIDRef references to a VPC to and retrieves its vpcId
`description` | string | A description of the security group.
`groupName` | string | The name of the security group.
`ingress` | [[]IPPermission](#IPPermission) | One or more inbound rules associated with the security group.
`egress` | [[]IPPermission](#IPPermission) | [EC2-VPC] One or more outbound rules associated with the security group.
## SecurityGroupSpec
A SecurityGroupSpec defines the desired state of a SecurityGroup.
Appears in:
* [SecurityGroup](#SecurityGroup)
SecurityGroupSpec supports all fields of:
* [v1alpha1.ResourceSpec](../crossplane-runtime/core-crossplane-io-v1alpha1.md#resourcespec)
* [SecurityGroupParameters](#SecurityGroupParameters)
## SecurityGroupStatus
A SecurityGroupStatus represents the observed state of a SecurityGroup.
Appears in:
* [SecurityGroup](#SecurityGroup)
SecurityGroupStatus supports all fields of:
* [v1alpha1.ResourceStatus](../crossplane-runtime/core-crossplane-io-v1alpha1.md#resourcestatus)
* [SecurityGroupExternalStatus](#SecurityGroupExternalStatus)
## SubnetExternalStatus
SubnetExternalStatus keeps the state for the external resource
Appears in:
* [SubnetStatus](#SubnetStatus)
Name | Type | Description
-----|------|------------
`subnetState` | string | SubnetState is the current state of the Subnet.
`tags` | [[]Tag](#Tag) | Tags represents to current ec2 tags.
`subnetId` | string | SubnetID is the ID of the Subnet.
## SubnetIDReferencer
SubnetIDReferencer is used to get a SubnetID from another Subnet
Appears in:
* [SubnetIDReferencerForRouteTable](#SubnetIDReferencerForRouteTable)
SubnetIDReferencer supports all fields of:
* [core/v1.LocalObjectReference](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#localobjectreference-v1-core)
## SubnetIDReferencerForRouteTable
SubnetIDReferencerForRouteTable is an attribute referencer that resolves SubnetID from a referenced Subnet
Appears in:
* [Association](#Association)
SubnetIDReferencerForRouteTable supports all fields of:
* [SubnetIDReferencer](#SubnetIDReferencer)
## SubnetParameters
SubnetParameters define the desired state of an AWS VPC Subnet.
Appears in:
* [SubnetSpec](#SubnetSpec)
Name | Type | Description
-----|------|------------
`cidrBlock` | string | CIDRBlock is the IPv4 network range for the Subnet, in CIDR notation. For example, 10.0.0.0/18.
`availabilityZone` | string | The Availability Zone for the subnet. Default: AWS selects one for you. If you create more than one subnet in your VPC, we may not necessarily select a different zone for each subnet.
`vpcId` | string | VPCID is the ID of the VPC.
`vpcIdRef` | [VPCIDReferencerForSubnet](#VPCIDReferencerForSubnet) | VPCIDRef references to a VPC to and retrieves its vpcId
## SubnetSpec
A SubnetSpec defines the desired state of a Subnet.
Appears in:
* [Subnet](#Subnet)
SubnetSpec supports all fields of:
* [v1alpha1.ResourceSpec](../crossplane-runtime/core-crossplane-io-v1alpha1.md#resourcespec)
* [SubnetParameters](#SubnetParameters)
## SubnetStatus
A SubnetStatus represents the observed state of a Subnet.
Appears in:
* [Subnet](#Subnet)
SubnetStatus supports all fields of:
* [v1alpha1.ResourceStatus](../crossplane-runtime/core-crossplane-io-v1alpha1.md#resourcestatus)
* [SubnetExternalStatus](#SubnetExternalStatus)
## Tag
Tag defines a tag
Appears in:
* [InternetGatewayExternalStatus](#InternetGatewayExternalStatus)
* [SecurityGroupExternalStatus](#SecurityGroupExternalStatus)
* [SubnetExternalStatus](#SubnetExternalStatus)
* [VPCExternalStatus](#VPCExternalStatus)
Name | Type | Description
-----|------|------------
`key` | string | Key is the name of the tag.
`value` | string | Value is the value of the tag.
## VPCExternalStatus
VPCExternalStatus keeps the state for the external resource
Appears in:
* [VPCStatus](#VPCStatus)
Name | Type | Description
-----|------|------------
`vpcState` | string | VPCState is the current state of the VPC.
`tags` | [[]Tag](#Tag) | Tags represents to current ec2 tags.
`vpcId` | string | VPCID is the ID of the VPC.
## VPCIDReferencer
VPCIDReferencer is used to get a VPCID from another VPC
Appears in:
* [VPCIDReferencerForInternetGateway](#VPCIDReferencerForInternetGateway)
* [VPCIDReferencerForRouteTable](#VPCIDReferencerForRouteTable)
* [VPCIDReferencerForSecurityGroup](#VPCIDReferencerForSecurityGroup)
* [VPCIDReferencerForSubnet](#VPCIDReferencerForSubnet)
VPCIDReferencer supports all fields of:
* [core/v1.LocalObjectReference](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#localobjectreference-v1-core)
## VPCIDReferencerForInternetGateway
VPCIDReferencerForInternetGateway is an attribute referencer that resolves VPCID from a referenced VPC
Appears in:
* [InternetGatewayParameters](#InternetGatewayParameters)
VPCIDReferencerForInternetGateway supports all fields of:
* [VPCIDReferencer](#VPCIDReferencer)
## VPCIDReferencerForRouteTable
VPCIDReferencerForRouteTable is an attribute referencer that resolves VPCID from a referenced VPC
Appears in:
* [RouteTableParameters](#RouteTableParameters)
VPCIDReferencerForRouteTable supports all fields of:
* [VPCIDReferencer](#VPCIDReferencer)
## VPCIDReferencerForSecurityGroup
VPCIDReferencerForSecurityGroup is an attribute referencer that resolves VPCID from a referenced VPC
Appears in:
* [SecurityGroupParameters](#SecurityGroupParameters)
VPCIDReferencerForSecurityGroup supports all fields of:
* [VPCIDReferencer](#VPCIDReferencer)
## VPCIDReferencerForSubnet
VPCIDReferencerForSubnet is an attribute referencer that resolves VPCID from a referenced VPC
Appears in:
* [SubnetParameters](#SubnetParameters)
VPCIDReferencerForSubnet supports all fields of:
* [VPCIDReferencer](#VPCIDReferencer)
## VPCParameters
VPCParameters define the desired state of an AWS Virtual Private Cloud.
Appears in:
* [VPCSpec](#VPCSpec)
Name | Type | Description
-----|------|------------
`cidrBlock` | string | CIDRBlock is the IPv4 network range for the VPC, in CIDR notation. For example, 10.0.0.0/16.
`enableDnsSupport` | bool | A boolean flag to enable/disable DNS support in the VPC
`enableDnsHostNames` | bool | A boolean flag to enable/disable DNS hostnames in the VPC
## VPCSpec
A VPCSpec defines the desired state of a VPC.
Appears in:
* [VPC](#VPC)
VPCSpec supports all fields of:
* [v1alpha1.ResourceSpec](../crossplane-runtime/core-crossplane-io-v1alpha1.md#resourcespec)
* [VPCParameters](#VPCParameters)
## VPCStatus
A VPCStatus represents the observed state of a VPC.
Appears in:
* [VPC](#VPC)
VPCStatus supports all fields of:
* [v1alpha1.ResourceStatus](../crossplane-runtime/core-crossplane-io-v1alpha1.md#resourcestatus)
* [VPCExternalStatus](#VPCExternalStatus)
This API documentation was generated by `crossdocs`.

View File

@ -0,0 +1,115 @@
# storage.aws.crossplane.io/v1alpha3 API Reference
Package v1alpha3 contains managed resources for AWS storage services such as S3.
This API group contains the following Crossplane resources:
* [S3Bucket](#S3Bucket)
* [S3BucketClass](#S3BucketClass)
## S3Bucket
An S3Bucket is a managed resource that represents an AWS S3 Bucket.
Name | Type | Description
-----|------|------------
`apiVersion` | string | `storage.aws.crossplane.io/v1alpha3`
`kind` | string | `S3Bucket`
`metadata` | [meta/v1.ObjectMeta](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#objectmeta-v1-meta) | Kubernetes object metadata.
`spec` | [S3BucketSpec](#S3BucketSpec) | S3BucketSpec defines the desired state of S3Bucket
`status` | [S3BucketStatus](#S3BucketStatus) | S3BucketStatus defines the observed state of S3Bucket
## S3BucketClass
An S3BucketClass is a resource class. It defines the desired spec of resource claims that use it to dynamically provision a managed resource.
Name | Type | Description
-----|------|------------
`apiVersion` | string | `storage.aws.crossplane.io/v1alpha3`
`kind` | string | `S3BucketClass`
`metadata` | [meta/v1.ObjectMeta](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#objectmeta-v1-meta) | Kubernetes object metadata.
`specTemplate` | [S3BucketClassSpecTemplate](#S3BucketClassSpecTemplate) | SpecTemplate is a template for the spec of a dynamically provisioned S3Bucket.
## S3BucketClassSpecTemplate
An S3BucketClassSpecTemplate is a template for the spec of a dynamically provisioned S3Bucket.
Appears in:
* [S3BucketClass](#S3BucketClass)
S3BucketClassSpecTemplate supports all fields of:
* [v1alpha1.ClassSpecTemplate](../crossplane-runtime/core-crossplane-io-v1alpha1.md#classspectemplate)
* [S3BucketParameters](#S3BucketParameters)
## S3BucketParameters
S3BucketParameters define the desired state of an AWS S3 Bucket.
Appears in:
* [S3BucketClassSpecTemplate](#S3BucketClassSpecTemplate)
* [S3BucketSpec](#S3BucketSpec)
Name | Type | Description
-----|------|------------
`nameFormat` | Optional string | NameFormat specifies the name of the external S3Bucket instance. The first instance of the string &#39;%s&#39; will be replaced with the Kubernetes UID of this S3Bucket. Omit this field to use the UID alone as the name.
`region` | string | Region of the bucket.
`cannedACL` | Optional [s3.BucketCannedACL](https://godoc.org/github.com/aws/aws-sdk-go-v2/service/s3#BucketCannedACL) | CannedACL applies a standard AWS built-in ACL for common bucket use cases.
`versioning` | Optional bool | Versioning enables versioning of objects stored in this bucket.
`localPermission` | [storage/v1alpha1.LocalPermissionType](../crossplane/storage-crossplane-io-v1alpha1.md#localpermissiontype) | LocalPermission is the permissions granted on the bucket for the provider specific bucket service account that is available in a secret after provisioning.
## S3BucketSpec
S3BucketSpec defines the desired state of S3Bucket
Appears in:
* [S3Bucket](#S3Bucket)
S3BucketSpec supports all fields of:
* [v1alpha1.ResourceSpec](../crossplane-runtime/core-crossplane-io-v1alpha1.md#resourcespec)
* [S3BucketParameters](#S3BucketParameters)
## S3BucketStatus
S3BucketStatus defines the observed state of S3Bucket
Appears in:
* [S3Bucket](#S3Bucket)
Name | Type | Description
-----|------|------------
`providerID` | string | ProviderID is the AWS identifier for this bucket.
`iamUsername` | string | IAMUsername is the name of an IAM user that is automatically created and granted access to this bucket by Crossplane at bucket creation time.
`lastUserPolicyVersion` | int | LastUserPolicyVersion is the most recent version of the policy associated with this bucket&#39;s IAMUser.
`lastLocalPermission` | [storage/v1alpha1.LocalPermissionType](../crossplane/storage-crossplane-io-v1alpha1.md#localpermissiontype) | LastLocalPermission is the most recent local permission that was set for this bucket.
S3BucketStatus supports all fields of:
* [v1alpha1.ResourceStatus](../crossplane-runtime/core-crossplane-io-v1alpha1.md#resourcestatus)
This API documentation was generated by `crossdocs`.

View File

@ -0,0 +1,105 @@
# azure.crossplane.io/v1alpha3 API Reference
Package v1alpha3 contains core resources for Microsoft Azure.
This API group contains the following Crossplane resources:
* [Provider](#Provider)
* [ResourceGroup](#ResourceGroup)
## Provider
A Provider configures an Azure &#39;provider&#39;, i.e. a connection to a particular Azure account using a particular Azure Service Principal.
Name | Type | Description
-----|------|------------
`apiVersion` | string | `azure.crossplane.io/v1alpha3`
`kind` | string | `Provider`
`metadata` | [meta/v1.ObjectMeta](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#objectmeta-v1-meta) | Kubernetes object metadata.
`spec` | [ProviderSpec](#ProviderSpec) | A ProviderSpec defines the desired state of a Provider.
## ResourceGroup
A ResourceGroup is a managed resource that represents an Azure Resource Group.
Name | Type | Description
-----|------|------------
`apiVersion` | string | `azure.crossplane.io/v1alpha3`
`kind` | string | `ResourceGroup`
`metadata` | [meta/v1.ObjectMeta](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#objectmeta-v1-meta) | Kubernetes object metadata.
`spec` | [ResourceGroupSpec](#ResourceGroupSpec) | A ResourceGroupSpec defines the desired state of a ResourceGroup.
`status` | [ResourceGroupStatus](#ResourceGroupStatus) | A ResourceGroupStatus represents the observed status of a ResourceGroup.
## ProviderSpec
A ProviderSpec defines the desired state of a Provider.
Appears in:
* [Provider](#Provider)
Name | Type | Description
-----|------|------------
`credentialsSecretRef` | [v1alpha1.SecretKeySelector](../crossplane-runtime/core-crossplane-io-v1alpha1.md#secretkeyselector) | Azure service principal credentials json secret key reference A Secret containing JSON encoded credentials for an Azure Service Principal that will be used to authenticate to this Azure Provider.
## ResourceGroupNameReferencer
ResourceGroupNameReferencer is used to get the name from another ResourceGroup
ResourceGroupNameReferencer supports all fields of:
* [core/v1.LocalObjectReference](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#localobjectreference-v1-core)
## ResourceGroupSpec
A ResourceGroupSpec defines the desired state of a ResourceGroup.
Appears in:
* [ResourceGroup](#ResourceGroup)
Name | Type | Description
-----|------|------------
`name` | string | Name of the resource group.
`location` | string | Location of the resource group. See the official list of valid regions - https://azure.microsoft.com/en-us/global-infrastructure/regions/
ResourceGroupSpec supports all fields of:
* [v1alpha1.ResourceSpec](../crossplane-runtime/core-crossplane-io-v1alpha1.md#resourcespec)
## ResourceGroupStatus
A ResourceGroupStatus represents the observed status of a ResourceGroup.
Appears in:
* [ResourceGroup](#ResourceGroup)
Name | Type | Description
-----|------|------------
`name` | string | Name of the resource group.
ResourceGroupStatus supports all fields of:
* [v1alpha1.ResourceStatus](../crossplane-runtime/core-crossplane-io-v1alpha1.md#resourcestatus)
This API documentation was generated by `crossdocs`.

View File

@ -0,0 +1,138 @@
# cache.azure.crossplane.io/v1alpha3 API Reference
Package v1alpha3 contains managed resources for Azure cache services such as Redis.
This API group contains the following Crossplane resources:
* [Redis](#Redis)
* [RedisClass](#RedisClass)
## Redis
A Redis is a managed resource that represents an Azure Redis cluster.
Name | Type | Description
-----|------|------------
`apiVersion` | string | `cache.azure.crossplane.io/v1alpha3`
`kind` | string | `Redis`
`metadata` | [meta/v1.ObjectMeta](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#objectmeta-v1-meta) | Kubernetes object metadata.
`spec` | [RedisSpec](#RedisSpec) | A RedisSpec defines the desired state of a Redis.
`status` | [RedisStatus](#RedisStatus) | A RedisStatus represents the observed state of a Redis.
## RedisClass
A RedisClass is a non-portable resource class. It defines the desired spec of resource claims that use it to dynamically provision a managed resource.
Name | Type | Description
-----|------|------------
`apiVersion` | string | `cache.azure.crossplane.io/v1alpha3`
`kind` | string | `RedisClass`
`metadata` | [meta/v1.ObjectMeta](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#objectmeta-v1-meta) | Kubernetes object metadata.
`specTemplate` | [RedisClassSpecTemplate](#RedisClassSpecTemplate) | SpecTemplate is a template for the spec of a dynamically provisioned Redis.
## RedisClassSpecTemplate
A RedisClassSpecTemplate is a template for the spec of a dynamically provisioned Redis.
Appears in:
* [RedisClass](#RedisClass)
RedisClassSpecTemplate supports all fields of:
* [v1alpha1.ClassSpecTemplate](../crossplane-runtime/core-crossplane-io-v1alpha1.md#classspectemplate)
* [RedisParameters](#RedisParameters)
## RedisParameters
RedisParameters define the desired state of an Azure Redis cluster. Most fields map directly to an Azure Redis resource: https://docs.microsoft.com/en-us/rest/api/redis/redis/create#redisresource
Appears in:
* [RedisClassSpecTemplate](#RedisClassSpecTemplate)
* [RedisSpec](#RedisSpec)
Name | Type | Description
-----|------|------------
`resourceGroupName` | string | ResourceGroupName in which to create this resource.
`location` | string | Location in which to create this resource.
`sku` | [SKUSpec](#SKUSpec) | SKU of the Redis cache to deploy.
`enableNonSslPort` | Optional bool | EnableNonSSLPort specifies whether the non-ssl Redis server port (6379) is enabled.
`shardCount` | Optional int | ShardCount specifies the number of shards to be created on a Premium Cluster Cache.
`staticIP` | Optional string | StaticIP address. Required when deploying a Redis cache inside an existing Azure Virtual Network.
`subnetId` | Optional string | SubnetID specifies the full resource ID of a subnet in a virtual network to deploy the Redis cache in. Example format: /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/Microsoft.{Network|ClassicNetwork}/VirtualNetworks/vnet1/subnets/subnet1
`redisConfiguration` | Optional map[string]string | RedisConfiguration specifies Redis Settings.
## RedisSpec
A RedisSpec defines the desired state of a Redis.
Appears in:
* [Redis](#Redis)
RedisSpec supports all fields of:
* [v1alpha1.ResourceSpec](../crossplane-runtime/core-crossplane-io-v1alpha1.md#resourcespec)
* [RedisParameters](#RedisParameters)
## RedisStatus
A RedisStatus represents the observed state of a Redis.
Appears in:
* [Redis](#Redis)
Name | Type | Description
-----|------|------------
`state` | string | State represents the state of an Azure Redis.
`providerID` | string | ProviderID is the external ID to identify this resource in the cloud provider.
`endpoint` | string | Endpoint of the Redis resource used in connection strings.
`port` | int | Port at which the Redis endpoint is listening.
`sslPort` | int | SSLPort at which the Redis endpoint is listening.
`redisVersion` | string | RedisVersion the Redis endpoint is running.
`resourceName` | string | ResourceName of the Redis cache resource.
RedisStatus supports all fields of:
* [v1alpha1.ResourceStatus](../crossplane-runtime/core-crossplane-io-v1alpha1.md#resourcestatus)
## SKUSpec
An SKUSpec represents the performance and cost oriented properties of a Redis.
Appears in:
* [RedisParameters](#RedisParameters)
Name | Type | Description
-----|------|------------
`name` | string | Name specifies what type of Redis cache to deploy. Valid values: (Basic, Standard, Premium). Possible values include: &#39;Basic&#39;, &#39;Standard&#39;, &#39;Premium&#39;
`family` | string | Family specifies which family to use. Valid values: (C, P). Possible values include: &#39;C&#39;, &#39;P&#39;
`capacity` | int | Capacity specifies the size of Redis cache to deploy. Valid values: for C family (0, 1, 2, 3, 4, 5, 6), for P family (1, 2, 3, 4).
This API documentation was generated by `crossdocs`.

View File

@ -0,0 +1,156 @@
# compute.azure.crossplane.io/v1alpha3 API Reference
Package v1alpha3 contains managed resources for Azure compute services such as AKS.
This API group contains the following Crossplane resources:
* [AKSCluster](#AKSCluster)
* [AKSClusterClass](#AKSClusterClass)
## AKSCluster
An AKSCluster is a managed resource that represents an Azure Kubernetes Engine cluster.
Name | Type | Description
-----|------|------------
`apiVersion` | string | `compute.azure.crossplane.io/v1alpha3`
`kind` | string | `AKSCluster`
`metadata` | [meta/v1.ObjectMeta](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#objectmeta-v1-meta) | Kubernetes object metadata.
`spec` | [AKSClusterSpec](#AKSClusterSpec) | An AKSClusterSpec defines the desired state of a AKSCluster.
`status` | [AKSClusterStatus](#AKSClusterStatus) | An AKSClusterStatus represents the observed state of an AKSCluster.
## AKSClusterClass
An AKSClusterClass is a non-portable resource class. It defines the desired spec of resource claims that use it to dynamically provision a managed resource.
Name | Type | Description
-----|------|------------
`apiVersion` | string | `compute.azure.crossplane.io/v1alpha3`
`kind` | string | `AKSClusterClass`
`metadata` | [meta/v1.ObjectMeta](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#objectmeta-v1-meta) | Kubernetes object metadata.
`specTemplate` | [AKSClusterClassSpecTemplate](#AKSClusterClassSpecTemplate) | SpecTemplate is a template for the spec of a dynamically provisioned AKSCluster.
## AKSClusterClassSpecTemplate
An AKSClusterClassSpecTemplate is a template for the spec of a dynamically provisioned AKSCluster.
Appears in:
* [AKSClusterClass](#AKSClusterClass)
AKSClusterClassSpecTemplate supports all fields of:
* [v1alpha1.ClassSpecTemplate](../crossplane-runtime/core-crossplane-io-v1alpha1.md#classspectemplate)
* [AKSClusterParameters](#AKSClusterParameters)
## AKSClusterParameters
AKSClusterParameters define the desired state of an Azure Kubernetes Engine cluster.
Appears in:
* [AKSClusterClassSpecTemplate](#AKSClusterClassSpecTemplate)
* [AKSClusterSpec](#AKSClusterSpec)
Name | Type | Description
-----|------|------------
`resourceGroupName` | string | ResourceGroupName is the name of the resource group that the cluster will be created in
`resourceGroupNameRef` | [ResourceGroupNameReferencerForAKSCluster](#ResourceGroupNameReferencerForAKSCluster) | ResourceGroupNameRef - A reference to a ResourceGroup object to retrieve its name
`location` | string | Location is the Azure location that the cluster will be created in
`version` | string | Version is the Kubernetes version that will be deployed to the cluster
`vnetSubnetID` | Optional string | VnetSubnetID is the subnet to which the cluster will be deployed.
`vnetSubnetIDRef` | [SubnetIDReferencerForAKSCluster](#SubnetIDReferencerForAKSCluster) | ResourceGroupNameRef - A reference to a VnetSubnet object to retrieve its ID
`nodeCount` | Optional int | NodeCount is the number of nodes that the cluster will initially be created with. This can be scaled over time and defaults to 1.
`nodeVMSize` | Optional string | NodeVMSize is the name of the worker node VM size, e.g., Standard_B2s, Standard_F2s_v2, etc.
`dnsNamePrefix` | Optional string | DNSNamePrefix is the DNS name prefix to use with the hosted Kubernetes API server FQDN. You will use this to connect to the Kubernetes API when managing containers after creating the cluster.
`disableRBAC` | Optional bool | DisableRBAC determines whether RBAC will be disabled or enabled in the cluster.
`writeServicePrincipalTo` | [v1alpha1.SecretReference](../crossplane-runtime/core-crossplane-io-v1alpha1.md#secretreference) | WriteServicePrincipalSecretTo the specified Secret. The service principal is automatically generated and used by the AKS cluster to interact with other Azure resources.
## AKSClusterSpec
An AKSClusterSpec defines the desired state of a AKSCluster.
Appears in:
* [AKSCluster](#AKSCluster)
AKSClusterSpec supports all fields of:
* [v1alpha1.ResourceSpec](../crossplane-runtime/core-crossplane-io-v1alpha1.md#resourcespec)
* [AKSClusterParameters](#AKSClusterParameters)
## AKSClusterStatus
An AKSClusterStatus represents the observed state of an AKSCluster.
Appears in:
* [AKSCluster](#AKSCluster)
Name | Type | Description
-----|------|------------
`clusterName` | string | ClusterName is the name of the cluster as registered with the cloud provider.
`state` | string | State is the current state of the cluster.
`providerID` | string | ProviderID is the external ID to identify this resource in the cloud provider.
`endpoint` | string | Endpoint is the endpoint where the cluster can be reached
`appObjectID` | string | ApplicationObjectID is the object ID of the AD application the cluster uses for Azure APIs.
`servicePrincipalID` | string | ServicePrincipalID is the ID of the service principal the AD application uses.
`runningOperation` | string | RunningOperation stores any current long running operation for this instance across reconciliation attempts.
AKSClusterStatus supports all fields of:
* [v1alpha1.ResourceStatus](../crossplane-runtime/core-crossplane-io-v1alpha1.md#resourcestatus)
## ResourceGroupNameReferencerForAKSCluster
ResourceGroupNameReferencerForAKSCluster is an attribute referencer that resolves name from a referenced ResourceGroup
Appears in:
* [AKSClusterParameters](#AKSClusterParameters)
ResourceGroupNameReferencerForAKSCluster supports all fields of:
* github.com/crossplaneio/stack-azure/apis/v1alpha3.ResourceGroupNameReferencer
## SubnetIDReferencerForAKSCluster
SubnetIDReferencerForAKSCluster is an attribute referencer that resolves name from a referenced ResourceGroup
Appears in:
* [AKSClusterParameters](#AKSClusterParameters)
SubnetIDReferencerForAKSCluster supports all fields of:
* github.com/crossplaneio/stack-azure/apis/network/v1alpha3.SubnetIDReferencer
This API documentation was generated by `crossdocs`.

View File

@ -0,0 +1,398 @@
# database.azure.crossplane.io/v1alpha3 API Reference
Package v1alpha3 contains managed resources for Azure database services such as SQL server.
This API group contains the following Crossplane resources:
* [MySQLServer](#MySQLServer)
* [MySQLServerVirtualNetworkRule](#MySQLServerVirtualNetworkRule)
* [PostgreSQLServer](#PostgreSQLServer)
* [PostgreSQLServerVirtualNetworkRule](#PostgreSQLServerVirtualNetworkRule)
* [SQLServerClass](#SQLServerClass)
## MySQLServer
A MySQLServer is a managed resource that represents an Azure MySQL Database Server.
Name | Type | Description
-----|------|------------
`apiVersion` | string | `database.azure.crossplane.io/v1alpha3`
`kind` | string | `MySQLServer`
`metadata` | [meta/v1.ObjectMeta](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#objectmeta-v1-meta) | Kubernetes object metadata.
`spec` | [SQLServerSpec](#SQLServerSpec) | A SQLServerSpec defines the desired state of a SQLServer.
`status` | [SQLServerStatus](#SQLServerStatus) | A SQLServerStatus represents the observed state of a SQLServer.
## MySQLServerVirtualNetworkRule
A MySQLServerVirtualNetworkRule is a managed resource that represents an Azure MySQL Database virtual network rule.
Name | Type | Description
-----|------|------------
`apiVersion` | string | `database.azure.crossplane.io/v1alpha3`
`kind` | string | `MySQLServerVirtualNetworkRule`
`metadata` | [meta/v1.ObjectMeta](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#objectmeta-v1-meta) | Kubernetes object metadata.
`spec` | [MySQLVirtualNetworkRuleSpec](#MySQLVirtualNetworkRuleSpec) | A MySQLVirtualNetworkRuleSpec defines the desired state of a MySQLVirtualNetworkRule.
`status` | [VirtualNetworkRuleStatus](#VirtualNetworkRuleStatus) | A VirtualNetworkRuleStatus represents the observed state of a VirtualNetworkRule.
## PostgreSQLServer
A PostgreSQLServer is a managed resource that represents an Azure PostgreSQL Database Server.
Name | Type | Description
-----|------|------------
`apiVersion` | string | `database.azure.crossplane.io/v1alpha3`
`kind` | string | `PostgreSQLServer`
`metadata` | [meta/v1.ObjectMeta](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#objectmeta-v1-meta) | Kubernetes object metadata.
`spec` | [SQLServerSpec](#SQLServerSpec) | A SQLServerSpec defines the desired state of a SQLServer.
`status` | [SQLServerStatus](#SQLServerStatus) | A SQLServerStatus represents the observed state of a SQLServer.
## PostgreSQLServerVirtualNetworkRule
A PostgreSQLServerVirtualNetworkRule is a managed resource that represents an Azure PostgreSQL Database virtual network rule.
Name | Type | Description
-----|------|------------
`apiVersion` | string | `database.azure.crossplane.io/v1alpha3`
`kind` | string | `PostgreSQLServerVirtualNetworkRule`
`metadata` | [meta/v1.ObjectMeta](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#objectmeta-v1-meta) | Kubernetes object metadata.
`spec` | [PostgreSQLVirtualNetworkRuleSpec](#PostgreSQLVirtualNetworkRuleSpec) | A PostgreSQLVirtualNetworkRuleSpec defines the desired state of a PostgreSQLVirtualNetworkRule.
`status` | [VirtualNetworkRuleStatus](#VirtualNetworkRuleStatus) | A VirtualNetworkRuleStatus represents the observed state of a VirtualNetworkRule.
## SQLServerClass
A SQLServerClass is a non-portable resource class. It defines the desired spec of resource claims that use it to dynamically provision a managed resource.
Name | Type | Description
-----|------|------------
`apiVersion` | string | `database.azure.crossplane.io/v1alpha3`
`kind` | string | `SQLServerClass`
`metadata` | [meta/v1.ObjectMeta](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#objectmeta-v1-meta) | Kubernetes object metadata.
`specTemplate` | [SQLServerClassSpecTemplate](#SQLServerClassSpecTemplate) | SpecTemplate is a template for the spec of a dynamically provisioned SQLServer.
## MySQLServerNameReferencer
A MySQLServerNameReferencer returns the server name of a referenced MySQLServer.
Appears in:
* [MySQLVirtualNetworkRuleSpec](#MySQLVirtualNetworkRuleSpec)
* [ServerNameReferencerForMySQLServerVirtualNetworkRule](#ServerNameReferencerForMySQLServerVirtualNetworkRule)
MySQLServerNameReferencer supports all fields of:
* [core/v1.LocalObjectReference](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#localobjectreference-v1-core)
## MySQLVirtualNetworkRuleSpec
A MySQLVirtualNetworkRuleSpec defines the desired state of a MySQLVirtualNetworkRule.
Appears in:
* [MySQLServerVirtualNetworkRule](#MySQLServerVirtualNetworkRule)
Name | Type | Description
-----|------|------------
`name` | string | Name - Name of the Virtual Network Rule.
`serverName` | string | ServerName - Name of the Virtual Network Rule&#39;s server.
`serverNameRef` | [MySQLServerNameReferencer](#MySQLServerNameReferencer) | ServerNameRef - A reference to the Virtual Network Rule&#39;s MySQLServer.
`resourceGroupName` | string | ResourceGroupName - Name of the Virtual Network Rule&#39;s resource group.
`resourceGroupNameRef` | [ResourceGroupNameReferencerForVirtualNetworkRule](#ResourceGroupNameReferencerForVirtualNetworkRule) | ResourceGroupNameRef - A reference to a ResourceGroup object to retrieve its name
`properties` | [VirtualNetworkRuleProperties](#VirtualNetworkRuleProperties) | VirtualNetworkRuleProperties - Resource properties.
MySQLVirtualNetworkRuleSpec supports all fields of:
* [v1alpha1.ResourceSpec](../crossplane-runtime/core-crossplane-io-v1alpha1.md#resourcespec)
## PostgreSQLServerNameReferencer
A PostgreSQLServerNameReferencer returns the server name of a referenced PostgreSQLServer.
Appears in:
* [PostgreSQLVirtualNetworkRuleSpec](#PostgreSQLVirtualNetworkRuleSpec)
* [ServerNameReferencerForPostgreSQLServerVirtualNetworkRule](#ServerNameReferencerForPostgreSQLServerVirtualNetworkRule)
PostgreSQLServerNameReferencer supports all fields of:
* [core/v1.LocalObjectReference](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#localobjectreference-v1-core)
## PostgreSQLVirtualNetworkRuleSpec
A PostgreSQLVirtualNetworkRuleSpec defines the desired state of a PostgreSQLVirtualNetworkRule.
Appears in:
* [PostgreSQLServerVirtualNetworkRule](#PostgreSQLServerVirtualNetworkRule)
Name | Type | Description
-----|------|------------
`name` | string | Name - Name of the Virtual Network Rule.
`serverName` | string | ServerName - Name of the Virtual Network Rule&#39;s PostgreSQLServer.
`serverNameRef` | [PostgreSQLServerNameReferencer](#PostgreSQLServerNameReferencer) | ServerNameRef - A reference to the Virtual Network Rule&#39;s PostgreSQLServer.
`resourceGroupName` | string | ResourceGroupName - Name of the Virtual Network Rule&#39;s resource group.
`resourceGroupNameRef` | [ResourceGroupNameReferencerForVirtualNetworkRule](#ResourceGroupNameReferencerForVirtualNetworkRule) | ResourceGroupNameRef - A reference to a ResourceGroup object to retrieve its name
`properties` | [VirtualNetworkRuleProperties](#VirtualNetworkRuleProperties) | VirtualNetworkRuleProperties - Resource properties.
PostgreSQLVirtualNetworkRuleSpec supports all fields of:
* [v1alpha1.ResourceSpec](../crossplane-runtime/core-crossplane-io-v1alpha1.md#resourcespec)
## PricingTierSpec
PricingTierSpec represents the performance and cost oriented properties of a SQLServer.
Appears in:
* [SQLServerParameters](#SQLServerParameters)
Name | Type | Description
-----|------|------------
`tier` | string | Tier of the particular SKU, e.g. Basic. Possible values include: &#39;Basic&#39;, &#39;GeneralPurpose&#39;, &#39;MemoryOptimized&#39;
`vcores` | int | VCores (aka Capacity) specifies how many virtual cores this SQLServer requires.
`family` | string | Family of hardware.
## ResourceGroupNameReferencerForSQLServer
ResourceGroupNameReferencerForSQLServer is an attribute referencer that resolves the name of a the ResourceGroup.
Appears in:
* [SQLServerParameters](#SQLServerParameters)
ResourceGroupNameReferencerForSQLServer supports all fields of:
* github.com/crossplaneio/stack-azure/apis/v1alpha3.ResourceGroupNameReferencer
## ResourceGroupNameReferencerForVirtualNetworkRule
ResourceGroupNameReferencerForVirtualNetworkRule is an attribute referencer that resolves the name of a the ResourceGroup.
Appears in:
* [MySQLVirtualNetworkRuleSpec](#MySQLVirtualNetworkRuleSpec)
* [PostgreSQLVirtualNetworkRuleSpec](#PostgreSQLVirtualNetworkRuleSpec)
ResourceGroupNameReferencerForVirtualNetworkRule supports all fields of:
* github.com/crossplaneio/stack-azure/apis/v1alpha3.ResourceGroupNameReferencer
## SQLServerClassSpecTemplate
A SQLServerClassSpecTemplate is a template for the spec of a dynamically provisioned MySQLServer or PostgreSQLServer.
Appears in:
* [SQLServerClass](#SQLServerClass)
SQLServerClassSpecTemplate supports all fields of:
* [v1alpha1.ClassSpecTemplate](../crossplane-runtime/core-crossplane-io-v1alpha1.md#classspectemplate)
* [SQLServerParameters](#SQLServerParameters)
## SQLServerParameters
SQLServerParameters define the desired state of an Azure SQL Database, either PostgreSQL or MySQL.
Appears in:
* [SQLServerClassSpecTemplate](#SQLServerClassSpecTemplate)
* [SQLServerSpec](#SQLServerSpec)
Name | Type | Description
-----|------|------------
`resourceGroupName` | string | ResourceGroupName specifies the name of the resource group that should contain this SQLServer.
`resourceGroupNameRef` | [ResourceGroupNameReferencerForSQLServer](#ResourceGroupNameReferencerForSQLServer) | ResourceGroupNameRef - A reference to a ResourceGroup object to retrieve its name
`location` | string | Location specifies the location of this SQLServer.
`pricingTier` | [PricingTierSpec](#PricingTierSpec) | PricingTier specifies the pricing tier (aka SKU) for this SQLServer.
`storageProfile` | [StorageProfileSpec](#StorageProfileSpec) | StorageProfile configures the storage profile of this SQLServer.
`adminLoginName` | string | AdminLoginName specifies the administrator login name for this SQLServer.
`version` | string | Version specifies the version of this server, for example &#34;5.6&#34;, or &#34;9.6&#34;.
`sslEnforced` | Optional bool | SSLEnforced specifies whether SSL is required to connect to this SQLServer.
## SQLServerSpec
A SQLServerSpec defines the desired state of a SQLServer.
Appears in:
* [MySQLServer](#MySQLServer)
* [PostgreSQLServer](#PostgreSQLServer)
SQLServerSpec supports all fields of:
* [v1alpha1.ResourceSpec](../crossplane-runtime/core-crossplane-io-v1alpha1.md#resourcespec)
* [SQLServerParameters](#SQLServerParameters)
## SQLServerStatus
A SQLServerStatus represents the observed state of a SQLServer.
Appears in:
* [MySQLServer](#MySQLServer)
* [PostgreSQLServer](#PostgreSQLServer)
Name | Type | Description
-----|------|------------
`state` | string | State of this SQLServer.
`message` | string | A Message containing detail on the state of this SQLServer, if any.
`providerID` | string | ProviderID is the external ID to identify this resource in the cloud provider.
`endpoint` | string | Endpoint of the MySQL Server instance used in connection strings.
SQLServerStatus supports all fields of:
* [v1alpha1.ResourceStatus](../crossplane-runtime/core-crossplane-io-v1alpha1.md#resourcestatus)
## ServerNameReferencerForMySQLServerVirtualNetworkRule
ServerNameReferencerForMySQLServerVirtualNetworkRule is an attribute referencer that resolves the name of a MySQLServer.
ServerNameReferencerForMySQLServerVirtualNetworkRule supports all fields of:
* [MySQLServerNameReferencer](#MySQLServerNameReferencer)
## ServerNameReferencerForPostgreSQLServerVirtualNetworkRule
ServerNameReferencerForPostgreSQLServerVirtualNetworkRule is an attribute referencer that resolves the name of a PostgreSQLServer.
ServerNameReferencerForPostgreSQLServerVirtualNetworkRule supports all fields of:
* [PostgreSQLServerNameReferencer](#PostgreSQLServerNameReferencer)
## StorageProfileSpec
A StorageProfileSpec represents storage related properties of a SQLServer.
Appears in:
* [SQLServerParameters](#SQLServerParameters)
Name | Type | Description
-----|------|------------
`storageGB` | int | StorageGB configures the maximum storage allowed.
`backupRetentionDays` | int | BackupRetentionDays configures how many days backups will be retained.
`geoRedundantBackup` | bool | GeoRedundantBackup enables geo-redunndant backups.
## SubnetIDReferencerForVirtualNetworkRule
SubnetIDReferencerForVirtualNetworkRule is an attribute referencer that resolves id from a referenced Subnet and assigns it to a PostgreSQLServer or MySQL server object
Appears in:
* [VirtualNetworkRuleProperties](#VirtualNetworkRuleProperties)
SubnetIDReferencerForVirtualNetworkRule supports all fields of:
* github.com/crossplaneio/stack-azure/apis/network/v1alpha3.SubnetIDReferencer
## VirtualNetworkRuleProperties
VirtualNetworkRuleProperties defines the properties of a VirtualNetworkRule.
Appears in:
* [MySQLVirtualNetworkRuleSpec](#MySQLVirtualNetworkRuleSpec)
* [PostgreSQLVirtualNetworkRuleSpec](#PostgreSQLVirtualNetworkRuleSpec)
Name | Type | Description
-----|------|------------
`virtualNetworkSubnetId` | string | VirtualNetworkSubnetID - The ARM resource id of the virtual network subnet.
`virtualNetworkSubnetIdRef` | [SubnetIDReferencerForVirtualNetworkRule](#SubnetIDReferencerForVirtualNetworkRule) | VirtualNetworkSubnetIDRef - A reference to a Subnet to retrieve its ID
`ignoreMissingVnetServiceEndpoint` | bool | IgnoreMissingVnetServiceEndpoint - Create firewall rule before the virtual network has vnet service endpoint enabled.
## VirtualNetworkRuleStatus
A VirtualNetworkRuleStatus represents the observed state of a VirtualNetworkRule.
Appears in:
* [MySQLServerVirtualNetworkRule](#MySQLServerVirtualNetworkRule)
* [PostgreSQLServerVirtualNetworkRule](#PostgreSQLServerVirtualNetworkRule)
Name | Type | Description
-----|------|------------
`state` | string | State of this virtual network rule.
`message` | string | A Message containing details about the state of this virtual network rule, if any.
`id` | string | ID - Resource ID
`type` | string | Type - Resource type.
VirtualNetworkRuleStatus supports all fields of:
* [v1alpha1.ResourceStatus](../crossplane-runtime/core-crossplane-io-v1alpha1.md#resourcestatus)
This API documentation was generated by `crossdocs`.

View File

@ -0,0 +1,276 @@
# network.azure.crossplane.io/v1alpha3 API Reference
Package v1alpha3 contains managed resources for Azure network services such as virtual networks.
This API group contains the following Crossplane resources:
* [Subnet](#Subnet)
* [VirtualNetwork](#VirtualNetwork)
## Subnet
A Subnet is a managed resource that represents an Azure Subnet.
Name | Type | Description
-----|------|------------
`apiVersion` | string | `network.azure.crossplane.io/v1alpha3`
`kind` | string | `Subnet`
`metadata` | [meta/v1.ObjectMeta](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#objectmeta-v1-meta) | Kubernetes object metadata.
`spec` | [SubnetSpec](#SubnetSpec) | A SubnetSpec defines the desired state of a Subnet.
`status` | [SubnetStatus](#SubnetStatus) | A SubnetStatus represents the observed state of a Subnet.
## VirtualNetwork
A VirtualNetwork is a managed resource that represents an Azure Virtual Network.
Name | Type | Description
-----|------|------------
`apiVersion` | string | `network.azure.crossplane.io/v1alpha3`
`kind` | string | `VirtualNetwork`
`metadata` | [meta/v1.ObjectMeta](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#objectmeta-v1-meta) | Kubernetes object metadata.
`spec` | [VirtualNetworkSpec](#VirtualNetworkSpec) | A VirtualNetworkSpec defines the desired state of a VirtualNetwork.
`status` | [VirtualNetworkStatus](#VirtualNetworkStatus) | A VirtualNetworkStatus represents the observed state of a VirtualNetwork.
## AddressSpace
AddressSpace contains an array of IP address ranges that can be used by subnets of the virtual network.
Appears in:
* [VirtualNetworkPropertiesFormat](#VirtualNetworkPropertiesFormat)
Name | Type | Description
-----|------|------------
`addressPrefixes` | []string | AddressPrefixes - A list of address blocks reserved for this virtual network in CIDR notation.
## ResourceGroupNameReferencerForSubnet
ResourceGroupNameReferencerForSubnet is an attribute referencer that resolves name from a referenced ResourceGroup
Appears in:
* [SubnetSpec](#SubnetSpec)
ResourceGroupNameReferencerForSubnet supports all fields of:
* github.com/crossplaneio/stack-azure/apis/v1alpha3.ResourceGroupNameReferencer
## ResourceGroupNameReferencerForVirtualNetwork
ResourceGroupNameReferencerForVirtualNetwork is an attribute referencer that resolves name from a referenced ResourceGroup
Appears in:
* [VirtualNetworkSpec](#VirtualNetworkSpec)
ResourceGroupNameReferencerForVirtualNetwork supports all fields of:
* github.com/crossplaneio/stack-azure/apis/v1alpha3.ResourceGroupNameReferencer
## ServiceEndpointPropertiesFormat
ServiceEndpointPropertiesFormat defines properties of a service endpoint.
Appears in:
* [SubnetPropertiesFormat](#SubnetPropertiesFormat)
Name | Type | Description
-----|------|------------
`service` | Optional string | Service - The type of the endpoint service.
`locations` | Optional []string | Locations - A list of locations.
`provisioningState` | Optional string | ProvisioningState - The provisioning state of the resource.
## SubnetIDReferencer
SubnetIDReferencer is used to get the name from another Subnet
SubnetIDReferencer supports all fields of:
* [core/v1.LocalObjectReference](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#localobjectreference-v1-core)
## SubnetPropertiesFormat
SubnetPropertiesFormat defines properties of a Subnet.
Appears in:
* [SubnetSpec](#SubnetSpec)
Name | Type | Description
-----|------|------------
`addressPrefix` | string | AddressPrefix - The address prefix for the subnet.
`serviceEndpoints` | [[]ServiceEndpointPropertiesFormat](#ServiceEndpointPropertiesFormat) | ServiceEndpoints - An array of service endpoints.
## SubnetSpec
A SubnetSpec defines the desired state of a Subnet.
Appears in:
* [Subnet](#Subnet)
Name | Type | Description
-----|------|------------
`name` | string | Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
`virtualNetworkName` | string | VirtualNetworkName - Name of the Subnet&#39;s virtual network.
`virtualNetworkNameRef` | [VirtualNetworkNameReferencerForSubnet](#VirtualNetworkNameReferencerForSubnet) | VirtualNetworkNameRef references to a VirtualNetwork to retrieve its name
`resourceGroupName` | string | ResourceGroupName - Name of the Subnet&#39;s resource group.
`resourceGroupNameRef` | [ResourceGroupNameReferencerForSubnet](#ResourceGroupNameReferencerForSubnet) | ResourceGroupNameRef - A reference to the the Subnets&#39;s resource group.
`properties` | [SubnetPropertiesFormat](#SubnetPropertiesFormat) | SubnetPropertiesFormat - Properties of the subnet.
SubnetSpec supports all fields of:
* [v1alpha1.ResourceSpec](../crossplane-runtime/core-crossplane-io-v1alpha1.md#resourcespec)
## SubnetStatus
A SubnetStatus represents the observed state of a Subnet.
Appears in:
* [Subnet](#Subnet)
Name | Type | Description
-----|------|------------
`state` | string | State of this Subnet.
`message` | string | A Message providing detail about the state of this Subnet, if any.
`etag` | string | Etag - A unique string that changes whenever the resource is updated.
`id` | string | ID of this Subnet.
`purpose` | string | Purpose - A string identifying the intention of use for this subnet based on delegations and other user-defined properties.
SubnetStatus supports all fields of:
* [v1alpha1.ResourceStatus](../crossplane-runtime/core-crossplane-io-v1alpha1.md#resourcestatus)
## VirtualNetworkNameReferencer
VirtualNetworkNameReferencer is used to get the name from another VirtualNetwork
Appears in:
* [VirtualNetworkNameReferencerForSubnet](#VirtualNetworkNameReferencerForSubnet)
VirtualNetworkNameReferencer supports all fields of:
* [core/v1.LocalObjectReference](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#localobjectreference-v1-core)
## VirtualNetworkNameReferencerForSubnet
VirtualNetworkNameReferencerForSubnet is an attribute referencer that resolves name from a referenced Network
Appears in:
* [SubnetSpec](#SubnetSpec)
VirtualNetworkNameReferencerForSubnet supports all fields of:
* [VirtualNetworkNameReferencer](#VirtualNetworkNameReferencer)
## VirtualNetworkPropertiesFormat
VirtualNetworkPropertiesFormat defines properties of a VirtualNetwork.
Appears in:
* [VirtualNetworkSpec](#VirtualNetworkSpec)
Name | Type | Description
-----|------|------------
`addressSpace` | Optional [AddressSpace](#AddressSpace) | AddressSpace - The AddressSpace that contains an array of IP address ranges that can be used by subnets.
`enableDdosProtection` | Optional bool | EnableDDOSProtection - Indicates if DDoS protection is enabled for all the protected resources in the virtual network. It requires a DDoS protection plan associated with the resource.
`enableVmProtection` | Optional bool | EnableVMProtection - Indicates if VM protection is enabled for all the subnets in the virtual network.
## VirtualNetworkSpec
A VirtualNetworkSpec defines the desired state of a VirtualNetwork.
Appears in:
* [VirtualNetwork](#VirtualNetwork)
Name | Type | Description
-----|------|------------
`name` | string | Name - Name of the Virtual Network.
`resourceGroupName` | string | ResourceGroupName - Name of the Virtual Network&#39;s resource group.
`resourceGroupNameRef` | [ResourceGroupNameReferencerForVirtualNetwork](#ResourceGroupNameReferencerForVirtualNetwork) | ResourceGroupNameRef - A reference to the the Virtual Network&#39;s resource group.
`properties` | [VirtualNetworkPropertiesFormat](#VirtualNetworkPropertiesFormat) | VirtualNetworkPropertiesFormat - Properties of the virtual network.
`location` | string | Location - Resource location.
`tags` | Optional map[string]string | Tags - Resource tags.
VirtualNetworkSpec supports all fields of:
* [v1alpha1.ResourceSpec](../crossplane-runtime/core-crossplane-io-v1alpha1.md#resourcespec)
## VirtualNetworkStatus
A VirtualNetworkStatus represents the observed state of a VirtualNetwork.
Appears in:
* [VirtualNetwork](#VirtualNetwork)
Name | Type | Description
-----|------|------------
`state` | string | State of this VirtualNetwork.
`message` | string | A Message providing detail about the state of this VirtualNetwork, if any.
`id` | string | ID of this VirtualNetwork.
`etag` | string | Etag - A unique read-only string that changes whenever the resource is updated.
`resourceGuid` | string | ResourceGUID - The GUID of this VirtualNetwork.
`type` | string | Type of this VirtualNetwork.
VirtualNetworkStatus supports all fields of:
* [v1alpha1.ResourceStatus](../crossplane-runtime/core-crossplane-io-v1alpha1.md#resourcestatus)
This API documentation was generated by `crossdocs`.

View File

@ -0,0 +1,469 @@
# storage.azure.crossplane.io/v1alpha3 API Reference
Package v1alpha3 contains managed resources for Azure storage services such as containers and accounts.
This API group contains the following Crossplane resources:
* [Account](#Account)
* [AccountClass](#AccountClass)
* [Container](#Container)
* [ContainerClass](#ContainerClass)
## Account
An Account is a managed resource that represents an Azure Blob Service Account.
Name | Type | Description
-----|------|------------
`apiVersion` | string | `storage.azure.crossplane.io/v1alpha3`
`kind` | string | `Account`
`metadata` | [meta/v1.ObjectMeta](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#objectmeta-v1-meta) | Kubernetes object metadata.
`spec` | [AccountSpec](#AccountSpec) | An AccountSpec defines the desired state of an Account.
`status` | [AccountStatus](#AccountStatus) | An AccountStatus represents the observed state of an Account.
## AccountClass
An AccountClass is a non-portable resource class. It defines the desired spec of resource claims that use it to dynamically provision a managed resource.
Name | Type | Description
-----|------|------------
`apiVersion` | string | `storage.azure.crossplane.io/v1alpha3`
`kind` | string | `AccountClass`
`metadata` | [meta/v1.ObjectMeta](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#objectmeta-v1-meta) | Kubernetes object metadata.
`specTemplate` | [AccountClassSpecTemplate](#AccountClassSpecTemplate) | SpecTemplate is a template for the spec of a dynamically provisioned Account.
## Container
A Container is a managed resource that represents an Azure Blob Storage Container.
Name | Type | Description
-----|------|------------
`apiVersion` | string | `storage.azure.crossplane.io/v1alpha3`
`kind` | string | `Container`
`metadata` | [meta/v1.ObjectMeta](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#objectmeta-v1-meta) | Kubernetes object metadata.
`spec` | [ContainerSpec](#ContainerSpec) | A ContainerSpec defines the desired state of a Container.
`status` | [ContainerStatus](#ContainerStatus) | A ContainerStatus represents the observed status of a Container.
## ContainerClass
A ContainerClass is a non-portable resource class. It defines the desired spec of resource claims that use it to dynamically provision a managed resource.
Name | Type | Description
-----|------|------------
`apiVersion` | string | `storage.azure.crossplane.io/v1alpha3`
`kind` | string | `ContainerClass`
`metadata` | [meta/v1.ObjectMeta](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#objectmeta-v1-meta) | Kubernetes object metadata.
`specTemplate` | [ContainerClassSpecTemplate](#ContainerClassSpecTemplate) | SpecTemplate is a template for the spec of a dynamically provisioned Container.
## AccountClassSpecTemplate
An AccountClassSpecTemplate is a template for the spec of a dynamically provisioned Account.
Appears in:
* [AccountClass](#AccountClass)
AccountClassSpecTemplate supports all fields of:
* [v1alpha1.ClassSpecTemplate](../crossplane-runtime/core-crossplane-io-v1alpha1.md#classspectemplate)
* [AccountParameters](#AccountParameters)
## AccountParameters
AccountParameters define the desired state of an Azure Blob Storage Account.
Appears in:
* [AccountClassSpecTemplate](#AccountClassSpecTemplate)
* [AccountSpec](#AccountSpec)
Name | Type | Description
-----|------|------------
`resourceGroupName` | string | ResourceGroupName specifies the resource group for this Account.
`storageAccountName` | string | StorageAccountName specifies the name for this Account.
`storageAccountSpec` | [StorageAccountSpec](#StorageAccountSpec) | StorageAccountSpec specifies the desired state of this Account.
## AccountSpec
An AccountSpec defines the desired state of an Account.
Appears in:
* [Account](#Account)
AccountSpec supports all fields of:
* [v1alpha1.ResourceSpec](../crossplane-runtime/core-crossplane-io-v1alpha1.md#resourcespec)
* [AccountParameters](#AccountParameters)
## AccountStatus
An AccountStatus represents the observed state of an Account.
Appears in:
* [Account](#Account)
AccountStatus supports all fields of:
* [v1alpha1.ResourceStatus](../crossplane-runtime/core-crossplane-io-v1alpha1.md#resourcestatus)
* [StorageAccountStatus](#StorageAccountStatus)
## ContainerClassSpecTemplate
A ContainerClassSpecTemplate is a template for the spec of a dynamically provisioned Container.
Appears in:
* [ContainerClass](#ContainerClass)
ContainerClassSpecTemplate supports all fields of:
* [v1alpha1.ClassSpecTemplate](../crossplane-runtime/core-crossplane-io-v1alpha1.md#classspectemplate)
* [ContainerParameters](#ContainerParameters)
## ContainerParameters
ContainerParameters define the desired state of an Azure Blob Storage Container.
Appears in:
* [ContainerClassSpecTemplate](#ContainerClassSpecTemplate)
* [ContainerSpec](#ContainerSpec)
Name | Type | Description
-----|------|------------
`nameFormat` | string | NameFormat specifies the name of the external Container. The first instance of the string &#39;%s&#39; will be replaced with the Kubernetes UID of this Container.
`metadata` | Optional [azblob.Metadata](https://godoc.org/github.com/Azure/azure-storage-blob-go/azblob#Metadata) | Metadata for this Container.
`publicAccessType` | Optional [azblob.PublicAccessType](https://godoc.org/github.com/Azure/azure-storage-blob-go/azblob#PublicAccessType) | PublicAccessType for this container; either &#34;blob&#34; or &#34;container&#34;.
`accountReference` | [core/v1.LocalObjectReference](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#localobjectreference-v1-core) | AccountReference to the Azure Blob Storage Account this Container will reside within.
## ContainerSpec
A ContainerSpec defines the desired state of a Container.
Appears in:
* [Container](#Container)
Name | Type | Description
-----|------|------------
`writeConnectionSecretToRef` | Optional [v1alpha1.SecretReference](../crossplane-runtime/core-crossplane-io-v1alpha1.md#secretreference) | WriteConnectionSecretToReference specifies the name of a Secret, in the same namespace as this managed resource, to which any connection details for this managed resource should be written. Connection details frequently include the endpoint, username, and password required to connect to the managed resource.
`claimRef` | Optional [core/v1.ObjectReference](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#objectreference-v1-core) | ClaimReference specifies the resource claim to which this managed resource will be bound. ClaimReference is set automatically during dynamic provisioning. Crossplane does not currently support setting this field manually, per https://github.com/crossplaneio/crossplane-runtime/issues/19
`classRef` | Optional [core/v1.ObjectReference](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#objectreference-v1-core) | ClassReference specifies the non-portable resource class that was used to dynamically provision this managed resource, if any. Crossplane does not currently support setting this field manually, per https://github.com/crossplaneio/crossplane-runtime/issues/20
`reclaimPolicy` | Optional [v1alpha1.ReclaimPolicy](../crossplane-runtime/core-crossplane-io-v1alpha1.md#reclaimpolicy) | ReclaimPolicy specifies what will happen to the external resource this managed resource manages when the managed resource is deleted. &#34;Delete&#34; deletes the external resource, while &#34;Retain&#34; (the default) does not. Note this behaviour is subtly different from other uses of the ReclaimPolicy concept within the Kubernetes ecosystem per https://github.com/crossplaneio/crossplane-runtime/issues/21
ContainerSpec supports all fields of:
* [ContainerParameters](#ContainerParameters)
## ContainerStatus
A ContainerStatus represents the observed status of a Container.
Appears in:
* [Container](#Container)
Name | Type | Description
-----|------|------------
`name` | string | Name of this Container.
ContainerStatus supports all fields of:
* [v1alpha1.ResourceStatus](../crossplane-runtime/core-crossplane-io-v1alpha1.md#resourcestatus)
## CustomDomain
CustomDomain specifies the custom domain assigned to this storage account.
Appears in:
* [StorageAccountSpecProperties](#StorageAccountSpecProperties)
Name | Type | Description
-----|------|------------
`name` | Optional string | Name - custom domain name assigned to the storage account. Name is the CNAME source.
`useSubDomainName` | Optional bool | UseSubDomainName - Indicates whether indirect CNAME validation is enabled.
## EnabledEncryptionServices
EnabledEncryptionServices a list of services that support encryption.
Appears in:
* [Encryption](#Encryption)
Name | Type | Description
-----|------|------------
`blob` | bool | Blob - The encryption function of the blob storage service.
`file` | bool | File - The encryption function of the file storage service.
`table` | bool | Table - The encryption function of the table storage service.
`queue` | bool | Queue - The encryption function of the queue storage service.
## Encryption
Encryption the encryption settings on the storage account.
Appears in:
* [StorageAccountSpecProperties](#StorageAccountSpecProperties)
Name | Type | Description
-----|------|------------
`services` | [EnabledEncryptionServices](#EnabledEncryptionServices) | Services - List of services which support encryption.
`keySource` | [storage.KeySource](https://godoc.org/github.com/Azure/azure-sdk-for-go/services/storage/mgmt/2017-06-01/storage#KeySource) | KeySource - The encryption keySource (provider). Possible values (case-insensitive): Microsoft.Storage, Microsoft.Keyvault
`keyvaultproperties` | [KeyVaultProperties](#KeyVaultProperties) | KeyVaultProperties - Properties provided by key vault.
## Endpoints
Endpoints the URIs that are used to perform a retrieval of a public blob, queue, or table object.
Appears in:
* [StorageAccountStatusProperties](#StorageAccountStatusProperties)
Name | Type | Description
-----|------|------------
`blob` | string | Blob - the blob endpoint.
`queue` | string | Queue - the queue endpoint.
`table` | string | Table - the table endpoint.
`file` | string | File - the file endpoint.
## IPRule
IPRule IP rule with specific IP or IP range in CIDR format.
Appears in:
* [NetworkRuleSet](#NetworkRuleSet)
Name | Type | Description
-----|------|------------
`value` | string | IPAddressOrRange - Specifies the IP or IP range in CIDR format. Only IPV4 address is allowed.
`action` | [storage.Action](https://godoc.org/github.com/Azure/azure-sdk-for-go/services/storage/mgmt/2017-06-01/storage#Action) | Action - The action of IP ACL rule. Possible values include: &#39;Allow&#39;
## Identity
Identity identity for the resource.
Appears in:
* [StorageAccountSpec](#StorageAccountSpec)
Name | Type | Description
-----|------|------------
`principalId` | string | PrincipalID - The principal ID of resource identity.
`tenantId` | string | TenantID - The tenant ID of resource.
`type` | string | Type - The identity type.
## KeyVaultProperties
KeyVaultProperties properties of key vault.
Appears in:
* [Encryption](#Encryption)
Name | Type | Description
-----|------|------------
`keyname` | string | KeyName - The name of KeyVault key.
`keyversion` | string | KeyVersion - The version of KeyVault key.
`keyvaulturi` | string | KeyVaultURI - The Uri of KeyVault.
## NetworkRuleSet
NetworkRuleSet network rule set
Appears in:
* [StorageAccountSpecProperties](#StorageAccountSpecProperties)
Name | Type | Description
-----|------|------------
`bypass` | [storage.Bypass](https://godoc.org/github.com/Azure/azure-sdk-for-go/services/storage/mgmt/2017-06-01/storage#Bypass) | Bypass - Specifies whether traffic is bypassed for Logging/Metrics/AzureServices. Possible values are any combination of Logging|Metrics|AzureServices (For example, &#34;Logging, Metrics&#34;), or None to bypass none of those traffics. Possible values include: &#39;None&#39;, &#39;Logging&#39;, &#39;Metrics&#39;, &#39;AzureServices&#39;
`virtualNetworkRules` | [[]VirtualNetworkRule](#VirtualNetworkRule) | VirtualNetworkRules - Sets the virtual network rules
`ipRules` | [[]IPRule](#IPRule) | IPRules - Sets the IP ACL rules
`defaultAction` | [storage.DefaultAction](https://godoc.org/github.com/Azure/azure-sdk-for-go/services/storage/mgmt/2017-06-01/storage#DefaultAction) | DefaultAction - Specifies the default action of allow or deny when no other rules match. Possible values include: &#39;Allow&#39;, &#39;Deny&#39;
## Sku
Sku of an Azure Blob Storage Account.
Appears in:
* [StorageAccountSpec](#StorageAccountSpec)
Name | Type | Description
-----|------|------------
`capabilities` | [[]skuCapability](#skuCapability) | Capabilities - The capability information in the specified sku, including file encryption, network acls, change notification, etc.
`kind` | [storage.Kind](https://godoc.org/github.com/Azure/azure-sdk-for-go/services/storage/mgmt/2017-06-01/storage#Kind) | Kind - Indicates the type of storage account. Possible values include: &#39;Storage&#39;, &#39;BlobStorage&#39;
`locations` | []string | Locations - The set of locations that the Sku is available. This will be supported and registered Azure Geo Regions (e.g. West US, East US, Southeast Asia, etc.).
`name` | [storage.SkuName](https://godoc.org/github.com/Azure/azure-sdk-for-go/services/storage/mgmt/2017-06-01/storage#SkuName) | Name - Gets or sets the sku name. Required for account creation; optional for update. Note that in older versions, sku name was called accountType. Possible values include: &#39;Standard_LRS&#39;, &#39;Standard_GRS&#39;, &#39;Standard_RAGRS&#39;, &#39;Standard_ZRS&#39;, &#39;Premium_LRS&#39;
`resourceType` | string | ResourceType - The type of the resource, usually it is &#39;storageAccounts&#39;.
`tier` | [storage.SkuTier](https://godoc.org/github.com/Azure/azure-sdk-for-go/services/storage/mgmt/2017-06-01/storage#SkuTier) | Tier - Gets the sku tier. This is based on the Sku name. Possible values include: &#39;Standard&#39;, &#39;Premium&#39;
## StorageAccountSpec
A StorageAccountSpec defines the desired state of an Azure Blob Storage account.
Appears in:
* [AccountParameters](#AccountParameters)
Name | Type | Description
-----|------|------------
`identity` | Optional [Identity](#Identity) | Identity - The identity of the resource.
`kind` | [storage.Kind](https://godoc.org/github.com/Azure/azure-sdk-for-go/services/storage/mgmt/2017-06-01/storage#Kind) | Kind - Indicates the type of storage account. Possible values include: &#39;Storage&#39;, &#39;BlobStorage&#39;
`location` | string | Location - The location of the resource. This will be one of the supported and registered Azure Geo Regions (e.g. West US, East US, Southeast Asia, etc.).
`sku` | [Sku](#Sku) | Sku of the storage account.
`properties` | Optional [StorageAccountSpecProperties](#StorageAccountSpecProperties) | StorageAccountSpecProperties - The parameters used to create the storage account.
`tags` | Optional map[string]string | Tags - A list of key value pairs that describe the resource. These tags can be used for viewing and grouping this resource (across resource groups). A maximum of 15 tags can be provided for a resource. Each tag must have a key with a length no greater than 128 characters and a value with a length no greater than 256 characters.
## StorageAccountSpecProperties
StorageAccountSpecProperties the parameters used to create the storage account.
Appears in:
* [StorageAccountSpec](#StorageAccountSpec)
Name | Type | Description
-----|------|------------
`accessTier` | [storage.AccessTier](https://godoc.org/github.com/Azure/azure-sdk-for-go/services/storage/mgmt/2017-06-01/storage#AccessTier) | AccessTier - Required for storage accounts where kind = BlobStorage. The access tier used for billing. Possible values include: &#39;Hot&#39;, &#39;Cool&#39;
`customDomain` | [CustomDomain](#CustomDomain) | CustomDomain - User domain assigned to the storage account. Name is the CNAME source. Only one custom domain is supported per storage account at this time. to clear the existing custom domain, use an empty string for the custom domain name property.
`supportsHttpsTrafficOnly` | bool | EnableHTTPSTrafficOnly - Allows https traffic only to storage service if sets to true.
`encryption` | [Encryption](#Encryption) | Encryption - Provides the encryption settings on the account. If left unspecified the account encryption settings will remain the same. The default setting is unencrypted.
`networkAcls` | [NetworkRuleSet](#NetworkRuleSet) | NetworkRuleSet - Network rule set
## StorageAccountStatus
A StorageAccountStatus represents the observed status of an Account.
Appears in:
* [AccountStatus](#AccountStatus)
Name | Type | Description
-----|------|------------
`id` | string | ID of this Account.
`name` | string | Name of this Account.
`type` | string | Type of this Account.
`properties` | [StorageAccountStatusProperties](#StorageAccountStatusProperties) | Properties of this Account.
## StorageAccountStatusProperties
StorageAccountStatusProperties represent the observed state of an Account.
Appears in:
* [StorageAccountStatus](#StorageAccountStatus)
Name | Type | Description
-----|------|------------
`creationTime` | [meta/v1.Time](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#time-v1-meta) | CreationTime - the creation date and time of the storage account in UTC.
`lastGeoFailoverTime` | [meta/v1.Time](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#time-v1-meta) | LastGeoFailoverTime - the timestamp of the most recent instance of a failover to the secondary location. Only the most recent timestamp is retained. This element is not returned if there has never been a failover instance. Only available if the accountType is Standard_GRS or Standard_RAGRS.
`primaryEndpoints` | [Endpoints](#Endpoints) | PrimaryEndpoints - the URLs that are used to perform a retrieval of a public blob, queue, or table object. Note that Standard_ZRS and Premium_LRS accounts only return the blob endpoint.
`primaryLocation` | string | PrimaryLocation - the location of the primary data center for the storage account.
`provisioningState` | [storage.ProvisioningState](https://godoc.org/github.com/Azure/azure-sdk-for-go/services/storage/mgmt/2017-06-01/storage#ProvisioningState) | ProvisioningState - the status of the storage account at the time the operation was called. Possible values include: &#39;Creating&#39;, &#39;ResolvingDNS&#39;, &#39;Succeeded&#39;
`secondaryEndpoints` | [Endpoints](#Endpoints) | SecondaryEndpoints - the URLs that are used to perform a retrieval of a public blob, queue, or table object from the secondary location of the storage account. Only available if the Sku name is Standard_RAGRS.
`secondaryLocation` | string | SecondaryLocation - the location of the geo-replicated secondary for the storage account. Only available if the accountType is Standard_GRS or Standard_RAGRS.
`statusOfPrimary` | [storage.AccountStatus](https://godoc.org/github.com/Azure/azure-sdk-for-go/services/storage/mgmt/2017-06-01/storage#AccountStatus) | StatusOfPrimary - the status indicating whether the primary location of the storage account is available or unavailable. Possible values include: &#39;Available&#39;, &#39;Unavailable&#39;
`statusOfSecondary` | [storage.AccountStatus](https://godoc.org/github.com/Azure/azure-sdk-for-go/services/storage/mgmt/2017-06-01/storage#AccountStatus) | StatusOfSecondary - the status indicating whether the secondary location of the storage account is available or unavailable. Only available if the Sku name is Standard_GRS or Standard_RAGRS. Possible values include: &#39;Available&#39;, &#39;Unavailable&#39;
## VirtualNetworkRule
VirtualNetworkRule virtual Network rule.
Appears in:
* [NetworkRuleSet](#NetworkRuleSet)
Name | Type | Description
-----|------|------------
`id` | string | VirtualNetworkResourceID - Resource ID of a subnet, for example: /subscriptions/{subscriptionId}/resourceGroups/{groupName}/providers/Microsoft.Network/virtualNetworks/{vnetName}/subnets/{subnetName}.
`action` | [storage.Action](https://godoc.org/github.com/Azure/azure-sdk-for-go/services/storage/mgmt/2017-06-01/storage#Action) | Action - The action of virtual network rule. Possible values include: &#39;Allow&#39;
This API documentation was generated by `crossdocs`.

View File

@ -0,0 +1,144 @@
# cache.gcp.crossplane.io/v1beta1 API Reference
Package v1beta1 contains managed resources for GCP cache services such as CloudMemorystore.
This API group contains the following Crossplane resources:
* [CloudMemorystoreInstance](#CloudMemorystoreInstance)
* [CloudMemorystoreInstanceClass](#CloudMemorystoreInstanceClass)
## CloudMemorystoreInstance
A CloudMemorystoreInstance is a managed resource that represents a Google Cloud Memorystore instance.
Name | Type | Description
-----|------|------------
`apiVersion` | string | `cache.gcp.crossplane.io/v1beta1`
`kind` | string | `CloudMemorystoreInstance`
`metadata` | [meta/v1.ObjectMeta](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#objectmeta-v1-meta) | Kubernetes object metadata.
`spec` | [CloudMemorystoreInstanceSpec](#CloudMemorystoreInstanceSpec) | A CloudMemorystoreInstanceSpec defines the desired state of a CloudMemorystoreInstance.
`status` | [CloudMemorystoreInstanceStatus](#CloudMemorystoreInstanceStatus) | A CloudMemorystoreInstanceStatus represents the observed state of a CloudMemorystoreInstance.
## CloudMemorystoreInstanceClass
A CloudMemorystoreInstanceClass is a resource class. It defines the desired spec of resource claims that use it to dynamically provision a managed resource.
Name | Type | Description
-----|------|------------
`apiVersion` | string | `cache.gcp.crossplane.io/v1beta1`
`kind` | string | `CloudMemorystoreInstanceClass`
`metadata` | [meta/v1.ObjectMeta](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#objectmeta-v1-meta) | Kubernetes object metadata.
`specTemplate` | [CloudMemorystoreInstanceClassSpecTemplate](#CloudMemorystoreInstanceClassSpecTemplate) | SpecTemplate is a template for the spec of a dynamically provisioned CloudMemorystoreInstance.
## CloudMemorystoreInstanceClassSpecTemplate
A CloudMemorystoreInstanceClassSpecTemplate is a template for the spec of a dynamically provisioned CloudMemorystoreInstance.
Appears in:
* [CloudMemorystoreInstanceClass](#CloudMemorystoreInstanceClass)
Name | Type | Description
-----|------|------------
`forProvider` | [CloudMemorystoreInstanceParameters](#CloudMemorystoreInstanceParameters) | CloudMemorystoreInstanceParameters define the desired state of an Google Cloud Memorystore instance. Most fields map directly to an Instance: https://cloud.google.com/memorystore/docs/redis/reference/rest/v1/projects.locations.instances#Instance
CloudMemorystoreInstanceClassSpecTemplate supports all fields of:
* [v1alpha1.ClassSpecTemplate](../crossplane-runtime/core-crossplane-io-v1alpha1.md#classspectemplate)
## CloudMemorystoreInstanceObservation
CloudMemorystoreInstanceObservation is used to show the observed state of the CloudMemorystore resource on GCP.
Appears in:
* [CloudMemorystoreInstanceStatus](#CloudMemorystoreInstanceStatus)
Name | Type | Description
-----|------|------------
`name` | string | Unique name of the resource in this scope including project and location using the form: `projects/{project_id}/locations/{location_id}/instances/{instance_id}` Note: Redis instances are managed and addressed at regional level so location_id here refers to a GCP region; however, users may choose which specific zone (or collection of zones for cross-zone instances) an instance should be provisioned in. Refer to [location_id] and [alternative_location_id] fields for more details.
`host` | string | Hostname or IP address of the exposed Redis endpoint used by clients to connect to the service.
`port` | int32 | The port number of the exposed Redis endpoint.
`currentLocationId` | string | The current zone where the Redis endpoint is placed. For Basic Tier instances, this will always be the same as the [location_id] provided by the user at creation time. For Standard Tier instances, this can be either [location_id] or [alternative_location_id] and can change after a failover event.
`createTime` | [meta/v1.Time](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#time-v1-meta) | The time the instance was created.
`state` | string | The current state of this instance.
`statusMessage` | string | Additional information about the current status of this instance, if available.
`persistenceIamIdentity` | string | Cloud IAM identity used by import / export operations to transfer data to/from Cloud Storage. Format is &#34;serviceAccount:&lt;service_account_email&gt;&#34;. The value may change over time for a given instance so should be checked before each import/export operation.
## CloudMemorystoreInstanceParameters
CloudMemorystoreInstanceParameters define the desired state of an Google Cloud Memorystore instance. Most fields map directly to an Instance: https://cloud.google.com/memorystore/docs/redis/reference/rest/v1/projects.locations.instances#Instance
Appears in:
* [CloudMemorystoreInstanceClassSpecTemplate](#CloudMemorystoreInstanceClassSpecTemplate)
* [CloudMemorystoreInstanceSpec](#CloudMemorystoreInstanceSpec)
Name | Type | Description
-----|------|------------
`region` | string | Region in which to create this Cloud Memorystore cluster.
`tier` | string | Tier specifies the replication level of the Redis cluster. BASIC provides a single Redis instance with no high availability. STANDARD_HA provides a cluster of two Redis instances in distinct availability zones. https://cloud.google.com/memorystore/docs/redis/redis-tiers
`memorySizeGb` | int32 | Redis memory size in GiB.
`displayName` | Optional string | An arbitrary and optional user-provided name for the instance.
`labels` | Optional map[string]string | Resource labels to represent user provided metadata
`locationId` | Optional string | The zone where the instance will be provisioned. If not provided, the service will choose a zone for the instance. For STANDARD_HA tier, instances will be created across two zones for protection against zonal failures. If [alternative_location_id] is also provided, it must be different from [location_id].
`alternativeLocationId` | Optional string | Only applicable to STANDARD_HA tier which protects the instance against zonal failures by provisioning it across two zones. If provided, it must be a different zone from the one provided in [location_id].
`redisVersion` | Optional string | The version of Redis software. If not provided, latest supported version will be used. Updating the version will perform an upgrade/downgrade to the new version. Currently, the supported values are: * `REDIS_4_0` for Redis 4.0 compatibility (default) * `REDIS_3_2` for Redis 3.2 compatibility
`reservedIpRange` | Optional string | The CIDR range of internal addresses that are reserved for this instance. If not provided, the service will choose an unused /29 block, for example, 10.0.0.0/29 or 192.168.0.0/29. Ranges must be unique and non-overlapping with existing subnets in an authorized network.
`redisConfigs` | Optional map[string]string | Redis configuration parameters, according to http://redis.io/topics/config. Currently, the only supported parameters are: Redis 3.2 and above: * maxmemory-policy * notify-keyspace-events Redis 4.0 and above: * activedefrag * lfu-log-factor * lfu-decay-time
`authorizedNetwork` | Optional string | The full name of the Google Compute Engine [network](/compute/docs/networks-and-firewalls#networks) to which the instance is connected. If left unspecified, the `default` network will be used.
## CloudMemorystoreInstanceSpec
A CloudMemorystoreInstanceSpec defines the desired state of a CloudMemorystoreInstance.
Appears in:
* [CloudMemorystoreInstance](#CloudMemorystoreInstance)
Name | Type | Description
-----|------|------------
`forProvider` | [CloudMemorystoreInstanceParameters](#CloudMemorystoreInstanceParameters) | CloudMemorystoreInstanceParameters define the desired state of an Google Cloud Memorystore instance. Most fields map directly to an Instance: https://cloud.google.com/memorystore/docs/redis/reference/rest/v1/projects.locations.instances#Instance
CloudMemorystoreInstanceSpec supports all fields of:
* [v1alpha1.ResourceSpec](../crossplane-runtime/core-crossplane-io-v1alpha1.md#resourcespec)
## CloudMemorystoreInstanceStatus
A CloudMemorystoreInstanceStatus represents the observed state of a CloudMemorystoreInstance.
Appears in:
* [CloudMemorystoreInstance](#CloudMemorystoreInstance)
Name | Type | Description
-----|------|------------
`atProvider` | [CloudMemorystoreInstanceObservation](#CloudMemorystoreInstanceObservation) | CloudMemorystoreInstanceObservation is used to show the observed state of the CloudMemorystore resource on GCP.
CloudMemorystoreInstanceStatus supports all fields of:
* [v1alpha1.ResourceStatus](../crossplane-runtime/core-crossplane-io-v1alpha1.md#resourcestatus)
This API documentation was generated by `crossdocs`.

View File

@ -0,0 +1,554 @@
# compute.gcp.crossplane.io/v1alpha3 API Reference
Package v1alpha3 contains managed resources for GCP compute services such as GKE.
This API group contains the following Crossplane resources:
* [GKECluster](#GKECluster)
* [GKEClusterClass](#GKEClusterClass)
* [GlobalAddress](#GlobalAddress)
* [Network](#Network)
* [Subnetwork](#Subnetwork)
## GKECluster
A GKECluster is a managed resource that represents a Google Kubernetes Engine cluster.
Name | Type | Description
-----|------|------------
`apiVersion` | string | `compute.gcp.crossplane.io/v1alpha3`
`kind` | string | `GKECluster`
`metadata` | [meta/v1.ObjectMeta](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#objectmeta-v1-meta) | Kubernetes object metadata.
`spec` | [GKEClusterSpec](#GKEClusterSpec) | A GKEClusterSpec defines the desired state of a GKECluster.
`status` | [GKEClusterStatus](#GKEClusterStatus) | A GKEClusterStatus represents the observed state of a GKECluster.
## GKEClusterClass
A GKEClusterClass is a resource class. It defines the desired spec of resource claims that use it to dynamically provision a managed resource.
Name | Type | Description
-----|------|------------
`apiVersion` | string | `compute.gcp.crossplane.io/v1alpha3`
`kind` | string | `GKEClusterClass`
`metadata` | [meta/v1.ObjectMeta](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#objectmeta-v1-meta) | Kubernetes object metadata.
`specTemplate` | [GKEClusterClassSpecTemplate](#GKEClusterClassSpecTemplate) | SpecTemplate is a template for the spec of a dynamically provisioned GKECluster.
## GlobalAddress
A GlobalAddress is a managed resource that represents a Google Compute Engine Global Address.
Name | Type | Description
-----|------|------------
`apiVersion` | string | `compute.gcp.crossplane.io/v1alpha3`
`kind` | string | `GlobalAddress`
`metadata` | [meta/v1.ObjectMeta](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#objectmeta-v1-meta) | Kubernetes object metadata.
`spec` | [GlobalAddressSpec](#GlobalAddressSpec) | A GlobalAddressSpec defines the desired state of a GlobalAddress.
`status` | [GlobalAddressStatus](#GlobalAddressStatus) | A GlobalAddressStatus reflects the observed state of a GlobalAddress.
## Network
A Network is a managed resource that represents a Google Compute Engine VPC Network.
Name | Type | Description
-----|------|------------
`apiVersion` | string | `compute.gcp.crossplane.io/v1alpha3`
`kind` | string | `Network`
`metadata` | [meta/v1.ObjectMeta](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#objectmeta-v1-meta) | Kubernetes object metadata.
`spec` | [NetworkSpec](#NetworkSpec) | A NetworkSpec defines the desired state of a Network.
`status` | [NetworkStatus](#NetworkStatus) | A NetworkStatus represents the observed state of a Network.
## Subnetwork
A Subnetwork is a managed resource that represents a Google Compute Engine VPC Subnetwork.
Name | Type | Description
-----|------|------------
`apiVersion` | string | `compute.gcp.crossplane.io/v1alpha3`
`kind` | string | `Subnetwork`
`metadata` | [meta/v1.ObjectMeta](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#objectmeta-v1-meta) | Kubernetes object metadata.
`spec` | [SubnetworkSpec](#SubnetworkSpec) | A SubnetworkSpec defines the desired state of a Subnetwork.
`status` | [SubnetworkStatus](#SubnetworkStatus) | A SubnetworkStatus represents the observed state of a Subnetwork.
## GCPNetworkPeering
A GCPNetworkPeering represents the observed state of a Google Compute Engine VPC Network Peering.
Name | Type | Description
-----|------|------------
`autoCreateRoutes` | bool | AutoCreateRoutes: This field will be deprecated soon. Use the exchange_subnet_routes field instead. Indicates whether full mesh connectivity is created and managed automatically between peered networks. Currently this field should always be true since Google Compute Engine will automatically create and manage subnetwork routes between two networks when peering state is ACTIVE.
`exchangeSubnetRoutes` | bool | ExchangeSubnetRoutes: Indicates whether full mesh connectivity is created and managed automatically between peered networks. Currently this field should always be true since Google Compute Engine will automatically create and manage subnetwork routes between two networks when peering state is ACTIVE.
`name` | string | Name: Name of this peering. Provided by the client when the peering is created. The name must comply with RFC1035. Specifically, the name must be 1-63 characters long and match regular expression `[a-z]([-a-z0-9]*[a-z0-9])?`. The first character must be a lowercase letter, and all the following characters must be a dash, lowercase letter, or digit, except the last character, which cannot be a dash.
`network` | string | Network: The URL of the peer network. It can be either full URL or partial URL. The peer network may belong to a different project. If the partial URL does not contain project, it is assumed that the peer network is in the same project as the current network.
`state` | string | State: State for the peering, either `ACTIVE` or `INACTIVE`. The peering is `ACTIVE` when there&#39;s a matching configuration in the peer network. Possible values: &#34;ACTIVE&#34; &#34;INACTIVE&#34;
`stateDetails` | string | StateDetails: Details about the current state of the peering.
## GCPNetworkRoutingConfig
A GCPNetworkRoutingConfig specifies the desired state of a Google Compute Engine VPC Network Routing configuration.
Appears in:
* [GCPNetworkStatus](#GCPNetworkStatus)
* [NetworkParameters](#NetworkParameters)
Name | Type | Description
-----|------|------------
`routingMode` | string | RoutingMode: The network-wide routing mode to use. If set to REGIONAL, this network&#39;s Cloud Routers will only advertise routes with subnets of this network in the same region as the router. If set to GLOBAL, this network&#39;s Cloud Routers will advertise routes with all subnets of this network, across regions. Possible values: &#34;GLOBAL&#34; &#34;REGIONAL&#34;
## GCPNetworkStatus
A GCPNetworkStatus represents the observed state of a Google Compute Engine VPC Network.
Appears in:
* [NetworkStatus](#NetworkStatus)
Name | Type | Description
-----|------|------------
`IPv4Range` | string | IPv4Range: Deprecated in favor of subnet mode networks. The range of internal addresses that are legal on this network. This range is a CIDR specification, for example: 192.168.0.0/16. Provided by the client when the network is created.
`autoCreateSubnetworks` | bool | AutoCreateSubnetworks: When set to true, the VPC network is created in &#34;auto&#34; mode. When set to false, the VPC network is created in &#34;custom&#34; mode. An auto mode VPC network starts with one subnet per region. Each subnet has a predetermined range as described in Auto mode VPC network IP ranges.
`creationTimestamp` | string | CreationTimestamp: Creation timestamp in RFC3339 text format.
`description` | string | Description: An optional description of this resource. Provide this field when you create the resource.
`gatewayIPv4` | string | GatewayIPv4: The gateway address for default routing out of the network, selected by GCP.
`id` | uint64 | Id: The unique identifier for the resource. This identifier is defined by the server.
`peerings` | [[]*github.com/crossplaneio/stack-gcp/apis/compute/v1alpha3.GCPNetworkPeering](#*github.com/crossplaneio/stack-gcp/apis/compute/v1alpha3.GCPNetworkPeering) | Peerings: A list of network peerings for the resource.
`routingConfig` | [GCPNetworkRoutingConfig](#GCPNetworkRoutingConfig) | RoutingConfig: The network-level routing configuration for this network. Used by Cloud Router to determine what type of network-wide routing behavior to enforce.
`selfLink` | string | SelfLink: Server-defined URL for the resource.
`subnetworks` | []string | Subnetworks: Server-defined fully-qualified URLs for all subnetworks in this VPC network.
## GCPSubnetworkSecondaryRange
A GCPSubnetworkSecondaryRange defines the state of a Google Compute Engine VPC Subnetwork secondary range.
Name | Type | Description
-----|------|------------
`ipCidrRange` | string | IPCIDRRange: The range of IP addresses belonging to this subnetwork secondary range. Provide this property when you create the subnetwork. Ranges must be unique and non-overlapping with all primary and secondary IP ranges within a network. Only IPv4 is supported.
`rangeName` | string | RangeName: The name associated with this subnetwork secondary range, used when adding an alias IP range to a VM instance. The name must be 1-63 characters long, and comply with RFC1035. The name must be unique within the subnetwork.
## GCPSubnetworkStatus
A GCPSubnetworkStatus represents the observed state of a Google Compute Engine VPC Subnetwork.
Appears in:
* [SubnetworkStatus](#SubnetworkStatus)
Name | Type | Description
-----|------|------------
`creationTimestamp` | string | CreationTimestamp: Creation timestamp in RFC3339 text format.
`description` | string | Description: An optional description of this resource. Provide this property when you create the resource. This field can be set only at resource creation time.
`enableFlowLogs` | bool | EnableFlowLogs: Whether to enable flow logging for this subnetwork. If this field is not explicitly set, it will not appear in get listings. If not set the default behavior is to disable flow logging.
`fingerprint` | string | Fingerprint: Fingerprint of this resource. A hash of the contents stored in this object. This field is used in optimistic locking. This field will be ignored when inserting a Subnetwork. An up-to-date fingerprint must be provided in order to update the Subnetwork, otherwise the request will fail with error 412 conditionNotMet. To see the latest fingerprint, make a get() request to retrieve a Subnetwork.
`gatewayAddress` | string | GatewayAddress: The gateway address for default routes to reach destination addresses outside this subnetwork.
`id` | uint64 | Id: The unique identifier for the resource. This identifier is defined by the server.
`ipCidrRange` | string | IPCIDRRange: The range of internal addresses that are owned by this subnetwork. Provide this property when you create the subnetwork. For example, 10.0.0.0/8 or 192.168.0.0/16. Ranges must be unique and non-overlapping within a network. Only IPv4 is supported. This field can be set only at resource creation time.
`kind` | string | Kind: Type of the resource. Always compute#subnetwork for Subnetwork resources.
`name` | string | Name: The name of the resource, provided by the client when initially creating the resource. The name must be 1-63 characters long, and comply with RFC1035. Specifically, the name must be 1-63 characters long and match the regular expression `[a-z]([-a-z0-9]*[a-z0-9])?` which means the first character must be a lowercase letter, and all following characters must be a dash, lowercase letter, or digit, except the last character, which cannot be a dash.
`network` | string | Network: The URL of the network to which this subnetwork belongs, provided by the client when initially creating the subnetwork. Only networks that are in the distributed mode can have subnetworks. This field can be set only at resource creation time.
`privateIpGoogleAccess` | bool | PrivateIPGoogleAccess: Whether the VMs in this subnet can access Google services without assigned external IP addresses. This field can be both set at resource creation time and updated using setPrivateIPGoogleAccess.
`region` | string | Region: URL of the region where the Subnetwork resides. This field can be set only at resource creation time.
`secondaryIpRanges` | [[]*github.com/crossplaneio/stack-gcp/apis/compute/v1alpha3.GCPSubnetworkSecondaryRange](#*github.com/crossplaneio/stack-gcp/apis/compute/v1alpha3.GCPSubnetworkSecondaryRange) | SecondaryIPRanges: An array of configurations for secondary IP ranges for VM instances contained in this subnetwork. The primary IP of such VM must belong to the primary ipCidrRange of the subnetwork. The alias IPs may belong to either primary or secondary ranges. This field can be updated with a patch request.
`selfLink` | string | SelfLink: Server-defined URL for the resource.
## GKEClusterClassSpecTemplate
A GKEClusterClassSpecTemplate is a template for the spec of a dynamically provisioned GKECluster.
Appears in:
* [GKEClusterClass](#GKEClusterClass)
GKEClusterClassSpecTemplate supports all fields of:
* [v1alpha1.ClassSpecTemplate](../crossplane-runtime/core-crossplane-io-v1alpha1.md#classspectemplate)
* [GKEClusterParameters](#GKEClusterParameters)
## GKEClusterParameters
GKEClusterParameters define the desired state of a Google Kubernetes Engine cluster.
Appears in:
* [GKEClusterClassSpecTemplate](#GKEClusterClassSpecTemplate)
* [GKEClusterSpec](#GKEClusterSpec)
Name | Type | Description
-----|------|------------
`clusterVersion` | Optional string | ClusterVersion is the initial Kubernetes version for this cluster. Users may specify either explicit versions offered by Kubernetes Engine or version aliases, for example &#34;latest&#34;, &#34;1.X&#34;, or &#34;1.X.Y&#34;. Leave unset to use the default version.
`labels` | Optional map[string]string | Labels for the cluster to use to annotate any related Google Compute Engine resources.
`machineType` | Optional string | MachineType is the name of a Google Compute Engine machine type (e.g. n1-standard-1). If unspecified the default machine type is n1-standard-1.
`numNodes` | int64 | NumNodes is the number of nodes to create in this cluster. You must ensure that your Compute Engine resource quota is sufficient for this number of instances. You must also have available firewall and routes quota.
`zone` | Optional string | Zone specifies the name of the Google Compute Engine zone in which this cluster resides.
`scopes` | Optional []string | Scopes are the set of Google API scopes to be made available on all of the node VMs under the &#34;default&#34; service account.
`network` | Optional string | Network is the name of the Google Compute Engine network to which the cluster is connected. If left unspecified, the default network will be used.
`networkRef` | [NetworkURIReferencerForGKECluster](#NetworkURIReferencerForGKECluster) | NetworkRef references to a Network and retrieves its URI
`subnetwork` | Optional string | Subnetwork is the name of the Google Compute Engine subnetwork to which the cluster is connected.
`subnetworkRef` | [SubnetworkURIReferencerForGKECluster](#SubnetworkURIReferencerForGKECluster) | SubnetworkRef references to a Subnetwork and retrieves its URI
`enableIPAlias` | Optional bool | EnableIPAlias determines whether Alias IPs will be used for pod IPs in the cluster.
`createSubnetwork` | Optional bool | CreateSubnetwork determines whether a new subnetwork will be created automatically for the cluster. Only applicable when EnableIPAlias is true.
`nodeIPV4CIDR` | Optional string | NodeIPV4CIDR specifies the IP address range of the instance IPs in this cluster. This is applicable only if CreateSubnetwork is true. Omit this field to have a range chosen with the default size. Set it to a netmask (e.g. /24) to have a range chosen with a specific netmask.
`clusterIPV4CIDR` | Optional string | ClusterIPV4CIDR specifies the IP address range of the pod IPs in this cluster. This is applicable only if EnableIPAlias is true. Omit this field to have a range chosen with the default size. Set it to a netmask (e.g. /24) to have a range chosen with a specific netmask.
`clusterSecondaryRangeName` | Optional string | ClusterSecondaryRangeName specifies the name of the secondary range to be used for the cluster CIDR block. The secondary range will be used for pod IP addresses. This must be an existing secondary range associated with the cluster subnetwork.
`serviceIPV4CIDR` | Optional string | ServiceIPV4CIDR specifies the IP address range of service IPs in this cluster. This is applicable only if EnableIPAlias is true. Omit this field to have a range chosen with the default size. Set it to a netmask (e.g. /24) to have a range chosen with a specific netmask.
`servicesSecondaryRangeName` | string | ServicesSecondaryRangeName specifies the name of the secondary range to be used as for the services CIDR block. The secondary range will be used for service ClusterIPs. This must be an existing secondary range associated with the cluster subnetwork.
## GKEClusterSpec
A GKEClusterSpec defines the desired state of a GKECluster.
Appears in:
* [GKECluster](#GKECluster)
GKEClusterSpec supports all fields of:
* [v1alpha1.ResourceSpec](../crossplane-runtime/core-crossplane-io-v1alpha1.md#resourcespec)
* [GKEClusterParameters](#GKEClusterParameters)
## GKEClusterStatus
A GKEClusterStatus represents the observed state of a GKECluster.
Appears in:
* [GKECluster](#GKECluster)
Name | Type | Description
-----|------|------------
`clusterName` | string | ClusterName is the name of this GKE cluster. The name is automatically generated by Crossplane.
`endpoint` | string | Endpoint of the GKE cluster used in connection strings.
`state` | string | State of this GKE cluster.
GKEClusterStatus supports all fields of:
* [v1alpha1.ResourceStatus](../crossplane-runtime/core-crossplane-io-v1alpha1.md#resourcestatus)
## GlobalAddressNameReferencer
GlobalAddressNameReferencer retrieves a Name from a referenced GlobalAddress object
GlobalAddressNameReferencer supports all fields of:
* [core/v1.LocalObjectReference](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#localobjectreference-v1-core)
## GlobalAddressParameters
GlobalAddressParameters define the desired state of a Google Compute Engine Global Address. Most fields map directly to an Address: https://cloud.google.com/compute/docs/reference/rest/v1/globalAddresses
Appears in:
* [GlobalAddressSpec](#GlobalAddressSpec)
Name | Type | Description
-----|------|------------
`address` | Optional string | Address: The static IP address represented by this resource.
`addressType` | Optional string | AddressType: The type of address to reserve, either INTERNAL or EXTERNAL. If unspecified, defaults to EXTERNAL. Possible values: &#34;EXTERNAL&#34; &#34;INTERNAL&#34; &#34;UNSPECIFIED_TYPE&#34;
`description` | Optional string | Description: An optional description of this resource.
`ipVersion` | Optional string | IPVersion: The IP version that will be used by this address. Valid options are IPV4 or IPV6. Possible values: &#34;IPV4&#34; &#34;IPV6&#34; &#34;UNSPECIFIED_VERSION&#34;
`name` | string | Name of the resource. The name must be 1-63 characters long, and comply with RFC1035. Specifically, the name must be 1-63 characters long and match the regular expression `[a-z]([-a-z0-9]*[a-z0-9])?`. The first character must be a lowercase letter, and all following characters (except for the last character) must be a dash, lowercase letter, or digit. The last character must be a lowercase letter or digit.
`network` | Optional string | Network: The URL of the network in which to reserve the address. This field can only be used with INTERNAL type with the VPC_PEERING purpose.
`networkRef` | [NetworkURIReferencerForGlobalAddress](#NetworkURIReferencerForGlobalAddress) | NetworkRef references to a Network and retrieves its URI
`prefixLength` | Optional int64 | PrefixLength: The prefix length if the resource represents an IP range.
`purpose` | Optional string | Purpose: The purpose of this resource, which can be one of the following values: - `GCE_ENDPOINT` for addresses that are used by VM instances, alias IP ranges, internal load balancers, and similar resources. - `DNS_RESOLVER` for a DNS resolver address in a subnetwork - `VPC_PEERING` for addresses that are reserved for VPC peer networks. - `NAT_AUTO` for addresses that are external IP addresses automatically reserved for Cloud NAT. Possible values: &#34;DNS_RESOLVER&#34; &#34;GCE_ENDPOINT&#34; &#34;NAT_AUTO&#34; &#34;VPC_PEERING&#34;
`subnetwork` | Optional string | Subnetwork: The URL of the subnetwork in which to reserve the address. If an IP address is specified, it must be within the subnetwork&#39;s IP range. This field can only be used with INTERNAL type with a GCE_ENDPOINT or DNS_RESOLVER purpose.
## GlobalAddressSpec
A GlobalAddressSpec defines the desired state of a GlobalAddress.
Appears in:
* [GlobalAddress](#GlobalAddress)
GlobalAddressSpec supports all fields of:
* [v1alpha1.ResourceSpec](../crossplane-runtime/core-crossplane-io-v1alpha1.md#resourcespec)
* [GlobalAddressParameters](#GlobalAddressParameters)
## GlobalAddressStatus
A GlobalAddressStatus reflects the observed state of a GlobalAddress.
Appears in:
* [GlobalAddress](#GlobalAddress)
Name | Type | Description
-----|------|------------
`creationTimestamp` | string | CreationTimestamp in RFC3339 text format.
`id` | uint64 | ID for the resource. This identifier is defined by the server.
`selfLink` | string | SelfLink: Server-defined URL for the resource.
`status` | string | Status of the address, which can be one of RESERVING, RESERVED, or IN_USE. An address that is RESERVING is currently in the process of being reserved. A RESERVED address is currently reserved and available to use. An IN_USE address is currently being used by another resource and is not available. Possible values: &#34;IN_USE&#34; &#34;RESERVED&#34; &#34;RESERVING&#34;
`users` | []string | Users that are using this address.
GlobalAddressStatus supports all fields of:
* [v1alpha1.ResourceStatus](../crossplane-runtime/core-crossplane-io-v1alpha1.md#resourcestatus)
## NetworkParameters
NetworkParameters define the desired state of a Google Compute Engine VPC Network. Most fields map directly to a Network: https://cloud.google.com/compute/docs/reference/rest/v1/networks
Appears in:
* [NetworkSpec](#NetworkSpec)
Name | Type | Description
-----|------|------------
`IPv4Range` | string | IPv4Range: Deprecated in favor of subnet mode networks. The range of internal addresses that are legal on this network. This range is a CIDR specification, for example: 192.168.0.0/16. Provided by the client when the network is created.
`autoCreateSubnetworks` | bool | AutoCreateSubnetworks: When set to true, the VPC network is created in &#34;auto&#34; mode. When set to false, the VPC network is created in &#34;custom&#34; mode. When set to nil, the VPC network is created in &#34;legacy&#34; mode which will be deprecated by GCP soon. An auto mode VPC network starts with one subnet per region. Each subnet has a predetermined range as described in Auto mode VPC network IP ranges.
`description` | string | Description: An optional description of this resource. Provide this field when you create the resource.
`name` | string | Name: Name of the resource. Provided by the client when the resource is created. The name must be 1-63 characters long, and comply with RFC1035. Specifically, the name must be 1-63 characters long and match the regular expression `[a-z]([-a-z0-9]*[a-z0-9])?. The first character must be a lowercase letter, and all following characters (except for the last character) must be a dash, lowercase letter, or digit. The last character must be a lowercase letter or digit.
`routingConfig` | [GCPNetworkRoutingConfig](#GCPNetworkRoutingConfig) | RoutingConfig: The network-level routing configuration for this network. Used by Cloud Router to determine what type of network-wide routing behavior to enforce.
## NetworkSpec
A NetworkSpec defines the desired state of a Network.
Appears in:
* [Network](#Network)
NetworkSpec supports all fields of:
* [v1alpha1.ResourceSpec](../crossplane-runtime/core-crossplane-io-v1alpha1.md#resourcespec)
* [NetworkParameters](#NetworkParameters)
## NetworkStatus
A NetworkStatus represents the observed state of a Network.
Appears in:
* [Network](#Network)
NetworkStatus supports all fields of:
* [v1alpha1.ResourceStatus](../crossplane-runtime/core-crossplane-io-v1alpha1.md#resourcestatus)
* [GCPNetworkStatus](#GCPNetworkStatus)
## NetworkURIReferencer
NetworkURIReferencer retrieves a NetworkURI from a referenced Network object
Appears in:
* [NetworkURIReferencerForGKECluster](#NetworkURIReferencerForGKECluster)
* [NetworkURIReferencerForGlobalAddress](#NetworkURIReferencerForGlobalAddress)
* [NetworkURIReferencerForSubnetwork](#NetworkURIReferencerForSubnetwork)
NetworkURIReferencer supports all fields of:
* [core/v1.LocalObjectReference](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#localobjectreference-v1-core)
## NetworkURIReferencerForGKECluster
NetworkURIReferencerForGKECluster is an attribute referencer that resolves network uri from a referenced Network and assigns it to a GKECluster
Appears in:
* [GKEClusterParameters](#GKEClusterParameters)
NetworkURIReferencerForGKECluster supports all fields of:
* [NetworkURIReferencer](#NetworkURIReferencer)
## NetworkURIReferencerForGlobalAddress
NetworkURIReferencerForGlobalAddress is an attribute referencer that resolves network uri from a referenced Network and assigns it to a global address object
Appears in:
* [GlobalAddressParameters](#GlobalAddressParameters)
NetworkURIReferencerForGlobalAddress supports all fields of:
* [NetworkURIReferencer](#NetworkURIReferencer)
## NetworkURIReferencerForSubnetwork
NetworkURIReferencerForSubnetwork is an attribute referencer that resolves network uri from a referenced Network and assigns it to a subnetwork
Appears in:
* [SubnetworkParameters](#SubnetworkParameters)
NetworkURIReferencerForSubnetwork supports all fields of:
* [NetworkURIReferencer](#NetworkURIReferencer)
## SubnetworkParameters
SubnetworkParameters define the desired state of a Google Compute Engine VPC Subnetwork. Most fields map directly to a Subnetwork: https://cloud.google.com/compute/docs/reference/rest/v1/subnetworks
Appears in:
* [SubnetworkSpec](#SubnetworkSpec)
Name | Type | Description
-----|------|------------
`description` | Optional string | Description: An optional description of this resource. Provide this property when you create the resource. This field can be set only at resource creation time.
`enableFlowLogs` | Optional bool | EnableFlowLogs: Whether to enable flow logging for this subnetwork. If this field is not explicitly set, it will not appear in get listings. If not set the default behavior is to disable flow logging.
`ipCidrRange` | string | IPCIDRRange: The range of internal addresses that are owned by this subnetwork. Provide this property when you create the subnetwork. For example, 10.0.0.0/8 or 192.168.0.0/16. Ranges must be unique and non-overlapping within a network. Only IPv4 is supported. This field can be set only at resource creation time.
`name` | string | Name: The name of the resource, provided by the client when initially creating the resource. The name must be 1-63 characters long, and comply with RFC1035. Specifically, the name must be 1-63 characters long and match the regular expression `[a-z]([-a-z0-9]*[a-z0-9])?` which means the first character must be a lowercase letter, and all following characters must be a dash, lowercase letter, or digit, except the last character, which cannot be a dash.
`network` | string | Network: The URL of the network to which this subnetwork belongs, provided by the client when initially creating the subnetwork. Only networks that are in the distributed mode can have subnetworks. This field can be set only at resource creation time.
`networkRef` | [NetworkURIReferencerForSubnetwork](#NetworkURIReferencerForSubnetwork) | NetworkRef references to a Network and retrieves its URI
`privateIpGoogleAccess` | Optional bool | PrivateIPGoogleAccess: Whether the VMs in this subnet can access Google services without assigned external IP addresses. This field can be both set at resource creation time and updated using setPrivateIPGoogleAccess.
`region` | Optional string | Region: URL of the region where the Subnetwork resides. This field can be set only at resource creation time.
`secondaryIpRanges` | Optional [[]*github.com/crossplaneio/stack-gcp/apis/compute/v1alpha3.GCPSubnetworkSecondaryRange](#*github.com/crossplaneio/stack-gcp/apis/compute/v1alpha3.GCPSubnetworkSecondaryRange) | SecondaryIPRanges: An array of configurations for secondary IP ranges for VM instances contained in this subnetwork. The primary IP of such VM must belong to the primary ipCidrRange of the subnetwork. The alias IPs may belong to either primary or secondary ranges. This field can be updated with a patch request.
## SubnetworkSpec
A SubnetworkSpec defines the desired state of a Subnetwork.
Appears in:
* [Subnetwork](#Subnetwork)
SubnetworkSpec supports all fields of:
* [v1alpha1.ResourceSpec](../crossplane-runtime/core-crossplane-io-v1alpha1.md#resourcespec)
* [SubnetworkParameters](#SubnetworkParameters)
## SubnetworkStatus
A SubnetworkStatus represents the observed state of a Subnetwork.
Appears in:
* [Subnetwork](#Subnetwork)
SubnetworkStatus supports all fields of:
* [v1alpha1.ResourceStatus](../crossplane-runtime/core-crossplane-io-v1alpha1.md#resourcestatus)
* [GCPSubnetworkStatus](#GCPSubnetworkStatus)
## SubnetworkURIReferencer
SubnetworkURIReferencer retrieves a SubnetworkURI from a referenced Subnetwork object
Appears in:
* [SubnetworkURIReferencerForGKECluster](#SubnetworkURIReferencerForGKECluster)
SubnetworkURIReferencer supports all fields of:
* [core/v1.LocalObjectReference](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#localobjectreference-v1-core)
## SubnetworkURIReferencerForGKECluster
SubnetworkURIReferencerForGKECluster is an attribute referencer that resolves subnetwork uri from a referenced Subnetwork and assigns it to a GKECluster
Appears in:
* [GKEClusterParameters](#GKEClusterParameters)
SubnetworkURIReferencerForGKECluster supports all fields of:
* [SubnetworkURIReferencer](#SubnetworkURIReferencer)
This API documentation was generated by `crossdocs`.

View File

@ -0,0 +1,382 @@
# database.gcp.crossplane.io/v1beta1 API Reference
Package v1beta1 contains managed resources for GCP database services such as CloudSQL.
This API group contains the following Crossplane resources:
* [CloudSQLInstance](#CloudSQLInstance)
* [CloudSQLInstanceClass](#CloudSQLInstanceClass)
## CloudSQLInstance
A CloudSQLInstance is a managed resource that represents a Google CloudSQL instance.
Name | Type | Description
-----|------|------------
`apiVersion` | string | `database.gcp.crossplane.io/v1beta1`
`kind` | string | `CloudSQLInstance`
`metadata` | [meta/v1.ObjectMeta](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#objectmeta-v1-meta) | Kubernetes object metadata.
`spec` | [CloudSQLInstanceSpec](#CloudSQLInstanceSpec) | A CloudSQLInstanceSpec defines the desired state of a CloudSQLInstance.
`status` | [CloudSQLInstanceStatus](#CloudSQLInstanceStatus) | A CloudSQLInstanceStatus represents the observed state of a CloudSQLInstance.
## CloudSQLInstanceClass
A CloudSQLInstanceClass is a resource class. It defines the desired spec of resource claims that use it to dynamically provision a managed resource.
Name | Type | Description
-----|------|------------
`apiVersion` | string | `database.gcp.crossplane.io/v1beta1`
`kind` | string | `CloudSQLInstanceClass`
`metadata` | [meta/v1.ObjectMeta](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#objectmeta-v1-meta) | Kubernetes object metadata.
`specTemplate` | [CloudSQLInstanceClassSpecTemplate](#CloudSQLInstanceClassSpecTemplate) | SpecTemplate is a template for the spec of a dynamically provisioned CloudSQLInstance.
## ACLEntry
ACLEntry is an entry for an Access Control list.
Name | Type | Description
-----|------|------------
`expirationTime` | Optional string | ExpirationTime: The time when this access control entry expires in RFC 3339 format, for example 2012-11-15T16:19:00.094Z.
`name` | Optional string | Name: An optional label to identify this entry.
`value` | Optional string | Value: The whitelisted value for the access control list.
## BackupConfiguration
BackupConfiguration is database instance backup configuration.
Appears in:
* [Settings](#Settings)
Name | Type | Description
-----|------|------------
`binaryLogEnabled` | Optional bool | BinaryLogEnabled: Whether binary log is enabled. If backup configuration is disabled, binary log must be disabled as well.
`enabled` | Optional bool | Enabled: Whether this configuration is enabled.
`location` | Optional string | Location: The location of the backup.
`replicationLogArchivingEnabled` | Optional bool | ReplicationLogArchivingEnabled: Reserved for future use.
`startTime` | Optional string | StartTime: Start time for the daily backup configuration in UTC timezone in the 24 hour format - HH:MM.
## CloudSQLInstanceClassSpecTemplate
A CloudSQLInstanceClassSpecTemplate is a template for the spec of a dynamically provisioned CloudSQLInstance.
Appears in:
* [CloudSQLInstanceClass](#CloudSQLInstanceClass)
Name | Type | Description
-----|------|------------
`forProvider` | [CloudSQLInstanceParameters](#CloudSQLInstanceParameters) | CloudSQLInstanceParameters define the desired state of a Google CloudSQL instance.
CloudSQLInstanceClassSpecTemplate supports all fields of:
* [v1alpha1.ClassSpecTemplate](../crossplane-runtime/core-crossplane-io-v1alpha1.md#classspectemplate)
## CloudSQLInstanceObservation
CloudSQLInstanceObservation is used to show the observed state of the Cloud SQL resource on GCP.
Appears in:
* [CloudSQLInstanceStatus](#CloudSQLInstanceStatus)
Name | Type | Description
-----|------|------------
`backendType` | string | BackendType: FIRST_GEN: First Generation instance. MySQL only. SECOND_GEN: Second Generation instance or PostgreSQL instance. EXTERNAL: A database server that is not managed by Google. This property is read-only; use the tier property in the settings object to determine the database type and Second or First Generation.
`currentDiskSize` | int64 | CurrentDiskSize: The current disk usage of the instance in bytes. This property has been deprecated. Users should use the &#34;cloudsql.googleapis.com/database/disk/bytes_used&#34; metric in Cloud Monitoring API instead. Please see this announcement for details.
`connectionName` | string | ConnectionName: Connection name of the Cloud SQL instance used in connection strings.
`diskEncryptionStatus` | [DiskEncryptionStatus](#DiskEncryptionStatus) | DiskEncryptionStatus: Disk encryption status specific to an instance. Applies only to Second Generation instances.
`failoverReplica` | [DatabaseInstanceFailoverReplicaStatus](#DatabaseInstanceFailoverReplicaStatus) | FailoverReplica: The name and status of the failover replica. This property is applicable only to Second Generation instances.
`gceZone` | string | GceZone: The Compute Engine zone that the instance is currently serving from. This value could be different from the zone that was specified when the instance was created if the instance has failed over to its secondary zone.
`ipAddresses` | [[]*github.com/crossplaneio/stack-gcp/apis/database/v1beta1.IPMapping](#*github.com/crossplaneio/stack-gcp/apis/database/v1beta1.IPMapping) | IPAddresses: The assigned IP addresses for the instance.
`ipv6Address` | string | IPv6Address: The IPv6 address assigned to the instance. This property is applicable only to First Generation instances.
`project` | string | Project: The project ID of the project containing the Cloud SQL instance. The Google apps domain is prefixed if applicable.
`selfLink` | string | SelfLink: The URI of this resource.
`serviceAccountEmailAddress` | string | ServiceAccountEmailAddress: The service account email address assigned to the instance. This property is applicable only to Second Generation instances.
`state` | string | State: The current serving state of the Cloud SQL instance. This can be one of the following. RUNNABLE: The instance is running, or is ready to run when accessed. SUSPENDED: The instance is not available, for example due to problems with billing. PENDING_CREATE: The instance is being created. MAINTENANCE: The instance is down for maintenance. FAILED: The instance creation failed. UNKNOWN_STATE: The state of the instance is unknown.
`settingsVersion` | int64 | SettingsVersion: The version of instance settings. This is a required field for update method to make sure concurrent updates are handled properly. During update, use the most recent settingsVersion value for this instance and do not try to update this value.
## CloudSQLInstanceParameters
CloudSQLInstanceParameters define the desired state of a Google CloudSQL instance.
Appears in:
* [CloudSQLInstanceClassSpecTemplate](#CloudSQLInstanceClassSpecTemplate)
* [CloudSQLInstanceSpec](#CloudSQLInstanceSpec)
Name | Type | Description
-----|------|------------
`region` | string | Region: The geographical region. Can be us-central (FIRST_GEN instances only), us-central1 (SECOND_GEN instances only), asia-east1 or europe-west1. Defaults to us-central or us-central1 depending on the instance type (First Generation or Second Generation). The region can not be changed after instance creation.
`settings` | [Settings](#Settings) | Settings: The user settings.
`databaseVersion` | Optional string | DatabaseVersion: The database engine type and version. The databaseVersion field can not be changed after instance creation. MySQL Second Generation instances: MYSQL_5_7 (default) or MYSQL_5_6. PostgreSQL instances: POSTGRES_9_6 (default) or POSTGRES_11 Beta. MySQL First Generation instances: MYSQL_5_6 (default) or MYSQL_5_5
`masterInstanceName` | Optional string | MasterInstanceName: The name of the instance which will act as master in the replication setup.
`diskEncryptionConfiguration` | Optional [DiskEncryptionConfiguration](#DiskEncryptionConfiguration) | DiskEncryptionConfiguration: Disk encryption configuration specific to an instance. Applies only to Second Generation instances.
`failoverReplica` | Optional [DatabaseInstanceFailoverReplicaSpec](#DatabaseInstanceFailoverReplicaSpec) | FailoverReplica: The name and status of the failover replica. This property is applicable only to Second Generation instances.
`gceZone` | Optional string | GceZone: The Compute Engine zone that the instance is currently serving from. This value could be different from the zone that was specified when the instance was created if the instance has failed over to its secondary zone.
`instanceType` | Optional string | InstanceType: The instance type. This can be one of the following. CLOUD_SQL_INSTANCE: A Cloud SQL instance that is not replicating from a master. ON_PREMISES_INSTANCE: An instance running on the customer&#39;s premises. READ_REPLICA_INSTANCE: A Cloud SQL instance configured as a read-replica.
`maxDiskSize` | Optional int64 | MaxDiskSize: The maximum disk size of the instance in bytes.
`onPremisesConfiguration` | Optional [OnPremisesConfiguration](#OnPremisesConfiguration) | OnPremisesConfiguration: Configuration specific to on-premises instances.
`replicaNames` | Optional []string | ReplicaNames: The replicas of the instance.
`suspensionReason` | Optional []string | SuspensionReason: If the instance state is SUSPENDED, the reason for the suspension.
## CloudSQLInstanceSpec
A CloudSQLInstanceSpec defines the desired state of a CloudSQLInstance.
Appears in:
* [CloudSQLInstance](#CloudSQLInstance)
Name | Type | Description
-----|------|------------
`forProvider` | [CloudSQLInstanceParameters](#CloudSQLInstanceParameters) | CloudSQLInstanceParameters define the desired state of a Google CloudSQL instance.
CloudSQLInstanceSpec supports all fields of:
* [v1alpha1.ResourceSpec](../crossplane-runtime/core-crossplane-io-v1alpha1.md#resourcespec)
## CloudSQLInstanceStatus
A CloudSQLInstanceStatus represents the observed state of a CloudSQLInstance.
Appears in:
* [CloudSQLInstance](#CloudSQLInstance)
Name | Type | Description
-----|------|------------
`atProvider` | [CloudSQLInstanceObservation](#CloudSQLInstanceObservation) | CloudSQLInstanceObservation is used to show the observed state of the Cloud SQL resource on GCP.
CloudSQLInstanceStatus supports all fields of:
* [v1alpha1.ResourceStatus](../crossplane-runtime/core-crossplane-io-v1alpha1.md#resourcestatus)
## DatabaseFlags
DatabaseFlags are database flags for Cloud SQL instances.
Name | Type | Description
-----|------|------------
`name` | string | Name: The name of the flag. These flags are passed at instance startup, so include both server options and system variables for MySQL. Flags should be specified with underscores, not hyphens. For more information, see Configuring Database Flags in the Cloud SQL documentation.
`value` | string | Value: The value of the flag. Booleans should be set to on for true and off for false. This field must be omitted if the flag doesn&#39;t take a value.
## DatabaseInstanceFailoverReplicaSpec
DatabaseInstanceFailoverReplicaSpec is where you can specify a name for the failover replica.
Appears in:
* [CloudSQLInstanceParameters](#CloudSQLInstanceParameters)
Name | Type | Description
-----|------|------------
`name` | string | Name: The name of the failover replica. If specified at instance creation, a failover replica is created for the instance. The name doesn&#39;t include the project ID. This property is applicable only to Second Generation instances.
## DatabaseInstanceFailoverReplicaStatus
DatabaseInstanceFailoverReplicaStatus is status of the failover replica.
Appears in:
* [CloudSQLInstanceObservation](#CloudSQLInstanceObservation)
Name | Type | Description
-----|------|------------
`available` | bool | Available: The availability status of the failover replica. A false status indicates that the failover replica is out of sync. The master can only failover to the failover replica when the status is true.
## DiskEncryptionConfiguration
DiskEncryptionConfiguration is disk encryption configuration.
Appears in:
* [CloudSQLInstanceParameters](#CloudSQLInstanceParameters)
Name | Type | Description
-----|------|------------
`kmsKeyName` | string | KmsKeyName: KMS key resource name
## DiskEncryptionStatus
DiskEncryptionStatus is disk encryption status.
Appears in:
* [CloudSQLInstanceObservation](#CloudSQLInstanceObservation)
Name | Type | Description
-----|------|------------
`kmsKeyVersionName` | string | KmsKeyVersionName: KMS key version used to encrypt the Cloud SQL instance disk
## IPConfiguration
IPConfiguration is the IP Management configuration.
Appears in:
* [Settings](#Settings)
Name | Type | Description
-----|------|------------
`authorizedNetworks` | Optional [[]*github.com/crossplaneio/stack-gcp/apis/database/v1beta1.ACLEntry](#*github.com/crossplaneio/stack-gcp/apis/database/v1beta1.ACLEntry) | AuthorizedNetworks: The list of external networks that are allowed to connect to the instance using the IP. In CIDR notation, also known as &#39;slash&#39; notation (e.g. 192.168.100.0/24).
`ipv4Enabled` | Optional bool | Ipv4Enabled: Whether the instance should be assigned an IP address or not.
`privateNetwork` | Optional string | PrivateNetwork: The resource link for the VPC network from which the Cloud SQL instance is accessible for private IP. For example, /projects/myProject/global/networks/default. This setting can be updated, but it cannot be removed after it is set.
`privateNetworkRef` | [NetworkURIReferencerForCloudSQLInstance](#NetworkURIReferencerForCloudSQLInstance) | PrivateNetworkRef references to a Network and retrieves its URI
`requireSsl` | Optional bool | RequireSsl: Whether SSL connections over IP should be enforced or not.
## IPMapping
IPMapping is database instance IP Mapping.
Name | Type | Description
-----|------|------------
`ipAddress` | string | IPAddress: The IP address assigned.
`timeToRetire` | string | TimeToRetire: The due time for this IP to be retired in RFC 3339 format, for example 2012-11-15T16:19:00.094Z. This field is only available when the IP is scheduled to be retired.
`type` | string | Type: The type of this IP address. A PRIMARY address is a public address that can accept incoming connections. A PRIVATE address is a private address that can accept incoming connections. An OUTGOING address is the source address of connections originating from the instance, if supported.
## LocationPreference
LocationPreference is preferred location. This specifies where a Cloud SQL instance should preferably be located, either in a specific Compute Engine zone, or co-located with an App Engine application. Note that if the preferred location is not available, the instance will be located as close as possible within the region. Only one location may be specified.
Appears in:
* [Settings](#Settings)
Name | Type | Description
-----|------|------------
`followGaeApplication` | Optional string | FollowGaeApplication: The AppEngine application to follow, it must be in the same region as the Cloud SQL instance.
`zone` | Optional string | Zone: The preferred Compute Engine zone (e.g. us-central1-a, us-central1-b, etc.).
## MaintenanceWindow
MaintenanceWindow specifies when a v2 Cloud SQL instance should preferably be restarted for system maintenance purposes.
Appears in:
* [Settings](#Settings)
Name | Type | Description
-----|------|------------
`day` | Optional int64 | Day: day of week (1-7), starting on Monday.
`hour` | Optional int64 | Hour: hour of day - 0 to 23.
`updateTrack` | Optional string | UpdateTrack: Maintenance timing setting: canary (Earlier) or stable (Later).
## NetworkURIReferencerForCloudSQLInstance
NetworkURIReferencerForCloudSQLInstance is an attribute referencer that resolves network uri from a referenced Network and assigns it to a CloudSQLInstance
Appears in:
* [IPConfiguration](#IPConfiguration)
NetworkURIReferencerForCloudSQLInstance supports all fields of:
* github.com/crossplaneio/stack-gcp/apis/compute/v1alpha3.NetworkURIReferencer
## OnPremisesConfiguration
OnPremisesConfiguration is on-premises instance configuration.
Appears in:
* [CloudSQLInstanceParameters](#CloudSQLInstanceParameters)
Name | Type | Description
-----|------|------------
`hostPort` | string | HostPort: The host and port of the on-premises instance in host:port format
## Settings
Settings is Cloud SQL database instance settings.
Appears in:
* [CloudSQLInstanceParameters](#CloudSQLInstanceParameters)
Name | Type | Description
-----|------|------------
`tier` | string | Tier: The tier (or machine type) for this instance, for example db-n1-standard-1 (MySQL instances) or db-custom-1-3840 (PostgreSQL instances). For MySQL instances, this property determines whether the instance is First or Second Generation. For more information, see Instance Settings.
`activationPolicy` | Optional string | ActivationPolicy: The activation policy specifies when the instance is activated; it is applicable only when the instance state is RUNNABLE. Valid values: ALWAYS: The instance is on, and remains so even in the absence of connection requests. NEVER: The instance is off; it is not activated, even if a connection request arrives. ON_DEMAND: First Generation instances only. The instance responds to incoming requests, and turns itself off when not in use. Instances with PER_USE pricing turn off after 15 minutes of inactivity. Instances with PER_PACKAGE pricing turn off after 12 hours of inactivity.
`authorizedGaeApplications` | Optional []string | AuthorizedGaeApplications: The App Engine app IDs that can access this instance. First Generation instances only.
`availabilityType` | Optional string | AvailabilityType: Availability type (PostgreSQL instances only). Potential values: ZONAL: The instance serves data from only one zone. Outages in that zone affect data accessibility. REGIONAL: The instance can serve data from more than one zone in a region (it is highly available). For more information, see Overview of the High Availability Configuration.
`crashSafeReplicationEnabled` | Optional bool | CrashSafeReplicationEnabled: Configuration specific to read replica instances. Indicates whether database flags for crash-safe replication are enabled. This property is only applicable to First Generation instances.
`storageAutoResize` | Optional bool | StorageAutoResize: Configuration to increase storage size automatically. The default value is true. Not used for First Generation instances.
`dataDiskType` | Optional string | DataDiskType: The type of data disk: PD_SSD (default) or PD_HDD. Not used for First Generation instances.
`pricingPlan` | Optional string | PricingPlan: The pricing plan for this instance. This can be either PER_USE or PACKAGE. Only PER_USE is supported for Second Generation instances.
`replicationType` | Optional string | ReplicationType: The type of replication this instance uses. This can be either ASYNCHRONOUS or SYNCHRONOUS. This property is only applicable to First Generation instances.
`userLabels` | Optional map[string]string | UserLabels: User-provided labels, represented as a dictionary where each label is a single key value pair.
`databaseFlags` | Optional [[]*github.com/crossplaneio/stack-gcp/apis/database/v1beta1.DatabaseFlags](#*github.com/crossplaneio/stack-gcp/apis/database/v1beta1.DatabaseFlags) | DatabaseFlags is the array of database flags passed to the instance at startup.
`backupConfiguration` | Optional [BackupConfiguration](#BackupConfiguration) | BackupConfiguration is the daily backup configuration for the instance.
`ipConfiguration` | Optional [IPConfiguration](#IPConfiguration) | IPConfiguration: The settings for IP Management. This allows to enable or disable the instance IP and manage which external networks can connect to the instance. The IPv4 address cannot be disabled for Second Generation instances.
`locationPreference` | Optional [LocationPreference](#LocationPreference) | LocationPreference is the location preference settings. This allows the instance to be located as near as possible to either an App Engine app or Compute Engine zone for better performance. App Engine co-location is only applicable to First Generation instances.
`maintenanceWindow` | Optional [MaintenanceWindow](#MaintenanceWindow) | MaintenanceWindow: The maintenance window for this instance. This specifies when the instance can be restarted for maintenance purposes. Not used for First Generation instances.
`dataDiskSizeGb` | Optional int64 | DataDiskSizeGb: The size of data disk, in GB. The data disk size minimum is 10GB. Not used for First Generation instances.
`databaseReplicationEnabled` | Optional bool | DatabaseReplicationEnabled: Configuration specific to read replica instances. Indicates whether replication is enabled or not.
`storageAutoResizeLimit` | Optional int64 | StorageAutoResizeLimit: The maximum size to which storage capacity can be automatically increased. The default value is 0, which specifies that there is no limit. Not used for First Generation instances.
This API documentation was generated by `crossdocs`.

View File

@ -0,0 +1,39 @@
# gcp.crossplane.io/v1alpha3 API Reference
Package v1alpha3 contains the core resources of the Google Cloud Platform.
This API group contains the following Crossplane resources:
* [Provider](#Provider)
## Provider
A Provider configures a GCP &#39;provider&#39;, i.e. a connection to a particular GCP project using a particular GCP service account
Name | Type | Description
-----|------|------------
`apiVersion` | string | `gcp.crossplane.io/v1alpha3`
`kind` | string | `Provider`
`metadata` | [meta/v1.ObjectMeta](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#objectmeta-v1-meta) | Kubernetes object metadata.
`spec` | [ProviderSpec](#ProviderSpec) | A ProviderSpec defines the desired state of a Provider.
## ProviderSpec
A ProviderSpec defines the desired state of a Provider.
Appears in:
* [Provider](#Provider)
Name | Type | Description
-----|------|------------
`credentialsSecretRef` | [v1alpha1.SecretKeySelector](../crossplane-runtime/core-crossplane-io-v1alpha1.md#secretkeyselector) | A Secret containing JSON encoded credentials for a Google Service Account that will be used to authenticate to this GCP Provider.
`projectID` | string | ProjectID is the project name (not numerical ID) of this GCP Provider.
This API documentation was generated by `crossdocs`.

View File

@ -0,0 +1,108 @@
# servicenetworking.gcp.crossplane.io/v1alpha3 API Reference
Package v1alpha3 contains managed resources for GCP service networking services such as connections.
This API group contains the following Crossplane resources:
* [Connection](#Connection)
## Connection
A Connection is a managed resource that represents a Google Cloud Service Networking Connection.
Name | Type | Description
-----|------|------------
`apiVersion` | string | `servicenetworking.gcp.crossplane.io/v1alpha3`
`kind` | string | `Connection`
`metadata` | [meta/v1.ObjectMeta](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#objectmeta-v1-meta) | Kubernetes object metadata.
`spec` | [ConnectionSpec](#ConnectionSpec) | A ConnectionSpec defines the desired state of a Connection.
`status` | [ConnectionStatus](#ConnectionStatus) | A ConnectionStatus represents the observed state of a Connection.
## ConnectionParameters
ConnectionParameters define the desired state of a Google Cloud Service Networking Connection. Most fields map direct to a Connection: https://cloud.google.com/service-infrastructure/docs/service-networking/reference/rest/v1/services.connections#Connection
Appears in:
* [ConnectionSpec](#ConnectionSpec)
Name | Type | Description
-----|------|------------
`parent` | string | Parent: The service that is managing peering connectivity for a service producer&#39;s organization. For Google services that support this functionality, this value is services/servicenetworking.googleapis.com.
`network` | string | Network: The name of service consumer&#39;s VPC network that&#39;s connected with service producer network, in the following format: `projects/{project}/global/networks/{network}`. `{project}` is a project number, such as in `12345` that includes the VPC service consumer&#39;s VPC network. `{network}` is the name of the service consumer&#39;s VPC network.
`networkRef` | [NetworkURIReferencerForConnection](#NetworkURIReferencerForConnection) | NetworkRef references to a Network and retrieves its URI
`reservedPeeringRanges` | Optional []string | ReservedPeeringRanges: The name of one or more allocated IP address ranges for this service producer of type `PEERING`.
`reservedPeeringRangeRefs` | [[]*github.com/crossplaneio/stack-gcp/apis/servicenetworking/v1alpha3.GlobalAddressNameReferencerForConnection](#*github.com/crossplaneio/stack-gcp/apis/servicenetworking/v1alpha3.GlobalAddressNameReferencerForConnection) | ReservedPeeringRangeRefs is a set of references to GlobalAddress objects
## ConnectionSpec
A ConnectionSpec defines the desired state of a Connection.
Appears in:
* [Connection](#Connection)
ConnectionSpec supports all fields of:
* [v1alpha1.ResourceSpec](../crossplane-runtime/core-crossplane-io-v1alpha1.md#resourcespec)
* [ConnectionParameters](#ConnectionParameters)
## ConnectionStatus
A ConnectionStatus represents the observed state of a Connection.
Appears in:
* [Connection](#Connection)
Name | Type | Description
-----|------|------------
`peering` | string | Peering: The name of the VPC Network Peering connection that was created by the service producer.
`service` | string | Service: The name of the peering service that&#39;s associated with this connection, in the following format: `services/{service name}`.
ConnectionStatus supports all fields of:
* [v1alpha1.ResourceStatus](../crossplane-runtime/core-crossplane-io-v1alpha1.md#resourcestatus)
## GlobalAddressNameReferencerForConnection
GlobalAddressNameReferencerForConnection is an attribute referencer that resolves name from a referenced GlobalAddress and assigns it to a Connection
GlobalAddressNameReferencerForConnection supports all fields of:
* github.com/crossplaneio/stack-gcp/apis/compute/v1alpha3.GlobalAddressNameReferencer
## NetworkURIReferencerForConnection
NetworkURIReferencerForConnection is an attribute referencer that resolves network uri from a referenced Network and assigns it to a connection
Appears in:
* [ConnectionParameters](#ConnectionParameters)
NetworkURIReferencerForConnection supports all fields of:
* github.com/crossplaneio/stack-gcp/apis/compute/v1alpha3.NetworkURIReferencer
This API documentation was generated by `crossdocs`.

View File

@ -0,0 +1,395 @@
# storage.gcp.crossplane.io/v1alpha3 API Reference
Package v1alpha3 contains managed resources for GCP storage services such as GCS buckets.
This API group contains the following Crossplane resources:
* [Bucket](#Bucket)
* [BucketClass](#BucketClass)
## Bucket
A Bucket is a managed resource that represents a Google Cloud Storage bucket.
Name | Type | Description
-----|------|------------
`apiVersion` | string | `storage.gcp.crossplane.io/v1alpha3`
`kind` | string | `Bucket`
`metadata` | [meta/v1.ObjectMeta](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#objectmeta-v1-meta) | Kubernetes object metadata.
`spec` | [BucketSpec](#BucketSpec) | A BucketSpec defines the desired state of a Bucket.
`status` | [BucketStatus](#BucketStatus) | A BucketStatus represents the observed state of a Bucket.
## BucketClass
A BucketClass is a resource class. It defines the desired spec of resource claims that use it to dynamically provision a managed resource.
Name | Type | Description
-----|------|------------
`apiVersion` | string | `storage.gcp.crossplane.io/v1alpha3`
`kind` | string | `BucketClass`
`metadata` | [meta/v1.ObjectMeta](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#objectmeta-v1-meta) | Kubernetes object metadata.
`specTemplate` | [BucketClassSpecTemplate](#BucketClassSpecTemplate) | SpecTemplate is a template for the spec of a dynamically provisioned Bucket.
## ACLRule
ACLRule represents a grant for a role to an entity (user, group or team) for a Google Cloud Storage object or bucket.
Appears in:
* [BucketSpecAttrs](#BucketSpecAttrs)
Name | Type | Description
-----|------|------------
`entity` | string |
`entityId` | string |
`role` | string |
`domain` | string |
`email` | string |
`projectTeam` | [ProjectTeam](#ProjectTeam) |
## BucketClassSpecTemplate
A BucketClassSpecTemplate is a template for the spec of a dynamically provisioned Bucket.
Appears in:
* [BucketClass](#BucketClass)
BucketClassSpecTemplate supports all fields of:
* [v1alpha1.ClassSpecTemplate](../crossplane-runtime/core-crossplane-io-v1alpha1.md#classspectemplate)
* [BucketParameters](#BucketParameters)
## BucketEncryption
BucketEncryption is a bucket&#39;s encryption configuration.
Appears in:
* [BucketUpdatableAttrs](#BucketUpdatableAttrs)
Name | Type | Description
-----|------|------------
`defaultKmsKeyName` | string | A Cloud KMS key name, in the form projects/P/locations/L/keyRings/R/cryptoKeys/K, that will be used to encrypt objects inserted into this bucket, if no encryption method is specified. The key&#39;s location must be the same as the bucket&#39;s.
## BucketLogging
BucketLogging holds the bucket&#39;s logging configuration, which defines the destination bucket and optional name prefix for the current bucket&#39;s logs.
Appears in:
* [BucketUpdatableAttrs](#BucketUpdatableAttrs)
Name | Type | Description
-----|------|------------
`logBucket` | string | The destination bucket where the current bucket&#39;s logs should be placed.
`logObjectPrefix` | string | A prefix for log object names.
## BucketOutputAttrs
BucketOutputAttrs represent the subset of metadata for a Google Cloud Storage bucket limited to output (read-only) fields.
Appears in:
* [BucketStatus](#BucketStatus)
Name | Type | Description
-----|------|------------
`bucketPolicyOnly` | [BucketPolicyOnly](#BucketPolicyOnly) | BucketPolicyOnly configures access checks to use only bucket-level IAM policies.
`created` | [meta/v1.Time](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#time-v1-meta) | Created is the creation time of the bucket.
`name` | string | Name is the name of the bucket.
`retentionPolicy` | [RetentionPolicyStatus](#RetentionPolicyStatus) | Retention policy enforces a minimum retention time for all objects contained in the bucket. A RetentionPolicy of nil implies the bucket has no minimum data retention. This feature is in private alpha release. It is not currently available to most customers. It might be changed in backwards-incompatible ways and is not subject to any SLA or deprecation policy.
## BucketParameters
BucketParameters define the desired state of a Google Cloud Storage Bucket. Most fields map directly to a bucket resource: https://cloud.google.com/storage/docs/json_api/v1/buckets#resource
Appears in:
* [BucketClassSpecTemplate](#BucketClassSpecTemplate)
* [BucketSpec](#BucketSpec)
Name | Type | Description
-----|------|------------
`nameFormat` | string | NameFormat specifies the name of the external Bucket. The first instance of the string &#39;%s&#39; will be replaced with the Kubernetes UID of this Bucket.
`serviceAccountSecretRef` | [v1alpha1.SecretReference](../crossplane-runtime/core-crossplane-io-v1alpha1.md#secretreference) | ServiceAccountSecretRef contains GCP ServiceAccount secret that will be used for bucket connection secret credentials
BucketParameters supports all fields of:
* [BucketSpecAttrs](#BucketSpecAttrs)
## BucketPolicyOnly
BucketPolicyOnly configures access checks to use only bucket-level IAM policies.
Appears in:
* [BucketOutputAttrs](#BucketOutputAttrs)
* [BucketUpdatableAttrs](#BucketUpdatableAttrs)
Name | Type | Description
-----|------|------------
`enabled` | bool | Enabled specifies whether access checks use only bucket-level IAM policies. Enabled may be disabled until the locked time.
`lockedTime` | [meta/v1.Time](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#time-v1-meta) | LockedTime specifies the deadline for changing Enabled from true to false.
## BucketSpec
A BucketSpec defines the desired state of a Bucket.
Appears in:
* [Bucket](#Bucket)
BucketSpec supports all fields of:
* [v1alpha1.ResourceSpec](../crossplane-runtime/core-crossplane-io-v1alpha1.md#resourcespec)
* [BucketParameters](#BucketParameters)
## BucketSpecAttrs
BucketSpecAttrs represents the full set of metadata for a Google Cloud Storage bucket limited to all input attributes
Appears in:
* [BucketParameters](#BucketParameters)
Name | Type | Description
-----|------|------------
`acl` | [[]ACLRule](#ACLRule) | ACL is the list of access control rules on the bucket.
`defaultObjectAcl` | [[]ACLRule](#ACLRule) | DefaultObjectACL is the list of access controls to apply to new objects when no object ACL is provided.
`location` | string | Location is the location of the bucket. It defaults to &#34;US&#34;.
`storageClass` | string | StorageClass is the default storage class of the bucket. This defines how objects in the bucket are stored and determines the SLA and the cost of storage. Typical values are &#34;MULTI_REGIONAL&#34;, &#34;REGIONAL&#34;, &#34;NEARLINE&#34;, &#34;COLDLINE&#34;, &#34;STANDARD&#34; and &#34;DURABLE_REDUCED_AVAILABILITY&#34;. Defaults to &#34;STANDARD&#34;, which is equivalent to &#34;MULTI_REGIONAL&#34; or &#34;REGIONAL&#34; depending on the bucket&#39;s location settings.
BucketSpecAttrs supports all fields of:
* [BucketUpdatableAttrs](#BucketUpdatableAttrs)
## BucketStatus
A BucketStatus represents the observed state of a Bucket.
Appears in:
* [Bucket](#Bucket)
Name | Type | Description
-----|------|------------
`attributes` | [BucketOutputAttrs](#BucketOutputAttrs) | BucketOutputAttrs represent the subset of metadata for a Google Cloud Storage bucket limited to output (read-only) fields.
BucketStatus supports all fields of:
* [v1alpha1.ResourceStatus](../crossplane-runtime/core-crossplane-io-v1alpha1.md#resourcestatus)
## BucketUpdatableAttrs
BucketUpdatableAttrs represents the subset of parameters of a Google Cloud Storage bucket that may be updated.
Appears in:
* [BucketSpecAttrs](#BucketSpecAttrs)
Name | Type | Description
-----|------|------------
`bucketPolicyOnly` | [BucketPolicyOnly](#BucketPolicyOnly) | BucketPolicyOnly configures access checks to use only bucket-level IAM policies.
`cors` | [[]CORS](#CORS) | The bucket&#39;s Cross-Origin Resource Sharing (CORS) configuration.
`defaultEventBasedHold` | bool | DefaultEventBasedHold is the default value for event-based hold on newly created objects in this bucket. It defaults to false.
`encryption` | [BucketEncryption](#BucketEncryption) | The encryption configuration used by default for newly inserted objects.
`labels` | map[string]string | Labels are the bucket&#39;s labels.
`lifecycle` | [Lifecycle](#Lifecycle) | Lifecycle is the lifecycle configuration for objects in the bucket.
`logging` | [BucketLogging](#BucketLogging) | The logging configuration.
`predefinedAcl` | string | If not empty, applies a predefined set of access controls. It should be set only when creating a bucket. It is always empty for BucketAttrs returned from the service. See https://cloud.google.com/storage/docs/json_api/v1/buckets/insert for valid values.
`predefinedCefaultObjectAcl` | string | If not empty, applies a predefined set of default object access controls. It should be set only when creating a bucket. It is always empty for BucketAttrs returned from the service. See https://cloud.google.com/storage/docs/json_api/v1/buckets/insert for valid values.
`requesterPays` | bool | RequesterPays reports whether the bucket is a Requester Pays bucket. Clients performing operations on Requester Pays buckets must provide a user project (see BucketHandle.UserProject), which will be billed for the operations.
`retentionPolicy` | [RetentionPolicy](#RetentionPolicy) | Retention policy enforces a minimum retention time for all objects contained in the bucket. A RetentionPolicy of nil implies the bucket has no minimum data retention. This feature is in private alpha release. It is not currently available to most customers. It might be changed in backwards-incompatible ways and is not subject to any SLA or deprecation policy.
`versioningEnabled` | bool | VersioningEnabled reports whether this bucket has versioning enabled.
`website` | [BucketWebsite](#BucketWebsite) | The website configuration.
## BucketWebsite
BucketWebsite holds the bucket&#39;s website configuration, controlling how the service behaves when accessing bucket contents as a web site. See https://cloud.google.com/storage/docs/static-website for more information.
Appears in:
* [BucketUpdatableAttrs](#BucketUpdatableAttrs)
Name | Type | Description
-----|------|------------
`mainPageSuffix` | string | If the requested object path is missing, the service will ensure the path has a trailing &#39;/&#39;, append this suffix, and attempt to retrieve the resulting object. This allows the creation of index.html objects to represent directory pages.
`notFundPage` | string | If the requested object path is missing, and any mainPageSuffix object is missing, if applicable, the service will return the named object from this bucket as the content for a 404 Not Found result.
## CORS
CORS is the bucket&#39;s Cross-Origin Resource Sharing (CORS) configuration.
Appears in:
* [BucketUpdatableAttrs](#BucketUpdatableAttrs)
Name | Type | Description
-----|------|------------
`maxAge` | [meta/v1.Duration](https://godoc.org/k8s.io/apimachinery/pkg/apis/meta/v1#Duration) | MaxAge is the value to return in the Access-Control-Max-Age header used in preflight responses.
`methods` | []string | Methods is the list of HTTP methods on which to include CORS response headers, (GET, OPTIONS, POST, etc) Note: &#34;*&#34; is permitted in the list of methods, and means &#34;any method&#34;.
`origins` | []string | Origins is the list of Origins eligible to receive CORS response headers. Note: &#34;*&#34; is permitted in the list of origins, and means &#34;any Origin&#34;.
`responseHeaders` | []string | ResponseHeaders is the list of HTTP headers other than the simple response headers to give permission for the user-agent to share across domains.
## Lifecycle
Lifecycle is the lifecycle configuration for objects in the bucket.
Appears in:
* [BucketUpdatableAttrs](#BucketUpdatableAttrs)
Name | Type | Description
-----|------|------------
`rules` | [[]LifecycleRule](#LifecycleRule) |
## LifecycleAction
LifecycleAction is a lifecycle configuration action.
Appears in:
* [LifecycleRule](#LifecycleRule)
Name | Type | Description
-----|------|------------
`storageClass` | string | StorageClass is the storage class to set on matching objects if the Action is &#34;SetStorageClass&#34;.
`type` | string | Type is the type of action to take on matching objects. Acceptable values are &#34;Delete&#34; to delete matching objects and &#34;SetStorageClass&#34; to set the storage class defined in StorageClass on matching objects.
## LifecycleCondition
LifecycleCondition is a set of conditions used to match objects and take an action automatically. All configured conditions must be met for the associated action to be taken.
Appears in:
* [LifecycleRule](#LifecycleRule)
Name | Type | Description
-----|------|------------
`ageInDays` | int64 | AgeInDays is the age of the object in days.
`createdBefore` | [meta/v1.Time](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#time-v1-meta) | CreatedBefore is the time the object was created. This condition is satisfied when an object is created before midnight of the specified date in UTC.
`liveness` | [storage.Liveness](https://godoc.org/cloud.google.com/go/storage#Liveness) | Liveness specifies the object&#39;s liveness. Relevant only for versioned objects
`matchesStorageClasses` | []string | MatchesStorageClasses is the condition matching the object&#39;s storage class. Values include &#34;MULTI_REGIONAL&#34;, &#34;REGIONAL&#34;, &#34;NEARLINE&#34;, &#34;COLDLINE&#34;, &#34;STANDARD&#34;, and &#34;DURABLE_REDUCED_AVAILABILITY&#34;.
`numNewerVersions` | int64 | NumNewerVersions is the condition matching objects with a number of newer versions. If the value is N, this condition is satisfied when there are at least N versions (including the live version) newer than this version of the object.
## LifecycleRule
LifecycleRule is a lifecycle configuration rule. When all the configured conditions are met by an object in the bucket, the configured action will automatically be taken on that object.
Appears in:
* [Lifecycle](#Lifecycle)
Name | Type | Description
-----|------|------------
`action` | [LifecycleAction](#LifecycleAction) | Action is the action to take when all of the associated conditions are met.
`condition` | [LifecycleCondition](#LifecycleCondition) | Condition is the set of conditions that must be met for the associated action to be taken.
## ProjectTeam
ProjectTeam is the project team associated with the entity, if any.
Appears in:
* [ACLRule](#ACLRule)
Name | Type | Description
-----|------|------------
`projectNumber` | string |
`team` | string |
## RetentionPolicy
RetentionPolicy enforces a minimum retention time for all objects contained in the bucket. Any attempt to overwrite or delete objects younger than the retention period will result in an error. An unlocked retention policy can be modified or removed from the bucket via the Update method. A locked retention policy cannot be removed or shortened in duration for the lifetime of the bucket. This feature is in private alpha release. It is not currently available to most customers. It might be changed in backwards-incompatible ways and is not subject to any SLA or deprecation policy.
Appears in:
* [BucketUpdatableAttrs](#BucketUpdatableAttrs)
Name | Type | Description
-----|------|------------
`retentionPeriodSeconds` | int | RetentionPeriod specifies the duration value in seconds that objects need to be retained. Retention duration must be greater than zero and less than 100 years. Note that enforcement of retention periods less than a day is not guaranteed. Such periods should only be used for testing purposes.
## RetentionPolicyStatus
RetentionPolicyStatus output component of storage.RetentionPolicy
Appears in:
* [BucketOutputAttrs](#BucketOutputAttrs)
Name | Type | Description
-----|------|------------
`effectiveTime` | [meta/v1.Time](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#time-v1-meta) | EffectiveTime is the time from which the policy was enforced and effective.
`isLocked` | bool | IsLocked describes whether the bucket is locked. Once locked, an object retention policy cannot be modified.
This API documentation was generated by `crossdocs`.

View File

@ -0,0 +1,270 @@
# database.rook.crossplane.io/v1alpha1 API Reference
Package v1alpha1 contains database service resources for Rook
This API group contains the following Crossplane resources:
* [CockroachCluster](#CockroachCluster)
* [CockroachClusterClass](#CockroachClusterClass)
* [YugabyteCluster](#YugabyteCluster)
* [YugabyteClusterClass](#YugabyteClusterClass)
## CockroachCluster
A CockroachCluster configures a Rook &#39;clusters.cockroachdb.rook.io&#39;
Name | Type | Description
-----|------|------------
`apiVersion` | string | `database.rook.crossplane.io/v1alpha1`
`kind` | string | `CockroachCluster`
`metadata` | [meta/v1.ObjectMeta](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#objectmeta-v1-meta) | Kubernetes object metadata.
`spec` | [CockroachClusterSpec](#CockroachClusterSpec) | A CockroachClusterSpec defines the desired state of a CockroachCluster.
`status` | [CockroachClusterStatus](#CockroachClusterStatus) | A CockroachClusterStatus defines the current state of a CockroachCluster.
## CockroachClusterClass
A CockroachClusterClass is a resource class. It defines the desired spec of resource claims that use it to dynamically provision a managed resource.
Name | Type | Description
-----|------|------------
`apiVersion` | string | `database.rook.crossplane.io/v1alpha1`
`kind` | string | `CockroachClusterClass`
`metadata` | [meta/v1.ObjectMeta](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#objectmeta-v1-meta) | Kubernetes object metadata.
`specTemplate` | [CockroachClusterClassSpecTemplate](#CockroachClusterClassSpecTemplate) | SpecTemplate is a template for the spec of a dynamically provisioned CockroachCluster.
## YugabyteCluster
A YugabyteCluster configures a Rook &#39;ybclusters.yugabytedb.rook.io&#39;
Name | Type | Description
-----|------|------------
`apiVersion` | string | `database.rook.crossplane.io/v1alpha1`
`kind` | string | `YugabyteCluster`
`metadata` | [meta/v1.ObjectMeta](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#objectmeta-v1-meta) | Kubernetes object metadata.
`spec` | [YugabyteClusterSpec](#YugabyteClusterSpec) | A YugabyteClusterSpec defines the desired state of a YugabyteCluster.
`status` | [YugabyteClusterStatus](#YugabyteClusterStatus) | A YugabyteClusterStatus defines the current state of a YugabyteCluster.
## YugabyteClusterClass
A YugabyteClusterClass is a resource class. It defines the desired spec of resource claims that use it to dynamically provision a managed resource.
Name | Type | Description
-----|------|------------
`apiVersion` | string | `database.rook.crossplane.io/v1alpha1`
`kind` | string | `YugabyteClusterClass`
`metadata` | [meta/v1.ObjectMeta](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#objectmeta-v1-meta) | Kubernetes object metadata.
`specTemplate` | [YugabyteClusterClassSpecTemplate](#YugabyteClusterClassSpecTemplate) | SpecTemplate is a template for the spec of a dynamically provisioned YugabyteCluster.
## CockroachClusterClassSpecTemplate
A CockroachClusterClassSpecTemplate is a template for the spec of a dynamically provisioned CockroachCluster.
Appears in:
* [CockroachClusterClass](#CockroachClusterClass)
Name | Type | Description
-----|------|------------
`forProvider` | [CockroachClusterParameters](#CockroachClusterParameters) | A CockroachClusterParameters defines the desired state of a CockroachCluster.
CockroachClusterClassSpecTemplate supports all fields of:
* [v1alpha1.ClassSpecTemplate](../crossplane-runtime/core-crossplane-io-v1alpha1.md#classspectemplate)
## CockroachClusterParameters
A CockroachClusterParameters defines the desired state of a CockroachCluster.
Appears in:
* [CockroachClusterClassSpecTemplate](#CockroachClusterClassSpecTemplate)
* [CockroachClusterSpec](#CockroachClusterSpec)
Name | Type | Description
-----|------|------------
`name` | string |
`namespace` | string |
`annotations` | [v1alpha1.Annotations](../stack-rook/rook-crossplane-io-v1alpha1.md#annotations) | The annotations-related configuration to add/set on each Pod related object.
`scope` | [v1alpha1.StorageScopeSpec](../stack-rook/rook-crossplane-io-v1alpha1.md#storagescopespec) |
`network` | [NetworkSpec](#NetworkSpec) | NetworkSpec describes network related settings of the cluster
`secure` | bool |
`cachePercent` | int |
`maxSQLMemoryPercent` | int |
## CockroachClusterSpec
A CockroachClusterSpec defines the desired state of a CockroachCluster.
Appears in:
* [CockroachCluster](#CockroachCluster)
Name | Type | Description
-----|------|------------
`forProvider` | [CockroachClusterParameters](#CockroachClusterParameters) | A CockroachClusterParameters defines the desired state of a CockroachCluster.
CockroachClusterSpec supports all fields of:
* [v1alpha1.ResourceSpec](../crossplane-runtime/core-crossplane-io-v1alpha1.md#resourcespec)
## CockroachClusterStatus
A CockroachClusterStatus defines the current state of a CockroachCluster.
Appears in:
* [CockroachCluster](#CockroachCluster)
CockroachClusterStatus supports all fields of:
* [v1alpha1.ResourceStatus](../crossplane-runtime/core-crossplane-io-v1alpha1.md#resourcestatus)
## NetworkSpec
NetworkSpec describes network related settings of the cluster
Appears in:
* [CockroachClusterParameters](#CockroachClusterParameters)
* [ServerSpec](#ServerSpec)
Name | Type | Description
-----|------|------------
`ports` | [[]PortSpec](#PortSpec) | Set of named ports that can be configured for this resource
## PortSpec
PortSpec is named port
Appears in:
* [NetworkSpec](#NetworkSpec)
Name | Type | Description
-----|------|------------
`name` | string | Name of port
`port` | int32 | Port number
## ServerSpec
ServerSpec describes server related settings of the cluster
Appears in:
* [YugabyteClusterParameters](#YugabyteClusterParameters)
Name | Type | Description
-----|------|------------
`replicas` | int32 |
`network` | [NetworkSpec](#NetworkSpec) | NetworkSpec describes network related settings of the cluster
`volumeClaimTemplate` | [core/v1.PersistentVolumeClaim](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#persistentvolumeclaim-v1-core) |
## YugabyteClusterClassSpecTemplate
A YugabyteClusterClassSpecTemplate is a template for the spec of a dynamically provisioned YugabyteCluster.
Appears in:
* [YugabyteClusterClass](#YugabyteClusterClass)
Name | Type | Description
-----|------|------------
`forProvider` | [YugabyteClusterParameters](#YugabyteClusterParameters) | A YugabyteClusterParameters defines the desired state of a YugabyteCluster.
YugabyteClusterClassSpecTemplate supports all fields of:
* [v1alpha1.ClassSpecTemplate](../crossplane-runtime/core-crossplane-io-v1alpha1.md#classspectemplate)
## YugabyteClusterParameters
A YugabyteClusterParameters defines the desired state of a YugabyteCluster.
Appears in:
* [YugabyteClusterClassSpecTemplate](#YugabyteClusterClassSpecTemplate)
* [YugabyteClusterSpec](#YugabyteClusterSpec)
Name | Type | Description
-----|------|------------
`name` | string |
`namespace` | string |
`annotations` | [v1alpha1.Annotations](../stack-rook/rook-crossplane-io-v1alpha1.md#annotations) |
`master` | [ServerSpec](#ServerSpec) | ServerSpec describes server related settings of the cluster
`tserver` | [ServerSpec](#ServerSpec) | ServerSpec describes server related settings of the cluster
## YugabyteClusterSpec
A YugabyteClusterSpec defines the desired state of a YugabyteCluster.
Appears in:
* [YugabyteCluster](#YugabyteCluster)
Name | Type | Description
-----|------|------------
`forProvider` | [YugabyteClusterParameters](#YugabyteClusterParameters) | A YugabyteClusterParameters defines the desired state of a YugabyteCluster.
YugabyteClusterSpec supports all fields of:
* [v1alpha1.ResourceSpec](../crossplane-runtime/core-crossplane-io-v1alpha1.md#resourcespec)
## YugabyteClusterStatus
A YugabyteClusterStatus defines the current state of a YugabyteCluster.
Appears in:
* [YugabyteCluster](#YugabyteCluster)
YugabyteClusterStatus supports all fields of:
* [v1alpha1.ResourceStatus](../crossplane-runtime/core-crossplane-io-v1alpha1.md#resourcestatus)
This API documentation was generated by `crossdocs`.

View File

@ -0,0 +1,25 @@
# rook.crossplane.io/v1alpha1 API Reference
Package v1alpha1 contains database service resources for Rook
This API group contains the following Crossplane resources:
## Annotations
Annotations are a Crossplane representation of Rook Annotations. Alias of map[string]string.
## StorageScopeSpec
StorageScopeSpec defines scope or boundaries of storage that the cluster will use for its underlying storage.
Name | Type | Description
-----|------|------------
`nodeCount` | int |
`volumeClaimTemplates` | [[]core/v1.PersistentVolumeClaim](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/#persistentvolumeclaim-v1-core) | PersistentVolumeClaims to use as storage
This API documentation was generated by `crossdocs`.

View File

@ -0,0 +1,17 @@
---
title: Configure Your Cloud Provider Account
toc: true
weight: 230
indent: true
---
# Configure Your Cloud Provider Account
In order for Crossplane to be able to manage resources in a specific cloud
provider, you will need to create an account for Crossplane to use. Use the
links below for cloud-specific instructions to create an account that can be
used throughout the guides:
* [Google Cloud Platform (GCP) Service Account](cloud-providers/gcp/gcp-provider.md)
* [Microsoft Azure Service Principal](cloud-providers/azure/azure-provider.md)
* [Amazon Web Services (AWS) IAM User](cloud-providers/aws/aws-provider.md)

View File

@ -0,0 +1,134 @@
# Adding Amazon Web Services (AWS) to Crossplane
In this guide, we will walk through the steps necessary to configure your AWS account to be ready for integration with Crossplane. This will be done by adding a [`aw provider`] resource type, which enables Crossplane to communicate with an AWS account.
## Requirements
Prior to adding AWS to Crossplane, following steps need to be taken
- Crossplane is installed in a k8s cluster
- AWS Stack is installed in the same cluster
- `kubectl` is configured to communicate with the same cluster
## Step 1: Configure `aws` CLI
Crossplane uses [AWS security credentials], and stores them as a [secret] which is managed by an [`aw provider`] instance. In addition, the AWS default region is also used for targeting a specific region.
Crossplane requires to have [`aws` command line tool] [installed] and [configured]. Once installed, the credentials and configuration will reside in `~/.aws/credentials` and `~/.aws/config` respectively.
## Step 2: Setup `aws` Provider
Run [setup.sh] script to read `aws` credentials and region, and create an [`aw provider`] instance in Crossplane:
```bash
./cluster/examples/setup-aws-provider/setup.sh [--profile aws_profile]
```
The `--profile` switch is optional and specifies the [aws named profile] that was set in Step 1. If not provided, the `default` profile will be selected.
Once the script is successfully executed, Crossplane will use the specified aws account and region in the given named profile to create subsequent AWS managed resources.
You can confirm the existense of the [`aws provider`] by running:
```bash
kubectl -n crossplane-system get provider/aws-provider
```
## Optional: Setup AWS Provider Manually
An AWS [user][aws user] with `Administrative` privileges is needed to enable
Crossplane to create the required resources. Once the user is provisioned, an
[Access Key][] needs to be created so the user can have API access.
Using the set of [access key credentials][AWS security credentials] for the user
with the right access, we need to [install][install-aws] [`aws cli`][aws command
line tool], and then [configure][aws-cli-configure] it.
When the AWS cli is configured, the credentials and configuration will be in
`~/.aws/credentials` and `~/.aws/config` respectively. These will be consumed in
the next step.
When configuring the AWS cli, the user credentials could be configured under a
specific [AWS named profile][], or under `default`. Without loss of generality,
in this guide let's assume that the credentials are configured under the
`aws_profile` profile (which could also be `default`). We'll use this profile to
setup cloud provider in the next section.
Crossplane uses the AWS user credentials that were configured in the previous
step to create resources in AWS. These credentials will be stored as a
[secret][kubernetes secret] in Kubernetes, and will be used by an [AWS
provider][aws provider] instance. The default AWS region is also pulled from the
cli configuration, and added to the AWS provider.
To store the credentials as a secret, run:
```bash
# retrieve profile's credentials, save it under 'default' profile, and base64 encode it
BASE64ENCODED_AWS_ACCOUNT_CREDS=$(echo -e "[default]\naws_access_key_id = $(aws configure get aws_access_key_id --profile $aws_profile)\naws_secret_access_key = $(aws configure get aws_secret_access_key --profile $aws_profile)" | base64 | tr -d "\n")
# retrieve the profile's region from config
AWS_REGION=$(aws configure get region --profile ${aws_profile})
```
At this point, the region and the encoded credentials are stored in respective
variables. Next, we'll need to create an instance of AWS [provider][aws
provider]:
```bash
cat > provider.yaml <<EOF
---
apiVersion: v1
kind: Secret
metadata:
name: aws-account-creds
namespace: crossplane-system
type: Opaque
data:
credentials: ${BASE64ENCODED_AWS_ACCOUNT_CREDS}
---
apiVersion: aws.crossplane.io/v1alpha3
kind: Provider
metadata:
name: aws-provider
spec:
region: ${AWS_REGION}
credentialsSecretRef:
namespace: crossplane-system
name: aws-account-creds
key: credentials
EOF
# apply it to the cluster:
kubectl apply -f "provider.yaml"
# delete the credentials variable
unset BASE64ENCODED_AWS_ACCOUNT_CREDS
```
The output will look like the following:
```bash
secret/aws-user-creds created
provider.aws.crossplane.io/aws-provider created
```
The `aws-provider` resource will be used in other resources that we will create,
to provide access information to the configured AWS account.
[`aws provider`]: https://github.com/crossplaneio/stack-aws/blob/master/aws/apis/v1alpha3/types.go#L43
[`aws` command line tool]: https://aws.amazon.com/cli/
[AWS SDK for GO]: https://docs.aws.amazon.com/sdk-for-go/v1/developer-guide/setting-up.html
[installed]: https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-install.html
[configured]: https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html
[AWS security credentials]: https://docs.aws.amazon.com/general/latest/gr/aws-security-credentials.html
[secret]:https://kubernetes.io/docs/concepts/configuration/secret/
[setup.sh]: github.com/crossplaneio/crossplane/cluster/examples/setup-aws-provider/setup.sh
[aws named profile]: https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-profiles.html
[aws user]: https://docs.aws.amazon.com/mediapackage/latest/ug/setting-up-create-iam-user.html
[Access Key]: https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_access-keys.html
[AWS security credentials]: https://docs.aws.amazon.com/general/latest/gr/aws-security-credentials.html
[aws provider]: https://github.com/crossplaneio/stack-aws/blob/master/apis/v1alpha3/types.go#L43?ref=master
[aws command line tool]: https://aws.amazon.com/cli/
[install-aws]: https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-install.html
[aws-cli-configure]: https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html
[kubernetes secret]: https://kubernetes.io/docs/concepts/configuration/secret/
[AWS named profile]: https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-profiles.html

View File

@ -0,0 +1,117 @@
# Adding Microsoft Azure to Crossplane
In this guide, we will walk through the steps necessary to configure your Azure account to be ready for integration with Crossplane.
The general steps we will take are summarized below:
* Create a new service principal (account) that Crossplane will use to create and manage Azure resources
* Add the required permissions to the account
* Consent to the permissions using an administrator account
## Preparing your Microsoft Azure Account
In order to manage resources in Azure, you must provide credentials for a Azure service principal that Crossplane can use to authenticate.
This assumes that you have already [set up the Azure CLI client](https://docs.microsoft.com/en-us/cli/azure/authenticate-azure-cli?view=azure-cli-latest) with your credentials.
Create a JSON file that contains all the information needed to connect and authenticate to Azure:
```console
# create service principal with Owner role
az ad sp create-for-rbac --sdk-auth --role Owner > crossplane-azure-provider-key.json
```
Take note of the `clientID` value from the JSON file that we just created, and save it to an environment variable:
```console
export AZURE_CLIENT_ID=<clientId value from json file>
```
Now add the required permissions to the service principal that will allow it to manage the necessary resources in Azure:
```console
# add required Azure Active Directory permissions
az ad app permission add --id ${AZURE_CLIENT_ID} --api 00000002-0000-0000-c000-000000000000 --api-permissions 1cda74f2-2616-4834-b122-5cb1b07f8a59=Role 78c8a3c8-a07e-4b9e-af1b-b5ccab50a175=Role
# grant (activate) the permissions
az ad app permission grant --id ${AZURE_CLIENT_ID} --api 00000002-0000-0000-c000-000000000000 --expires never
```
You might see an error similar to the following, but that is OK, the permissions should have gone through still:
```console
Operation failed with status: 'Conflict'. Details: 409 Client Error: Conflict for url: https://graph.windows.net/e7985bc4-a3b3-4f37-b9d2-fa256023b1ae/oauth2PermissionGrants?api-version=1.6
```
After these steps are completed, you should have the following file on your local filesystem:
* `crossplane-azure-provider-key.json`
## Grant Consent to Application Permissions
One more step is required to fully grant the permissions to the new service principal.
From the Azure Portal, you need to grant consent for the permissions using an admin account.
The steps to perform this action are listed below:
1. `echo ${AZURE_CLIENT_ID}` and note this ID value
1. Navigate to the Azure Portal: https://portal.azure.com
1. Click `Azure Active Directory`, or find it in the `All services` list
1. Click `App registrations (Preview)`
1. Click on the application from the list where the application (client) ID matches the value from step 1
1. Click `API permissions`
1. Click `Grant admin consent for Default Directory`
1. Click `Yes`
## Setup Azure Provider
Before creating any resources, we need to create and configure an Azure cloud
provider resource in Crossplane, which stores the cloud account information in
it. All the requests from Crossplane to Azure Cloud will use the credentials
attached to this provider resource. The following command assumes that you have
a `crossplane-azure-provider-key.json` file that belongs to the account youd
like Crossplane to use.
```bash
BASE64ENCODED_AZURE_ACCOUNT_CREDS=$(base64 crossplane-azure-provider-key.json | tr -d "\n")
```
Now well create our `Secret` that contains the credential and `Provider`
resource that refers to that secret:
```bash
cat > provider.yaml <<EOF
---
apiVersion: v1
kind: Secret
metadata:
name: azure-account-creds
namespace: crossplane-system
type: Opaque
data:
credentials: ${BASE64ENCODED_AZURE_ACCOUNT_CREDS}
---
apiVersion: azure.crossplane.io/v1alpha3
kind: Provider
metadata:
name: azure-provider
spec:
credentialsSecretRef:
namespace: crossplane-system
name: azure-account-creds
key: credentials
EOF
# apply it to the cluster:
kubectl apply -f "provider.yaml"
# delete the credentials variable
unset BASE64ENCODED_AZURE_ACCOUNT_CREDS
```
The output will look like the following:
```bash
secret/azure-user-creds created
provider.azure.crossplane.io/azure-provider created
```
The `azure-provider` resource will be used in other resources that we will
create, to provide access information to the configured Azure account.

View File

@ -0,0 +1,206 @@
# Adding Google Cloud Platform (GCP) to Crossplane
In this guide, we will walk through the steps necessary to configure your GCP account to be ready for integration with Crossplane.
The general steps we will take are summarized below:
* Create a new example project that all resources will be deployed to
* Enable required APIs such as Kubernetes and CloudSQL
* Create a service account that will be used to perform GCP operations from Crossplane
* Assign necessary roles to the service account
* Enable billing
For your convenience, the specific steps to accomplish those tasks are provided for you below using either the `gcloud` command line tool, or the GCP console in a web browser.
You can choose whichever you are more comfortable with.
## Option 1: gcloud Command Line Tool
If you have the `gcloud` tool installed, you can run the commands below from the crossplane directory.
Instructions for installing `gcloud` can be found in the [Google docs](https://cloud.google.com/sdk/install).
### Using `gcp-credentials.sh`
In the `cluster/examples` directory you will find a helper script, `gcp-credentials.sh`. This script will prompt you for the organization, project, and billing account that will be used by `gcloud` when creating a project, service account, and credentials file (`crossplane-gcp-provider-key.json`). The chosen project and created service account will have access to the services and roles sufficient to run the Crossplane GCP examples.
```console
$ cluster/examples/gcp-credentials.sh
... EXAMPLE OUTPUT ONLY
export ORGANIZATION_ID=987654321
export PROJECT_ID=crossplane-example-1234
export EXAMPLE_SA=example-1234@crossplane-example-1234.iam.gserviceaccount.com
export BASE64ENCODED_GCP_PROVIDER_CREDS=$(base64 crossplane-gcp-provider-key.json | tr -d "\n")
```
After running `gcp-credentials.sh`, a series of `export` commands will be shown. Copy and paste the `export` commands that are provided. These variable names will be referenced throughout the Crossplane examples, generally with a `sed` command.
You will also find a `crossplane-gcp-provider-key.json` file in the current working directory. Be sure to remove this file when you are done with the example projects.
### Running `gcloud` by hand
```bash
# list your organizations (if applicable), take note of the specific organization ID you want to use
# if you have more than one organization (not common)
gcloud organizations list
# create a new project (project id must be <=30 characters)
export EXAMPLE_PROJECT_ID=crossplane-example-123
gcloud projects create $EXAMPLE_PROJECT_ID --enable-cloud-apis # [--organization $ORGANIZATION_ID]
# or, record the PROJECT_ID value of an existing project
# export EXAMPLE_PROJECT_ID=$(gcloud projects list --filter NAME=$EXAMPLE_PROJECT_NAME --format="value(PROJECT_ID)")
# link billing to the new project
gcloud beta billing accounts list
gcloud beta billing projects link $EXAMPLE_PROJECT_ID --billing-account=$ACCOUNT_ID
# enable Kubernetes API
gcloud --project $EXAMPLE_PROJECT_ID services enable container.googleapis.com
# enable CloudSQL API
gcloud --project $EXAMPLE_PROJECT_ID services enable sqladmin.googleapis.com
# enable Redis API
gcloud --project $EXAMPLE_PROJECT_ID services enable redis.googleapis.com
# enable Compute API
gcloud --project $EXAMPLE_PROJECT_ID services enable compute.googleapis.com
# enable Additional APIs needed for the example or project
# See `gcloud services list` for a complete list
# create service account
gcloud --project $EXAMPLE_PROJECT_ID iam service-accounts create example-123 --display-name "Crossplane Example"
# export service account email
export EXAMPLE_SA="example-123@$EXAMPLE_PROJECT_ID.iam.gserviceaccount.com"
# create service account key (this will create a `crossplane-gcp-provider-key.json` file in your current working directory)
gcloud --project $EXAMPLE_PROJECT_ID iam service-accounts keys create --iam-account $EXAMPLE_SA crossplane-gcp-provider-key.json
# assign roles
gcloud projects add-iam-policy-binding $EXAMPLE_PROJECT_ID --member "serviceAccount:$EXAMPLE_SA" --role="roles/iam.serviceAccountUser"
gcloud projects add-iam-policy-binding $EXAMPLE_PROJECT_ID --member "serviceAccount:$EXAMPLE_SA" --role="roles/cloudsql.admin"
gcloud projects add-iam-policy-binding $EXAMPLE_PROJECT_ID --member "serviceAccount:$EXAMPLE_SA" --role="roles/container.admin"
gcloud projects add-iam-policy-binding $EXAMPLE_PROJECT_ID --member "serviceAccount:$EXAMPLE_SA" --role="roles/redis.admin"
gcloud projects add-iam-policy-binding $EXAMPLE_PROJECT_ID --member "serviceAccount:$EXAMPLE_SA" --role="roles/compute.networkAdmin"
```
## Option 2: GCP Console in a Web Browser
If you chose to use the `gcloud` tool, you can skip this section entirely.
Create a GCP example project which we will use to host our example GKE cluster, as well as our example CloudSQL instance.
- Login into [GCP Console](https://console.cloud.google.com)
- Create a [new project](https://console.cloud.google.com/flows/enableapi?apiid=container.googleapis.com,sqladmin.googleapis.com,redis.googleapis.com) (either stand alone or under existing organization)
- Create Example Service Account
- Navigate to: [Create Service Account](https://console.cloud.google.com/iam-admin/serviceaccounts)
- `Service Account Name`: type "example"
- `Service Account ID`: leave auto assigned
- `Service Account Description`: type "Crossplane example"
- Click `Create` button
- This should advance to the next section `2 Grant this service account to project (optional)`
- We will assign this account 3 roles:
- `Service Account User`
- `Cloud SQL Admin`
- `Kubernetes Engine Admin`
- `Compute Network Admin`
- Click `Create` button
- This should advance to the next section `3 Grant users access to this service account (optional)`
- We don't need to assign any user or admin roles to this account for the example purposes, so you can leave following two fields blank:
- `Service account users role`
- `Service account admins role`
- Next, we will create and export service account key
- Click `+ Create Key` button.
- This should open a `Create Key` side panel
- Select `json` for the Key type (should be selected by default)
- Click `Create`
- This should show `Private key saved to your computer` confirmation dialog
- You also should see `crossplane-example-1234-[suffix].json` file in your browser's Download directory
- Save (copy or move) this file into example (this) directory, with new name `crossplane-gcp-provider-key.json`
- Enable `Cloud SQL API`
- Navigate to [Cloud SQL Admin API](https://console.developers.google.com/apis/api/sqladmin.googleapis.com/overview)
- Click `Enable`
- Enable `Kubernetes Engine API`
- Navigate to [Kubernetes Engine API](https://console.developers.google.com/apis/api/container.googleapis.com/overview)
- Click `Enable`
- Enable `Cloud Memorystore for Redis`
- Navigate to [Cloud Memorystore for Redis](https://console.developers.google.com/apis/api/redis.googleapis.com/overview)
- Click `Enable`
- Enable `Compute Engine API`
- Navigate to [Compute Engine API](https://console.developers.google.com/apis/api/compute.googleapis.com/overview)
- Click `Enable`
### Enable Billing
You will need to enable billing for your account in order to create and use Kubernetes clusters with GKE.
- Go to [GCP Console](https://console.cloud.google.com)
- Select example project
- Click `Enable Billing`
- Go to [Kubernetes Clusters](https://console.cloud.google.com/kubernetes/list)
- Click `Enable Billing`
## Setup GCP Provider
Before creating any resources, we need to create and configure a GCP cloud
provider resource in Crossplane, which stores the cloud account information in
it. All the requests from Crossplane to GCP will use the credentials attached to
this provider resource. The following command assumes that you have a
`crossplane-gcp-provider-key.json` file that belongs to the account that will be
used by Crossplane, which has GCP project id. You should be able to get the
project id from the JSON credentials file or from the GCP console. Without loss
of generality, let's assume the project id is `my-cool-gcp-project` in this
guide.
First, let's encode the credential file contents and put it in a variable:
```bash
# base64 encode the GCP credentials
BASE64ENCODED_GCP_ACCOUNT_CREDS=$(base64 crossplane-gcp-provider-key.json | tr -d "\n")
```
Now well create the `Secret` resource that contains the credential, and
`Provider` resource which refers to that secret:
```bash
cat > provider.yaml <<EOF
---
apiVersion: v1
kind: Secret
metadata:
name: gcp-account-creds
namespace: crossplane-system
type: Opaque
data:
credentials: ${BASE64ENCODED_GCP_ACCOUNT_CREDS}
---
apiVersion: gcp.crossplane.io/v1alpha3
kind: Provider
metadata:
name: gcp-provider
spec:
# replace this with your own gcp project id
projectID: my-cool-gcp-project
credentialsSecretRef:
namespace: crossplane-system
name: gcp-account-creds
key: credentials
EOF
# apply it to the cluster:
kubectl apply -f "provider.yaml"
# delete the credentials variable
unset BASE64ENCODED_GCP_ACCOUNT_CREDS
```
The output will look like the following:
```bash
secret/gcp-user-creds created
provider.gcp.crossplane.io/gcp-provider created
```
The `gcp-provider` resource will be used in other resources that we will
create, to provide access information to the configured GCP account.

464
docs/v0.4/concepts.md Normal file
View File

@ -0,0 +1,464 @@
---
title: Concepts
toc: true
weight: 310
---
# Table of Contents
1. [Concepts](#concepts)
2. [Feature Areas](#feature-areas)
3. [Glossary](#glossary)
# Concepts
## Control Plane
Crossplane is an open source multicloud control plane that consists of smart
controllers that can work across clouds to enable workload portability,
provisioning and full-lifecycle management of infrastructure across a wide range
of providers, vendors, regions, and offerings. The control plane presents a
declarative management style API that covers a wide range of portable
abstractions that facilitate these goals across disparate environments,
clusters, regions, and clouds. Crossplane can be thought of as a higher-order
orchestrator across cloud providers. For convenience, Crossplane can run
directly on-top of an existing Kubernetes cluster without requiring any changes,
even though Crossplane does not necessarily schedule or run any containers on
the host cluster.
## Resources and Workloads
In Crossplane, a *resource* represents an external piece of infrastructure
ranging from low level services like clusters and servers, to higher level
infrastructure like databases, message queues, buckets, and more. Resources are
represented as persistent object within the crossplane, and they typically
manage one or more pieces of external infrastructure within a cloud provider or
cloud offering. Resources can also represent local or in-cluster services.
We model *workloads* as schedulable units of work that the user intends to run
on a cloud provider. Crossplane will support multiple types of workloads
including container and serverless. You can think of workloads as units that run
**your** code and applications. Every type of workload has a different kind of
payload. For example, a container workload can include a set of objects that
will be deployed on a managed Kubernetes cluster, or a reference to helm chart,
etc. A serverless workload could include a function that will run on a
serverless managed service. Workloads can contain requirements for where and how
the workload can run, including regions, providers, affinity, cost, and others
that the scheduler can use when assigning the workload.
## Resource Claims and Resource Classes
To support workload portability we expose the concept of a resource claim and a
resource class. A resource claim is a persistent object that captures the
desired configuration of a resource from the perspective of a workload or
application. Its configuration is cloud-provider and cloud-offering independent
and its free of implementation and/or environmental details. A resource claim
can be thought of as a request for an actual resource and is typically created
by a developer or application owner.
A resource class is configuration that contains implementation details specific
to a certain environment or deployment, and policies related to a kind of
resource. A ResourceClass acts as a template with implementation details and
policy for resources that will be dynamically provisioned by the workload at
deployment time. A resource class is typically created by an admin or
infrastructure owner.
## Dynamic and Static Provisioning
A resource can be statically or dynamically provisioned. Static provisioning is
when an administrator creates the resource manually. They set the configuration
required to provision and manage the corresponding external resource within a
cloud provider or cloud offering. Once provisioned, resources are available to
be bound to resource claims.
Dynamic provisioning is when an resource claim does not find a matching resource
and provisions a new one instead. The newly provisioned resource is
automatically bound to the resource claim. To enable dynamic provisioning the
administrator needs to create one or more resource class objects.
## Connection Secrets
Workloads reference all the resources they consume in their `resources` section.
This helps Crossplane setup connectivity between the workload and resource, and
create objects that hold connection information. For example, for a database
provisioned and managed by Crossplane, a secret will be created that contains a
connection string, user and password. This secret will be propagated to the
target cluster so that it can be used by the workload.
## Secure Connectivity
To provide secure network connectivity between application deployments in a
target cluster and the managed services they are using, Crossplane supports
provisioning and life-cycle management of networks, subnets, peering, and
firewall rules to provide secure connectivity.
## Stacks
Stacks extend Crossplane with new functionality. Crossplane provides Stacks for
GCP, AWS, and Azure that are installed with a Stack Manager that can download
packages, resolve dependencies, and execute controllers. Stacks are designed for
simplified RBAC configuration and namespace isolation for improved security in
multi-team environments. Stacks are published to a registry where they can be
downloaded, explored, and organized.
Stacks enable the community to add support for more clouds providers and and
managed services. Stacks support out-of-tree extensibility so they can be
released on their own schedule. A CLI can init, build, publish, install, and
uninstall Stacks from developer laptops or in continuous delivery pipelines.
Stacks for GCP, AWS, and Azure support provisioning managed services (database,
cache, buckets), managed clusters (GKE, EKS, AKS), and secure connectivity
(networks, subnets, firewall rules). Stacks for independent cloud offerings can
be installed alongside the Stacks for GCP, AWS, and Azure to customize
Crossplane with the right mix of managed services for your organization.
# Feature Areas
Crossplane has four main feature areas: Services, Stacks, Clusters and
Workloads.
## Crossplane Services
Crossplane supports provisioning managed services using `kubectl`. It applies
the Kubernetes pattern for Persistent Volume (PV) claims and classes to managed
service provisioning with support for a strong separation of concern between app
teams and cluster administrators.
App teams can choose between cloud-specific and portable services including
managed databases, message queues, buckets, data pipelines, and more to define
complete applications, build once, and deploy into multiple clouds using
continuous delivery pipelines or GitOps flows.
Cluster administrators can define self-service policies and best-practice
configurations to accelerate app delivery and improve security, so app teams can
focus on delivering their app instead of cloud-specific infrastructure details.
Secure connectivity between managed services and managed Kubernetes clusters is
also supported in Crossplane such that private networking can be established
declaratively using `kubectl`.
Crossplane is designed to support the following types of managed services.
### Managed Kubernetes Services
Managed Kubernetes currently supported for GKE, EKS, AKS.
Kubernetes clusters are another type of resource that can be dynamically
provisioned using a generic resource claim by the application developer and an
environment specific resource class by the cluster administrator.
Future support for additional managed services.
### Database Services
Support for PostgreSQL, MySQL, and Redis.
Database managed services can be statically or dynamically provisioned by
Crossplane in AWS, GCP, and Azure. An application developer simply has to
specify their general need for a database such as MySQL, without any specific
knowledge of what environment that database will run in or even what specific
type of database it will be at runtime.
The cluster administrator specifies a resource class that acts as a template
with the implementation details and policy specific to the environment that the
generic MySQL resource is being deployed to. This enables the database to be
dynamically provisioned at deployment time without the application developer
needing to know any of the details, which promotes portability and reusability.
Future support for additional managed services.
### Storage Services
Support for S3, Buckets, and Azure Blob storage.
Future support for additional managed services.
### Networking Services
Support for networks, subnets, and firewall rules.
Future support for additional managed services.
### Load Balancing Services
Future support.
### Cloud DNS Services
Future support.
### Advanced Networking Connectivity Services
Future support.
### Big Data Services
Future support.
### Machine Learning Services
Future support.
## Crossplane Stacks
Stacks extend Crossplane with new functionality.
See [Stacks](#stacks).
## Crossplane Workloads
Crossplane includes an extensible workload scheduler that observes application
policies to select a suitable target cluster from a pool of available clusters.
The workload scheduler can be customized to consider a number of criteria
including capabilities, availability, reliability, cost, regions, and
performance while deploying workloads and their resources. Complex workloads can
be modeled as a `KubernetesApplication`.
## Crossplane Clusters
Crossplane supports dynamic provisioning of managed Kubernetes clusters from a
single control plane with consistent multi-cluster best-practice configuration
and secure connectivity between target Kubernetes clusters and the managed
services provisioned for applications. Managed Kubernetes clusters can be
dynamically provisioned with a `KubernetesCluster`.
# Glossary
## Kubernetes
Crossplane is built on the Kubernetes API machinery as a platform for
declarative management. We rely on common terminology from the [Kubernetes
Glossary][kubernetes-glossary] where possible, and we don't seek to reproduce
that glossary here.
[kubernetes-glossary]: https://kubernetes.io/docs/reference/glossary/?all=true
However we'll summarize some commonly used concepts for convenience.
### CRD
A standard Kubernetes Custom Resource Definition (CRD), which defines a new type
of resource that can be managed declaratively. This serves as the unit of
management in Crossplane. The CRD is composed of spec and status sections and
supports API level versioning (e.g., v1alpha1)
### Controller
A standard Kubernetes Custom Controller, providing active control loops that own
one or more CRDs. Can be implemented in different ways, such as golang code
(controller-runtime), templates, functions/hooks, templates, a new DSL, etc. The
implementation itself is versioned using semantic versioning (e.g., v1.0.4)
### Namespace
Allows logical grouping of resources in Kubernetes that can be secured with RBAC
rules.
## Crossplane
### Stack
The unit of extending Crossplane with new functionality. A stack is a Controller
that owns one or more CRDs and depends on zero or more CRDs.
See [Stacks](#stacks).
### Stack Registry
A registry where Stacks can be published, downloaded, explored, and categorized.
The registry understands a Stacks custom controller and its CRDs and indexes by
both -- you could lookup a custom controller by the CRD name and vice versa.
### Stack Package Format
The package format for Stacks that contains the Stack definition, metadata,
icons, CRDs, and other Stack specific files.
### Stack Manager
The component that is responsible for installing a Stacks custom controllers
and resources in Crossplane. It can download packages, resolve dependencies,
install resources and execute controllers. This component is also responsible
for managing the complete life-cycle of Stacks, including upgrading them as new
versions become available.
### Application Stack
App Stacks simplify operations for an app by moving app lifecycle management
into a Kubernetes controller that owns an app CRD with a handful of settings
required to deploy a new app instance, complete with the managed services it
depends on.
Application Stacks depend on Infrastructure Stacks like stack-gcp, stack-aws,
and stack-azure to provide managed services via the Kubernetes API.
### Infrastructure Stack
Infrastructure Stacks like stack-gcp, stack-aws, and stack-azure extend
Crossplane to support managed service provisioning (DBaaS, cache, buckets),
secure connectivity (VPCs, subnets, peering, ACLs, secrets), and provisioning
managed Kubernetes clusters on demand to further isolate the blast radius of
applications.
### Cloud Provider Stack
See [infrastructure-stack](#infrastructure-stack).
### Cluster
A Kubernetes cluster.
### Managed Cluster
A Managed Kubernetes cluster from a service provider such as GKE, EKS, or AKS.
### Target Cluster
A Kubernetes cluster where application deployments and pods are scheduled to
run.
### Control Cluster
See [Dedicated Crossplane Instance](#dedicated-crossplane-instance).
### Crossplane Instance
A Kubernetes cluster with:
* Crossplane installed
* One or more worker nodes where Crossplane controllers can run
* Zero or more Crossplane Stacks installed
### Dedicated Crossplane Instance
Crossplane instance running on a dedicated Kubernetes cluster separate from the
target Kubernetes cluster(s) where application deployments and pods are
scheduled to run.
### Embedded Crossplane Instance
Crossplane instance running on a Kubernetes target cluster where app deployments
and pods will run.
### Cloud Provider
Cloud provider such as GCP, AWS, Azure offering IaaS, cloud networking, and
managed services.
### Managed Service Provider
Managed service provider such as Elastic Cloud, MLab, PKS that run on cloud
provider IaaS.
### Provider
A Crossplane kind that connects Crossplane to a cloud provider or managed
service provider.
### Infrastructure
Infrastructure ranging from low level services like clusters and servers, to
higher level infrastructure like databases, message queues, buckets, secure
connectivity, managed Kubernetes, and more
### Project Namespace
When running a shared control plane or cluster it's a common practice to create
separate project namespaces (app-project1-dev) for each app project or team so
their resources are kept separate and secure. Crossplane supports this model.
### App Project Namespace
See [project-namespace](#project-namespace)
### Dynamic Provisioning
Dynamic provisioning is when an resource claim does not find a matching resource
and provisions a new one instead. The newly provisioned resource is
automatically bound to the resource claim. To enable dynamic provisioning the
administrator needs to create one or more resource class objects.
### Static Provisioning
Static provisioning is when an administrator creates the resource manually. They
set the configuration required to provision and manage the corresponding
external resource within a cloud provider or cloud offering. Once provisioned,
resources are available to be bound to resource claims.
### Resource
A resource represents an external piece of infrastructure ranging from low level
services like clusters and servers, to higher level infrastructure like
databases, message queues, buckets, and more
### External Resource
An actual resource that exists outside Kubernetes, typically in the cloud. AWS
RDS and GCP Cloud Memorystore instances are external resources.
### Managed Resource
The Crossplane representation of an external resource. The `RDSInstance` and
`CloudMemorystoreInstance` Kubernetes kinds are managed resources. A managed
resource models the satisfaction of a need; i.e. the need for a Redis Cluster is
satisfied by the allocation (aka binding) of a `CloudMemoryStoreInstance`.
### Resource Claim
The Crossplane representation of a request for the allocation of a managed
resource. Resource claims typically represent the need for a managed resource
that implements a particular protocol. `MySQLInstance` and `RedisCluster` are
examples of resource claims.
### Resource Class
The Crossplane representation of the desired configuration of a managed
resource. Resource claims reference a resource class in order to specify how
they should be satisfied by a managed resource.
### Resource Class
Resource Classes capture reusable, best-practice configurations for a specific
managed service. For example, Wordpress requires a MySQL database which can be
satisfied by CloudSQL, RDS, or Azure SQL Server, so resource classes would be
created for CloudSQL, RDS, and Azure SQL Server.
### Connection Secret
A Kubernetes `Secret` encoding all data required to connect to (or consume) an
external resource.
### Claimant
The Kubernetes representation of a process wishing to connect to a managed
resource, typically a `Pod` or some abstraction thereupon such as a `Deployment`
or `KubernetesApplication`.
### Consumer
See [claimant](#claimant).
### Workload
We model workloads as schedulable units of work that the user intends to run on
a cloud provider. Crossplane will support multiple types of workloads including
container and serverless. You can think of workloads as units that run your code
and applications. Every type of workload has a different kind of payload.
### Kubernetes Application
A `KubernetesApplication` is a type of workload, with a `KubernetesCluster`
label selector used for scheduling, and a series of resource templates
representing resources to be deployed to the scheduled cluster, and managed
resources are provisioned and securely connected to the application.
### In-Tree
In-tree means its source code lives in a core Crossplane git repository.
### Out-of-Tree
Out-of-tree means its source code lives outside of a core Crossplane git
repository.
Often used to refer to Crossplane extensions, controllers or Stacks.
Out-of-tree extensibility enables to the community to build, release, publish,
and install Crossplane extensions separately from the core Crossplane repos.

View File

@ -0,0 +1,105 @@
---
title: Developer Guide
toc: true
weight: 710
---
# Developer Guide
Welcome to the Crossplane Developer Guide!
## Overview
Infra Stacks like [stack-gcp][stack-gcp], [stack-aws][stack-aws], and
[stack-azure][stack-azure] extend Crossplane to support managed service
provisioning (databases, caches, buckets), secure connectivity (VPCs, subnets,
peering, ACLs, secrets), and provisioning managed Kubernetes clusters on demand
to further isolate the blast radius of applications.
Infra Stacks are typically pre-built and published to the [Stacks
registry][stack-registry], where they can be installed by a cluster
administrator using a [`ClusterStackInstall`][stack-install-docs] kind via the
Kubernetes API or with the [`stack install`][crossplane-cli-usage] command.
App Stacks depend on Infra Stacks like [stack-gcp][stack-gcp],
[stack-aws][stack-aws], or [stack-azure][stack-azure] to provide the managed
services they depend on via the Kubernetes API.
App Stacks may also be pre-built and published to the [Stacks
registry][stack-registry] where they can be deployed by application teams using
a [`StackInstall`][crossplane-cli-usage] kind via the Kubernetes API or with
the [`stack install`][crossplane-cli-usage] command.
## Infra Stacks
### Using Infra Stacks
The [Crossplane Services Guide][services-user-guide] shows how to use existing
Infra Stacks to deploy a Wordpress `Deployment` that securely consumes a MySQL
instance from GCP, AWS, or Azure all from `kubectl`.
### Building Infra Stacks
Infra Stacks are out-of-tree Crossplane extensions that can be built and
published on their own schedule separate from the core Crossplane repos.
Crossplane enables the community to build a modular, open cloud control plane
where any cloud service or capability can be added using the [Stack
Manager][stack-manager], an extension manager for the Kubernetes API. Crossplane
Stacks simplify the work required to build, publish, install and manage control
plane extensions with a powerful RBAC permission model, integrated dependency
management, and more.
The [Services Developer Guide][services-developer-guide] shows how to:
* Extend existing Infra Stacks ([stack-gcp][stack-gcp], [stack-aws][stack-aws],
[stack-azure][stack-azure]) to add more cloud services.
* Build a new Infra Stack to add more cloud providers.
* Make independent cloud offerings available via the Kubernetes API, so
application teams can use them just like standard Kubernetes resources.
## App Stacks
### Using App Stacks
The [Crossplane Stacks Guide][stack-user-guide] guide shows how to use a
[portable App Stack][stack-wordpress-registry] that can deploy with any Infra
Stack including: [stack-gcp][stack-gcp], [stack-aws][stack-aws], or
[stack-azure][stack-azure].
### Building App Stacks
To learn how to build a "Hello World" Stack see the [Stacks Quick Start][stack-quick-start].
For a complete App Stack, see the [portable Wordpress App
Stack][stack-wordpress] with a kubebuilder-based app
[`Controller`][kubernetes-controller] that owns a `WordressInstance` CRD, builds
a complete `KubernetesApplication`, and automates much of what's covered in the
[Crossplane Services Guide][services-user-guide] plus dynamic cluster
provisioning, so you can provision a complete Wordpress app instance from
`kubectl` using a single Kubernetes object.
## Learn More
If you have any questions, please drop us a note on [Crossplane
Slack][join-crossplane-slack] or [contact us][contact-us]!
To [learn more][learn-more] checkout these [useful links][learn-more].
<!-- Named links -->
[services-user-guide]: services-guide.md
[stack-user-guide]: stacks-guide.md
[stack-registry]: https://hub.docker.com/search?q=crossplane&type=image
[crossplane-cli-usage]: https://github.com/crossplaneio/crossplane-cli#usage
[stack-install-docs]: https://github.com/crossplaneio/crossplane/blob/master/design/design-doc-stacks.md#installation-flow
[stack-gcp]: https://github.com/crossplaneio/stack-gcp
[stack-aws]: https://github.com/crossplaneio/stack-aws
[stack-azure]: https://github.com/crossplaneio/stack-azure
[stack-wordpress]: https://github.com/crossplaneio/sample-stack-wordpress
[stack-wordpress-registry]: https://hub.docker.com/r/crossplane/sample-stack-wordpress
[stack-manager]: https://github.com/crossplaneio/crossplane/blob/master/design/design-doc-stacks.md#terminology
[services-developer-guide]: services-developer-guide.md
[stack-quick-start]: https://github.com/crossplaneio/crossplane-cli#quick-start-stacks
[kubernetes-controller]: https://kubernetes.io/docs/concepts/extend-kubernetes/api-extension/custom-resources/#custom-controllers
[join-crossplane-slack]: https://slack.crossplane.io
[contact-us]: https://github.com/crossplaneio/crossplane#contact
[learn-more]: learn-more.md

49
docs/v0.4/faqs.md Normal file
View File

@ -0,0 +1,49 @@
---
title: FAQs
toc: true
weight: 840
indent: true
---
# Frequently Asked Questions (FAQs)
### Where did the name Crossplane come from?
Crossplane is the fusing of cross-cloud control plane. We wanted to use a noun that refers to the entity responsible for connecting different cloud providers and acts as control plane across them. Cross implies “cross-cloud” and “plane” brings in “control plane”.
### What's up with popsicle?
We believe in a multi-flavor cloud.
### Why is Upbound open sourcing this project? What are Upbounds monetization plans?
Upbounds mission is to create a more open cloud-computing platform, with more choice and less lock-in. We believe the Crossplane as an important step towards this vision and that its going to take a village to solve this problem. We believe that multicloud control plane is a new category of open source software, and it will ultimately disrupt closed source and proprietary models. Upbound aspires to be a commercial provider of a more open cloud-computing platform.
### What kind of governance model will be used for Crossplane?
Crossplane will be an independent project and we plan on making a community driven project and not a vendor driven project. It will have an independent brand, github organization, and an open governance model. It will not be tied to single organization or individual.
### Will Crossplane be donated to an open source foundation?
We dont know yet. We are open to doing so but wed like to revisit this after the project has gotten some end-user community traction.
### Does using multicloud mean you will use the lowest common denominator across clouds?
Not necessarily. There are numerous best of breed cloud offerings that run on multiple clouds. For example, CockroachDB and ElasticSearch are world class implementations of platform software and run well on cloud providers. They compete with managed services offered by a cloud provider. We believe that by having an open control plane for them to integrate with, and providing a common API, CLI and UI for all of these services, that more of these offerings will exist and get first-class experience in the cloud.
### How are resources and claims related to PersistentVolumes in Kubernetes?
We modeled resource claims and classes after PersistentVolumes and PersistentVolumeClaims in Kubernetes. We believe many of the lessons learned from managing volumes in Kubernetes apply to managing resources within cloud providers. One notable exception is that we avoided creating a plugin model within Crossplane.
### How is workload scheduling related to pod scheduling in Kubernetes?
We modeled workload scheduling after the Pod scheduler in Kubernetes. We believe many of the lessons learned from Pod scheduling apply to scheduling workloads across cloud providers.
### Can I use Crossplane to consistently provision and manage multiple Kubernetes clusters?
Crossplane includes a portable API for Kubernetes clusters that will include common configuration including node pools, auto-scalers, taints, admission controllers, etc. These will be applied to the specific implementations within the cloud providers like EKS, GKE and AKS. We see the Kubernetes Cluster API to be something that will be used by administrators and not developers.
### Other attempts at building a higher level API on-top of a multitude of inconsistent lower level APIs have not been successful, will Crossplane not have the same issues?
We agree that building a consistent higher level API on top of multitudes of inconsistent lower level API's is well known to be fraught with peril (e.g. dumbing down to lowest common denominator, or resulting in so loosely defined an API as to be impossible to practically develop real portable applications on top of it).
Crossplane follows a different approach here. The portable API extracts the pieces that are common across all implementations, and from the perspective of the workload. The rest of the implementation details are captured in full fidelity by the admin in resource classes. The combination of the two is what results in full configuration that can be deployed. We believe this to be a reasonable tradeoff that avoids the dumbing down to lowest common denominator problem, while still enabling portability.

View File

@ -0,0 +1,427 @@
# Deploying GitLab in AWS
This user guide will walk you through GitLab application deployment using Crossplane managed resources and
the official GitLab Helm chart.
The following components are dynamically provisioned and configured during this guide:
* An RDS Postgres database
* A Redis cluster
* A sample Gitlab application
## Pre-requisites
* Before starting this guide, you should have already [configured your AWS account](../../cloud-providers/aws/aws-provider.md) for use with Crossplane.
* You should also have an AWS credentials file at `~/.aws/credentials` already on your local filesystem.
* [Helm](https://docs.helm.sh/using_helm/), minimum version `v2.10.0+`.
* [jq](https://stedolan.github.io/jq/) - commandline JSON processor `v1.5+`
* [AWS cli](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-install.html)
## Preparation
### EKS Cluster
Follow [GitLab instruction](https://docs.gitlab.com/charts/installation/cloud/eks.html#scripted-cluster-creation) to create and bootstrap EKS Kubernetes cluster
### Crossplane
Using the newly provisioned cluster:
- Install Crossplane from master channel using the [Crossplane Installation Guide](../install-crossplane.md#master)
- Install the AWS stack into Crossplane using the [AWS stack section](../install-crossplane.md#aws-stack) of the install guide.
- Obtain [Cloud Provider Credentials](../cloud-providers.md)
#### Region
- Export the region of the EKS cluster you're provisioned for this demo
```
export REGION=region-of-eks-west-1
```
#### EKS kubeconfig
- Obtain EKS Cluster credentials and set as your current context
```bash
aws eks --region $REGION update-kubeconfig --name [your-CLUSTER_NAME]
```
#### AWS provider
Create provider:
```console
sed -e "s|REGION|$REGION|g;s|BASE64ENCODED_AWS_PROVIDER_CREDS|`base64 ~/.aws/credentials | tr -d '\n'`|g;" cluster/examples/gitlab/aws/provider.yaml | kubectl create -f -
```
- Verify AWS provider was successfully registered by the crossplane
```bash
kubectl get providers.aws.crossplane.io -n crossplane-system
kubectl get secrets -n crossplane-system
```
- You should see output similar to:
```bash
NAME PROJECT-ID AGE
demo-aws your-project-123456 11m
NAME TYPE DATA AGE
default-token-974db kubernetes.io/service-account-token 3 2d16h
demo-aws-creds Opaque 1 103s
```
#### Create an RDS subnet group
1. Navigate to the aws console in same region as the EKS cluster
1. Navigate to `RDS` service
1. Navigate to `Subnet groups` in left hand pane
1. Click `Create DB Subnet Group`
1. Name your subnet i.e. `eks-db-subnets`
1. Select the VPC created in the EKS VPC step
1. Click `Add all subnets related to this VPC`
1. Click Create
1. Export the db subnet group name
```console
export RDS_SUBNET_GROUP_NAME=replace-with-DBSubnetgroup-name
```
#### Create an RDS/Redis Security Group (example only)
> Note: This will make your RDS and Redis instance visible from anywhere on the internet.
This is for **EXAMPLE PURPOSES ONLY** and is **NOT RECOMMENDED** for production system.
1. Navigate to ec2 in the same region as the EKS cluster
1. Click: security groups
1. Click `Create Security Group`
1. Name it, ex. `bad-idea-public-visibility`
1. Give it a description
1. Select the same VPC as the EKS cluster.
1. On the Inbound Rules tab, choose `Add Rule`.
- For Type, choose `Custom TCP Rule`
- For Port Range, type `6379`
- For Source, choose `Anywhere` from drop down or type: `0.0.0.0/0`
- Click `Add Rule` again
- For Type, choose `PostgreSQL`
- For Source, choose `Anywhere` from drop down or type: `0.0.0.0/0`
1. Choose Add another rule if you need to add more IP addresses or different port ranges.
1. Click: Create
1. Export the security group id
```console
export REDIS_SECURITY_GROUP=replace-with-security-group-id
export RDS_SECURITY_GROUP=replace-with-security-group-id
```
#### Create an Elasticache Subnet Group
1. Navigate to the aws console in same region as the EKS cluster
1. Navigate to `Elasticache` service
1. Navigate to `Subnet groups` in left hand pane
1. Click `Create Subnet Group`
1. Name your subnet i.e. `redis-subnets`
1. Select the VPC created in the EKS VPC step
1. Click `Add all subnets related to this VPC`
1. Click Create
1. Export the db subnet group name
```console
export REDIS_SUBNET_GROUP=replace-me-with-redis-subnet-group
```
#### Resource Classes
Create Crossplane Resource Class needed to provision managed resources for GitLab applications
```bash
sed -e "s|REDIS_SECURITY_GROUP|$REDIS_SECURITY_GROUP|g;s|REDIS_SUBNET_GROUP|$REDIS_SUBNET_GROUP|g;s|REGION|$REGION|g;s|RDS_SUBNET_GROUP_NAME|$RDS_SUBNET_GROUP_NAME|g;s|RDS_SECURITY_GROUP|$RDS_SECURITY_GROUP|g" cluster/examples/gitlab/aws/resource-classes/* | kubectl create -f -
```
```
resourceclass.core.crossplane.io/standard-aws-bucket created
resourceclass.core.crossplane.io/standard-aws-postgres created
resourceclass.core.crossplane.io/standard-aws-redis created
```
Verify
```bash
kubectl get resourceclasses -n crossplane-system
```
```
NAME PROVISIONER PROVIDER-REF RECLAIM-POLICY AGE
standard-aws-bucket s3buckets.storage.aws.crossplane.io/v1alpha1 demo-aws Delete 17s
standard-aws-postgres rdsinstance.database.aws.crossplane.io/v1alpha1 demo-aws Delete 17s
standard-aws-redis replicationgroup.cache.aws.crossplane.io/v1alpha1 demo-aws Delete 17s
```
#### Resource Claims
Provision Managed Resources required by GitLab application using Crossplane Resource Claims.
Note: you can use a separate command for each claim file, or create all claims in one command, like so:
```bash
kubectl create -Rf cluster/examples/gitlab/aws/resource-claims/
```
```
postgresqlinstance.database.crossplane.io/gitlab-postgresql created
rediscluster.cache.crossplane.io/gitlab-redis created
bucket.storage.crossplane.io/gitlab-artifacts created
bucket.storage.crossplane.io/gitlab-backups-tmp created
bucket.storage.crossplane.io/gitlab-backups created
bucket.storage.crossplane.io/gitlab-externaldiffs created
bucket.storage.crossplane.io/gitlab-lfs created
bucket.storage.crossplane.io/gitlab-packages created
bucket.storage.crossplane.io/gitlab-pseudonymizer created
bucket.storage.crossplane.io/gitlab-registry created
bucket.storage.crossplane.io/gitlab-uploads created
```
Verify that the resource claims were successfully provisioned.
```bash
kubectl get -f cluster/examples/gitlab/aws/resource-claims/postgres.yaml
kubectl get -f cluster/examples/gitlab/aws/resource-claims/redis.yaml
```
```
NAME STATUS CLASS VERSION AGE
gitlab-postgresql Bound standard-aws-postgres 9.6 5m27s
---
NAME STATUS CLASS VERSION AGE
gitlab-redis Bound standard-aws-redis 3.2 7m10s
```
```bash
# check all bucket claims
kubectl get -f cluster/examples/gitlab/aws/resource-claims/buckets/
```
```text
NAME STATUS CLASS PREDEFINED-ACL LOCAL-PERMISSION AGE
gitlab-artifacts Bound standard-aws-bucket 4m49s
NAME STATUS CLASS PREDEFINED-ACL LOCAL-PERMISSION AGE
gitlab-backups-tmp Bound standard-aws-bucket 4m49s
NAME STATUS CLASS PREDEFINED-ACL LOCAL-PERMISSION AGE
gitlab-backups Bound standard-aws-bucket 4m49s
NAME STATUS CLASS PREDEFINED-ACL LOCAL-PERMISSION AGE
gitlab-externaldiffs Bound standard-aws-bucket 4m49s
NAME STATUS CLASS PREDEFINED-ACL LOCAL-PERMISSION AGE
gitlab-lfs Bound standard-aws-bucket 4m49s
NAME STATUS CLASS PREDEFINED-ACL LOCAL-PERMISSION AGE
gitlab-packages Bound standard-aws-bucket 4m49s
NAME STATUS CLASS PREDEFINED-ACL LOCAL-PERMISSION AGE
gitlab-pseudonymizer Bound standard-aws-bucket 4m49s
NAME STATUS CLASS PREDEFINED-ACL LOCAL-PERMISSION AGE
gitlab-registry Bound standard-aws-bucket 4m49s
NAME STATUS CLASS PREDEFINED-ACL LOCAL-PERMISSION AGE
gitlab-uploads Bound standard-aws-bucket 4m49s
```
What we are looking for is for `STATUS` value to become `Bound` which indicates the managed resource was successfully provisioned and is ready for consumption
##### Resource Claims Connection Secrets
Verify that every resource has created a connection secret
```bash
kubectl get secrets -n default
```
```
NAME TYPE DATA AGE
default-token-mzsgg kubernetes.io/service-account-token 3 5h42m
gitlab-artifacts Opaque 4 6m41s
gitlab-backups Opaque 4 7m6s
gitlab-backups-tmp Opaque 4 7m7s
gitlab-externaldiffs Opaque 4 7m5s
gitlab-lfs Opaque 4 7m4s
gitlab-packages Opaque 4 2m28s
gitlab-postgresql Opaque 3 30m
gitlab-pseudonymizer Opaque 4 7m2s
gitlab-redis Opaque 1 28m
gitlab-registry Opaque 4 7m1s
gitlab-uploads Opaque 4 7m1s
```
Note: Kubernetes cluster claim is created in "privileged" mode; thus the kubernetes cluster resource secret is located in `crossplane-system` namespace, however, you will not need to use this secret for our GitLab demo deployment.
At this point, all GitLab managed resources should be ready to consume and this completes the Crossplane resource provisioning phase.
#### Managed Resource Secrets
##### Convert Secrets and Export Valuess
GitLab requires to provide connection information in the specific format per cloud provider.
In addition, we need to extract endpoints and additional managed resource properties and add them to helm values.
There is an [ongoing effort](https://github.com/crossplaneio/crossplane/issues/489) to improve secret consumption from GitLab such that secrets produced by Crossplane controllers are directly consumed without transformation.
We will use a convenience script for this purpose.
Note: your output may be different
```bash
./cluster/examples/gitlab/aws/secrets.sh
```
```
Current cluster kubectl context: eks_you-project-123456_us-central1-a_eks-a2345dfb1-asdf-11e9-ac37-9cb6d08bde99
---
Source cluster secrets:
NAME TYPE DATA AGE
default-token-mzsgg kubernetes.io/service-account-token 3 2d7h
gitlab-artifacts Opaque 4 34h
gitlab-backups Opaque 4 34h
gitlab-backups-tmp Opaque 4 34h
gitlab-externaldiffs Opaque 4 34h
gitlab-lfs Opaque 4 34h
gitlab-packages Opaque 4 34h
gitlab-postgresql Opaque 3 2d2h
gitlab-pseudonymizer Opaque 4 34h
gitlab-redis Opaque 1 2d2h
gitlab-registry Opaque 4 34h
gitlab-uploads Opaque 4 34h
---
Generate PostgreSQL secret and values file
secret/gitlab-postgresql created
---
Generate Redis values file
---
Generate Buckets secrets
secret/bucket-artifacts created
secret/bucket-backups-tmp created
secret/bucket-backups created
secret/bucket-externaldiffs created
secret/bucket-lfs created
secret/bucket-packages created
secret/bucket-pseudonymizer created
secret/bucket-registry created
secret/bucket-uploads created
```
## Install
Render the official GitLab Helm chart with the generated values files, and your settings into a `gitlab-aws.yaml` file.
See [GitLab Helm Documentation](https://docs.gitlab.com/charts/installation/deployment.html) for the additional details
```bash
helm repo add gitlab https://charts.gitlab.io/
helm repo update
helm fetch gitlab/gitlab --version v1.7.1
helm template gitlab-1.7.1.tgz --name gitlab-demo --namespace default \
-f cluster/examples/gitlab/aws/values-buckets.yaml \
-f cluster/examples/gitlab/aws/values-redis.yaml \
-f cluster/examples/gitlab/aws/values-psql.yaml \
--set global.hosts.domain=[your.domain] \
--set global.hosts.hostSuffix=demo \
--set certmanager-issuer.email=email@account.io > gitlab-aws.yaml
```
Examine `gitlab-aws.yaml` to familiarize yourself with all GitLab components.
Install GitLab
Note: your output may look different:
```bash
kubectl create -f gitlab-aws.yaml
```
Validate GitLab components:
```bash
kubectl get jobs,deployments,statefulsets
```
It usually takes few minutes for all GitLab components to get initialized and be ready.
Note: During the initialization "wait", some pods could automatically restart, but this should stabilize once all the
dependent components become available.
Note: There also could be intermittent `ImagePullBackOff`, but those, similar to above should clear up by themselves.
Note: It appears the `gitlab-demo-unicorn-test-runner-*` (job/pod) will Error and will not re-run, unless the pod is resubmitted.
After few minutes your output for:
```bash
kubectl get pod
```
Should look similar to:
```bash
NAME READY STATUS RESTARTS AGE
gitlab-demo-certmanager-59f887dc9-jppl7 1/1 Running 0 9m
gitlab-demo-gitaly-0 1/1 Running 0 9m
gitlab-demo-gitlab-runner-fcc9cc7cf-c7pzz 0/1 Init:0/1 0 9m
gitlab-demo-gitlab-shell-57b887755c-kqm89 1/1 Running 0 8m
gitlab-demo-gitlab-shell-57b887755c-vzqkf 1/1 Running 0 9m
gitlab-demo-issuer.0-ddzwp 0/1 Completed 0 9m
gitlab-demo-migrations.0-2h5px 1/1 Running 2 9m
gitlab-demo-nginx-ingress-controller-7bf4f7574d-cznfl 1/1 Running 0 9m
gitlab-demo-nginx-ingress-controller-7bf4f7574d-f5wjz 1/1 Running 0 9m
gitlab-demo-nginx-ingress-controller-7bf4f7574d-mxqpz 1/1 Running 0 9m
gitlab-demo-nginx-ingress-default-backend-5886cb59c7-bjnrt 1/1 Running 0 9m
gitlab-demo-nginx-ingress-default-backend-5886cb59c7-gchhp 1/1 Running 0 9m
gitlab-demo-prometheus-server-64897864cf-p4sd7 2/2 Running 0 9m
gitlab-demo-registry-746bbb488f-xjlhp 1/1 Running 0 8m
gitlab-demo-registry-746bbb488f-xxpcr 1/1 Running 0 9m
gitlab-demo-shared-secrets.0-mr7-2v5cf 0/1 Completed 0 9m
gitlab-demo-sidekiq-all-in-1-5dd8b5b9d-58p72 1/1 Running 0 9m
gitlab-demo-task-runner-7c477b48dc-d5nf6 1/1 Running 0 9m
gitlab-demo-unicorn-6dd757db97-4vqgc 1/2 ImagePullBackOff 0 9m
gitlab-demo-unicorn-6dd757db97-nmglt 2/2 Running 0 8m
gitlab-demo-unicorn-test-runner-f2ttk 0/1 Error 0 9m
```
Note: if `ImagePullBackOff` error Pod does not get auto-cleared, consider deleting the pod.
A new pod should come up with "Running" STATUS.
## Use
Retrieve the DNS name using GitLab ingress componenet:
```bash
kubectl get ingress
```
You should see following ingress configurations:
```
NAME HOSTS ADDRESS PORTS AGE
gitlab-demo-registry registry-demo.upbound.app 35.222.163.203 80, 443 14m
gitlab-demo-unicorn gitlab-demo.upbound.app 35.222.163.203 80, 443 14m
```
Navigate your browser to https://gitlab-demo.[your-domain], and if everything ran successfully, you should see:
![alt test](gitlab-login.png)
## Uninstall
### GitLab
To remove the GitLab application: run:
```bash
kubectl delete -f gitlab-aws.yaml
```
### Crossplane
Delete all managed resources by running:
```bash
kubectl delete -Rf cluster/examples/gitlab/aws/resource-claims
```
```
bucket.storage.crossplane.io "gitlab-artifacts" deleted
bucket.storage.crossplane.io "gitlab-backups-tmp" deleted
bucket.storage.crossplane.io "gitlab-backups" deleted
bucket.storage.crossplane.io "gitlab-externaldiffs" deleted
bucket.storage.crossplane.io "gitlab-lfs" deleted
bucket.storage.crossplane.io "gitlab-packages" deleted
bucket.storage.crossplane.io "gitlab-pseudonymizer" deleted
bucket.storage.crossplane.io "gitlab-registry" deleted
bucket.storage.crossplane.io "gitlab-uploads" deleted
postgresqlinstance.database.crossplane.io "gitlab-postgresql" deleted
rediscluster.cache.crossplane.io "gitlab-redis" deleted
```
Verify that all resource claims have been removed:
```bash
kubectl get -Rf cluster/examples/gitlab/aws/resource-claims
```
Note: typically it may take few seconds for Crossplane to process the request.
By running resource and provider removal in the same command or back-to-back, we are running the risk of having orphaned resource.
I.E., a resource that could not be cleaned up because the provider is no longer available.
Delete all resource classes:
```bash
kubectl delete -Rf cluster/examples/gitlab/aws/resource-classes/
```
```
resourceclass.core.crossplane.io "standard-aws-bucket" deleted
resourceclass.core.crossplane.io "standard-aws-postgres" deleted
resourceclass.core.crossplane.io "standard-aws-redis" deleted
```
Delete aws-provider and secrets
```bash
kubectl delete -f cluster/examples/gitlab/aws/provider.yaml
```

View File

@ -0,0 +1,402 @@
# Deploying GitLab in GCP
This user guide will walk you through GitLab application deployment using Crossplane managed resources and
the official GitLab Helm chart.
## Pre-requisites
* [Helm](https://docs.helm.sh/using_helm/), minimum version `v2.10.0+`.
* [jq](https://stedolan.github.io/jq/) - commandline JSON processor `v1.5+`
## Preparation
### GKE Cluster
Follow [GitLab instruction](https://docs.gitlab.com/charts/installation/cloud/gke.html#scripted-cluster-creation) to create and bootstrap GKE Kubernetes cluster
- Obtain GKE cluster credentials
```bash
gcloud container clusters get-credentials [your-gke-cluster] --zone [your-cluster-zone] --project [your-gcp-project]
```
- Configure `kubectl` current context to point to your GKE cluster where you want to deploy GitLab application.
Note: this step is optional since: `gcloud container clusters get-credentials` will automatically set the current context to newly connected cluster
```bash
kubectl config get-contexts
kubectl config set-context [your-cluster-context]
```
### Crossplane
Using the newly provisioned cluster:
- Install Crossplane from master channel using the [Crossplane Installation Guide](../install-crossplane.md#master)
- Install the GCP stack into Crossplane using the [GCP stack section](../install-crossplane.md#gcp-stack) of the install guide.
- Obtain [Cloud Provider Credentials](../cloud-providers.md)
#### GCP Provider
It is essential to make sure that the GCP Service Account used by the Crossplane GCP Provider has the following Roles:
Cloud SQL Admin
Kubernetes Engine Admin
Service Account User
Cloud Memorystore Redis Admin
Storage Admin
Using GCP Service Account `gcp-credentials.json`:
- Generate BASE64ENCODED_GCP_PROVIDER_CREDS encoded value:
```bash
base64 gcp-credentials.json | tr -d "\n"
```
- Update [provider.yaml](../../cluster/examples/gitlab/gcp/provider.yaml) replacing `BASE64ENCODED_GCP_PROVIDER_CREDS`
- Update [provider.yaml](../../cluster/examples/gitlab/gcp/provider.yaml) replacing `PROJECT_ID` with `project_id` from the credentials.json
#### GCS
It is recommended to create a separate GCP Service Account dedicated to storage operations only, i.e. with a reduced IAM role set, for example: `StorageAdmin` only.
Follow the same step as for GCP credentials to create and obtain `gcs-credentials.json`
- Generate BASE64ENCODED_GCS_PROVIDER_CREDS encoded value:
```bash
base64 gcs-credentials.json | tr -d "\n"
```
Otherwise, you can use `BASE64ENCODED_GCP_PROVIDER_CREDS` in place of `BASE64ENCODED_GCS_PROVIDER_CREDS`
- Update [provider.yaml](../../cluster/examples/gitlab/gcp/provider.yaml) replacing `BASE64ENCODED_GCS_PROVIDER_CREDS`
##### GCS Interoperability
- Navigate to: https://console.cloud.google.com/storage/settings in your GCP project
- Click on `Interoperability` Tab
- Using `Interoperable storage access keys` generate `BASE64ENCODED` values
- `BASE64ENCODED_GCS_INTEROP_ACCESS_KEY`
- `BASE64ENCODED_GCS_INTEROP_SECRET`
- Update [provider.yaml](../../cluster/examples/gitlab/gcp/provider.yaml) replacing:
- `BASE64ENCODED_GCS_INTEROP_ACCESS_KEY`
- `BASE64ENCODED_GCS_INTEROP_SECRET`
#### Create
- Create GCP provider:
```bash
kubectl create -f cluster/examples/gitlab/gcp/provider.yaml
```
- Verify GCP provider was successfully registered by the crossplane
```bash
kubectl get providers.gcp.crossplane.io -n crossplane-system
kubectl get secrets -n crossplane-system
```
- You should see output similar to:
```bash
NAME PROJECT-ID AGE
demo-gcp your-project-123456 11m
NAME TYPE DATA AGE
default-token-974db kubernetes.io/service-account-token 3 2d16h
demo-gcp-creds Opaque 1 103s
demo-gcs-creds Opaque 3 2d11h
```
#### Resource Classes
Create Crossplane Resource Class needed to provision managed resources for GitLab applications
```bash
kubectl create -f cluster/examples/gitlab/gcp/resource-classes/
```
```
resourceclass.core.crossplane.io/standard-gcp-bucket created
resourceclass.core.crossplane.io/standard-gcp-cluster created
resourceclass.core.crossplane.io/standard-gcp-postgres created
resourceclass.core.crossplane.io/standard-gcp-redis created
```
Verify
```bash
kubectl get resourceclasses -n crossplane-system
```
```
NAME PROVISIONER PROVIDER-REF RECLAIM-POLICY AGE
standard-gcp-bucket bucket.storage.gcp.crossplane.io/v1alpha1 demo-gcp Delete 17s
standard-gcp-cluster gkecluster.compute.gcp.crossplane.io/v1alpha1 demo-gcp Delete 17s
standard-gcp-postgres cloudsqlinstance.database.gcp.crossplane.io/v1alpha1 demo-gcp Delete 17s
standard-gcp-redis cloudmemorystoreinstance.cache.gcp.crossplane.io/v1alpha1 demo-gcp Delete 17s
```
#### Resource Claims
Provision Managed Resources required by GitLab application using Crossplane Resource Claims.
Note: you can use a separate command for each claim file, or create all claims in one command, like so:
```bash
kubectl create -Rf cluster/examples/gitlab/gcp/resource-claims/
```
```
bucket.storage.crossplane.io/gitlab-artifacts created
bucket.storage.crossplane.io/gitlab-backups-tmp created
bucket.storage.crossplane.io/gitlab-backups created
bucket.storage.crossplane.io/gitlab-externaldiffs created
bucket.storage.crossplane.io/gitlab-lfs created
bucket.storage.crossplane.io/gitlab-packages created
bucket.storage.crossplane.io/gitlab-pseudonymizer created
bucket.storage.crossplane.io/gitlab-registry created
bucket.storage.crossplane.io/gitlab-uploads created
postgresqlinstance.database.crossplane.io/gitlab-postgresql created
rediscluster.cache.crossplane.io/gitlab-redis created
```
Verify that the resource claims were successfully provisioned.
```bash
kubectl get -f cluster/examples/gitlab/gcp/resource-claims/postgres.yaml
kubectl get -f cluster/examples/gitlab/gcp/resource-claims/redis.yaml
```
```
NAME STATUS CLUSTER-CLASS CLUSTER-REF AGE
gitlab-gke Bound standard-gcp-cluster gke-af012df6-6e2a-11e9-ac37-9cb6d08bde99 4m7s
---
NAME STATUS CLASS VERSION AGE
gitlab-postgresql Bound standard-gcp-postgres 9.6 5m27s
---
NAME STATUS CLASS VERSION AGE
gitlab-redis Bound standard-gcp-redis 3.2 7m10s
```
```bash
# check all bucket claims
kubectl get -f cluster/examples/gitlab/gcp/resource-claims/buckets/
```
```text
NAME STATUS CLASS PREDEFINED-ACL LOCAL-PERMISSION AGE
gitlab-artifacts Bound standard-gcp-bucket 4m49s
NAME STATUS CLASS PREDEFINED-ACL LOCAL-PERMISSION AGE
gitlab-backups-tmp Bound standard-gcp-bucket 4m49s
NAME STATUS CLASS PREDEFINED-ACL LOCAL-PERMISSION AGE
gitlab-backups Bound standard-gcp-bucket 4m49s
NAME STATUS CLASS PREDEFINED-ACL LOCAL-PERMISSION AGE
gitlab-externaldiffs Bound standard-gcp-bucket 4m49s
NAME STATUS CLASS PREDEFINED-ACL LOCAL-PERMISSION AGE
gitlab-lfs Bound standard-gcp-bucket 4m49s
NAME STATUS CLASS PREDEFINED-ACL LOCAL-PERMISSION AGE
gitlab-packages Bound standard-gcp-bucket 4m49s
NAME STATUS CLASS PREDEFINED-ACL LOCAL-PERMISSION AGE
gitlab-pseudonymizer Bound standard-gcp-bucket 4m49s
NAME STATUS CLASS PREDEFINED-ACL LOCAL-PERMISSION AGE
gitlab-registry Bound standard-gcp-bucket 4m49s
NAME STATUS CLASS PREDEFINED-ACL LOCAL-PERMISSION AGE
gitlab-uploads Bound standard-gcp-bucket 4m49s
```
What we are looking for is for `STATUS` value to become `Bound` which indicates the managed resource was successfully provisioned and is ready for consumption
##### Resource Claims Connection Secrets
Verify that every resource has created a connection secret
```bash
kubectl get secrets -n default
```
```
NAME TYPE DATA AGE
default-token-mzsgg kubernetes.io/service-account-token 3 5h42m
gitlab-artifacts Opaque 4 6m41s
gitlab-backups Opaque 4 7m6s
gitlab-backups-tmp Opaque 4 7m7s
gitlab-externaldiffs Opaque 4 7m5s
gitlab-lfs Opaque 4 7m4s
gitlab-packages Opaque 4 2m28s
gitlab-postgresql Opaque 3 30m
gitlab-pseudonymizer Opaque 4 7m2s
gitlab-redis Opaque 1 28m
gitlab-registry Opaque 4 7m1s
gitlab-uploads Opaque 4 7m1s
```
At this point, all GitLab managed resources should be ready to consume and this completes the Crossplane resource provisioning phase.
#### Managed Resource Secrets
##### Convert Secrets and Export Values
GitLab requires to provide connection information in the specific format per cloud provider.
In addition, we need to extract endpoints and additional managed resource properties and add them to helm values.
There is an [ongoing effort](https://github.com/crossplaneio/crossplane/issues/489) to improve secret consumption from GitLab such that secrets produced by Crossplane controllers are directly consumed without transformation.
We will use a convenience script for this purpose.
Note: your output may be different
```bash
./cluster/examples/gitlab/gcp/secrets.sh
```
```
Current cluster kubectl context: gke_you-project-123456_us-central1-a_gke-a2345dfb1-asdf-11e9-ac37-9cb6d08bde99
---
Source cluster secrets:
NAME TYPE DATA AGE
default-token-mzsgg kubernetes.io/service-account-token 3 2d7h
gitlab-artifacts Opaque 4 34h
gitlab-backups Opaque 4 34h
gitlab-backups-tmp Opaque 4 34h
gitlab-externaldiffs Opaque 4 34h
gitlab-lfs Opaque 4 34h
gitlab-packages Opaque 4 34h
gitlab-postgresql Opaque 3 2d2h
gitlab-pseudonymizer Opaque 4 34h
gitlab-redis Opaque 1 2d2h
gitlab-registry Opaque 4 34h
gitlab-uploads Opaque 4 34h
---
Generate PostgreSQL secret and values file
secret/gitlab-postgresql created
---
Generate Redis values file
---
Generate Buckets secrets
secret/bucket-artifacts created
secret/bucket-backups-tmp created
secret/bucket-backups created
secret/bucket-externaldiffs created
secret/bucket-lfs created
secret/bucket-packages created
secret/bucket-pseudonymizer created
secret/bucket-registry created
secret/bucket-uploads created
```
## Install
Render the official GitLab Helm chart with the generated values files, and your settings into a `gitlab-gcp.yaml` file.
See [GitLab Helm Documentation](https://docs.gitlab.com/charts/installation/deployment.html) for the additional details
```bash
helm repo add gitlab https://charts.gitlab.io/
helm repo update
helm fetch gitlab/gitlab --version v1.7.1
helm template gitlab-1.7.1.tgz --name gitlab-demo --namespace default \
-f cluster/examples/gitlab/gcp/values-buckets.yaml \
-f cluster/examples/gitlab/gcp/values-redis.yaml \
-f cluster/examples/gitlab/gcp/values-psql.yaml \
--set global.hosts.domain=your.domain \
--set global.hosts.hostSuffix=demo \
--set certmanager-issuer.email=email@account.io > gitlab-gcp.yaml
```
Examine `gitlab-gcp.yaml` to familiarize yourself with all GitLab components.
Install GitLab
Note: your output may look different:
```bash
kubectl create -f gitlab-gcp.yaml
```
Validate GitLab components:
```bash
kubectl get jobs,deployments,statefulsets
```
It usually takes few minutes for all GitLab components to get initialized and be ready.
Note: During the initialization "wait", some pods could automatically restart, but this should stabilize once all the
dependent components become available.
Note: There also could be intermittent `ImagePullBackOff`, but those, similar to above should clear up by themselves.
Note: It appears the `gitlab-demo-unicorn-test-runner-*` (job/pod) will Error and will not re-run, unless the pod is resubmitted.
After few minutes your output for:
```bash
kubectl get pod
```
Should look similar to:
```bash
NAME READY STATUS RESTARTS AGE
gitlab-demo-certmanager-59f887dc9-jppl7 1/1 Running 0 9m
gitlab-demo-gitaly-0 1/1 Running 0 9m
gitlab-demo-gitlab-runner-fcc9cc7cf-c7pzz 0/1 Init:0/1 0 9m
gitlab-demo-gitlab-shell-57b887755c-kqm89 1/1 Running 0 8m
gitlab-demo-gitlab-shell-57b887755c-vzqkf 1/1 Running 0 9m
gitlab-demo-issuer.0-ddzwp 0/1 Completed 0 9m
gitlab-demo-migrations.0-2h5px 1/1 Running 2 9m
gitlab-demo-nginx-ingress-controller-7bf4f7574d-cznfl 1/1 Running 0 9m
gitlab-demo-nginx-ingress-controller-7bf4f7574d-f5wjz 1/1 Running 0 9m
gitlab-demo-nginx-ingress-controller-7bf4f7574d-mxqpz 1/1 Running 0 9m
gitlab-demo-nginx-ingress-default-backend-5886cb59c7-bjnrt 1/1 Running 0 9m
gitlab-demo-nginx-ingress-default-backend-5886cb59c7-gchhp 1/1 Running 0 9m
gitlab-demo-prometheus-server-64897864cf-p4sd7 2/2 Running 0 9m
gitlab-demo-registry-746bbb488f-xjlhp 1/1 Running 0 8m
gitlab-demo-registry-746bbb488f-xxpcr 1/1 Running 0 9m
gitlab-demo-shared-secrets.0-mr7-2v5cf 0/1 Completed 0 9m
gitlab-demo-sidekiq-all-in-1-5dd8b5b9d-58p72 1/1 Running 0 9m
gitlab-demo-task-runner-7c477b48dc-d5nf6 1/1 Running 0 9m
gitlab-demo-unicorn-6dd757db97-4vqgc 1/2 ImagePullBackOff 0 9m
gitlab-demo-unicorn-6dd757db97-nmglt 2/2 Running 0 8m
gitlab-demo-unicorn-test-runner-f2ttk 0/1 Error 0 9m
```
Note: if `ImagePullBackOff` error Pod does not get auto-cleared, consider deleting the pod.
A new pod should come up with "Running" STATUS.
## Use
Retrieve the DNS name using GitLab ingress componenet:
```bash
kubectl get ingress
```
You should see following ingress configurations:
```
NAME HOSTS ADDRESS PORTS AGE
gitlab-demo-registry registry-demo.upbound.app 35.222.163.203 80, 443 14m
gitlab-demo-unicorn gitlab-demo.upbound.app 35.222.163.203 80, 443 14m
```
Navigate your browser to https://gitlab-demo.upbound.app, and if everything ran successfully, you should see:
![alt test](gitlab-login.png)
## Uninstall
### GitLab
To remove the GitLab application run:
```bash
kubectl delete -f gitlab-gcp.yaml
```
### Crossplane
Delete all managed resources by running:
```bash
kubectl delete -Rf cluster/examples/gitlab/gcp/resource-claims
```
```
bucket.storage.crossplane.io "gitlab-artifacts" deleted
bucket.storage.crossplane.io "gitlab-backups-tmp" deleted
bucket.storage.crossplane.io "gitlab-backups" deleted
bucket.storage.crossplane.io "gitlab-externaldiffs" deleted
bucket.storage.crossplane.io "gitlab-lfs" deleted
bucket.storage.crossplane.io "gitlab-packages" deleted
bucket.storage.crossplane.io "gitlab-pseudonymizer" deleted
bucket.storage.crossplane.io "gitlab-registry" deleted
bucket.storage.crossplane.io "gitlab-uploads" deleted
postgresqlinstance.database.crossplane.io "gitlab-postgresql" deleted
rediscluster.cache.crossplane.io "gitlab-redis" deleted
```
Verify that all resource claims have been removed:
```bash
kubectl get -Rf cluster/examples/gitlab/gcp/resource-claims
```
Note: typically it may take few seconds for Crossplane to process the request.
By running resource and provider removal in the same command or back-to-back, we are running the risk of having orphaned resource.
I.E., a resource that could not be cleaned up because the provider is no longer available.
Delete all resource classes:
```bash
kubectl delete -Rf cluster/examples/gitlab/gcp/resource-classes/
```
```
resourceclass.core.crossplane.io "standard-gcp-bucket" deleted
resourceclass.core.crossplane.io "standard-gcp-postgres" deleted
resourceclass.core.crossplane.io "standard-gcp-redis" deleted
```
Delete gcp-provider and secrets
```bash
kubectl delete -f cluster/examples/gitlab/gcp/provider.yaml
```

Binary file not shown.

After

Width:  |  Height:  |  Size: 54 KiB

View File

@ -0,0 +1,276 @@
---
title: Install Crossplane
toc: true
weight: 220
indent: true
---
# Install Crossplane
Crossplane can be easily installed into any existing Kubernetes cluster using the regularly published Helm chart.
The Helm chart contains all the custom resources and controllers needed to deploy and configure Crossplane.
## Pre-requisites
* [Kubernetes cluster](https://kubernetes.io/docs/setup/)
* For example [Minikube](https://kubernetes.io/docs/tasks/tools/install-minikube/), minimum version `v0.28+`
* [Helm](https://docs.helm.sh/using_helm/), minimum version `v2.12.0+`.
* For Helm 2, make sure Tiller is initialized with sufficient permissions to work on `crossplane-system` namespace.
## Installation
Helm charts for Crossplane are currently published to the `alpha` and `master` channels.
In the future, `beta` and `stable` will also be available.
> If you're using Helm 3, make sure you create the `crossplane-system` namespace (or the namespace you'd like to install
crossplane) beforehand since Helm 3 does not create that for you automatically anymore.
### Alpha
The alpha channel is the most recent release of Crossplane that is considered ready for testing by the community.
```console
helm repo add crossplane-alpha https://charts.crossplane.io/alpha
helm install --name crossplane --namespace crossplane-system crossplane-alpha/crossplane
```
### Master
The `master` channel contains the latest commits, with all automated tests passing.
`master` is subject to instability, incompatibility, and features may be added or removed without much prior notice.
It is recommended to use one of the more stable channels, but if you want the absolute newest Crossplane installed, then you can use the `master` channel.
To install the Helm chart from master, you will need to pass the specific version returned by the `search` command:
```console
helm repo add crossplane-master https://charts.crossplane.io/master/
helm search crossplane
helm install --name crossplane --namespace crossplane-system crossplane-master/crossplane --version <version>
```
For example:
```console
helm install --name crossplane --namespace crossplane-system crossplane-master/crossplane --version 0.0.0-249.637ccf9
```
## Installing Cloud Provider Stacks
You can add additional functionality to Crossplane's control plane by installing Crossplane Stacks. For example, each
supported cloud provider has its own corresponding stack that contains all the functionality for that particular cloud.
After a cloud provider's stack is installed, you will be able to provision and manage resources within that cloud
from Crossplane.
### Installation with Helm
> This method is not supported with Helm 3, please see [Manual Installation](#manual-installation) if you're using Helm 3.
You can include deployment of additional infrastructure stacks into your helm installation by setting `clusterStacks.<stack-name>.deploy` to `true`.
For example, the following will install `master` version of the GCP stack:
```console
helm install --name crossplane --namespace crossplane-system crossplane-master/crossplane --set clusterStacks.gcp.deploy=true --set clusterStacks.gcp.version=master
```
See [helm configuration parameters](#configuration) for supported stacks and parameters.
### Manual Installation
After Crossplane has been installed, it is possible to extend Crossplane's functionality by installing Crossplane stacks.
#### GCP Stack
To get started with Google Cloud Platform (GCP), create a file named `stack-gcp.yaml` with the following content:
```yaml
apiVersion: v1
kind: Namespace
metadata:
name: gcp
---
apiVersion: stacks.crossplane.io/v1alpha1
kind: ClusterStackInstall
metadata:
name: stack-gcp
namespace: gcp
spec:
package: "crossplane/stack-gcp:master"
```
Then you can install the GCP stack into Crossplane in the `gcp` namespace with the following command:
```console
kubectl apply -f stack-gcp.yaml
```
#### AWS Stack
To get started with Amazon Web Services (AWS), create a file named `stack-aws.yaml` with the following content:
```yaml
apiVersion: v1
kind: Namespace
metadata:
name: aws
---
apiVersion: stacks.crossplane.io/v1alpha1
kind: ClusterStackInstall
metadata:
name: stack-aws
namespace: aws
spec:
package: "crossplane/stack-aws:master"
```
Then you can install the AWS stack into Crossplane in the `aws` namespace with the following command:
```console
kubectl apply -f stack-aws.yaml
```
#### Azure Stack
To get started with Microsoft Azure, create a file named `stack-azure.yaml` with the following content:
```yaml
apiVersion: v1
kind: Namespace
metadata:
name: azure
---
apiVersion: stacks.crossplane.io/v1alpha1
kind: ClusterStackInstall
metadata:
name: stack-azure
namespace: azure
spec:
package: "crossplane/stack-azure:master"
```
Then you can install the Azure stack into Crossplane in the `azure` namespace with the following command:
```console
kubectl apply -f stack-azure.yaml
```
#### Rook Stack
To get started with Rook, create a file named `stack-rook.yaml` with the following content:
```yaml
apiVersion: v1
kind: Namespace
metadata:
name: rook
---
apiVersion: stacks.crossplane.io/v1alpha1
kind: ClusterStackInstall
metadata:
name: stack-rook
namespace: rook
spec:
package: "crossplane/stack-rook:master"
```
Then you can install the Rook stack into Crossplane in the `rook` namespace with the following command:
```console
kubectl apply -f stack-rook.yaml
```
### Uninstalling Cloud Provider Stacks
The cloud provider stacks can be uninstalled simply by deleting the stack resources from the cluster with a command similar to what's shown below.
**Note** that this will also **delete** any resources that Crossplane has provisioned in the cloud provider if their `ReclaimPolicy` is set to `Delete`.
After you have ensured that you are completely done with all your cloud provider resources, you can then run one of the commands below,
depending on which cloud provider you are removing, to remove its stack from Crossplane:
#### Uninstalling GCP
```console
kubectl delete -f stack-gcp.yaml
```
#### Uninstalling AWS
```console
kubectl delete -f stack-aws.yaml
```
#### Uninstalling Azure
```console
kubectl delete -f stack-azure.yaml
```
#### Uninstalling Rook
```console
kubectl delete -f stack-rook.yaml
```
## Uninstalling the Chart
To uninstall/delete the `crossplane` deployment:
```console
helm delete --purge crossplane
```
That command removes all Kubernetes components associated with Crossplane, including all the custom resources and controllers.
## Configuration
The following tables lists the configurable parameters of the Crossplane chart and their default values.
| Parameter | Description | Default |
| -------------------------------- | --------------------------------------------------------------- | ------------------------------------------------------ |
| `image.repository` | Image | `crossplane/crossplane` |
| `image.tag` | Image tag | `master` |
| `image.pullPolicy` | Image pull policy | `Always` |
| `imagePullSecrets` | Names of image pull secrets to use | `dockerhub` |
| `replicas` | The number of replicas to run for the Crossplane operator | `1` |
| `deploymentStrategy` | The deployment strategy for the Crossplane operator | `RollingUpdate` |
| `clusterStacks.aws.deploy` | Deploy AWS stack | `false`
| `clusterStacks.aws.version` | AWS stack version to deploy | `<latest released version>`
| `clusterStacks.gcp.deploy` | Deploy GCP stack | `false`
| `clusterStacks.gcp.version` | GCP stack version to deploy | `<latest released version>`
| `clusterStacks.azure.deploy` | Deploy Azure stack | `false`
| `clusterStacks.azure.version` | Azure stack version to deploy | `<latest released version>`
| `clusterStacks.rook.deploy` | Deploy Rook stack | `false`
| `clusterStacks.rook.version` | Rook stack version to deploy | `<latest released version>`
### Command Line
You can pass the settings with helm command line parameters.
Specify each parameter using the `--set key=value[,key=value]` argument to `helm install`.
For example, the following command will install Crossplane with an image pull policy of `IfNotPresent`.
```console
helm install --name crossplane --namespace crossplane-system crossplane-alpha/crossplane --set image.pullPolicy=IfNotPresent
```
### Settings File
Alternatively, a yaml file that specifies the values for the above parameters (`values.yaml`) can be provided while installing the chart.
```console
helm install --name crossplane --namespace crossplane-system crossplane-alpha/crossplane -f values.yaml
```
Here are the sample settings to get you started.
```yaml
replicas: 1
deploymentStrategy: RollingUpdate
image:
repository: crossplane/crossplane
tag: master
pullPolicy: Always
imagePullSecrets:
- dockerhub
```

36
docs/v0.4/learn-more.md Normal file
View File

@ -0,0 +1,36 @@
---
title: Learn More
toc: true
weight: 810
---
# Learn More
If you have any questions, please drop us a note on [Crossplane Slack][join-crossplane-slack] or [contact us][contact-us]!
***Learn more about using Crossplane***
- [GitLab deploys into multiple clouds from kubectl using Crossplane](https://about.gitlab.com/2019/05/20/gitlab-first-deployed-kubernetes-api-to-multiple-clouds/)
- [CNCF Talks & Community Presentations](https://www.youtube.com/playlist?list=PL510POnNVaaZJj9OG6PbgsZvgYbhwJRyE)
- [Software Engineering Daily - Intro Podcast](https://softwareengineeringdaily.com/2019/01/02/crossplane-multicloud-control-plane-with-bassam-tabbara/)
- [Crossplane Architecture](https://docs.google.com/document/d/1whncqdUeU2cATGEJhHvzXWC9xdK29Er45NJeoemxebo/edit?usp=sharing)
- [Latest Design Docs](https://github.com/crossplaneio/crossplane/tree/master/design)
- [Roadmap](https://github.com/crossplaneio/crossplane/blob/master/ROADMAP.md)
***Writing Kubernetes controllers to extend Crossplane***
- [Keep the Space Shuttle Flying: Writing Robust Operators](https://www.youtube.com/watch?v=uf97lOApOv8)
- [Best practices for building Kubernetes Operators](https://cloud.google.com/blog/products/containers-kubernetes/best-practices-for-building-kubernetes-operators-and-stateful-apps)
- [Programming Kubernetes Book](https://www.oreilly.com/library/view/programming-kubernetes/9781492047094/)
- [Crossplane Reconciler Patterns](https://github.com/crossplaneio/crossplane/blob/master/design/design-doc-reconciler-patterns.md)
- [Contributor Guide](https://github.com/crossplaneio/crossplane/blob/master/CONTRIBUTING.md)
***Join the growing Crossplane community and get involved!***
- Join our [Community Slack](https://slack.crossplane.io/)!
- Submit an issue on [GitHub](https://github.com/crossplaneio/crossplane)
- Attend our bi-weekly [Community Meeting](https://github.com/crossplaneio/crossplane#community-meeting)
- Join our bi-weekly live stream: [The Binding Status](https://github.com/crossplaneio/tbs)
- Subscribe to our [YouTube Channel](https://www.youtube.com/channel/UC19FgzMBMqBro361HbE46Fw)
- Drop us a note on Twitter: [@crossplane_io](https://twitter.com/crossplane_io)
- Email us: [info@crossplane.io](mailto:info@crossplane.io)
<!-- Named links -->
[join-crossplane-slack]: https://slack.crossplane.io
[contact-us]: https://github.com/crossplaneio/crossplane#contact

BIN
docs/v0.4/media/arch.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 MiB

BIN
docs/v0.4/media/banner.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 292 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 375 KiB

310
docs/v0.4/media/logo.svg Normal file
View File

@ -0,0 +1,310 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 23.0.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 1312.19 279.51" style="enable-background:new 0 0 1312.19 279.51;" xml:space="preserve">
<style type="text/css">
.st0{clip-path:url(#SVGID_2_);fill:#F7D186;}
.st1{clip-path:url(#SVGID_4_);fill:#FF9234;}
.st2{clip-path:url(#SVGID_6_);enable-background:new ;}
.st3{clip-path:url(#SVGID_8_);}
.st4{clip-path:url(#SVGID_10_);}
.st5{clip-path:url(#SVGID_12_);fill:#FFCD3C;}
.st6{clip-path:url(#SVGID_14_);enable-background:new ;}
.st7{clip-path:url(#SVGID_16_);}
.st8{clip-path:url(#SVGID_18_);}
.st9{clip-path:url(#SVGID_20_);fill:#F3807B;}
.st10{clip-path:url(#SVGID_22_);enable-background:new ;}
.st11{clip-path:url(#SVGID_24_);}
.st12{clip-path:url(#SVGID_26_);}
.st13{clip-path:url(#SVGID_28_);fill:#35D0BA;}
.st14{clip-path:url(#SVGID_30_);fill:#D8AE64;}
.st15{clip-path:url(#SVGID_32_);fill:#004680;}
.st16{clip-path:url(#SVGID_34_);fill:#004680;}
.st17{clip-path:url(#SVGID_36_);fill:#004680;}
.st18{clip-path:url(#SVGID_38_);fill:#004680;}
.st19{clip-path:url(#SVGID_40_);fill:#004680;}
.st20{clip-path:url(#SVGID_42_);fill:#004680;}
.st21{clip-path:url(#SVGID_44_);fill:#004680;}
.st22{clip-path:url(#SVGID_46_);fill:#004680;}
.st23{clip-path:url(#SVGID_48_);fill:#004680;}
.st24{clip-path:url(#SVGID_50_);fill:#004680;}
</style>
<g>
<g>
<defs>
<path id="SVGID_1_" d="M115.47,94.13c-8.4,0-15.22,6.81-15.22,15.22v143.2c0,8.4,6.81,15.22,15.22,15.22s15.22-6.81,15.22-15.22
v-143.2C130.68,100.94,123.87,94.13,115.47,94.13"/>
</defs>
<clipPath id="SVGID_2_">
<use xlink:href="#SVGID_1_" style="overflow:visible;"/>
</clipPath>
<rect x="89.53" y="83.41" class="st0" width="51.87" height="195.07"/>
</g>
<g>
<defs>
<path id="SVGID_3_" d="M176.53,75.36c0.05-0.96,0.07-1.93,0.07-2.9c0-0.95-0.02-1.89-0.07-2.82
c-1.47-32.22-28.06-57.88-60.64-57.88S56.72,37.42,55.25,69.64c-0.04,0.94-0.07,1.88-0.07,2.82c0,1.04,0.03,2.07,0.08,3.09
c-0.02,0.5-0.08,1-0.08,1.51v99.64c0,19.06,15.59,34.65,34.65,34.65h52.14c19.06,0,34.65-15.59,34.65-34.65V77.07
C176.62,76.49,176.56,75.93,176.53,75.36"/>
</defs>
<clipPath id="SVGID_4_">
<use xlink:href="#SVGID_3_" style="overflow:visible;"/>
</clipPath>
<rect x="44.47" y="1.04" class="st1" width="142.87" height="221.04"/>
</g>
<g>
<defs>
<path id="SVGID_5_" d="M55.55,69.64c-0.04,0.93-0.06,1.87-0.06,2.82c0,1.04,0.02,2.07,0.08,3.09c-0.02,0.51-0.08,1-0.08,1.52
v99.64c0,19.05,15.59,34.64,34.64,34.64h52.14c19.06,0,34.65-15.59,34.65-34.64V77.07c0-0.58-0.06-1.14-0.09-1.71
c0.05-0.96,0.07-1.93,0.07-2.89c0-0.95-0.02-1.89-0.06-2.82c-1.47-32.22-28.06-57.88-60.64-57.88
C83.61,11.76,57.02,37.42,55.55,69.64z"/>
</defs>
<clipPath id="SVGID_6_">
<use xlink:href="#SVGID_5_" style="overflow:visible;"/>
</clipPath>
<g class="st2">
<g>
<defs>
<rect id="SVGID_7_" x="16.08" y="24.9" width="197.24" height="197.24"/>
</defs>
<clipPath id="SVGID_8_">
<use xlink:href="#SVGID_7_" style="overflow:visible;"/>
</clipPath>
<g class="st3">
<defs>
<rect id="SVGID_9_" x="9.23" y="92.99" transform="matrix(0.7071 -0.7071 0.7071 0.7071 -54.1638 118.2926)" width="212.95" height="63.07"/>
</defs>
<clipPath id="SVGID_10_">
<use xlink:href="#SVGID_9_" style="overflow:visible;"/>
</clipPath>
<g class="st4">
<defs>
<rect id="SVGID_11_" x="54.67" y="9.89" width="124.35" height="201.53"/>
</defs>
<clipPath id="SVGID_12_">
<use xlink:href="#SVGID_11_" style="overflow:visible;"/>
</clipPath>
<rect x="7.4" y="16.22" class="st5" width="216.62" height="216.62"/>
</g>
</g>
</g>
</g>
</g>
<g>
<defs>
<path id="SVGID_13_" d="M55.55,69.64c-0.04,0.93-0.06,1.87-0.06,2.82c0,1.04,0.02,2.07,0.08,3.09c-0.02,0.51-0.08,1-0.08,1.52
v99.64c0,19.05,15.59,34.64,34.64,34.64h52.14c19.06,0,34.65-15.59,34.65-34.64V77.07c0-0.58-0.06-1.14-0.09-1.71
c0.05-0.96,0.07-1.93,0.07-2.89c0-0.95-0.02-1.89-0.06-2.82c-1.47-32.22-28.06-57.88-60.64-57.88
C83.61,11.76,57.02,37.42,55.55,69.64z"/>
</defs>
<clipPath id="SVGID_14_">
<use xlink:href="#SVGID_13_" style="overflow:visible;"/>
</clipPath>
<g class="st6">
<g>
<defs>
<rect id="SVGID_15_" x="-37.52" y="-28.7" width="207.96" height="207.96"/>
</defs>
<clipPath id="SVGID_16_">
<use xlink:href="#SVGID_15_" style="overflow:visible;"/>
</clipPath>
<g class="st7">
<defs>
<rect id="SVGID_17_" x="-40.95" y="35.1" transform="matrix(0.7071 -0.7071 0.7071 0.7071 -33.3744 68.1028)" width="212.95" height="78.48"/>
</defs>
<clipPath id="SVGID_18_">
<use xlink:href="#SVGID_17_" style="overflow:visible;"/>
</clipPath>
<g class="st8">
<defs>
<rect id="SVGID_19_" x="54.67" y="9.89" width="124.35" height="201.53"/>
</defs>
<clipPath id="SVGID_20_">
<use xlink:href="#SVGID_19_" style="overflow:visible;"/>
</clipPath>
<rect x="-48.24" y="-39.42" class="st9" width="227.51" height="227.51"/>
</g>
</g>
</g>
</g>
</g>
<g>
<defs>
<path id="SVGID_21_" d="M55.55,69.64c-0.04,0.93-0.06,1.87-0.06,2.82c0,1.04,0.02,2.07,0.08,3.09c-0.02,0.51-0.08,1-0.08,1.52
v99.64c0,19.05,15.59,34.64,34.64,34.64h52.14c19.06,0,34.65-15.59,34.65-34.64V77.07c0-0.58-0.06-1.14-0.09-1.71
c0.05-0.96,0.07-1.93,0.07-2.89c0-0.95-0.02-1.89-0.06-2.82c-1.47-32.22-28.06-57.88-60.64-57.88
C83.61,11.76,57.02,37.42,55.55,69.64z"/>
</defs>
<clipPath id="SVGID_22_">
<use xlink:href="#SVGID_21_" style="overflow:visible;"/>
</clipPath>
<g class="st10">
<g>
<defs>
<rect id="SVGID_23_" x="61.1" y="69.92" width="197.24" height="197.24"/>
</defs>
<clipPath id="SVGID_24_">
<use xlink:href="#SVGID_23_" style="overflow:visible;"/>
</clipPath>
<g class="st11">
<defs>
<rect id="SVGID_25_" x="53.98" y="137.74" transform="matrix(0.7071 -0.7071 0.7071 0.7071 -72.6974 163.0359)" width="212.95" height="63.07"/>
</defs>
<clipPath id="SVGID_26_">
<use xlink:href="#SVGID_25_" style="overflow:visible;"/>
</clipPath>
<g class="st12">
<defs>
<rect id="SVGID_27_" x="54.67" y="9.89" width="124.35" height="201.53"/>
</defs>
<clipPath id="SVGID_28_">
<use xlink:href="#SVGID_27_" style="overflow:visible;"/>
</clipPath>
<rect x="52.14" y="60.96" class="st13" width="216.62" height="216.62"/>
</g>
</g>
</g>
</g>
</g>
<g>
<defs>
<path id="SVGID_29_" d="M104.38,211.52l26.4,26.39V211.3C130.78,211.3,103.72,211.52,104.38,211.52"/>
</defs>
<clipPath id="SVGID_30_">
<use xlink:href="#SVGID_29_" style="overflow:visible;"/>
</clipPath>
<rect x="93.65" y="200.58" class="st14" width="47.85" height="48.06"/>
</g>
<g>
<defs>
<path id="SVGID_31_" d="M307.52,195.1c-38.8,0-70.21-31.6-70.21-70.41c0-38.6,31.4-70.21,70.21-70.21c20.2,0,39.6,8.8,52.81,24
c4.2,5,3.8,12.2-1,16.4c-4.8,4.4-12.2,3.8-16.4-1c-9-10.2-21.8-16-35.4-16c-25.8,0-47.01,21-47.01,46.8
c0,26,21.2,47.01,47.01,47.01c13.6,0,26.4-5.8,35.4-16c4.2-4.8,11.6-5.4,16.4-1c4.8,4.2,5.2,11.4,1,16.4
C347.12,186.3,327.72,195.1,307.52,195.1"/>
</defs>
<use xlink:href="#SVGID_31_" style="overflow:visible;fill-rule:evenodd;clip-rule:evenodd;fill:#004680;"/>
<clipPath id="SVGID_32_">
<use xlink:href="#SVGID_31_" style="overflow:visible;"/>
</clipPath>
<rect x="226.59" y="43.77" class="st15" width="147.35" height="162.05"/>
</g>
<g>
<defs>
<path id="SVGID_33_" d="M438.53,98.89c0,6.4-5.2,11.6-11.8,11.6c-12.8,0-22.4,10.4-22.4,24.6v48.41c0,6.4-5.2,11.6-11.6,11.6
c-6.4,0-11.6-5.2-11.6-11.6V96.49c0-6.4,5.2-11.6,11.6-11.6c5.4,0,9.8,3.6,11.2,8.6c6.8-4,14.6-6.2,22.8-6.2
C433.33,87.29,438.53,92.49,438.53,98.89"/>
</defs>
<use xlink:href="#SVGID_33_" style="overflow:visible;fill-rule:evenodd;clip-rule:evenodd;fill:#004680;"/>
<clipPath id="SVGID_34_">
<use xlink:href="#SVGID_33_" style="overflow:visible;"/>
</clipPath>
<rect x="370.4" y="74.17" class="st16" width="78.84" height="131.65"/>
</g>
<g>
<defs>
<path id="SVGID_35_" d="M497.53,195.7c-30.4,0-55-24.8-55-55c0-30.4,24.6-55.21,55-55.21c30.4,0,55.21,24.8,55.21,55.21
C552.74,170.9,527.94,195.7,497.53,195.7 M497.53,108.69c-17.6,0-31.8,14.4-31.8,32c0,17.4,14.2,31.8,31.8,31.8
c17.6,0,31.8-14.4,31.8-31.8C529.34,123.09,515.14,108.69,497.53,108.69"/>
</defs>
<use xlink:href="#SVGID_35_" style="overflow:visible;fill-rule:evenodd;clip-rule:evenodd;fill:#004680;"/>
<clipPath id="SVGID_36_">
<use xlink:href="#SVGID_35_" style="overflow:visible;"/>
</clipPath>
<rect x="431.81" y="74.77" class="st17" width="131.65" height="131.65"/>
</g>
<g>
<defs>
<path id="SVGID_37_" d="M571.94,174.9c-2.8-5.8-0.2-12.8,5.6-15.4c6-2.8,12.8-0.2,15.4,5.6c1.6,3.2,6,6.8,13.8,6.8
c10.8,0,14.6-6.6,14.6-11c0-6-1.6-7.8-17.2-11.8c-7-1.6-14.2-3.4-20.4-7.4c-8.4-5.6-13-14-13-24.4c0-8.2,3.6-16.4,9.8-22.4
c6.6-6.4,15.8-10,26.2-10c14.8,0,27.41,7.2,32.8,19c2.8,5.8,0.2,12.6-5.6,15.4c-5.8,2.8-12.8,0.2-15.4-5.6
c-1.2-2.6-5-5.6-11.8-5.6c-9.2,0-12.6,5.8-12.6,9.2c0,4,0.8,5.6,15.6,9.4c13,3.2,34.8,8.6,34.8,34.2c0,8.6-3.6,17.2-10,23.6
c-5,4.8-13.8,10.6-27.8,10.6C590.94,195.1,577.54,187.3,571.94,174.9"/>
</defs>
<use xlink:href="#SVGID_37_" style="overflow:visible;fill-rule:evenodd;clip-rule:evenodd;fill:#004680;"/>
<clipPath id="SVGID_38_">
<use xlink:href="#SVGID_37_" style="overflow:visible;"/>
</clipPath>
<rect x="560.02" y="74.17" class="st18" width="95.25" height="131.65"/>
</g>
<g>
<defs>
<path id="SVGID_39_" d="M663.75,174.9c-2.8-5.8-0.2-12.8,5.6-15.4c6-2.8,12.8-0.2,15.4,5.6c1.6,3.2,6,6.8,13.8,6.8
c10.8,0,14.6-6.6,14.6-11c0-6-1.6-7.8-17.2-11.8c-7-1.6-14.2-3.4-20.4-7.4c-8.4-5.6-13-14-13-24.4c0-8.2,3.6-16.4,9.8-22.4
c6.6-6.4,15.8-10,26.2-10c14.81,0,27.41,7.2,32.8,19c2.8,5.8,0.2,12.6-5.6,15.4c-5.8,2.8-12.8,0.2-15.4-5.6
c-1.2-2.6-5-5.6-11.8-5.6c-9.2,0-12.6,5.8-12.6,9.2c0,4,0.8,5.6,15.6,9.4c13,3.2,34.8,8.6,34.8,34.2c0,8.6-3.6,17.2-10,23.6
c-5,4.8-13.8,10.6-27.8,10.6C682.75,195.1,669.35,187.3,663.75,174.9"/>
</defs>
<use xlink:href="#SVGID_39_" style="overflow:visible;fill-rule:evenodd;clip-rule:evenodd;fill:#004680;"/>
<clipPath id="SVGID_40_">
<use xlink:href="#SVGID_39_" style="overflow:visible;"/>
</clipPath>
<rect x="651.83" y="74.17" class="st19" width="95.25" height="131.65"/>
</g>
<g>
<defs>
<path id="SVGID_41_" d="M859.17,139.9c0,14.8-5,28.4-14.4,38.61c-9.8,10.6-23.2,16.6-38,16.6c-10.6,0-20.6-3.2-29-8.8v47.2
c0,6.4-5.4,11.6-11.8,11.6c-6.4,0-11.6-5.2-11.6-11.6V96.49c0-6.4,5.2-11.6,11.6-11.6c5.4,0,10.2,3.8,11.4,9
c8.6-5.8,18.8-9,29.4-9c14.8,0,28.2,5.8,38,16.4C854.17,111.49,859.17,125.29,859.17,139.9 M835.96,139.9
c0-18.4-12.2-31.8-29.2-31.8c-16.8,0-29,13.4-29,31.8c0,18.4,12.2,31.8,29,31.8C823.77,171.7,835.96,158.3,835.96,139.9"/>
</defs>
<use xlink:href="#SVGID_41_" style="overflow:visible;fill-rule:evenodd;clip-rule:evenodd;fill:#004680;"/>
<clipPath id="SVGID_42_">
<use xlink:href="#SVGID_41_" style="overflow:visible;"/>
</clipPath>
<rect x="743.64" y="74.17" class="st20" width="126.25" height="181.65"/>
</g>
<g>
<defs>
<path id="SVGID_43_" d="M889.77,195.1c-6.4,0-11.6-5.2-11.6-11.6V66.29c0-6.4,5.2-11.6,11.6-11.6c6.4,0,11.8,5.2,11.8,11.6V183.5
C901.57,189.9,896.17,195.1,889.77,195.1"/>
</defs>
<use xlink:href="#SVGID_43_" style="overflow:visible;fill-rule:evenodd;clip-rule:evenodd;fill:#004680;"/>
<clipPath id="SVGID_44_">
<use xlink:href="#SVGID_43_" style="overflow:visible;"/>
</clipPath>
<rect x="867.45" y="43.97" class="st21" width="44.84" height="161.85"/>
</g>
<g>
<defs>
<path id="SVGID_45_" d="M1025.38,96.49v87.01c0,6.4-5.2,11.6-11.6,11.6c-5.6,0-10.2-3.8-11.4-9c-8.4,5.8-18.6,9-29.4,9
c-14.8,0-28.2-5.8-38.01-16.6c-9.2-10-14.4-23.8-14.4-38.4c0-14.8,5.2-28.6,14.4-38.61c9.8-10.8,23.21-16.6,38.01-16.6
c10.8,0,21,3.2,29.4,9c1.2-5.2,5.8-9,11.4-9C1020.18,84.89,1025.38,90.09,1025.38,96.49 M1002.18,140.1c0-18.6-12.4-32-29.2-32
c-17,0-29.2,13.4-29.2,32c0,18.4,12.2,31.8,29.2,31.8C989.78,171.9,1002.18,158.5,1002.18,140.1"/>
</defs>
<use xlink:href="#SVGID_45_" style="overflow:visible;fill-rule:evenodd;clip-rule:evenodd;fill:#004680;"/>
<clipPath id="SVGID_46_">
<use xlink:href="#SVGID_45_" style="overflow:visible;"/>
</clipPath>
<rect x="909.85" y="74.17" class="st22" width="126.25" height="131.65"/>
</g>
<g>
<defs>
<path id="SVGID_47_" d="M1136.79,132.7v50.8c0,6.4-5.2,11.6-11.8,11.6c-6.4,0-11.6-5.2-11.6-11.6v-50.8
c0-11.8-6.6-24.6-21.4-24.6c-13.4,0-23.4,10.6-23.4,24.6v0.8v0.8v49.2c0,6.4-5.2,11.6-11.6,11.6c-6.4,0-11.6-5.2-11.6-11.6v-49.4
v-1.4V96.49c0-6.4,5.2-11.6,11.6-11.6c4.8,0,8.8,2.8,10.6,6.8c7-4.4,15.4-6.8,24.4-6.8
C1117.39,84.89,1136.79,105.49,1136.79,132.7"/>
</defs>
<use xlink:href="#SVGID_47_" style="overflow:visible;fill-rule:evenodd;clip-rule:evenodd;fill:#004680;"/>
<clipPath id="SVGID_48_">
<use xlink:href="#SVGID_47_" style="overflow:visible;"/>
</clipPath>
<rect x="1034.66" y="74.17" class="st23" width="112.85" height="131.65"/>
</g>
<g>
<defs>
<path id="SVGID_49_" d="M1207.2,196.1c-14.8,0-28.2-6.4-38.01-17.2c-9.4-10-14.4-23.81-14.4-38.4c0-31.61,22.2-55.21,51.4-55.21
c29.41,0,50.8,23.2,50.8,55.21c0,6.4-5.2,11.6-11.8,11.6h-65.41c4,12.2,14.4,20.8,27.4,20.8c7.83,0,14.48-1.65,19.23-6.21
c1.44-1.38,2.7-3.03,3.77-4.99c3.4-5.6,10.6-7.2,16-4c5.6,3.4,7.2,10.6,4,16C1241.2,189.9,1225.6,196.1,1207.2,196.1
M1179.59,128.7h52.61c-4-13.8-15-20.2-26-20.2C1195.4,108.49,1183.79,114.89,1179.59,128.7"/>
</defs>
<use xlink:href="#SVGID_49_" style="overflow:visible;fill-rule:evenodd;clip-rule:evenodd;fill:#004680;"/>
<clipPath id="SVGID_50_">
<use xlink:href="#SVGID_49_" style="overflow:visible;"/>
</clipPath>
<rect x="1144.07" y="74.57" class="st24" width="123.65" height="132.25"/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 14 KiB

133
docs/v0.4/postgresql.md Normal file
View File

@ -0,0 +1,133 @@
# Deploying PostgreSQL Databases
This user guide will walk you through how to deploy a PostgreSQL database across many different environments with a focus on portability and reusability.
The database will be dynamically provisioned in the cloud provider of your choice at the request of the application developer via a `ResourceClaim` and created with the environment specific information that the administrator providers in a `ResourceClass`.
The commands in this guide assume you are running from a terminal/shell at the root of the [Crossplane repo](https://github.com/crossplaneio/crossplane/).
## Install Crossplane
The first step will be to install Crossplane and any desired cloud provider stacks by following the steps in the [Crossplane install guide](install-crossplane.md).
## Add Cloud Provider
Next you'll need to add your cloud provider credentials to Crossplane using [these provider specific steps](cloud-providers.md).
After those steps are completed, you should have the cloud provider credentials saved in a file on your local filesystem, for which the path will be stored in the environment variable `PROVIDER_KEY_FILE` in the next section.
## Set Environment Variables
After your cloud provider credentials have been created/added, let's set the following environment variables that have different values for each provider,
but will allow the rest of the steps to be consistent across all of them.
You only need to set the variables for your chosen cloud provider, you can ignore the other ones.
### Google Cloud Platform (GCP)
```console
export PROVIDER=GCP
export provider=gcp
export PROVIDER_KEY_FILE=crossplane-${provider}-provider-key.json
export DATABASE_TYPE=cloudsqlinstances
export versionfield=databaseVersion
```
### Microsoft Azure
```console
export PROVIDER=AZURE
export provider=azure
export PROVIDER_KEY_FILE=crossplane-${provider}-provider-key.json
export DATABASE_TYPE=postgresqlservers
export versionfield=version
```
### Amazon Web Services (AWS)
```console
export PROVIDER=AWS
export provider=aws
export PROVIDER_KEY_FILE=~/.aws/credentials
export DATABASE_TYPE=rdsinstances
export versionfield=engineVersion
```
## Create a PostgreSQL Resource Class
Let's create a `ResourceClass` that acts as a "blueprint" that contains the environment specific details of how a general request from the application to create a PostgreSQL database should be fulfilled.
This is a task that the administrator should complete, since they will have the knowledge and privileges for the specific environment details.
```console
sed "s/BASE64ENCODED_${PROVIDER}_PROVIDER_CREDS/`base64 ${PROVIDER_KEY_FILE} | tr -d '\n'`/g;" cluster/examples/database/${provider}/postgresql/provider.yaml | kubectl create -f -
kubectl create -f cluster/examples/database/${provider}/postgresql/resource-class.yaml
```
## Create a PostgreSQL Resource Claim
After the administrator has created the PostgreSQL `ResourceClass` "blueprint", the application developer is now free to create a PostgreSQL `ResourceClaim`.
This is a general request for a PostgreSQL database to be used by their application and it requires no environment specific information, allowing our applications to express their need for a database in a very portable way.
```console
kubectl create namespace demo
kubectl -n demo create -f cluster/examples/database/${provider}/postgresql/resource-claim.yaml
```
## Check Status of PostgreSQL Provisioning
We can follow along with the status of the provisioning of the database resource with the below commands.
Note that the first command gives us the status of the `ResourceClaim` (general request for a database by the application),
and the second command gives the status of the environment specific database resource that Crossplane is provisioning using the `ResourceClass` "blueprint".
```console
kubectl -n demo get postgresqlinstance -o custom-columns=NAME:.metadata.name,STATUS:.status.bindingPhase,CLASS:.spec.classRef.name,VERSION:.spec.engineVersion,AGE:.metadata.creationTimestamp
kubectl -n crossplane-system get ${DATABASE_TYPE} -o custom-columns=NAME:.metadata.name,STATUS:.status.bindingPhase,STATE:.status.state,CLASS:.spec.classRef.name,VERSION:.spec.${versionfield},AGE:.metadata.creationTimestamp
```
## Access the PostgreSQL Database
Once the dynamic provisioning process has finished creating and preparing the database, the status output will look similar to the following:
```console
> kubectl -n demo get postgresqlinstance -o custom-columns=NAME:.metadata.name,STATUS:.status.bindingPhase,CLASS:.spec.classRef.name,VERSION:.spec.engineVersion,AGE:.metadata.creationTimestamp
NAME STATUS CLASS VERSION AGE
cloud-postgresql-claim Bound cloud-postgresql 9.6 2018-12-23T04:00:11Z
> kubectl -n crossplane-system get ${DATABASE_TYPE} -o custom-columns=NAME:.metadata.name,STATUS:.status.bindingPhase,STATE:.status.state,CLASS:.spec.classRef.name,VERSION:.spec.${versionfield},AGE:.metadata.creationTimestamp
NAME STATUS STATE CLASS VERSION AGE
postgresql-3ef70bf9-0667-11e9-99e1-080027cf2340 Bound Ready cloud-postgresql 9.6 2018-12-23T04:00:12Z
```
Note that both the general `postgresqlinstance` `ResourceClaim` and the cloud provider specific PostgreSQL database have the `Bound` status, meaning the dynamic provisioning is done and the resource is ready for consumption.
The connection information will be stored in a secret specified via the `writeConnectionSecretTo` field.
Since the secret is base64 encoded, we'll need to decode its fields to view them in plain-text.
To view all the connection information in plain-text, run the following command:
```console
for r in endpoint username password; do echo -n "${r}: "; kubectl -n demo get secret cloud-postgresql-claim -o jsonpath='{.data.'"${r}"'}' | base64 -D; echo; done
```
A workload or pod manifest will usually reference this connection information through injecting the secret contents into environment variables in the manifest.
You can see this in action as an example in the [Azure Workload example](https://github.com/crossplaneio/crossplane/blob/release-0.1/cluster/examples/workloads/wordpress-azure/workload.yaml#L47-L62).
More information about consuming secrets from manifests can be found in the [Kubernetes documentation](https://kubernetes.io/docs/concepts/configuration/secret/#use-cases).
## Clean-up
When you are finished with the PostgreSQL instance from this guide, you can clean up all the resources by running the below commands.
First, delete the resource claim, which will start the operation of deleting the PostgreSQL database from your cloud provider.
```console
kubectl -n demo delete -f cluster/examples/database/${provider}/postgresql/resource-claim.yaml
```
Next. delete the `ResourceClass` "blueprint":
```console
kubectl delete -f cluster/examples/database/${provider}/postgresql/resource-class.yaml
```
Finally, delete the cloud provider credentials from your local environment:
```console
kubectl delete -f cluster/examples/database/${provider}/postgresql/provider.yaml
```

382
docs/v0.4/quick-start.md Normal file
View File

@ -0,0 +1,382 @@
---
title: Getting Started
toc: true
weight: 210
---
# Getting Started
This guide will demonstrate using Crossplane to deploy a portable MySQL database
on the Google Cloud Platform (GCP). It serves as an initial introduction to
Crossplane, but only displays a small set of its features.
In this guide we will:
1. [Install Crossplane](#install-crossplane)
1. [Add your GCP project to Crossplane](#add-your-gcp-project-to-crossplane)
1. [Provision a MySQL instance using CloudSQL](#provision-a-mysql-instance)
1. [Define a class of CloudSQL instance for dynamic provisioning](#define-a-class-of-cloudsql-instance)
## Install Crossplane
We'll start by installing Crossplane using [Helm]. You'll need a working
Kubernetes cluster ([minikube] or [kind] will do just fine). Crossplane is
currently in alpha, so we'll use the `alpha` channel:
```bash
# Crossplane lives in the crossplane-system namespace by convention.
kubectl create namespace crossplane-system
helm repo add crossplane-alpha https://charts.crossplane.io/alpha
helm install --name crossplane --namespace crossplane-system crossplane-alpha/crossplane
```
Once Crossplane is installed we'll need to install the a [stack] for our cloud
provider - in this case GCP. Installing the GCP stack teaches Crossplane how to
provision and maanage things in GCP. You install it by creating a
`ClusterStackInstall`:
```yaml
apiVersion: stacks.crossplane.io/v1alpha1
kind: ClusterStackInstall
metadata:
name: stack-gcp
namespace: crossplane-system
spec:
package: "crossplane/stack-gcp:master"
```
Save the above as `stack.yaml`, and apply it by running:
```bash
kubectl apply -f stack.yaml
```
We've now installed Crossplane with GCP support! Take a look at the [Crossplane
installation guide] for more installation options, and to learn how to install
support for other cloud providers such as Amazon Web Services and Microsoft
Azure.
## Add Your GCP Project to Crossplane
We've taught Crossplane how to work with GCP - now we must tell it how to
connect to your GCP project. We'll do this by creating a Crossplane `Provider`
that specifies the project name and some GCP service account credentials to use:
```yaml
apiVersion: gcp.crossplane.io/v1alpha3
kind: Provider
metadata:
name: example-provider
spec:
# Make sure to update your project's name here.
projectID: my-cool-gcp-project
credentialsSecretRef:
name: example-gcp-credentials
namespace: crossplane-system
key: credentials.json
```
Save the above `Provider` as `provider.yaml`, save your Google Application
Credentials as `credentials.json`, then run:
```bash
kubectl -n crossplane-system create secret example-gcp-credentials --from-file=credentials.json
kubectl apply -f provider.yaml
```
Crossplane can now manage your GCP project! Your service account will need the
CloudSQL Admin role for this guide. Check out GCP's [Getting Started With
Authentication] guide if you need help creating a service account and
downloading its `credentials.json` file, and Crossplane's [GCP provider
documentation] for detailed instructions on setting up your project and service
account permissions.
## Provision a MySQL Instance
GCP provides MySQL databases using [CloudSQL] instances. Crossplane uses a
resource and claim pattern to provision and manage cloud resources like CloudSQL
instances - if you've ever used [persistent volumes in Kubernetes] you've seen
this pattern before. The simplest way to start using a new MySQL instance on GCP
is to provision a `CloudSQLInstance`, then claim it via a `MySQLInstance`. We
call this process _static provisioning_.
```yaml
apiVersion: database.gcp.crossplane.io/v1beta1
kind: CloudSQLInstance
metadata:
name: example-cloudsql-instance
spec:
providerRef:
name: example-provider
writeConnectionSecretToRef:
name: example-cloudsql-connection-details
namespace: crossplane-system
forProvider:
databaseVersion: MYSQL_5_6
region: us-west2
settings:
tier: db-n1-standard-1
dataDiskType: PD_SSD
dataDiskSizeGb: 10
ipConfiguration:
ipv4Enabled: true
```
First we create a CloudSQL instance. Save the above as `cloudsql.yaml`, then
apply it:
```bash
kubectl apply -f cloudsql.yaml
```
Crossplane is now creating the `CloudSQLInstance`! Before we can use it, we need
to claim it.
```yaml
apiVersion: database.crossplane.io/v1alpha1
kind: MySQLInstance
metadata:
name: example-mysql-claim
spec:
resourceRef:
apiVersion: database.gcp.crossplane.io/v1beta1
kind: CloudSQLInstance
name: example-cloudsql-instance
writeConnectionSecretToRef:
name: example-mysql-connection-details
```
Save the above as `mysql.yaml`, and once again apply it:
```bash
kubectl --namespace default apply -f mysql.yaml
```
In Crossplane cloud provider specific resources like the `CloudSQLInstance` we
created above are called _managed resources_. They're considered infrastructure,
like a Kubernetes `Node` or `PersistentVolume`. Managed resources exist at the
cluster scope (they're not namespaced) and let you specify nitty-gritty provider
specific configuration details. Managed resources that have reached `v1beta1`
are a high fidelity representation of their underlying cloud provider resource,
and can be updated to change their configuration after provisioning. We _claim_
these resources by submitting a _resource claim_ like the `MySQLInstance` above.
Resource claims are namespaced, and indicate that the managed resource they
claim is in use by _binding_ to it. You can also use resource claims to
_dynamically provision_ managed resources on-demand - we'll discuss that in the
next section of this guide.
Soon your new `MySQLInstance` should be online. You can use `kubectl` to
inspect its status. If you see `Bound` under the `STATUS` column, it's ready to
use!
```bash
$ kubectl --namespace default get mysqlinstance example-mysql-claim
NAME STATUS CLASS-KIND CLASS-NAME RESOURCE-KIND RESOURCE-NAME AGE
example-mysql-claim Bound CloudSQLInstance example-cloudsql-instance 4m
```
You'll find all the details you need to connect to your new MySQL instance saved
in the Kubernetes `Secret` you specified via `writeConnectionSecretToRef`, ready
to [use with your Kubernetes pods].
```bash
$ kubectl --namespace default describe secret example-mysql-connection-details
Name: example-mysql-connection-details
Namespace: default
Type: Opaque
Data
====
serverCACertificateCommonName: 98 bytes
serverCACertificateInstance: 25 bytes
username: 4 bytes
password: 27 bytes
publicIP: 13 bytes
serverCACertificateCertSerialNumber: 1 bytes
serverCACertificateCreateTime: 24 bytes
serverCACertificateExpirationTime: 24 bytes
serverCACertificateSha1Fingerprint: 40 bytes
endpoint: 13 bytes
serverCACertificateCert: 1272 bytes
```
That's all there is to static provisioning with Crossplane! We've created a
`CloudSQLInstance` as cluster scoped infrastructure, then claimed it as a
`MySQLInstance`. You can use `kubectl describe` to view the detailed
configuration and status of your `CloudSqlInstance`.
```bash
$ kubectl describe example-cloudsql-instance
Name: example-cloudsql-instance
Annotations: crossplane.io/external-name: example-cloudsql-instance
API Version: database.gcp.crossplane.io/v1beta1
Kind: CloudSQLInstance
Spec:
For Provider:
Database Version: MYSQL_5_6
Gce Zone: us-west2-b
Instance Type: CLOUD_SQL_INSTANCE
Region: us-west2
Settings:
Activation Policy: ALWAYS
Backup Configuration:
Start Time: 17:00
Data Disk Size Gb: 10
Data Disk Type: PD_SSD
Ip Configuration:
ipv4Enabled: true
Location Preference:
Zone: us-west2-b
Pricing Plan: PER_USE
Replication Type: SYNCHRONOUS
Storage Auto Resize: true
Tier: db-n1-standard-1
Provider Ref:
Name: example-provider
Write Connection Secret To Ref:
Name: example-cloudsql-connection-details
Namespace: crossplane-system
Status:
At Provider:
Backend Type: SECOND_GEN
Connection Name: my-cool-gcp-project:us-west2:example-cloudsql-instance
Gce Zone: us-west2-b
Ip Addresses:
Ip Address: 8.8.8.8
Type: PRIMARY
Project: my-cool-gcp-project
Self Link: https://www.googleapis.com/sql/v1beta4/projects/my-cool-gcp-project/instances/example-cloudsql-instance
Service Account Email Address: REDACTED@gcp-sa-cloud-sql.iam.gserviceaccount.com
State: RUNNABLE
Binding Phase: Bound
Conditions:
Last Transition Time: 2019-10-25T08:09:16Z
Reason: Successfully reconciled managed resource
Status: True
Type: Synced
Last Transition Time: 2019-10-25T08:09:12Z
Reason: Successfully resolved managed resource references to other resources
Status: True
Type: ReferencesResolved
Last Transition Time: 2019-10-25T08:09:16Z
Reason: Managed resource is available for use
Status: True
Type: Ready
```
Pay attention to the `Ready` and `Synced` conditions above. `Ready` represents
the availability of the CloudSQL instance while `Synced` reflects whether
Crossplane is successfully applying your specified CloudSQL configuration.
## Define a Class of CloudSQL Instance
Now that we've learned how to statically provision and claim managed resources
it's time to try out _dynamic provisioning_. Dynamic provisioning allows us to
define a class of managed resource - a _resource class_ - that will be used to
automatically satisfy resource claims when they are created.
Here's a resource class that will dynamically provision Cloud SQL instances with
the same settings as the `CloudSqlInstance` we provisioned earlier in the guide:
```yaml
apiVersion: database.gcp.crossplane.io/v1beta1
kind: CloudSQLInstanceClass
metadata:
name: example-cloudsql-class
annotations:
resourceclass.crossplane.io/is-default-class: "true"
labels:
guide: getting-started
specTemplate:
providerRef:
name: example
writeConnectionSecretsToNamespace: crossplane-system
forProvider:
databaseVersion: MYSQL_5_6
region: us-west2
settings:
tier: db-n1-standard-1
dataDiskType: PD_SSD
dataDiskSizeGb: 10
ipConfiguration:
ipv4Enabled: true
```
Save the above as `cloudsql-class.yaml` and apply it to enable dynamic
provisioning of `CloudSqlInstance` managed resources:
```bash
kubectl apply -f cloudsql-class.yaml
```
Now you can omit the `resourceRef` when you create resource claims. Save the
below resource claim as `mysql-dynamic-claim.yaml`:
```yaml
apiVersion: database.crossplane.io/v1alpha1
kind: MySQLInstance
metadata:
name: example-mysql-dynamic-claim
spec:
classSelector:
matchLabels:
guide: getting-started
writeConnectionSecretToRef:
name: example-mysql-dynamic-connection-details
```
When you apply this `MySQLInstance` claim you'll see that it dynamically
provisions a new `CloudSQLInstance` to satisfy the resource claim:
```bash
$ kubectl --namespace default apply -f mysql-dynamic-claim.yaml
mysqlinstance.database.crossplane.io/example-mysql-dynamic-claim created
$ kubectl get mysqlinstance example-mysql-dynamic-claim
NAME STATUS CLASS-KIND CLASS-NAME RESOURCE-KIND RESOURCE-NAME AGE
example-mysql-dynamic-claim CloudSQLInstanceClass example-cloudsql-class CloudSQLInstance default-example-mysql-dynamic-claim-bwpzd 47s
```
You just dynamically provisioned a `CloudSQLInstance`! You can find the name of
your new `CloudSQLInstance` under the `RESOURCE-NAME` column when you run
`kubectl describe mysqlinstance`. Reuse the resource class as many times as you
like; simply submit more `MySQLInstance` resource claims to create more CloudSQL
instances.
You may have noticed that your resource claim included a `classSelector`. The
class selector lets you select which resource class to use by [matching its
labels]. Resource claims like `MySQLInstance` can match different kinds of
resource class using label selectors, so you could just as easily use the
exact same `MySQLInstance` to create an Amazon Relational Database Service (RDS)
instance by creating an `RDSInstanceClass` labelled as `guide: getting-started`.
When multiple resource classes match the class selector, a matching class is
chosen at random. Claims can be matched to classes by either:
* Specifying a `classRef` to a specific resource class.
* Specifying a `classSelector` that matches one or more resource classes.
* Omitting both of the above and defaulting to a resource class [annotated] as
`resourceclass.crossplane.io/is-default-class: "true"`.
## Next Steps
* Add additional [cloud provider stacks](cloud-providers.md) to Crossplane.
* Explore the [Services Guide](services-guide.md) and the [Stacks Guide](stacks-guide.md).
* Learn more about [Crossplane concepts](concepts.md).
* See what managed resources are [currently supported](api.md) for each provider.
* Build [your own stacks](developer-guide.md)!
<!-- Named Links -->
[Helm]: https://helm.sh
[minikube]: https://kubernetes.io/docs/tasks/tools/install-minikube/
[kind]: https://github.com/kubernetes-sigs/kind
[stack]: concepts.md#stacks
[Crossplane installation guide]: install-crossplane.md
[Getting Started With Authentication]: https://cloud.google.com/docs/authentication/getting-started
[GCP provider documentation]: gcp-provider.md
[CloudSQL]: https://cloud.google.com/sql/docs/mysql/
[Persistent volumes in Kubernetes]: https://kubernetes.io/docs/concepts/storage/persistent-volumes/
[use with your Kubernetes pods]: https://kubernetes.io/docs/concepts/configuration/secret/#using-secrets
[matching its labels]: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/
[annotated]: https://kubernetes.io/docs/concepts/overview/working-with-objects/annotations/

View File

@ -0,0 +1,33 @@
---
title: Related Projects
toc: true
weight: 850
indent: true
---
# Related Projects
While there are many projects that address similar issues, none of them encapsulate the full use case that Crossplane addresses. This list is not exhaustive and is not meant to provide a deep analysis of the following projects, but instead to motivate why Crossplane was created.
## Open Service Broker and Service Catalog
The [Open Service Broker](https://www.openservicebrokerapi.org/) and the [Kubernetes Service Catalog](https://kubernetes.io/docs/concepts/extend-kubernetes/service-catalog/) are able to dynamically provision managed services in multiple cloud providers from Kubernetes. As a result it shares similar goals with Crossplane. However, service broker is not designed for workload portability, does not have a good separation of concern, and does not offer any integration with workload and resource scheduling. Service brokers can not span multiple cloud providers at once.
## Kubernetes Federation
The [federation-v2](https://github.com/kubernetes-sigs/federation-v2) project offers a single control plane that can span multiple Kubernetes clusters. Its being incubated in SIG-multicluster. Crossplane shares some of the goals of managing multiple Kubernetes clusters and also the core principles of creating a higher level control plane, scheduler and controllers that span clusters. While the federation-v2 project is scoped to just Kubernetes clusters, Crossplane supports non-container workloads, and orchestrating resources that run as managed services including databases, message queues, buckets, and others. The federation effort focuses on defining Kubernetes objects that can be templatized, and propagated to other Kubernetes clusters. Crossplane focuses on defining portable workload abstractions across cloud providers and offerings. We have considered taking a dependency on the federation-v2 work within Crossplane, although its not clear at this point if this would accelerate the Crossplane effort.
## AWS Service Operator
The [AWS Service Operator](https://github.com/awslabs/aws-service-operator) is a recent project that implements a set of Kubernetes controllers that are able to provision managed services in AWS. It defines a set of CRDs for managed services like DynamoDB, and controllers that can provision them via AWS CloudFormation. It is similar to Crossplane in that it can provision managed services in AWS. Crossplane goes a lot further by offering workload portability across cloud multiple cloud providers, separation of concern, and a scheduler for workload and resources.
## AWS CloudFormation, GCP Deployment Manager, and Others
These products offer a declarative model for deploying and provisioning infrastructure in each of the respective cloud providers. They only work for one cloud provider and do not solve the problem of workload portability. These products are generally closed source, and offer little or no extensibility points. We have considered using some of these products as a way to implement resource controllers in Crossplane.
## Terraform
[Terraform](https://www.terraform.io/) is a popular tool for provisioning infrastructure across cloud providers. It offers a declarative configuration language with support for templating, composability, referential integrity and dependency management. Terraform can dynamically provision infrastructure and perform changes when the tool is run by a human. Unlike Crossplane, Terraform does not support workload portability across cloud providers, and does not have any active controllers that can react to failures, or make changes to running infrastructure without human intervention. Terraform attempts to solve multicloud at the tool level, while Crossplane is at the API and control plane level. Terraform is open source under a MPL license, and follows an open core business model, with a number of its features closed source. We are evaluating whether we can use Terraform to accelerate the development of resource controllers in Crossplane.
## Pulumi
[Pulumi](https://www.pulumi.com/) is a product that is based on terraform and uses most of its providers. Instead of using a configuration language, Pulumi uses popular programming languages like Typescript to capture the configuration. At runtime, Pulumi generates a DAG of resources just like terraform and applies it to cloud providers. Pulumi has an early model for workload portability that is implemented using language abstractions. Unlike Crossplane, it does not have any active controllers that can react to failures, or make changes to running infrastructure without human intervention, nor does it support workload scheduling. Pulumi attempts to solve multicloud scenarios at the language level, while Crossplane is at the API and control plane level. Pulumi is open source under a APL2 license but a number of features require using their SaaS offering.

File diff suppressed because it is too large Load Diff

143
docs/v0.4/services-guide.md Normal file
View File

@ -0,0 +1,143 @@
---
title: Services Guide
toc: true
weight: 410
---
# Services Guide
This guide is an overview of enabling cloud service provisioning on an existing
Kubernetes target cluster, including how to integrate Crossplane with existing
cloud networking configurations to provide secure managed service connectivity.
Step-by-step instructions are provided for [GCP][gcp-services-guide],
[AWS][aws-services-guide], and [Azure][azure-services-guide].
To dynamically provision a new Kubernetes target cluster see the Stacks Guides
for [GCP][stack-guide-gcp], [AWS][stack-guide-aws], and
[Azure][stack-guide-azure].
## Table of Contents
1. [Introduction](#introduction)
1. [Secure network connectivity for cloud
services](#secure-network-connectivity-for-cloud-services)
1. [Dynamic provisioning with claims and
classes](#dynamic-provisioning-with-claims-and-classes)
1. [Connection secrets for pods in a
deployment](#connection-secrets-for-pods-in-a-deployment)
1. [Next Steps](#next-steps)
1. [Learn More](#learn-more)
## Introduction
Cloud service provisioning can be added to existing clusters by
installing Crossplane directly onto the target cluster. Crossplane is designed
to integrate with existing cloud networking and security resources, so managed
services like RDS, CloudSQL, and Azure DB can be provisioned using Kubernetes
objects and securely consumed by pods in a cluster.
Crossplane achieves this by:
1. establishing secure network connectivity between the worker nodes in a
cluster and cloud services
1. populating Kuberentes `Secrets` that pods in a `Deployment` can use to
securely access the managed service
## Secure network connectivity for cloud services
Crossplane currently supports private IP secure connectivity for AWS, GCP, and
Azure Stacks. Managed services instances are made available on the cluster's
prviate network(s) so pods can access them. Crossplane also supports
configuring ingress/egress rules to further restrict allowed network traffic.
While each cloud provider uses different resources for establishing secure
connectivity between a Kubernetes cluster (EKS, GKE, AKS) and managed services
(RDS, CloudSQL, and Azure DB), the basic pattern is the same:
1. Configure cluster networking
* network(s) and subnet(s) - L3 networking for the worker nodes
1. Enable managed service access:
* private service connection / endpoint - make services available via
peering or other
* private IP range(s) or subnet group - the private IPs a managed service
will get
* security groups or network rules - to restrict network traffic
1. Provision a managed service instance
* creates an instance e.g. MySQL from RDS, CloudSQL, or Azure DB
* assigns a private IP from the private IP range above
1. Securely use the managed service with secrets
* pods on a cluster node can access the managed service via private IP
* pods use credentials to securely connect to a managed service
Crossplane provides Kubernetes resources for all of the above, so you can define
a secure connectivity model for the managed services you want to make available
for self-service provisioning in the cluster using claims and classes.
## Dynamic provisioning with claims and classes
Crossplane employs a layered architecture consisting of managed resources that
represent a cloud service, and resource claims and classes that enable dynamic
provisioning of those services.
Managed resources are high fidelity representations of the API resources that
make up a cloud service. They're not portable across clouds. A
`CloudSQLInstance` is an example of a managed resource - it's relevant only to
the Google Cloud Platform (GCP) and exposes all of the nitty gritty
configuration details of a CloudSQL instance. The networking and security
Kubernetes resources mentioned above fall into this category.
Resource claims and classes are the next layer up. Resource claims like
`MySQLInstance` enable dynamic provisioning of managed resources by matching a
claim to a class like a `CloudSQLInstanceClass` that provides the detailed
configuration template to provision a new cloud service instance. Resource
classes can reference secure connectivity resources (networks), such that new
instances of that class can be made available on the cluster's private network.
Resource classes, cluster networking, and secure connectivity resources are
designed to work together to enable self-service provisioning of securely
connected cloud services in a Kubernetes cluster.
Resource claims can be matched to a class in several ways:
1. rely on a class marked `resourceclass.crossplane.io/is-default-class:
"true"`
1. match on class labels using a `claim.spec.classSelector`
1. use a `claim.spec.classRef` to a specific class
The first two methods rely on a default class of service or use a
`classSelector` that matches any suitable resource class available in the
target cluster. As such, the first two methods are considered portable
resource claims that can be used in any cluster that provides the desired class
of service. You may have one cluster using GCP and another cluster using AWS,
and the same claim can be used in either cluster so long as the claim can be
matched to a suitable class of cloud service.
The third method uses an explicit `classRef` to a specific resource class like
a `CloudSQLInstanceClass` which means the claim may only be used with that
class. Since resource classes are specific to a single cloud, claims that use
a `classRef` are not portable across different cloud providers.
## Connection secrets for pods in a deployment
Resource claims automatically write a connection secret that pods in a
deployment can use to securely access the underlying cloud service. The claim's
`writeConnectionSecretToRef` field is used to specify the name of the secret
that should be created, which can then be used in the deployment's
configuration. Since the claim is created in Kubernetes, and the secret is
automatically populated by Crossplane, all cloud service secrets are managed
automatically without leaving Kubernetes.
## Next steps
Step-by-step instructions for enabling cloud service provisioning on an
existing cluster are provided in the service guides for:
* [GCP][gcp-services-guide]
* [AWS][aws-services-guide]
* [Azure][azure-services-guide]
### Learn More
* [Join Crossplane Slack][join-crossplane-slack]
* [Contact Us][contact-us]
* [Learn More][learn-more]
<!-- Named links -->
[gcp-services-guide]: services/gcp-services-guide.md
[aws-services-guide]: services/aws-services-guide.md
[azure-services-guide]: services/azure-services-guide.md
[stack-guide-gcp]: stacks-guide-gcp.md
[stack-guide-aws]: stacks-guide-aws.md
[stack-guide-azure]: stacks-guide-azure.md
[contact-us]: https://github.com/crossplaneio/crossplane#contact
[join-crossplane-slack]: https://slack.crossplane.io
[learn-more]: learn-more.md

View File

@ -0,0 +1,461 @@
---
title: Using AWS Services
toc: true
weight: 430
indent: true
---
# AWS Services Guide
This user guide will walk you through Wordpress application deployment using
Crossplane managed resources and the official Wordpress Docker image.
## Table of Contents
1. [Pre-requisites](#pre-requisites)
1. [Preparation](#preparation)
1. [Set Up Crossplane](#set-up-crossplane)
1. [Install in Target Cluster](#install-in-target-cluster)
1. [Cloud Provider](#cloud-provider)
1. [Configure Managed Service Access](#configure-managed-service-access)
1. [Resource Classes](#resource-classes)
1. [Provision MySQL](#provision-mysql)
1. [Resource Claim](#resource-claim)
1. [Install Wordpress](#install-wordpress)
1. [Clean Up](#clean-up)
1. [Conclusion and Next Steps](#conclusion-and-next-steps)
## Pre-requisites
These tools are required to complete this guide. They must be installed on your
local machine.
* [kubectl][install-kubectl]
* [Helm][using-helm], minimum version `v2.10.0+`.
## Preparation
This guide assumes that you have already [installed][aws-cli-install] and
[configured][aws-cli-configure]. It also assumes an existing EKS cluster,
configured in a VPC with three public subnets (i.e. exposed to the internet).
In order to utilize these pre-existing resources, set environment variables that
can be used when creating resources necessary to deploy Wordpress.
```bash
export CLUSTER_NAME=yourclustername
export REGION=yourclusterregion
export VPC_ID=yourvpcid
export SUBNET_ONE_ID=yourpublicsubnetoneid
export SUBNET_TWO_ID=yourpublicsubnettwoid
export SUBNET_THREE_ID=yourpublicsubnetthreeid
```
## Set Up Crossplane
To keep your resource configuration organized, start by creating a new
directory:
```bash
mkdir wordpress && cd $_
```
### Install in Target Cluster
Assuming you are [connected][eks-kubectl] to your EKS cluster via `kubectl`:
1. Install Crossplane from alpha channel. (See the [Crossplane Installation
Guide][crossplane-install] for more information.)
```bash
helm repo add crossplane-alpha https://charts.crossplane.io/alpha
helm install --name crossplane --namespace crossplane-system crossplane-alpha/crossplane
```
2. Install the AWS stack into Crossplane. (See the [AWS stack
section][aws-stack-install] of the install guide for more information.)
```bash
cat > stack-aws.yaml <<EOF
apiVersion: v1
kind: Namespace
metadata:
name: aws
---
apiVersion: stacks.crossplane.io/v1alpha1
kind: ClusterStackInstall
metadata:
name: stack-aws
namespace: crossplane-system
spec:
package: "crossplane/stack-aws:master"
EOF
kubectl apply -f stack-aws.yaml
```
3. Obtain AWS credentials. (See the [Cloud Provider Credentials][cloud-creds]
docs for more information.)
### Cloud Provider
It is essential to make sure that the AWS user credentials are configured in
Crossplane as a provider. Please follow the steps in the AWS [provider
guide][aws-provider-guide] for more information.
### Configure Managed Service Access
Before you setup an RDS instance, you will need to create a subnet group for it
to be provisioned into, as well as a security group to determine how it can be
accessed
* Define an AWS `DBSubnetGroup` in `aws-dbsubnet.yaml` and create it:
```bash
cat > aws-dbsubnet.yaml <<EOF
apiVersion: storage.aws.crossplane.io/v1alpha3
kind: DBSubnetGroup
metadata:
name: sample-dbsubnetgroup
spec:
groupName: sample_dbsubnetgroup
description: EKS vpc to rds
subnetIds:
- ${SUBNET_ONE_ID}
- ${SUBNET_TWO_ID}
- ${SUBNET_THREE_ID}
tags:
- key: name
value: sample-dbsubnetgroup
reclaimPolicy: Delete
providerRef:
name: aws-provider
EOF
kubectl apply -f aws-dbsubnet.yaml
```
* Define an AWS `SecurityGroup` in `aws-sg.yaml` and create it:
```bash
cat > aws-sg.yaml <<EOF
apiVersion: network.aws.crossplane.io/v1alpha3
kind: SecurityGroup
metadata:
name: sample-rds-sg
spec:
vpcId: ${VPC_ID}
groupName: sample-rds-sg
description: open rds access to crossplane workload
reclaimPolicy: Delete
ingress:
- fromPort: 3306
toPort: 3306
protocol: tcp
cidrBlocks:
- cidrIp: 0.0.0.0/0
description: all ips
providerRef:
name: aws-provider
EOF
kubectl apply -f aws-sg.yaml
```
### Resource Classes
Cloud-specific resource classes are used to define a reusable configuration for
a specific managed resource. Wordpress requires a MySQL database, which can be
satisfied by an [AWS RDS][aws-rds] instance.
* Define an AWS RDS `RDSInstanceClass` in `aws-mysql-standard.yaml` and create
it:
```yaml
cat > aws-mysql-standard.yaml <<EOF
apiVersion: database.aws.crossplane.io/v1beta1
kind: RDSInstanceClass
metadata:
name: standard-mysql
annotations:
resourceclass.crossplane.io/is-default-class: "true"
specTemplate:
forProvider:
dbInstanceClass: db.t2.small
masterUsername: masteruser
vpcSecurityGroupIDRefs:
- name: sample-rds-sg
dbSubnetGroupNameRef:
name: sample-dbsubnetgroup
allocatedStorage: 20
engine: mysql
skipFinalSnapshotBeforeDeletion: true
providerRef:
name: aws-provider
reclaimPolicy: Delete
writeConnectionSecretsToNamespace: crossplane-system
EOF
kubectl apply -f aws-mysql-standard.yaml
```
Note that we are referencing the security group and subnet group we created
earlier.
* You should see the following output:
> rdsinstanceclass.database.aws.crossplane.io/aws-mysql-standard created
* You can verify creation with the following command and output:
```bash
$ kubectl get rdsinstanceclasses.database.aws.crossplane.io
NAME PROVIDER-REF RECLAIM-POLICY AGE
standard-mysql aws-provider Delete 11s
```
You are free to create more AWS `RDSInstanceClass` instances to define more
potential configurations. For instance, you may create `large-aws-rds` with
field `size: 100`.
## Provision MySQL
### Resource Claims
Resource claims are used for dynamic provisioning of a managed resource (like a
MySQL instance) by matching the claim to a resource class. This can be done in
several ways: (a) rely on the default class marked
`resourceclass.crossplane.io/is-default-class: "true"`, (b) use a
`claim.spec.classRef` to a specific class, or (c) match on class labels using a
`claim.spec.classSelector`.
*Note: claims may also be used in [static provisioning] with a reference to an
existing managed resource.*
In the `RDSInstanceClass` above, we added the default annotation, so our claim
will default to it automatically if no other classes exist with said annotation.
If there are multiple classes annotated as default, one will be chosen at
random.
* Define a `MySQLInstance` claim in `mysql-claim.yaml` and create it:
```bash
cat > mysql-claim.yaml <<EOF
apiVersion: database.crossplane.io/v1alpha1
kind: MySQLInstance
metadata:
name: mysql-claim
spec:
writeConnectionSecretToRef:
name: wordpressmysql
engineVersion: "5.6"
EOF
kubectl apply -f mysql-claim.yaml
```
What we are looking for is for the `STATUS` value to become `Bound` which
indicates the managed resource was successfully provisioned and is ready for
consumption. You can see when claim is bound using the following:
```bash
$ kubectl get mysqlinstances
NAME STATUS CLASS-KIND CLASS-NAME RESOURCE-KIND RESOURCE-NAME AGE
mysql-claim Bound RDSInstanceClass standard-mysql RDSInstance default-mysql-claim-5p66w 9s
```
If the `STATUS` is blank, we are still waiting for the claim to become bound.
You can observe resource creation progression using the following:
```bash
$ kubectl describe mysqlinstance mysql-claim
Name: mysql-claim
Namespace: default
Labels: <none>
Annotations: kubectl.kubernetes.io/last-applied-configuration:
{"apiVersion":"database.crossplane.io/v1alpha1","kind":"MySQLInstance","metadata":{"annotations":{},"name":"mysql-claim","namespace":"defa...
API Version: database.crossplane.io/v1alpha1
Kind: MySQLInstance
Metadata:
Creation Timestamp: 2019-10-24T19:59:18Z
Finalizers:
finalizer.resourceclaim.crossplane.io
Generation: 3
Resource Version: 6425
Self Link: /apis/database.crossplane.io/v1alpha1/namespaces/default/mysqlinstances/mysql-claim
UID: c3aca763-f698-11e9-a957-12a4af141bea
Spec:
Class Ref:
API Version: database.aws.crossplane.io/v1beta1
Kind: RDSInstanceClass
Name: standard-mysql
UID: 6cf90617-f698-11e9-b058-028a0ecde201
Engine Version: 5.6
Resource Ref:
API Version: database.aws.crossplane.io/v1beta1
Kind: RDSInstance
Name: app-project1-dev-mysql-claim-8shd2
Write Connection Secret To Ref:
Name: wordpressmysql
Status:
Conditions:
Last Transition Time: 2019-10-24T19:59:20Z
Reason: Managed claim is waiting for managed resource to become bindable
Status: False
Type: Ready
Last Transition Time: 2019-10-24T19:59:20Z
Reason: Successfully reconciled managed resource
Status: True
Type: Synced
Events: <none>
```
## Install Wordpress
Installing Wordpress requires creating a Kubernetes `Deployment` and load
balancer `Service`. We will point the deployment to the `wordpressmysql` secret
that we specified in our claim above for the Wordpress container environment
variables. It should have been populated with our MySQL connection details after
the claim became `Bound`.
* Check to make sure `wordpressmysql` exists and is populated:
```bash
$ kubectl describe secret wordpressmysql
Name: wordpressmysql
Namespace: default
Labels: <none>
Annotations: crossplane.io/propagate-from-name: c3aca763-f698-11e9-a957-12a4af141bea
crossplane.io/propagate-from-namespace: crossplane-system
crossplane.io/propagate-from-uid: c539fcef-f698-11e9-a957-12a4af141bea
Type: Opaque
Data
====
endpoint: 83 bytes
password: 27 bytes
username: 10 bytes
```
* Define the `Deployment` and `Service` in `wordpress-app.yaml` and create it:
```bash
cat > wordpress-app.yaml <<EOF
apiVersion: apps/v1
kind: Deployment
metadata:
name: wordpress
labels:
app: wordpress
spec:
selector:
matchLabels:
app: wordpress
template:
metadata:
labels:
app: wordpress
spec:
containers:
- name: wordpress
image: wordpress:4.6.1-apache
env:
- name: WORDPRESS_DB_HOST
valueFrom:
secretKeyRef:
name: wordpressmysql
key: endpoint
- name: WORDPRESS_DB_USER
valueFrom:
secretKeyRef:
name: wordpressmysql
key: username
- name: WORDPRESS_DB_PASSWORD
valueFrom:
secretKeyRef:
name: wordpressmysql
key: password
ports:
- containerPort: 80
name: wordpress
---
apiVersion: v1
kind: Service
metadata:
name: wordpress
labels:
app: wordpress
spec:
ports:
- port: 80
selector:
app: wordpress
type: LoadBalancer
EOF
kubectl apply -f wordpress-app.yaml
```
* You can verify creation with the following command and output:
```bash
$ kubectl get -f wordpress-app.yaml
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/wordpress 1/1 1 1 11m
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/wordpress LoadBalancer 10.0.128.30 52.168.69.6 80:32587/TCP 11m
```
If the `EXTERNAL-IP` field of the `LoadBalancer` is `<pending>`, wait until it
becomes available, then navigate to the address. You should see the following:
![alt wordpress](wordpress-start.png)
## Clean Up
Because we put all of our configuration in a single directory, we can delete it
all with this command:
```bash
kubectl delete -f wordpress/
```
If you would like to also uninstall Crossplane and the AWS stack, run the
following command:
```bash
kubectl delete namespace crossplane-system
```
## Conclusion and Next Steps
In this guide we:
* Configured RDS to communicate with EKS
* Installed Crossplane from the alpha channel
* Installed the AWS stack
* Setup an AWS `Provider` with our account
* Created a `RDSInstanceClass` with configuration for an AWS RDS instance
* Created a `MySQLInstance` claim that was defaulted to the `mysql-standard`
resource class
* Created a `Deployment` and `Service` to run Wordpress on our EKS Cluster and
assign an external IP address to it
If you would like to try out a similar workflow using a different cloud
provider, take a look at the other [services guides][services]. If you would
like to learn more about stacks, checkout the [stacks guide][stacks].
<!-- Named links -->
[install-kubectl]: https://kubernetes.io/docs/tasks/tools/install-kubectl/
[using-helm]: https://docs.helm.sh/using_helm/
[crossplane-install]: ../install-crossplane.md#alpha
[cloud-creds]: ../cloud-providers.md
[aws-provider-guide]: ../cloud-providers/aws/aws-provider.md
[aws-rds]: https://aws.amazon.com/rds/
[services]: ../services-guide.md
[stacks]: ../stacks-guide.md
[aws-stack-install]: ../install-crossplane.md#aws-stack
[eks-kubectl]: https://docs.aws.amazon.com/eks/latest/userguide/create-kubeconfig.html
[static provisioning]: ../concepts.md#dynamic-and-static-provisioning

View File

@ -0,0 +1,480 @@
---
title: Using Azure Services
toc: true
weight: 440
indent: true
---
# Azure Services Guide
This user guide will walk you through Wordpress application deployment using
Crossplane managed resources and the official Wordpress Docker image.
## Table of Contents
1. [Pre-requisites](#pre-requisites)
1. [Preparation](#preparation)
1. [Set Up Crossplane](#set-up-crossplane)
1. [Install in Target Cluster](#install-in-target-cluster)
1. [Cloud Provider](#cloud-provider)
1. [Resource Classes](#resource-classes)
1. [Configure Managed Service Access](#configure-managed-service-access)
1. [Provision MySQL](#provision-mysql)
1. [Resource Claim](#resource-claim)
1. [Virtual Network Rule](#virtual-network-rule)
1. [Install Wordpress](#install-wordpress)
1. [Clean Up](#clean-up)
1. [Conclusion and Next Steps](#conclusion-and-next-steps)
## Pre-requisites
These tools are required to complete this guide. They must be installed on your
local machine.
* [Azure CLI][azure-cli]
* Make sure to [login][azure-login] after installation.
* [kubectl][install-kubectl]
* kubectl also be installed using the Azure CLI: `az aks install-cli`
* [Helm][using-helm], minimum version `v2.10.0+`.
* [jq][jq-docs] - command line JSON processor `v1.5+`
## Preparation
This guide assumes that you have setup the Azure CLI and are logged in to your
desired account. It also assumes that you have an existing AKS cluster in a
Virtual Network. Make sure to populate the environment variables below with the
relevant values for your AKS cluster.
*Note: environment variables are used throughout this guide.*
```bash
export AKS_RESOURCE_GROUP=myAKSResourceGroup
export AKS_VNET=myAKSVnet
export AKS_NAME=myAKSName
export AKS_REGION=myRegion
export SUBSCRIPTION_ID=$(az account list | jq -j '.[0].id')
```
## Set Up Crossplane
### Install in Target Cluster
Assuming you are [connected][aks-kubectl] to your AKS cluster via `kubectl`:
1. Install Crossplane from alpha channel. (See the [Crossplane Installation
Guide][crossplane-install] for more information.)
```bash
helm repo add crossplane-alpha https://charts.crossplane.io/alpha
helm install --name crossplane --namespace crossplane-system crossplane-alpha/crossplane
```
2. Install the Azure stack into Crossplane. (See the [Azure stack
section][azure-stack-install] of the install guide for more information.)
```yaml
cat > stack-azure.yaml <<EOF
apiVersion: stacks.crossplane.io/v1alpha1
kind: ClusterStackInstall
metadata:
name: stack-azure
namespace: crossplane-system
spec:
package: "crossplane/stack-azure:master"
EOF
kubectl apply -f stack-azure.yaml
```
3. Obtain Azure credentials. (See the [Cloud Provider Credentials][cloud-creds]
docs for more information.)
### Cloud Provider
It is essential to make sure that the Azure user credentials are configured in
Crossplane as a provider. Please follow the steps in the Azure [provider
guide][azure-provider-guide] for more information.
### Resource Classes
To keep your resource configuration organized, start by creating a new
directory:
```bash
mkdir wordpress && cd $_
```
Resource classes are used to define a reusable configuration for a specific
managed service. Wordpress requires a MySQL database, which can be satisfied by
an [Azure Database for MySQL][azure-mysql] instance.
* Define an Azure MySQL `SQLServerClass` in `azure-mysql-standard.yaml` and
create it:
```yaml
cat > azure-mysql-standard.yaml <<EOF
---
apiVersion: database.azure.crossplane.io/v1alpha3
kind: SQLServerClass
metadata:
name: azure-mysql-standard
labels:
size: standard
demo: "true"
specTemplate:
adminLoginName: myadmin
resourceGroupName: $AKS_RESOURCE_GROUP
location: $AKS_REGION
sslEnforced: false
version: "5.6"
pricingTier:
tier: GeneralPurpose
vcores: 2
family: Gen5
storageProfile:
storageGB: 25
backupRetentionDays: 7
geoRedundantBackup: false
writeConnectionSecretsToNamespace: crossplane-system
providerRef:
name: azure-provider
reclaimPolicy: Delete
EOF
kubectl apply -f azure-mysql-standard.yaml
```
* You should see the following output:
> sqlserverclass.database.azure.crossplane.io/azure-mysql-standard created
* You can verify creation with the following command and output:
```bash
$ kubectl get sqlserverclasses
NAME PROVIDER-REF RECLAIM-POLICY AGE
azure-mysql-standard azure-provider Delete 17s
```
You are free to create more Azure `SQLServerClass` instances to define more
potential configurations. For instance, you may create `large-azure-mysql` with
field `storageGB: 100`.
### Configure Managed Service Access
In order for the AKS cluster to talk to the MySQL Database, you must condigure a
`Microsoft.Sql` service endpoint on the AKS Virtual Network for all subnets. If
you do not already have this configured, Azure has a [guide][service endpoint]
on how to set it up.
## Provision MySQL
### Resource Claims
Resource claims are used for dynamic provisioning of a managed resource (like a
MySQL instance) by matching the claim to a resource class. This can be done in
several ways: (a) rely on the default class marked
`resourceclass.crossplane.io/is-default-class: "true"`, (b) use a
`claim.spec.classRef` to a specific class, or (c) match on class labels using a
`claim.spec.classSelector`.
*Note: claims may also be used in [static provisioning] with a reference to an
existing managed resource.*
In the `SQLServerClass` above, we added the labels `size: standard` and `demo:
"true"`, so our claim will be scheduled to that class using the labels are
specified in the `claim.spec.classSelector`. If there are multiple classes which
match the specified label(s) one will be chosen at random.
* Define a `MySQLInstance` claim in `mysql-claim.yaml` and create it:
```yaml
cat > mysql-claim.yaml <<EOF
apiVersion: database.crossplane.io/v1alpha1
kind: MySQLInstance
metadata:
name: mysql-claim
spec:
classSelector:
matchLabels:
size: standard
demo: "true"
engineVersion: "5.6"
writeConnectionSecretToRef:
name: wordpressmysql
EOF
kubectl apply -f mysql-claim.yaml
```
What we are looking for is for the `STATUS` value to become `Bound` which
indicates the managed resource was successfully provisioned and is ready for
consumption. You can see when claim is bound using the following:
```bash
$ kubectl get mysqlinstances
NAME STATUS CLASS-KIND CLASS-NAME RESOURCE-KIND RESOURCE-NAME AGE
mysql-claim Bound SQLServerClass azure-mysql-standard MySQLServer default-mysql-claim-bm4ft 9s
```
If the `STATUS` is blank, we are still waiting for the claim to become bound.
You can observe resource creation progression using the following:
```bash
$ kubectl describe mysqlinstance mysql-claim
Name: mysql-claim
Namespace: default
Labels: <none>
Annotations: kubectl.kubernetes.io/last-applied-configuration:
{"apiVersion":"database.crossplane.io/v1alpha1","kind":"MySQLInstance","metadata":{"annotations":{},"name":"mysql-claim","namespace":"defa...
API Version: database.crossplane.io/v1alpha1
Kind: MySQLInstance
Metadata:
Creation Timestamp: 2019-10-28T15:43:28Z
Finalizers:
finalizer.resourceclaim.crossplane.io
Generation: 3
Resource Version: 11072
Self Link: /apis/database.crossplane.io/v1alpha1/namespaces/default/mysqlinstances/mysql-claim
UID: afff42b3-f999-11e9-a2d5-c64d758a651f
Spec:
Class Ref:
API Version: database.azure.crossplane.io/v1alpha3
Kind: SQLServerClass
Name: azure-mysql-standard
UID: 5710f3db-f999-11e9-a2d5-c64d758a651f
Class Selector:
Match Labels:
Demo: true
Size: standard
Engine Version: 5.6
Resource Ref:
API Version: database.azure.crossplane.io/v1alpha3
Kind: MySQLServer
Name: default-mysql-claim-bm4ft
UID: b02c1389-f999-11e9-a2d5-c64d758a651f
Write Connection Secret To Ref:
Name: wordpressmysql
Status:
Conditions:
Last Transition Time: 2019-10-28T15:43:29Z
Reason: Managed claim is waiting for managed resource to become bindable
Status: False
Type: Ready
Last Transition Time: 2019-10-28T15:43:29Z
Reason: Successfully reconciled managed resource
Status: True
Type: Synced
Events: <none>
```
*Note: You must wait until the claim becomes bound before continuing with this
guide. It could take a few minutes for Azure to complete MySQL creation.*
### Virtual Network Rule
Before we install Wordpress, we need establish connectivity between our MySQL
database and our AKS cluster. We can do this by creating a [Virtual Network
Rule][azure-vnet-rule].
* Set `MYSQL_NAME` environment variable:
```bash
export MYSQL_NAME=$(kubectl get -o json mysqlinstance mysql-claim | jq -j '.spec.resourceRef.name')
```
* Define a `MySQLServerVirtualNetworkRule` in `wordpress-vnet-rule.yaml` and
create it:
```yaml
cat > wordpress-vnet-rule.yaml <<EOF
---
apiVersion: database.azure.crossplane.io/v1alpha3
kind: MySQLServerVirtualNetworkRule
metadata:
name: wordpress-vnet-rule
spec:
name: wordpress-vnet-rule
serverName: ${MYSQL_NAME}
resourceGroupName: ${AKS_RESOURCE_GROUP}
properties:
virtualNetworkSubnetId: /subscriptions/${SUBSCRIPTION_ID}/resourceGroups/${AKS_RESOURCE_GROUP}/providers/Microsoft.Network/virtualNetworks/${AKS_VNET}/subnets/aks-subnet
providerRef:
name: azure-provider
reclaimPolicy: Delete
EOF
kubectl apply -f wordpress-vnet-rule.yaml
```
* You can verify creation with the following command and output:
```bash
$ kubectl get mysqlservervirtualnetworkrules
NAME STATE AGE
wordpress-vnet-rule Ready 17s
```
## Install Wordpress
Installing Wordpress requires creating a Kubernetes `Deployment` and load
balancer `Service`. We will point the deployment to the `wordpressmysql` secret
that we specified in our claim above for the Wordpress container environment
variables. It should have been populated with our MySQL connection details after
the claim became `Bound`.
* Check to make sure `wordpressmysql` exists and is populated:
```bash
$ kubectl describe secret wordpressmysql
Name: wordpressmysql
Namespace: default
Labels: <none>
Annotations: crossplane.io/propagate-from-name: 084b9476-f99e-11e9-a2d5-c64d758a651f
crossplane.io/propagate-from-namespace: crossplane-system
crossplane.io/propagate-from-uid: 2e71f6f9-f99e-11e9-a2d5-c64d758a651f
Type: Opaque
Data
====
endpoint: 50 bytes
password: 27 bytes
username: 33 bytes
```
* Define the `Deployment` and `Service` in `wordpress-app.yaml` and create it:
```yaml
cat > wordpress-app.yaml <<EOF
apiVersion: apps/v1
kind: Deployment
metadata:
name: wordpress
labels:
app: wordpress
spec:
selector:
matchLabels:
app: wordpress
template:
metadata:
labels:
app: wordpress
spec:
containers:
- name: wordpress
image: wordpress:4.6.1-apache
env:
- name: WORDPRESS_DB_HOST
valueFrom:
secretKeyRef:
name: wordpressmysql
key: endpoint
- name: WORDPRESS_DB_USER
valueFrom:
secretKeyRef:
name: wordpressmysql
key: username
- name: WORDPRESS_DB_PASSWORD
valueFrom:
secretKeyRef:
name: wordpressmysql
key: password
ports:
- containerPort: 80
name: wordpress
---
apiVersion: v1
kind: Service
metadata:
name: wordpress
labels:
app: wordpress
spec:
ports:
- port: 80
selector:
app: wordpress
type: LoadBalancer
EOF
kubectl apply -f wordpress-app.yaml
```
* You can verify creation with the following command and output:
```bash
$ kubectl get -f wordpress-app.yaml
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/wordpress 1/1 1 1 11m
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/wordpress LoadBalancer 10.0.128.30 52.168.69.6 80:32587/TCP 11m
```
If the `EXTERNAL-IP` field of the `LoadBalancer` is `<pending>`, wait until it
becomes available, then navigate to the address. You should see the following:
![alt wordpress](wordpress-start.png)
## Clean Up
Because we put all of our configuration in a single directory, we can delete it
all with this command:
```bash
kubectl delete -f wordpress/
```
If you would like to also uninstall Crossplane and the AWS stack, run the
following command:
```bash
kubectl delete namespace crossplane-system
```
## Conclusion and Next Steps
In this guide we:
* Installed Crossplane from alpha channel
* Installed the Azure stack
* Setup an Azure `Provider` with our account
* Created a `SQLServerClass` in the ` with configuration for a MySQL database on
Azure
* Created a `MySQLInstance` claim in the that was scheduled to the
`mysql-standard` resource class
* Created a `MySQLServerVirtualNetworkRule` to establish secure connectivity
between our AKS Cluster and MySQL database
* Created a `Deployment` and `Service` to run Wordpress on our AKS Cluster and
assign an external IP address to it
If you would like to try out a similar workflow using a different cloud
provider, take a look at the other [services guides][services]. If you would
like to learn more about stacks, checkout the [stacks guide][stacks].
<!-- Named links -->
[azure-cli]: https://docs.microsoft.com/en-us/cli/azure/?view=azure-cli-latest
[azure-login]: https://docs.microsoft.com/en-us/cli/azure/authenticate-azure-cli?view=azure-cli-latest
[install-kubectl]: https://kubernetes.io/docs/tasks/tools/install-kubectl/
[using-helm]: https://docs.helm.sh/using_helm/
[jq-docs]: https://stedolan.github.io/jq/
[service endpoint]: https://docs.microsoft.com/en-us/azure/virtual-network/virtual-network-service-endpoint-policies-overview
[aks-kubectl]: https://docs.microsoft.com/en-us/azure/aks/kubernetes-walkthrough#connect-to-the-cluster
[crossplane-install]: ../install-crossplane.md#alpha
[azure-stack-install]: ../install-crossplane.md#azure-stack
[cloud-creds]: ../cloud-providers.md
[azure-provider-guide]: ../cloud-providers/azure/azure-provider.md
[azure-mysql]: https://azure.microsoft.com/en-us/services/mysql/
[azure-vnet-rule]: https://docs.microsoft.com/en-us/azure/mysql/concepts-data-access-and-security-vnet
[static provisioning]: ../concepts.md#dynamic-and-static-provisioning
[services]: ../services-guide.md
[stacks]: ../stacks-guide.md

View File

@ -0,0 +1,529 @@
---
title: Using GCP Services
toc: true
weight: 420
indent: true
---
# GCP Services Guide
This user guide will walk you through Wordpress application deployment using
your existing Kubernetes cluster and Crossplane managed resources. We will:
* Install Crossplane to your cluster.
* Create necessary resource classes for MySQL database instance.
* Create network resources to get GKE cluster to connect to MySQL instance.
* Deploy Wordpress.
## Table of Contents
1. [Pre-requisites](#pre-requisites)
1. [Preparation](#preparation)
1. [Set Up Crossplane](#set-up-crossplane)
1. [Install in Target Cluster](#install-in-target-cluster)
1. [Cloud Provider](#cloud-provider)
1. [Resource Classes](#resource-classes)
1. [Configure Managed Service Access](#configure-managed-service-access)
1. [Provision MySQL](#provision-mysql)
1. [Resource Claim](#resource-claim)
1. [Install Wordpress](#install-wordpress)
1. [Clean Up](#clean-up)
1. [Conclusion and Next Steps](#conclusion-and-next-steps)
## Pre-requisites
* [kubectl](https://kubernetes.io/docs/tasks/tools/install-kubectl/)
* A GKE cluster.
## Preparation
This guide assumes that you have setup the gcloud CLI and are logged in to your
desired account.
*Note: environment variables are used throughout this guide. You should use your
own values.*
Run the following:
```bash
export PROJECT_ID=crossplane-playground # the project that all resources reside.
export NETWORK_NAME=default # the network that your GKE cluster lives in.
export SUBNETWORK_NAME=default # the subnetwork that your GKE cluster lives in.
```
## Set Up Crossplane
### Installation
Assuming you are
[connected](https://cloud.google.com/kubernetes-engine/docs/how-to/cluster-access-for-kubectl)
to your GKE cluster via `kubectl`:
* Install Crossplane from alpha channel using the [Crossplane Installation
Guide](../install-crossplane.md#alpha)
* Install the GCP stack into Crossplane using the [GCP stack
section](../install-crossplane.md#gcp-stack) of the install guide.
To keep your resource configuration organized, start by creating a new
directory:
```bash
mkdir wordpress && cd $_
```
### Cloud Provider
It is essential to make sure that the GCP user credentials are configured in
Crossplane as a provider. Please follow the steps in the GCP [provider
guide](../cloud-providers/gcp/gcp-provider.md) for more information.
### Resource Classes
Resource classes are used to define a reusable configuration for a specific
managed service. Wordpress requires a MySQL database, which can be satisfied by
a [Google Cloud SQL Instance](https://cloud.google.com/sql/docs/mysql/).
* Define a GCP CloudSQL class `CloudSQLInstanceClass`:
```bash
cat > gcp-mysql-standard.yaml <<EOF
---
apiVersion: database.gcp.crossplane.io/v1beta1
kind: CloudSQLInstanceClass
metadata:
name: standard-cloudsql
labels:
size: standard
specTemplate:
writeConnectionSecretsToNamespace: crossplane-system
forProvider:
databaseVersion: MYSQL_5_7
region: us-central1
settings:
tier: db-n1-standard-1
dataDiskType: PD_SSD
dataDiskSizeGb: 10
# Note from GCP Docs: Your Cloud SQL instances are not created in your VPC network.
# They are created in the service producer network (a VPC network internal to Google) that is then connected (peered) to your VPC network.
ipConfiguration:
privateNetwork: projects/$PROJECT_ID/global/networks/$NETWORK_NAME
providerRef:
name: gcp-provider
reclaimPolicy: Delete
EOF
kubectl apply -f gcp-mysql-standard.yaml
```
* You can verify creation with the following command and output:
*Command*
```bash
kubectl get cloudsqlinstanceclasses
```
*Output*
```bash
NAME PROVIDER-REF RECLAIM-POLICY AGE
standard-cloudsql gcp-provider Delete 11s
```
You are free to create more GCP `CloudSQLInstanceClass` instances to define more
potential configurations. For instance, you may create `large-gcp-mysql` with
field `storageGB: 100`.
### Configure Managed Service Access
Before we install Wordpress, we need to establish connectivity between the the
MySQL database and the GKE cluster. We can do this by creating a [Private
Service
Connection](https://cloud.google.com/vpc/docs/configure-private-services-access).
You can create it by following the instructions at the link above, or you could
use Crossplane to do it:
* Create a `GlobalAddress` and `Connection` resources:
```bash
cat > network.yaml <<EOF
---
# example-globaladdress defines the IP range that will be allocated for cloud services connecting
# to the instances in the given Network.
apiVersion: compute.gcp.crossplane.io/v1alpha3
kind: GlobalAddress
metadata:
name: example-globaladdress
spec:
providerRef:
name: gcp-provider
reclaimPolicy: Delete
name: example-globaladdress
purpose: VPC_PEERING
addressType: INTERNAL
prefixLength: 16
network: projects/$PROJECT_ID/global/networks/$NETWORK_NAME
---
# example-connection is what allows cloud services to use the allocated GlobalAddress for communication. Behind
# the scenes, it creates a VPC peering to the network that those service instances actually live.
apiVersion: servicenetworking.gcp.crossplane.io/v1alpha3
kind: Connection
metadata:
name: example-connection
spec:
providerRef:
name: gcp-provider
reclaimPolicy: Delete
parent: services/servicenetworking.googleapis.com
network: projects/$PROJECT_ID/global/networks/$NETWORK_NAME
reservedPeeringRangeRefs:
- name: example-globaladdress
EOF
kubectl apply -f network.yaml
```
* You can verify creation with the following command and output:
*Command*
```bash
kubectl describe connection.servicenetworking.gcp.crossplane.io example-connection
```
*Output*
```yaml
Name: example-connection
Namespace:
Labels: <none>
Annotations: crossplane.io/external-name: example-connection
kubectl.kubernetes.io/last-applied-configuration:
{"apiVersion":"servicenetworking.gcp.crossplane.io/v1alpha3","kind":"Connection","metadata":{"annotations":{},"name":"example-connection"}...
API Version: servicenetworking.gcp.crossplane.io/v1alpha3
Kind: Connection
Metadata:
Creation Timestamp: 2019-10-28T14:10:23Z
Finalizers:
finalizer.managedresource.crossplane.io
Generation: 1
Resource Version: 7245
Self Link: /apis/servicenetworking.gcp.crossplane.io/v1alpha3/connections/example-connection
UID: aeae7e4d-f98c-11e9-8275-42010a800122
Spec:
Network: projects/crossplane-playground/global/networks/default
Parent: services/servicenetworking.googleapis.com
Provider Ref:
Name: gcp-provider
Reclaim Policy: Delete
Reserved Peering Ranges:
example-globaladdress
Status:
Conditions:
Last Transition Time: 2019-10-28T14:10:23Z
Reason: Successfully resolved managed resource references to other resources
Status: True
Type: ReferencesResolved
Last Transition Time: 2019-10-28T14:10:23Z
Reason: Managed resource is being created
Status: False
Type: Ready
Last Transition Time: 2019-10-28T14:10:23Z
Reason: Successfully reconciled managed resource
Status: True
Type: Synced
Events: <none>
```
We are looking for the `Connection` resource to report `Type: Ready` `Status:
True` in its `status.conditions`.
## Provision
### Resource Claim
Resource claims are used for dynamic provisioning of a managed resource (like a
MySQL instance) by matching the claim to a resource class. This can be done in
several ways: (a) rely on the default class marked
`resourceclass.crossplane.io/is-default-class: "true"`, (b) use a
`claim.spec.classRef` to a specific class, or (c) match on class labels using a
`claim.spec.classSelector`.
*Note: claims may also be used in [static
provisioning](../concepts.md#dynamic-and-static-provisioning) with a reference
to an existing managed resource.*
In the `CloudSQLInstanceClass` above, we added the label `size: standard`, so
our claim will be scheduled to that class using the label is specified in the
`claim.spec.classSelector`. If there are multiple classes which match the
specified label(s) one will be chosen at random.
* Define a `MySQLInstance` claim in `mysql-claim.yaml`:
```bash
cat > mysql-claim.yaml <<EOF
---
apiVersion: database.crossplane.io/v1alpha1
kind: MySQLInstance
metadata:
name: mysql-claim
spec:
classSelector:
matchLabels:
size: standard
engineVersion: "5.7"
# A secret is exported by providing the secret name
# to export it under. This is the name of the secret
# in the crossplane cluster, and it's scoped to this claim's namespace.
writeConnectionSecretToRef:
name: wordpressmysql
EOF
kubectl apply -f mysql-claim.yaml
```
What we are looking for is for the claim's `STATUS` value to become `Bound`
which indicates the managed resource was successfully provisioned and is ready
for consumption. You can see when claim is bound using the following:
*Command*
```bash
kubectl get mysqlinstances
```
*Output*
```bash
NAME STATUS CLASS-KIND CLASS-NAME RESOURCE-KIND RESOURCE-NAME AGE
mysql-claim Bound CloudSQLInstanceClass standard-cloudsql CloudSQLInstance default-mysql-claim-vtnf7 3m
```
If the `STATUS` is blank, we are still waiting for the claim to become bound.
You can observe resource creation progression using the following:
*Command*
```bash
kubectl describe mysqlinstance mysql-claim
```
*Output*
```
Name: mysql-claim
Namespace: default
Labels: <none>
Annotations: kubectl.kubernetes.io/last-applied-configuration:
{"apiVersion":"database.crossplane.io/v1alpha1","kind":"MySQLInstance","metadata":{"annotations":{},"name":"mysql-claim","namespace":"defa...
API Version: database.crossplane.io/v1alpha1
Kind: MySQLInstance
Metadata:
Creation Timestamp: 2019-10-28T14:18:55Z
Finalizers:
finalizer.resourceclaim.crossplane.io
Generation: 3
Resource Version: 9011
Self Link: /apis/database.crossplane.io/v1alpha1/namespaces/default/mysqlinstances/mysql-claim
UID: e0329d69-f98d-11e9-8275-42010a800122
Spec:
Class Ref:
API Version: database.gcp.crossplane.io/v1beta1
Kind: CloudSQLInstanceClass
Name: standard-cloudsql
UID: 431580bd-f989-11e9-8275-42010a800122
Class Selector:
Match Labels:
Size: standard
Engine Version: 5.7
Resource Ref:
API Version: database.gcp.crossplane.io/v1beta1
Kind: CloudSQLInstance
Name: default-mysql-claim-vtnf7
UID: e07c42c5-f98d-11e9-8275-42010a800122
Write Connection Secret To Ref:
Name: wordpressmysql
Status:
Conditions:
Last Transition Time: 2019-10-28T14:18:56Z
Reason: Managed claim is waiting for managed resource to become bindable
Status: False
Type: Ready
Last Transition Time: 2019-10-28T14:18:56Z
Reason: Successfully reconciled managed resource
Status: True
Type: Synced
Events: <none>
```
*Note: You must wait until the claim becomes bound before continuing with this
guide. It could take a few minutes for GCP to complete CloudSQL creation.*
## Install Wordpress
Installing Wordpress requires creating a Kubernetes `Deployment` and load
balancer `Service`. We will point the deployment to the `wordpressmysql` secret
that we specified in our claim above for the Wordpress container environment
variables. It should have been populated with our MySQL connection details after
the claim became `Bound`.
> Binding status tells you whether your resource has been provisioned and ready
to use. Crossplane binds the actual resource to the claim via changing the
readiness condition to `Bound`. This happens only when the resource is ready to
be consumed.
* Check to make sure `wordpressmysql` exists and is populated:
*Command*
```bash
kubectl describe secret wordpressmysql
```
*Output*
```bash
Name: wordpressmysql
Namespace: default
Labels: <none>
Annotations: crossplane.io/propagate-from-name: 330cccf5-f991-11e9-8275-42010a800122
crossplane.io/propagate-from-namespace: crossplane-system
crossplane.io/propagate-from-uid: 33581ec7-f991-11e9-8275-42010a800122
Type: Opaque
Data
====
endpoint: 10 bytes
password: 27 bytes
publicIP: 13 bytes
serverCACertificateCert: 1272 bytes
serverCACertificateCommonName: 98 bytes
serverCACertificateCreateTime: 24 bytes
serverCACertificateExpirationTime: 24 bytes
privateIP: 10 bytes
serverCACertificateCertSerialNumber: 1 bytes
serverCACertificateInstance: 25 bytes
serverCACertificateSha1Fingerprint: 40 bytes
username: 4 bytes
```
* Define the `Deployment` and `Service` in `wordpress.yaml`:
```bash
cat > wordpress.yaml <<EOF
apiVersion: apps/v1
kind: Deployment
metadata:
name: wordpress
labels:
app: wordpress
spec:
selector:
matchLabels:
app: wordpress
template:
metadata:
labels:
app: wordpress
spec:
containers:
- name: wordpress
image: wordpress:4.6.1-apache
env:
- name: WORDPRESS_DB_HOST
valueFrom:
secretKeyRef:
name: wordpressmysql
key: endpoint
- name: WORDPRESS_DB_USER
valueFrom:
secretKeyRef:
name: wordpressmysql
key: username
- name: WORDPRESS_DB_PASSWORD
valueFrom:
secretKeyRef:
name: wordpressmysql
key: password
ports:
- containerPort: 80
name: wordpress
---
apiVersion: v1
kind: Service
metadata:
name: wordpress
labels:
app: wordpress
spec:
ports:
- port: 80
selector:
app: wordpress
type: LoadBalancer
EOF
kubectl apply -f wordpress.yaml
```
* You can verify creation with the following command and output:
*Command*
```bash
kubectl get -f wordpress.yaml
```
*Output*
```bash
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/wordpress 1/1 1 1 77s
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/wordpress LoadBalancer 10.12.3.121 35.223.147.148 80:30287/TCP 77s
```
If the `EXTERNAL-IP` field of the `LoadBalancer` is `<pending>`, wait until it
becomes available, then navigate to the address. You should see the following:
![alt wordpress](wordpress-start.png)
## Clean Up
Because we put all of our configuration in a single directory, we can delete it
all with this command:
```bash
kubectl delete -f wordpress/
```
If you would like to also uninstall Crossplane and the AWS stack, run the
following command:
```bash
kubectl delete namespace crossplane-system
```
## Conclusion and Next Steps
We're done!
In this guide, we:
* Set up Crossplane on our GKE Cluster.
* Installed Crossplane GCP Stack.
* Created resource classes for MySQL database.
* Provisioned a MySQL database on GCP using Crossplane.
* Connected our GKE cluster to our MySQL database.
* Installed Wordpress to our GKE cluster.
In this guide, we used an existing GKE cluster but actually Crossplane can
provision a Kubernetes cluster from GCP just like it provisions a MySQL
database.
We deployed Wordpress using bare `Deployment` and `Service` resources but there
is actually a Wordpress App stack that creates these resources for us!
Check out the [stacks guides](../stacks-guide.md)!
## References
* [kubectl](https://kubernetes.io/docs/tasks/tools/install-kubectl/)
* [Crossplane Installation Guide](../install-crossplane.md#alpha)
* [GCP Stack Installation](../install-crossplane.md#gcp-stack)
* [GCP Provider Guide](../cloud-providers/gcp/gcp-provider.md)
* [Google Cloud SQL Instance](https://cloud.google.com/sql/docs/mysql/)
* [Default Resource Classes One-Pager](https://github.com/crossplaneio/crossplane/blob/master/design/one-pager-default-resource-class.md)
* [Google Private Service Connection](https://cloud.google.com/vpc/docs/configure-private-services-access)

Binary file not shown.

After

Width:  |  Height:  |  Size: 155 KiB

View File

@ -0,0 +1,578 @@
---
title: "Stacks Guide: AWS Setup"
toc: true
weight: 530
indent: true
---
# Stacks Guide: AWS Setup
## Table of Contents
- [Stacks Guide: AWS Setup](#stacks-guide-aws-setup)
- [Table of Contents](#table-of-contents)
- [Introduction](#introduction)
- [Install the AWS stack](#install-the-aws-stack)
- [Validate the installation](#validate-the-installation)
- [Configure the AWS account](#configure-the-aws-account)
- [Set Up Network Configuration](#set-up-network-configuration)
- [TL;DR](#tldr)
- [Behind the scenes](#behind-the-scenes)
- [Configure Resource Classes](#configure-resource-classes)
- [TL;DR](#tldr-1)
- [More Details](#more-details)
- [Recap](#recap)
- [Next Steps](#next-steps)
## Introduction
In this guide, we will set up an AWS provider in Crossplane so that we can
install and use the [WordPress sample stack][sample-WordPress-stack], which
depends on MySQL and Kubernetes!
Before we begin, you will need:
- Everything from the [Crossplane Stacks Guide][stacks-guide] before the cloud
provider setup
- The `kubectl` (v1.15+) tool installed and pointing to a Crossplane cluster
- The [Crossplane CLI][crossplane-cli] installed
- An account on [AWS][aws]
- The [aws cli][aws command line tool] installed
At the end, we will have:
- A Crossplane cluster configured to use AWS
- A typical AWS network configured to support secure connectivity between
resources
- Support in Crossplane cluster for satisfying MySQL and Kubernetes claims
- A slightly better understanding of:
- The way AWS is configured in Crossplane
- The way dependencies for cloud-portable workloads are configured in
Crossplane
We will **not** be covering the core concepts in this guide, but feel free to
check out the [Crossplane concepts document][crossplane-concepts] for that.
## Install the AWS stack
After Crossplane has been installed, it can be extended with more functionality
by installing a [Crossplane Stack][stack-docs]! Let's install the [stack for
Amazon Web Services][stack-aws] (AWS) to add support for that cloud provider.
The namespace where we install the stack, is also the one in which the provider
secret will reside. The name of this namespace is arbitrary, and we are calling
it `crossplane-system` in this guide. Let's create it:
```bash
# namespace for AWS stack and provider secret
kubectl create namespace crossplane-system
```
Now we install the AWS stack using Crossplane CLI. Since this is an
infrastructure stack, we need to specify that it's cluster-scoped by passing the
`--cluster` flag.
```bash
kubectl crossplane stack generate-install --cluster 'crossplane/stack-aws:master' stack-aws | kubectl apply --namespace crossplane-system -f -
```
The rest of this guide assumes that the AWS stack is installed within
`crossplane-system` namespace.
### Validate the installation
To check to see whether our stack installed correctly, we can look at the status
of our stack:
```bash
kubectl -n crossplane-system get stack
```
It should look something like:
```bash
NAME READY VERSION AGE
stack-aws True 0.0.2 45s
```
## Configure the AWS account
It is essential to make sure that the AWS user credentials are configured in
Crossplane as a provider. Please follow the steps in the AWS [provider
guide][aws-provider-guide] for more information.
## Set Up Network Configuration
In this section we build a simple AWS network configuration, by creating
corresponding Crossplane managed resources. These resources are cluster scoped,
so don't belong to a specific namespace. This network configuration enables
resources in the WordPress stack to communicate securely. In this guide, we will use
the [sample AWS network configuration][] in the Crossplane repository. You can read
more [here][crossplane-aws-networking-docs] about network secure connectivity
configurations in Crossplane.
### TL;DR
Apply the sample network configuration resources:
```bash
kubectl apply -k github.com/crossplaneio/crossplane//cluster/examples/workloads/kubernetes/wordpress/aws/network-config?ref=master
```
And you're done! You can check the status of the provisioning by running:
```bash
kubectl get -k github.com/crossplaneio/crossplane//cluster/examples/workloads/kubernetes/wordpress/aws/network-config?ref=master
```
When all resources have the `Ready` condition in `True` state, the provisioning
is complete. You can now move on to the next section, or keep reading below for
more details about the managed resources that we created.
### Behind the scenes
When configured in AWS, WordPress resources map to an EKS cluster and an RDS
database instance. In order to make the RDS instance accessible from the EKS
cluster, they both need to live within the same VPC. However, a VPC is not the
only AWS resource that needs to be created to provide inter-resource
connectivity. In general, a **Network Configuration** which consists of a set of
VPCs, Subnets, Security Groups, Route Tables, IAM Roles and other resources is
required for this purpose. For more information, see [AWS resource
connectivity][aws-resource-connectivity] design document.
To inspect the resources that we created above, let's run:
```bash
kubectl kustomize github.com/crossplaneio/crossplane//cluster/examples/workloads/kubernetes/wordpress/aws/network-config?ref=master > network-config.yaml
```
This will save the sample network configuration resources locally in
`network-config.yaml`. Please note that the AWS parameters that are used in
these resources (like `cidrBlock`, `region`, etc...) are arbitrarily chosen in
this solution and could be configured to implement other
[configurations][eks-user-guide].
Below we inspect each of these resources in more details.
- **`VPC`** Represents an AWS [Virtual Private Network][] (VPC).
```yaml
---
apiVersion: network.aws.crossplane.io/v1alpha3
kind: VPC
metadata:
name: sample-vpc
spec:
cidrBlock: 192.168.0.0/16
enableDnsSupport: true
enableDnsHostNames: true
reclaimPolicy: Delete
providerRef:
name: aws-provider
```
- **`Subnet`** Represents an AWS [Subnet][]. For this configuration we create
one Subnet per each availability zone in the selected region.
```yaml
---
apiVersion: network.aws.crossplane.io/v1alpha3
kind: Subnet
metadata:
name: sample-subnet1
spec:
cidrBlock: 192.168.64.0/18
vpcIdRef:
name: sample-vpc
availabilityZone: us-west-2a
reclaimPolicy: Delete
providerRef:
name: aws-provider
---
apiVersion: network.aws.crossplane.io/v1alpha3
kind: Subnet
metadata:
name: sample-subnet2
spec:
cidrBlock: 192.168.128.0/18
vpcIdRef:
name: sample-vpc
availabilityZone: us-west-2b
reclaimPolicy: Delete
providerRef:
name: aws-provider
---
apiVersion: network.aws.crossplane.io/v1alpha3
kind: Subnet
metadata:
name: sample-subnet3
spec:
cidrBlock: 192.168.192.0/18
vpcIdRef:
name: sample-vpc
availabilityZone: us-west-2c
reclaimPolicy: Delete
providerRef:
name: aws-provider
```
- **`InternetGateway`** Represents an AWS [Internet Gateway][] which allows the
resources in the VPC to have access to the Internet. Since the WordPress
application will be accessed from the internet, this resource is required in
the network configuration.
```yaml
---
apiVersion: network.aws.crossplane.io/v1alpha3
kind: InternetGateway
metadata:
name: sample-internetgateway
spec:
vpcIdRef:
name: sample-vpc
reclaimPolicy: Delete
providerRef:
name: aws-provider
```
- **`RouteTable`** Represents an AWS [Route Table][], which specifies rules to
direct traffic in a virtual network. We use a Route Table to redirect internet
traffic from all Subnets to the Internet Gateway instance.
```yaml
---
apiVersion: network.aws.crossplane.io/v1alpha3
kind: RouteTable
metadata:
name: sample-routetable
spec:
vpcIdRef:
name: sample-vpc
routes:
- destinationCidrBlock: 0.0.0.0/0
gatewayIdRef:
name: sample-internetgateway
associations:
- subnetIdRef:
name: sample-subnet1
- subnetIdRef:
name: sample-subnet2
- subnetIdRef:
name: sample-subnet3
reclaimPolicy: Delete
providerRef:
name: aws-provider
```
- **`SecurityGroup`** Represents an AWS [Security Group][], which controls
inbound and outbound traffic to EC2 instances.
We need two security groups in this configuration:
- A security group to assign later to the EKS cluster workers, so they have
the right permissions to communicate with each API server
```yaml
---
apiVersion: network.aws.crossplane.io/v1alpha3
kind: SecurityGroup
metadata:
name: sample-cluster-sg
spec:
vpcIdRef:
name: sample-vpc
groupName: my-cool-ekscluster-sg
description: Cluster communication with worker nodes
reclaimPolicy: Delete
providerRef:
name: aws-provider
```
- A security group to assign later to the RDS database instance, which
allows the instance to accept traffic from worker nodes.
```yaml
---
apiVersion: network.aws.crossplane.io/v1alpha3
kind: SecurityGroup
metadata:
name: sample-rds-sg
spec:
vpcIdRef:
name: sample-vpc
groupName: my-cool-rds-sg
description: open rds access to crossplane workload
reclaimPolicy: Delete
ingress:
- fromPort: 3306
toPort: 3306
protocol: tcp
cidrBlocks:
- cidrIp: 0.0.0.0/0
description: all ips
providerRef:
name: aws-provider
```
- **`DBSubnetGroup`** Represents an AWS [Database Subnet Group][] that stores a
set of existing Subnets in different availability zones, from which an IP
address is chosen and assigned to the RDS instance.
```yaml
---
apiVersion: database.aws.crossplane.io/v1alpha3
kind: DBSubnetGroup
metadata:
name: sample-dbsubnetgroup
spec:
groupName: my-cool-dbsubnetgroup
description: EKS vpc to rds
subnetIdRefs:
- name: sample-subnet1
- name: sample-subnet2
- name: sample-subnet3
tags:
- key: name
value: my-cool-dbsubnetgroup
reclaimPolicy: Delete
providerRef:
name: aws-provider
```
- **`IAMRole`** Represents An AWS [IAM Role][], which assigns a set of access
policies to the AWS principal that assumes it. We create a role, and later add
policies to it and then assign the role to the cluster. This grants the
permissions the cluster needs to communicate with other resources in AWS.
```yaml
---
apiVersion: identity.aws.crossplane.io/v1alpha3
kind: IAMRole
metadata:
name: sample-eks-cluster-role
spec:
roleName: my-cool-eks-cluster-role
description: a role that gives a cool power
assumeRolePolicyDocument: |
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "eks.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
}
reclaimPolicy: Delete
providerRef:
name: aws-provider
```
- **`IAMRolePolicyAttachment`** Represents an AWS [IAM Role Policy][], which
defines a certain permission in an IAM Role. We need two policies to create
and assign to the IAM Role above, so the cluster my communicate with other
AWS resources.
```yaml
---
apiVersion: identity.aws.crossplane.io/v1alpha3
kind: IAMRolePolicyAttachment
metadata:
name: sample-role-servicepolicy
spec:
roleNameRef:
name: sample-eks-cluster-role
# wellknown policy arn
policyArn: arn:aws:iam::aws:policy/AmazonEKSServicePolicy
reclaimPolicy: Delete
providerRef:
name: aws-provider
---
apiVersion: identity.aws.crossplane.io/v1alpha3
kind: IAMRolePolicyAttachment
metadata:
name: sample-role-clusterpolicy
spec:
roleNameRef:
name: sample-eks-cluster-role
# wellknown policy arn
policyArn: arn:aws:iam::aws:policy/AmazonEKSClusterPolicy
reclaimPolicy: Delete
providerRef:
name: aws-provider
```
As you probably have noticed, some resources are referencing other resources in
their YAML representations. For instance for `Subnet` resource we have:
```yaml
...
vpcIdRef:
name: sample-vpc
...
```
Such cross resource referencing is a Crossplane feature that enables managed
resources to retrieve other resources attributes. This creates a *blocking
dependency*, preventing the dependent resource from being created before the referred
resource is ready. In the example above, `Subnet` will be blocked until the
referred `VPC` is created, and then it retrieves its `vpcId`. For more
information, see [Cross Resource Referencing][].
## Configure Resource Classes
Once we have the network configuration set up, we need to tell Crossplane how to
satisfy WordPress's claims (that will be created when we later install the
WordPress stack) for a database and a Kubernetes cluster. The [Resource
Classes][resource-claims-docs] serve as templates for the corresponding resource
claims.
In this guide, we will use the [sample AWS resource classes][] in Crossplane
repository.
### TL;DR
Apply the sample AWS resource classes:
```bash
kubectl apply -k github.com/crossplaneio/crossplane//cluster/examples/workloads/kubernetes/wordpress/aws/resource-classes?ref=master
```
And you're done! Note that these resources do not immediately provision external
AWS resources, as they only serve as as template classes.
### More Details
To inspect the resource classes that we created above, run:
```bash
kubectl kustomize github.com/crossplaneio/crossplane//cluster/examples/workloads/kubernetes/wordpress/aws/resource-classes?ref=master > resource-classes.yaml
```
This will save the sample resource classes YAML locally in
`resource-classes.yaml`. As mentioned above, these resource classes serve as
templates and could be configured depending on the specific needs that are
needed from the underlying resources. For instance, in the sample resources the
`RDSInstanceClass` has `size: 20`, which will result in RDS databases of size 20
once a claim is submitted for this class. In addition, it's possible to have
multiple classes defined for the same claim kind, but our sample has defined
only one class for each resource type.
Below we inspect each of these resource classes in more details:
- **`RDSInstanceClass`** Represents a resource that serves as a template to
create an [RDS Database Instance][].
```yaml
---
apiVersion: database.aws.crossplane.io/v1beta1
kind: RDSInstanceClass
metadata:
name: standard-mysql
annotations:
resourceclass.crossplane.io/is-default-class: "true"
specTemplate:
writeConnectionSecretsToNamespace: crossplane-system
forProvider:
dbInstanceClass: db.t2.small
masterUsername: cool_user
vpcSecurityGroupIDRefs:
- name: sample-rds-sg
dbSubnetGroupNameRef:
name: sample-dbsubnetgroup
allocatedStorage: 20
engine: mysql
skipFinalSnapshotBeforeDeletion: true
providerRef:
name: aws-provider
reclaimPolicy: Delete
```
- **`EKSClusterClass`** Represents a resource that serves as a template to create an [EKS Cluster][].
```yaml
---
apiVersion: compute.aws.crossplane.io/v1alpha3
kind: EKSClusterClass
metadata:
name: standard-cluster
annotations:
resourceclass.crossplane.io/is-default-class: "true"
specTemplate:
writeConnectionSecretsToNamespace: crossplane-system
region: us-west-2
roleARNRef:
name: sample-eks-cluster-role
vpcIdRef:
name: sample-vpc
subnetIdRefs:
- name: sample-subnet1
- name: sample-subnet2
- name: sample-subnet3
securityGroupIdRefs:
- name: sample-cluster-sg
workerNodes:
nodeInstanceType: m3.medium
nodeAutoScalingGroupMinSize: 1
nodeAutoScalingGroupMaxSize: 1
nodeGroupName: demo-nodes
clusterControlPlaneSecurityGroupRef:
name: sample-cluster-sg
providerRef:
name: aws-provider
reclaimPolicy: Delete
```
These resources will be the default resource classes for the corresponding
claims (`resourceclass.crossplane.io/is-default-class: "true"` annotation). For
more details about resource claims and how they work, see the documentation on
[resource claims][resource-claims-docs], and [resource class selection].
## Recap
To recap what we've set up now in our environment:
- A Crossplane Provider resource for AWS
- A Network Configuration to have secure connectivity between resources
- An EKSClusterClass and an RDSInstanceClass with the right configuration to use
the mentioned networking setup.
## Next Steps
Next we'll set up a Crossplane App Stack and use it! Head [back over to the
Stacks Guide document][stacks-guide-continue] so we can pick up where we left
off.
<!-- Links -->
[crossplane-concepts]: concepts.md
[stacks-guide]: stacks-guide.md
[aws]: https://aws.amazon.com
[stack-aws]: https://github.com/crossplaneio/stack-aws
[sample-wordpress-stack]: https://github.com/crossplaneio/sample-stack-wordpress
[stack-docs]: https://github.com/crossplaneio/crossplane/blob/master/design/design-doc-stacks.md#crossplane-stacks
[aws command line tool]: https://aws.amazon.com/cli/
[crossplane-cli]: https://github.com/crossplaneio/crossplane-cli/tree/release-0.2
[Virtual Private Network]: https://aws.amazon.com/vpc/
[Subnet]: https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Subnets.html#vpc-subnet-basics
[aws-resource-connectivity]: https://github.com/crossplaneio/crossplane/blob/master/design/one-pager-resource-connectivity-mvp.md#amazon-web-services
[Internet Gateway]: https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Internet_Gateway.html
[Route Table]: https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Route_Tables.html
[Security Group]: https://docs.aws.amazon.com/vpc/latest/userguide/VPC_SecurityGroups.html
[Database Subnet Group]: https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_VPC.WorkingWithRDSInstanceinaVPC.html
[IAM Role]: https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html
[IAM Role Policy]: https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html
[stacks-guide-continue]: stacks-guide.md#install-support-for-our-application-into-crossplane
[resource-claims-docs]: concepts.md#resource-claims-and-resource-classes
[eks-user-guide]: https://docs.aws.amazon.com/eks/latest/userguide/create-public-private-vpc.html
[Cross Resource Referencing]: https://github.com/crossplaneio/crossplane/blob/master/design/one-pager-cross-resource-referencing.md
[sample AWS network configuration]: https://github.com/crossplaneio/crossplane/tree/master/cluster/examples/workloads/kubernetes/wordpress/aws/network-config?ref=master
[sample AWS resource classes]: https://github.com/crossplaneio/crossplane/tree/master/cluster/examples/workloads/kubernetes/wordpress/aws/resource-classes?ref=master
[RDS Database Instance]: https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Overview.DBInstance.html
[EKS Cluster]: https://docs.aws.amazon.com/eks/latest/userguide/clusters.html
[resource-classes-docs]: concepts.md#resource-claims-and-resource-classes
[resource class selection]: https://github.com/crossplaneio/crossplane/blob/master/design/one-pager-simple-class-selection.md
[crossplane-aws-networking-docs]: https://github.com/crossplaneio/crossplane/blob/master/design/one-pager-resource-connectivity-mvp.md#amazon-web-services
[aws-provider-guide]: cloud-providers/aws/aws-provider.md

View File

@ -0,0 +1,455 @@
---
title: "Stacks Guide: Azure Setup"
toc: true
weight: 540
indent: true
---
# Stacks Guide: Azure Setup
## Table of Contents
- [Stacks Guide: Azure Setup](#stacks-guide-azure-setup)
- [Table of Contents](#table-of-contents)
- [Introduction](#introduction)
- [Install the Azure Stack](#install-the-azure-stack)
- [Validate the installation](#validate-the-installation)
- [Configure Azure Account](#configure-azure-account)
- [Set Up Network Configuration](#set-up-network-configuration)
- [TL;DR](#tldr)
- [Behind the scenes](#behind-the-scenes)
- [Configure Resource Classes](#configure-resource-classes)
- [TL;DR](#tldr-1)
- [More Details](#more-details)
- [Post Stack Installation Network Configuration](#post-stack-installation-network-configuration)
- [Recap](#recap)
- [Next Steps](#next-steps)
## Introduction
In this guide, we will set up an Azure provider in Crossplane so that we can
install and use the [WordPress sample stack][sample-WordPress-stack], which
depends on MySQL and Kubernetes!
Before we begin, you will need:
- Everything from the [Crossplane Stacks Guide][stacks-guide] before the cloud
provider setup
- The `kubectl` (v1.15+) tool installed and pointing to a Crossplane cluster
- The [Crossplane CLI][crossplane-cli] installed
- An account on [Azure][azure]
- The [jq][jq] tool for interacting with some JSON
At the end, we will have:
- A Crossplane cluster configured to use Azure
- A typical Azure network configured to support secure connectivity between
resources
- Support in Crossplane cluster for satisfying MySQL and Kubernetes claims
- A slightly better understanding of:
- The way Azure is configured in Crossplane
- The way dependencies for cloud-portable workloads are configured in
Crossplane
We will **not** be covering the core concepts in this guide, but feel free to
check out the [Crossplane concepts document][crossplane-concepts] for that.
## Install the Azure Stack
After Crossplane has been installed, it can be extended with more functionality
by installing a [Crossplane Stack][stack-docs]! Let's install the [stack for
Microsoft Azure][stack-azure] to add support for that cloud provider.
The namespace where we install the stack, is also the one in which the provider
secret will reside. The name of this namespace is arbitrary, and we are calling
it `crossplane-system` in this guide. Let's create it:
```bash
# namespace for Azure stack and provider secret
kubectl create namespace crossplane-system
```
Now we install the Azure stack using Crossplane CLI. Since this is an
infrastructure stack, we need to specify that it's cluster-scoped by passing the
`--cluster` flag.
```bash
kubectl crossplane stack generate-install --cluster 'crossplane/stack-azure:master' stack-azure | kubectl apply --namespace crossplane-system -f -
```
The rest of this guide assumes that the Azure stack is installed within
`crossplane-system` namespace.
### Validate the installation
To check to see whether our stack installed correctly, we can look at the status
of our stack:
```bash
kubectl -n crossplane-system get stack
```
It should look something like:
```bash
NAME READY VERSION AGE
stack-azure True 0.0.2 45s
```
## Configure Azure Account
We will make use of the following services on Azure:
- Resource Group
- Azure Kubernetes Service
- Azure Database for MySQL
- Virtual Network
- Subnetwork
- Virtual Network Rule
It is essential to make sure that the Azure user credentials are configured in
Crossplane as a provider. Please follow the steps [provider
guide][azure-provider-guide] for more information.
## Set Up Network Configuration
In this section we build a simple Azure virtual network configuration, by
creating corresponding Crossplane managed resources. These resources are cluster
scoped, so don't belong to a specific namespace. This network configuration
enables resources in the WordPress stack to communicate securely. In this guide, we
will use the [sample Azure network configuration][] in the Crossplane repository.
You can read more [here][crossplane-azure-networking-docs] about network secure
connectivity configurations in Crossplane.
### TL;DR
Apply the sample network configuration resources:
```bash
kubectl apply -k github.com/crossplaneio/crossplane//cluster/examples/workloads/kubernetes/wordpress/azure/network-config?ref=master
```
And you're done! You can check the status of the provisioning by running:
```bash
kubectl get -k github.com/crossplaneio/crossplane//cluster/examples/workloads/kubernetes/wordpress/azure/network-config?ref=master
```
When all resources have the `Ready` condition in `True` state, the provisioning
is complete. You can now move on to the next section, or keep reading below for
more details about the managed resources that we created.
### Behind the scenes
In order to provision Azure resources, a [Resource
Group][azure-resource-group-docs] is needed to to logically group resources
together. In addition, WordPress resources map to an AKS cluster and a SQLServer
database instance. To make the database instance securely accessible from the
cluster, they both need to live within the same Virtual Network. However, a
Virtual Network is not the only Azure resource that is needed to provide
inter-resource connectivity. In general, a **Network Configuration** which
consists of a set of Virtual Networks, Subnets, VNet Rules and other resource is
required for this purpose. For more information, see [Azure resource
connectivity][azure-resource-connectivity] design document.
To inspect the resources that we created above, let's run:
```bash
kubectl kustomize github.com/crossplaneio/crossplane//cluster/examples/workloads/kubernetes/wordpress/azure/network-config?ref=master > network-config.yaml
```
This will save the sample network configuration resources locally in
`network-config.yaml`. Please note that the Azure parameters that are used in
these resources (like `addresPrefixes`, `location`, etc...) are arbitrarily
chosen in this solution and could be configured to implement other
[configurations][azure-network-configuration].
Below we inspect each of these resources in more details.
- **`ResourceGroup`** Represents an Azure [Resource
Group][azure-resource-group-docs], that is used to logically group resources
together.
```yaml
---
apiVersion: azure.crossplane.io/v1alpha3
kind: ResourceGroup
metadata:
name: sample-rg
spec:
name: my-cool-rg
location: Central US
reclaimPolicy: Delete
providerRef:
name: azure-provider
```
- **`VirtualNetwork`** Represents an Azure [Virtual
Network][azure-virtual-network].
```yaml
---
apiVersion: network.azure.crossplane.io/v1alpha3
kind: VirtualNetwork
metadata:
name: sample-vnet
spec:
name: my-cool-vnet
resourceGroupNameRef:
name: sample-rg
location: Central US
properties:
addressSpace:
addressPrefixes:
- 10.2.0.0/16
reclaimPolicy: Delete
providerRef:
name: azure-provider
```
- **`Subnet`** Represents an Azure [Subnet][azure-virtual-network].
```yaml
---
apiVersion: network.azure.crossplane.io/v1alpha3
kind: Subnet
metadata:
name: sample-subnet
spec:
name: my-cool-subnet
resourceGroupNameRef:
name: sample-rg
virtualNetworkNameRef:
name: sample-vnet
properties:
addressPrefix: 10.2.0.0/24
serviceEndpoints:
- service: Microsoft.Sql
reclaimPolicy: Delete
providerRef:
name: azure-provider
```
As you probably have noticed, some resources are referencing other resources in
their YAML representations. For instance for `Subnet` resource we have:
```yaml
...
virtualNetworkNameRef:
name: sample-vnet
...
```
Such cross resource referencing is a Crossplane feature that enables managed
resources to retrieve other resources attributes. This creates a *blocking
dependency*, preventing the dependent resource from being created before the referred
resource is ready. In the example above, `Subnet` will be blocked until the
referred `VirtualNetwork` is created, and then it retrieves its `name`. For more
information, see [Cross Resource Referencing][].
## Configure Resource Classes
Once we have the network set up, we also need to tell Crossplane how to satisfy
WordPress's claims (that will be created when we later install the WordPress
stack) for a database and a Kubernetes cluster. The [Resource
Classes][resource-claims-and-classes-docs] serve as templates for the
corresponding resource claims.
In this guide, we will use the [sample Azure resource classes][]in Crossplane
repository.
### TL;DR
Apply the sample Azure resource classes:
```bash
kubectl apply -k github.com/crossplaneio/crossplane//cluster/examples/workloads/kubernetes/wordpress/azure/resource-classes?ref=master
```
And you're done! Note that these resources do not immediately provision external
Azure resources, as they only serve as template classes.
### More Details
To inspect the resource classes that we created above, run:
```bash
kubectl kustomize github.com/crossplaneio/crossplane//cluster/examples/workloads/kubernetes/wordpress/azure/resource-classes?ref=master > resource-classes.yaml
```
This will save the sample resource classes YAML locally in
`resource-classes.yaml`. As mentioned above, these resource classes serve as
templates and could be configured depending on the specific needs that are
needed from the underlying resources. For instance, in the sample resources the
`SQLServerClass` has `storageGB: 25`, which will result in SQLServer databases
of size 25 once a claim is submitted for this class. In addition, it's possible
to have multiple classes defined for the same claim kind, but our sample has
defined only one class for each resource type.
Below we inspect each of these resource classes in more details:
- **`SQLServerClass`** Represents a resource that defines the blueprint for how
a "standard" [Azure MySQL Server][azure-mysql-database] should be dynamically
provisioned
```yaml
---
apiVersion: database.azure.crossplane.io/v1alpha3
kind: SQLServerClass
metadata:
name: standard-mysql
annotations:
resourceclass.crossplane.io/is-default-class: "true"
specTemplate:
writeConnectionSecretsToNamespace: crossplane-system
adminLoginName: my-cool-login
resourceGroupNameRef:
name: sample-rg
location: Central US
sslEnforced: false
version: "5.6"
pricingTier:
tier: GeneralPurpose
vcores: 2
family: Gen5
storageProfile:
storageGB: 25
backupRetentionDays: 7
geoRedundantBackup: false
reclaimPolicy: Delete
providerRef:
name: azure-provider
```
- **`AKSClusterClass`** Represents a resource that serves as a template to
create an [Azure Kubernetes Engine][azure-aks](AKS).
```yaml
---
apiVersion: compute.azure.crossplane.io/v1alpha3
kind: AKSClusterClass
metadata:
name: standard-cluster
annotations:
resourceclass.crossplane.io/is-default-class: "true"
specTemplate:
writeConnectionSecretsToNamespace: crossplane-system
resourceGroupNameRef:
name: sample-rg
vnetSubnetIDRef:
name: sample-subnet
location: Central US
version: "1.12.8"
nodeCount: 1
nodeVMSize: Standard_B2s
dnsNamePrefix: crossplane-aks
disableRBAC: false
writeServicePrincipalTo:
name: akscluster-net
namespace: crossplane-system
reclaimPolicy: Delete
providerRef:
name: azure-provider
```
These resources will be the default resource classes for the corresponding
claims (`resourceclass.crossplane.io/is-default-class: "true"` annotation). For
more details about resource claims and how they work, see the documentation on
[resource claims][resource-claims-and-classes-docs], and [resource class
selection].
## Post Stack Installation Network Configuration
After the WordPress stack is installed, we will need the AKS Cluster it
provisions to be able to communicate with the MySQL database it provisions. In
Azure, we can do so using a [Virtual Network Rule][azure-vnet-rule]. However,
the rule cannot be created until after the MySQLInstance claim is created and
satisfied, so we will start a short script to continually check if the database
exists, and will create the rule if so.
```bash
cat > vnet-rule.yaml <<EOF
apiVersion: database.azure.crossplane.io/v1alpha3
kind: MySQLServerVirtualNetworkRule
metadata:
name: sample-vnet-rule
spec:
name: my-cool-vnet-rule
serverName: MYSQL_NAME
resourceGroupNameRef:
name: sample-rg
properties:
virtualNetworkSubnetIdRef:
name: sample-subnet
reclaimPolicy: Delete
providerRef:
name: azure-provider
EOF
cat > vnetwatch.sh <<'EOF'
#!/usr/bin/env bash
set -e
trap 'exit 1' SIGINT
echo -n "waiting for mysql endpoint..." >&2
while kubectl get mysqlservers -o yaml | grep -q 'items: \[\]'; do
echo -n "." >&2
sleep 5
done
echo "done" >&2
export MYSQL_NAME=$(kubectl get mysqlservers -o=jsonpath='{.items[0].metadata.name}')
sed "s/MYSQL_NAME/$MYSQL_NAME/g" vnet-rule.yaml | kubectl apply -f -
EOF
chmod +x vnetwatch.sh && ./vnetwatch.sh
```
The script should be left running in the background while we go through the rest
of the guide and install the WordPress stack.
## Recap
To recap what we've set up now in our environment:
- A Crossplane Provider resource for Azure
- A Network Configuration to have secure connectivity between resources
- An CloudSQLInstanceClass and an GKEClusterClass with the right configuration
to use the mentioned networking setup.
- A script that will create our Virtual Network Rule when our MySQL database
name comes available.
## Next Steps
Next we'll set up a Crossplane App Stack and use it! Head [back over to the
Stacks Guide document][stacks-guide-continue] so we can pick up where we left
off.
<!-- Links -->
[crossplane-concepts]: concepts.md
[sample-wordpress-stack]: https://github.com/crossplaneio/sample-stack-wordpress
[crossplane-cli]: https://github.com/crossplaneio/crossplane-cli/tree/release-0.2
[crossplane-azure-networking-docs]: https://github.com/crossplaneio/crossplane/blob/master/design/one-pager-resource-connectivity-mvp.md#microsoft-azure
[stacks-guide]: stacks-guide.md
[provider-azure-guide]: cloud-providers/azure/azure-provider.md
[stack-docs]: https://github.com/crossplaneio/crossplane/blob/master/design/design-doc-stacks.md#crossplane-stacks
[stack-azure]: https://github.com/crossplaneio/stack-azure
[azure]: https://azure.microsoft.com
[azure-vnet-rule]: https://docs.microsoft.com/en-us/azure/mysql/concepts-data-access-and-security-vnet
[azure-resource-group-docs]: https://docs.microsoft.com/en-us/azure/azure-resource-manager/resource-group-overview
[stacks-guide-continue]: stacks-guide.md#install-support-for-our-application-into-crossplane
[jq]: https://stedolan.github.io/jq/
[azure-virtual-network]: https://docs.microsoft.com/en-us/azure/virtual-network/virtual-networks-overview
[azure-resource-connectivity]: https://github.com/crossplaneio/crossplane/blob/master/design/one-pager-resource-connectivity-mvp.md#microsoft-azure
[azure-network-configuration]: https://docs.microsoft.com/en-us/azure/virtual-network/virtual-networks-using-network-configuration-file
[sample Azure resource classes]: https://github.com/crossplaneio/crossplane/tree/master/cluster/examples/workloads/kubernetes/wordpress/azure/resource-classes?ref=master
[azure-mysql-database]: https://azure.microsoft.com/en-us/services/mysql/
[azure-aks]: https://azure.microsoft.com/en-us/services/kubernetes-service/
[resource-claims-and-classes-docs]: https://github.com/crossplaneio/crossplane/blob/master/docs/concepts.md#resource-claims-and-resource-classes
[sample Azure network configuration]: https://github.com/crossplaneio/crossplane/tree/master/cluster/examples/workloads/kubernetes/wordpress/azure/network-config?ref=master
[Cross Resource Referencing]: https://github.com/crossplaneio/crossplane/blob/master/design/one-pager-cross-resource-referencing.md
[resource class selection]: https://github.com/crossplaneio/crossplane/blob/master/design/one-pager-simple-class-selection.md
[azure-provider-guide]: cloud-providers/azure/azure-provider.md

View File

@ -0,0 +1,424 @@
---
title: "Stacks Guide: GCP Setup"
toc: true
weight: 520
indent: true
---
# Stacks Guide: GCP Setup
## Table of Contents
- [Stacks Guide: GCP Setup](#stacks-guide-gcp-setup)
- [Table of Contents](#table-of-contents)
- [Introduction](#introduction)
- [Install the GCP Stack](#install-the-gcp-stack)
- [Configure GCP Account](#configure-gcp-account)
- [Set up cloud provider credentials](#set-up-cloud-provider-credentials)
- [Configure Crossplane Provider for GCP](#configure-crossplane-provider-for-gcp)
- [Set Up Network Configuration](#set-up-network-configuration)
- [TL;DR](#tldr)
- [Behind the scenes](#behind-the-scenes)
- [Configure Resources Classes](#configure-resources-classes)
- [TL;DR](#tldr-1)
- [More Details](#more-details)
- [Recap](#recap)
- [Next Steps](#next-steps)
## Introduction
In this guide, we will set up a GCP provider in Crossplane so that we can
install and use the [WordPress sample stack][sample-wordpress-stack], which
depends on MySQL and Kubernetes!
Before we begin, you will need:
- Everything from the [Crossplane Stacks Guide][stacks-guide] before the
cloud provider setup
- The `kubectl` (v1.15+) tool installed and pointing to a Crossplane cluster
- The [Crossplane CLI][crossplane-cli] installed
- An account on [Google Cloud Platform][gcp]
At the end, we will have:
- A Crossplane control cluster configured to use GCP
- A typical GCP network configured to support secure connectivity between
resources
- Support in Crossplane cluster for satisfying MySQL and Kubernetes claims
- A slightly better understanding of:
- The way GCP is configured in Crossplane
- The way dependencies for cloud-portable workloads are configured in
Crossplane
We will **not** be covering the core concepts in this guide, but feel free to
check out the [Crossplane concepts document][crossplane-concepts] for that.
## Install the GCP Stack
After Crossplane has been installed, it can be extended with more
functionality by installing a [Crossplane Stack][stack-docs]! Let's
install the [stack for Google Cloud Platform][stack-gcp] (GCP) to add
support for that cloud provider.
The namespace where we install the stack, is also the one in which the provider
secret will reside. The name of this namespace is arbitrary, and we are calling
it `crossplane-system` in this guide. Let's create it:
```bash
# namespace for GCP stack and provider secret
kubectl create namespace crossplane-system
```
Now we install the GCP stack using Crossplane CLI. Since this is an
infrastructure stack, we need to specify that it's cluster-scoped by passing the
`--cluster` flag.
```bash
kubectl crossplane stack generate-install --cluster 'crossplane/stack-gcp:master' stack-gcp | kubectl apply --namespace crossplane-system -f -
```
The rest of this guide assumes that the GCP stack is installed within
`crossplane-system` namespace.
To check to see whether our stack installed correctly, we can look at
the status of our stack:
```bash
kubectl -n crossplane-system get stack
```
It should look something like:
```bash
NAME READY VERSION AGE
stack-gcp True 0.0.2 5m19s
```
## Configure GCP Account
We will make use of the following services on GCP:
- GKE
- CloudSQL Instance
- Network
- Subnetwork
- GlobalAddress
- Private Service Connection
For all these to work, you need to enable the following [APIs][gcp-enable-apis]
in your GCP project:
- Compute Engine API
- Service Networking API
- Kubernetes Engine API
We will also need to tell Crossplane how to use the credentials for the GCP
account. For this exercise, the GCP account that we will tell Crossplane about
should have the following [roles][gcp-assign-roles] assigned:
- Cloud SQL Admin
- Compute Network Admin
- Kubernetes Engine Admin
- Service Account User
### Set up cloud provider credentials
It is essential to make sure that the GCP user credentials are configured in
Crossplane as a provider. Please follow the steps in the GCP [provider
guide][gcp-provider-guide] for more information.
## Set Up Network Configuration
In this section we build a simple GCP network configuration, by creating
corresponding Crossplane managed resources. These resources are cluster scoped,
so don't belong to a specific namespace. This network configuration enables
resources in the WordPress stack to communicate securely. In this guide, we will use
the [sample GCP network configuration][] in the Crossplane repository. You can read
more [here][crossplane-gcp-networking-docs] about network secure connectivity
configurations in Crossplane.
### TL;DR
Apply the sample network configuration resources:
```bash
kubectl apply -k github.com/crossplaneio/crossplane//cluster/examples/workloads/kubernetes/wordpress/gcp/network-config?ref=master
```
And you're done! You can check the status of the provisioning by running:
```bash
kubectl get -k github.com/crossplaneio/crossplane//cluster/examples/workloads/kubernetes/wordpress/gcp/network-config?ref=master
```
When all resources have the `Ready` condition in `True` state, the provisioning
is complete. You can now move on to the next section, or keep reading below for
more details about the managed resources that we created.
### Behind the scenes
WordPress needs a MySQL database and a Kubernetes cluster. But these
two resources need a private network to communicate securely. So, we
need to set up the network before we set up the database and the
Kubernetes cluster.
To inspect the resources that we created above, let's run:
```bash
kubectl kustomize github.com/crossplaneio/crossplane//cluster/examples/workloads/kubernetes/wordpress/gcp/network-config?ref=master > network-config.yaml
```
This will save the sample network configuration resources locally in
`network-config.yaml`. Please note that the GCP parameters that are used in these
resources (like `ipCidrRange`, `region`, etc...) are arbitrarily chosen in this
solution and could be configured to implement other
[configurations][gcp-network-configuration].
Below we inspect each of these resources in more details.
- **`Network`** Represents a GCP [Virtual Private Cloud (VPC)
Network][gcp-network-configuration], that all cloud instances we'll create
will use.
```yaml
---
apiVersion: compute.gcp.crossplane.io/v1alpha3
kind: Network
metadata:
name: sample-network
spec:
name: my-cool-network
autoCreateSubnetworks: false
routingConfig:
routingMode: REGIONAL
reclaimPolicy: Delete
providerRef:
name: gcp-provider
```
- **`Subnetwork`** Represents a GCP [Virtual Private Cloud Subnetwork][gcp-network-configuration], which
defines IP ranges to be used by GKE cluster.
```yaml
---
apiVersion: compute.gcp.crossplane.io/v1alpha3
kind: Subnetwork
metadata:
name: sample-subnetwork
spec:
name: my-cool-subnetwork
region: us-central1
ipCidrRange: "192.168.0.0/24"
privateIpGoogleAccess: true
secondaryIpRanges:
- rangeName: pods
ipCidrRange: 10.0.0.0/8
- rangeName: services
ipCidrRange: 172.16.0.0/16
networkRef:
name: sample-network
reclaimPolicy: Delete
providerRef:
name: gcp-provider
```
- **`GlobalAddress`** Represents a GCP [Global Address][gcp-ip-address], which defines the IP
range that will be allocated for cloud services connecting to the instances in the given Network.
```yaml
---
apiVersion: compute.gcp.crossplane.io/v1alpha3
kind: GlobalAddress
metadata:
name: sample-globaladdress
spec:
name: my-cool-globaladdress
purpose: VPC_PEERING
addressType: INTERNAL
prefixLength: 16
networkRef:
name: sample-network
reclaimPolicy: Delete
providerRef:
name: gcp-provider
```
- **`Connection`** Represents a GCP [Connection][gcp-connection], which allows
cloud services to use the allocated GlobalAddress for communication. Behind
the scenes, it creates a VPC peering to the network that those service
instances actually live.
```yaml
---
apiVersion: servicenetworking.gcp.crossplane.io/v1alpha3
kind: Connection
metadata:
name: sample-connection
spec:
parent: services/servicenetworking.googleapis.com
networkRef:
name: sample-network
reservedPeeringRangeRefs:
- name: sample-globaladdress
reclaimPolicy: Delete
providerRef:
name: gcp-provider
```
As you probably have noticed, some resources are referencing other resources
in their YAML representations. For instance for `Subnetwork` resource we have:
```yaml
...
networkRef:
name: sample-network
...
```
Such cross resource referencing is a Crossplane feature that enables managed
resources to retrieve other resources attributes. This creates a *blocking
dependency*, preventing the dependent resource from being created before the referred
resource is ready. In the example above, `Subnetwork` will be blocked until the
referred `Network` is created, and then it retrieves its id. For more
information, see [Cross Resource Referencing][].
## Configure Resources Classes
Once we have the network configuration set up, we need to tell Crossplane how to
satisfy WordPress's claims (that will be created when we later install the
WordPress stack) for a database and a Kubernetes cluster. The resource classes
serve as templates for the corresponding resource claims. For more information,
refer to [Resource Classes][resource-claims-and-classes-docs] design document.
In this guide, we will use the [sample GCP resource classes] in Crossplane
repository.
### TL;DR
Apply the sample GCP resource classes:
```bash
kubectl apply -k github.com/crossplaneio/crossplane//cluster/examples/workloads/kubernetes/wordpress/gcp/resource-classes?ref=master
```
And you're done! Note that these resources do not immediately provision external GCP resourcs.
### More Details
To inspect the resource classes that we created above, run:
```bash
kubectl kustomize github.com/crossplaneio/crossplane//cluster/examples/workloads/kubernetes/wordpress/gcp/resource-classes?ref=master > resource-classes.yaml
```
This will save the sample resource classes YAML locally in
`resource-classes.yaml`. As mentioned above, these resource classes serve as
templates and could be configured depending on the specific needs that are
needed from the underlying resources. For instance, in the sample resources the
`CloudSQLInstanceClass` has `storageGB: 10`, which will result in databases of
size 10GB once a claim is submitted for this class. In addition, it's possible
to have multiple classes defined for the same claim kind, but our sample has
defined only one class for each resource type.
Below we inspect each of these resource classes in more details:
- **`CloudSQLInstanceClass`** Represents a resource that serves as a template to
create a [Cloud SQL Database Instance][gcp-cloudsql].
```yaml
---
apiVersion: database.gcp.crossplane.io/v1beta1
kind: CloudSQLInstanceClass
metadata:
name: standard-mysql
annotations:
resourceclass.crossplane.io/is-default-class: "true"
specTemplate:
writeConnectionSecretsToNamespace: crossplane-system
forProvider:
databaseVersion: MYSQL_5_7
region: us-central1
settings:
tier: db-n1-standard-1
dataDiskType: PD_SSD
dataDiskSizeGb: 10
ipConfiguration:
privateNetworkRef:
name: sample-network
reclaimPolicy: Delete
providerRef:
name: gcp-provider
```
- **`GKEClusterClass`** Represents a resource that serves as a template to
create a [Kubernetes Engine][gcp-gke] (GKE).
```yaml
---
apiVersion: compute.gcp.crossplane.io/v1alpha3
kind: GKEClusterClass
metadata:
name: standard-cluster
annotations:
resourceclass.crossplane.io/is-default-class: "true"
specTemplate:
machineType: n1-standard-1
numNodes: 1
zone: us-central1-b
networkRef:
name: sample-network
subnetworkRef:
name: sample-subnetwork
enableIPAlias: true
clusterSecondaryRangeName: pods
servicesSecondaryRangeName: services
reclaimPolicy: Delete
providerRef:
name: gcp-provider
```
These resources will be the default resource classes for the corresponding
claims (`resourceclass.crossplane.io/is-default-class: "true"` annotation). For
more details about resource claims and how they work, see the documentation on
[resource claims][resource-claims-and-classes-docs], and [resource class selection].
## Recap
To recap what we've set up now in our environment:
- A Crossplane Provider resource for GCP
- A Network Configuration to have secure connectivity between resources
- An CloudSQLInstanceClass and an GKEClusterClass with the right configuration to use
the mentioned networking setup.
## Next Steps
Next we'll set up a Crossplane App Stack and use it! Head [back over to
the Stacks Guide document][stacks-guide-continue] so we can pick up
where we left off.
<!-- Links -->
[crossplane-concepts]: concepts.md
[crossplane-cli]: https://github.com/crossplaneio/crossplane-cli/tree/release-0.2
[crossplane-gcp-networking-docs]: https://github.com/crossplaneio/crossplane/blob/master/design/one-pager-resource-connectivity-mvp.md#google-cloud-platform
[stacks-guide]: https://github.com/crossplaneio/crossplane/blob/master/docs/stacks-guide.md
[gcp-credentials]: https://github.com/crossplaneio/crossplane/blob/master/cluster/examples/gcp-credentials.sh
[gcp-enable-apis]: https://cloud.google.com/endpoints/docs/openapi/enable-api
[gcp-assign-roles]: https://cloud.google.com/iam/docs/granting-roles-to-service-accounts
[gcp]: https://cloud.google.com/
[stacks-guide-continue]: https://github.com/crossplaneio/crossplane/blob/master/docs/stacks-guide.md#install-support-for-our-application-into-crossplane
[sample-wordpress-stack]: https://github.com/crossplaneio/sample-stack-wordpress
[stack-docs]: https://github.com/crossplaneio/crossplane/blob/master/design/design-doc-stacks.md#crossplane-stacks
[stack-gcp]: https://github.com/crossplaneio/stack-gcp
[resource-claims-and-classes-docs]: https://github.com/crossplaneio/crossplane/blob/master/docs/concepts.md#resource-claims-and-resource-classes
[cloud-provider-setup-gcp]: https://github.com/crossplaneio/crossplane/blob/master/docs/cloud-providers/gcp/gcp-provider.md
[gcp-network-configuration]: https://cloud.google.com/vpc/docs/vpc
[Cross Resource Referencing]: https://github.com/crossplaneio/crossplane/blob/master/design/one-pager-cross-resource-referencing.md
[sample GCP resource classes]: https://github.com/crossplaneio/crossplane/tree/master/cluster/examples/workloads/kubernetes/wordpress/gcp/resource-classes?ref=master
[gcp-cloudsql]: https://cloud.google.com/sql/
[gcp-gke]: https://cloud.google.com/kubernetes-engine/
[sample GCP network configuration]: https://github.com/crossplaneio/crossplane/tree/master/cluster/examples/workloads/kubernetes/wordpress/gcp/network-config?ref=master
[gcp-ip-address]: https://cloud.google.com/compute/docs/ip-addresses/
[gcp-connection]: https://cloud.google.com/vpc/docs/configure-private-services-access
[resource class selection]: https://github.com/crossplaneio/crossplane/blob/master/design/one-pager-simple-class-selection.md
[gcp-provider-guide]: cloud-providers/gcp/gcp-provider.md

View File

@ -0,0 +1,873 @@
---
title: "Stacks Guide: Rook"
toc: true
weight: 550
indent: true
---
# Stacks Guide: Rook
> Note: this guide does not follow along with the other stacks guides. It
> deploys a different application (Yugastore) and involves using the GCP stack
> along with the Rook stack.
This user guide will walk you through [Yugastore] application deployment using
Crossplane's [Rook] stack to run [YugabyteDB] in a Google Cloud [GKE] Kubernetes
cluster. To do so, we will broadly:
1. Provision a GKE Kubernetes cluster
1. Install the Rook [Yugabyte operator] into the GKE cluster
1. Provision a YugabyteDB cluster and deploy the Yugastore app into the GKE
cluster
... all using Crossplane!
## Table of Contents
1. [Pre-requisites](#pre-requisites)
1. [Preparation](#preparation)
1. [Set Up Crossplane](#set-up-crossplane)
1. [Install in Standalone Control
Cluster](#install-in-standalone-control-cluster)
1. [GCP Provider](#gcp-provider)
1. [Rook Provider](#rook-provider)
1. [Resource Classes](#resource-classes)
1. [Provision Target Cluster](#provision-target-cluster)
1. [Provision GKE Cluster with a Resource
Claim](#provision-gke-cluster-with-a-resource-claim)
1. [Install Rook Yugabyte Operator with a
KubernetesApplication](#install-rook-yugabyte-operator-with-a-kubernetesapplication)
1. [Deploy Yugastore into Target Cluster](#deploy-yugastore-into-target-cluster)
1. [Provision YugabyteDB with a Resource
Claim](#provision-yugabytedb-with-a-resource-claim)
1. [Provision Yugastore with a
KubernetesApplication](#provision-yugastore-with-a-kubernetesapplication)
1. [Results](#results)
1. [Cleanup](#cleanup)
1. [Conclusion and Next Steps](#conclusion-and-next-steps)
## Pre-requisites
These tools are required to complete this guide. They must be installed on your
local machine.
* [kubectl][install-kubectl]
* kubectl also be installed using the Azure CLI: `az aks install-cli`
* [Helm][using-helm], minimum version `v2.10.0+`.
## Preparation
This guide assumes that you have an existing Kubernetes cluster, which will
serve as the Crossplane control cluster. Good options for running local
Kubernetes clusters include [KIND] and [Minikube].
In order to utilize GCP services, we must set the `PROJECT_ID` of the GCP
project we want to use. Run the following:
```bash
export PROJECT_ID=crossplane-playground # the project that all resources reside.
```
## Set Up Crossplane
### Install in Standalone Control Cluster
Using your local Kubernetes cluster:
1. Install Crossplane from the alpha channel. (See the [Crossplane Installation
Guide][crossplane-install] for more information.)
```bash
helm repo add crossplane-alpha https://charts.crossplane.io/alpha
helm install --name crossplane --namespace crossplane-system crossplane-alpha/crossplane
```
2. Install the GCP stack into Crossplane. (See the [GCP stack
section][gcp-stack-install] of the install guide for more information.)
```bash
cat > stack-gcp.yaml <<EOF
apiVersion: stacks.crossplane.io/v1alpha1
kind: ClusterStackInstall
metadata:
name: stack-gcp
namespace: crossplane-system
spec:
package: "crossplane/stack-gcp:master"
EOF
kubectl apply -f stack-gcp.yaml
```
3. Install the Rook stack into Crossplane (See the [Rook stack
section][rook-stack-install] of the install guide for more information.)
```bash
cat > stack-rook.yaml <<EOF
apiVersion: stacks.crossplane.io/v1alpha1
kind: ClusterStackInstall
metadata:
name: stack-rook
namespace: crossplane-system
spec:
package: "crossplane/stack-rook:master"
EOF
kubectl apply -f stack-rook.yaml
```
4. Obtain GCP credentials. (See the [Cloud Provider Credentials][cloud-creds]
docs for more information.)
### GCP Provider
Using the service account json `crossplane-gcp-provider-key.json` that you
acquired from GCP:
* Generate Base64 encoded value to store in a `Secret`:
```bash
export BASE64ENCODED_GCP_PROVIDER_CREDS=$(base64 crossplane-gcp-provider-key.json | tr -d "\n")
```
* Define a GCP `Provider` (using the `PROJECT_ID` environment variable we set
above) and `Secret`:
```bash
cat > gcp-provider.yaml <<EOF
---
apiVersion: v1
data:
credentials.json: $BASE64ENCODED_GCP_PROVIDER_CREDS
kind: Secret
metadata:
name: gcp-provider-creds
namespace: crossplane-system
type: Opaque
---
apiVersion: gcp.crossplane.io/v1alpha3
kind: Provider
metadata:
name: gcp-provider
spec:
credentialsSecretRef:
name: gcp-provider-creds
namespace: crossplane-system
key: credentials.json
projectID: $PROJECT_ID
EOF
kubectl apply -f gcp-provider.yaml
unset BASE64ENCODED_GCP_PROVIDER_CREDS # we don't need this anymore.
```
* Verify GCP provider was successfully registered by the crossplane
```bash
kubectl get providers.gcp.crossplane.io
kubectl -n crossplane-system get secrets
```
### Rook Provider
Rook differs from traditional cloud provider stacks in that it does not come
with a Rook `Provider` custom resource. The reason for this is that Rook runs in
any Kubernetes cluster. Therefore, it utilizes the general Kubernetes `Provider`
custom resource that is packaged as part of the core Crossplane installation. We
will see how to use this `Provider` type further along in this guide.
#### TL;DR
If you want to skip the rest of the guide and just deploy Yugastore, you can
run:
```bash
kubectl apply -k https://github.com/crossplaneio/crossplane//cluster/examples/rook/yugastore?ref=master
```
And you're done! You can check the status of the provisioning by running:
```bash
kubectl get -k https://github.com/crossplaneio/crossplane//cluster/examples/rook/yugastore?ref=master
```
If you did not opt for this shortcut, keep reading.
### Resource Classes
To keep all configuration organized in a single location, create a new
directory:
```bash
mkdir yugastore && cd $_
```
In order to dynamically provision resources, we need to create resources classes
that contain details about how the resources should be provisioned. For
Yugastore, we will need resource classes that are capable of fulfilling a
`KubernetesCluster` claim and a `PostgreSQLInstance` claim. The
`GKEClusterClass` is relatively straightforward in that it configures a
`GKECluster` and utilizes our previously created GCP `Provider` for
provisioning.
```bash
cat > gkeclass.yaml <<EOF
apiVersion: compute.gcp.crossplane.io/v1alpha3
kind: GKEClusterClass
metadata:
name: standard-gke
labels:
app: yugastore
specTemplate:
machineType: n1-standard-1
numNodes: 1
zone: us-central1-b
providerRef:
name: gcp-provider
reclaimPolicy: Delete
writeConnectionSecretsToNamespace: crossplane-system
EOF
kubectl apply -f gkeclass.yaml
```
The `YugabyteClusterClass` is less clear. Starting with the provider, we
reference a `Provider` that does not currently exist. Because resource classes
only store configuration data, this is okay as long as the provider exists when
the class is referenced by a claim. As previously mentioned, this provider will
be a Kubernetes `Provider` which we will create after the `GKECluster` is
created and its connection secret is propagated.
The `forProvider` section of the `YugabyteClusterClass` also differs somewhat
from other resource classes. While resource classes like `GKEClusterClass`
specify configuration for a 3rd party API, `YugabyteClusterClass` specifies
configuration for a Kubernetes [CustomResourceDefinition] (CRD) instance in a
target cluster. When the `YugabyteClusterClass` is used to create a
`YugabyteCluster` managed resource in the Crossplane control cluster, the Rook
stack reaches out to the target Kubernetes cluster using the Kubernetes
`Provider` referenced above and creates a Rook `YBCluster` [instance]. The stack
trusts that the CRD kind has been installed in the target cluster and it will
fail to provision the resource it has not (more on this below).
```bash
cat > yugabyteclass.yaml <<EOF
apiVersion: database.rook.crossplane.io/v1alpha1
kind: YugabyteClusterClass
metadata:
name: yuga-cluster
labels:
app: yugastore
specTemplate:
providerRef:
name: yugastore-k8s-provider
reclaimPolicy: Delete
writeConnectionSecretsToNamespace: crossplane-system
forProvider:
name: hello-ybdb-cluster
namespace: rook-yugabytedb
master:
# Replica count for Master.
replicas: 3
network:
ports:
- name: yb-master-ui
port: 7000 # default value
- name: yb-master-rpc
port: 7100 # default value
# Volume claim template for Master
volumeClaimTemplate:
metadata:
name: datadir
spec:
accessModes: [ "ReadWriteOnce" ]
resources:
requests:
storage: 1Gi
storageClassName: standard
tserver:
# Replica count for TServer
replicas: 3
network:
ports:
- name: yb-tserver-ui
port: 9000
- name: yb-tserver-rpc
port: 9100 # default value
- name: ycql
port: 9042 # default value
- name: yedis
port: 6379 # default value
- name: ysql
port: 5433 # default value
# Volume claim template for TServer
volumeClaimTemplate:
metadata:
name: datadir
spec:
accessModes: [ "ReadWriteOnce" ]
resources:
requests:
storage: 1Gi
storageClassName: standard
EOF
kubectl apply -f yugabyteclass.yaml
```
## Provision Target Cluster
### Provision GKE Cluster with a Resource Claim
Now that our classes have been created, we need to provision the GKE cluster by
creating a `KubernetesCluster` claim.
```bash
cat > k8sclaim.yaml <<EOF
apiVersion: v1
kind: Namespace
metadata:
name: yugastore-app
labels:
app: yugastore
---
apiVersion: kubernetes.crossplane.io/v1alpha1
kind: Provider
metadata:
name: yugastore-k8s-provider
labels:
app: yugastore
spec:
credentialsSecretRef:
name: yugastore-k8s-secret
namespace: yugastore-app
---
apiVersion: compute.crossplane.io/v1alpha1
kind: KubernetesCluster
metadata:
name: yugastore-k8s
namespace: yugastore-app
labels:
app: yugastore
spec:
classSelector:
matchLabels:
app: yugastore
writeConnectionSecretToRef:
name: yugastore-k8s-secret
EOF
kubectl apply -f k8sclaim.yaml
```
You can view the status of the `KubernetesCluster` claim as it waits for the GKE
cluster to come available:
*Command*
```bash
kubectl get kubernetesclusters -n yugastore-app
```
*Output*
```bash
NAME STATUS CLASS-KIND CLASS-NAME RESOURCE-KIND RESOURCE-NAME AGE
yugastore-k8s Bound GKEClusterClass standard-gke GKECluster yugastore-app-yugastore-k8s-vdhjq 23m
```
You can view the status of the `GKECluster` itself as it is created:
*Command*
```bash
kubectl get gkeclusters.compute.gcp.crossplane.io yugastore-app-yugastore-k8s-vdhjq
```
*Output*
```bash
NAME STATUS STATE CLUSTER-NAME ENDPOINT CLUSTER-CLASS LOCATION RECLAIM-POLICY AGE
yugastore-app-yugastore-k8s-vdhjq Bound RUNNING gke-20a8dd85-b76c-4041-bc77-36c13ee28e37 35.224.89.145 standard-gke us-central1-b Delete 5m41s
```
Here we have created a namespace `yugastore-app` for our Yugastore namespaced
resources to use and also create a Kubernetes `Provider` the references the
secret propagated by the `KubernetesCluster` claim. If you look back at the
`YugabyteClusterClass` we created above, this `yugastore-k8s-provider` is
referenced, so once the secret is propagated, the Rook stack will be able to use
it to provision a `YugabyteCluster`. However, before we get to that, we need to
deploy the Rook Yugabyte operator into the Kubernetes cluster.
### Install Rook Yugabyte Operator with a KubernetesApplication
While this is quite a large set of configuration, all it is doing is taking the
Rook Yugabyte [operator YAML] and packaging it into a Crossplane
`KubernetesApplication` resource so that we can deploy it into our newly created
GKE cluster. The `KubernetesApplication` kind is a Crossplane custom resource
that allows you to provision a bundle of Kubernetes-native types into a remote
cluster (our GKE cluster in this scenario). For instance, the Rook operator
`KubernetesApplication` below specifies that we would like two `Namespace`
objects and one of each of the `CustomResourceDefinition`, `ClusterRole`,
`ServiceAccount`, `ClusterRoleBinding`, and `Deployment` types. For more
information on the fields and scheduling of the `KubernetesApplication`, check
out the [design doc][complex-workload-design] for complex workloads.
```bash
cat > rook-operator.yaml <<EOF
apiVersion: workload.crossplane.io/v1alpha1
kind: KubernetesApplication
metadata:
name: rook-yugabyte
namespace: yugastore-app
labels:
app: yugastore
spec:
resourceSelector:
matchLabels:
operator: rook-yugabyte
clusterSelector:
matchLabels:
app: yugastore
resourceTemplates:
- metadata:
name: rook-namespace
labels:
operator: rook-yugabyte
spec:
template:
apiVersion: v1
kind: Namespace
metadata:
name: rook-yugabytedb-system
- metadata:
name: rook-app-namespace
labels:
operator: rook-yugabyte
spec:
template:
apiVersion: v1
kind: Namespace
metadata:
name: rook-yugabytedb
labels:
app: yugastore
- metadata:
name: rook-crds
labels:
operator: rook-yugabyte
spec:
template:
apiVersion: apiextensions.k8s.io/v1beta1
kind: CustomResourceDefinition
metadata:
name: ybclusters.yugabytedb.rook.io
spec:
group: yugabytedb.rook.io
names:
kind: YBCluster
listKind: YBClusterList
singular: ybcluster
plural: ybclusters
scope: Namespaced
version: v1alpha1
- metadata:
name: rook-clusterrole
labels:
operator: rook-yugabyte
spec:
template:
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRole
metadata:
name: rook-yugabytedb-operator
rules:
- apiGroups:
- ""
resources:
- pods
verbs:
- get
- list
- apiGroups:
- ""
resources:
- services
verbs:
- get
- list
- watch
- create
- update
- patch
- delete
- apiGroups:
- apps
resources:
- statefulsets
verbs:
- get
- list
- watch
- create
- update
- patch
- delete
- apiGroups:
- yugabytedb.rook.io
resources:
- "*"
verbs:
- "*"
- metadata:
name: rook-serviceaccount
labels:
operator: rook-yugabyte
spec:
template:
apiVersion: v1
kind: ServiceAccount
metadata:
name: rook-yugabytedb-operator
namespace: rook-yugabytedb-system
- metadata:
name: rook-serviceaccount
labels:
operator: rook-yugabyte
spec:
template:
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:
name: rook-yugabytedb-operator
namespace: rook-yugabytedb-system
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: rook-yugabytedb-operator
subjects:
- kind: ServiceAccount
name: rook-yugabytedb-operator
namespace: rook-yugabytedb-system
- metadata:
name: rook-serviceaccount
labels:
operator: rook-yugabyte
spec:
template:
apiVersion: apps/v1
kind: Deployment
metadata:
name: rook-yugabytedb-operator
namespace: rook-yugabytedb-system
labels:
app: rook-yugabytedb-operator
spec:
selector:
matchLabels:
app: rook-yugabytedb-operator
replicas: 1
template:
metadata:
labels:
app: rook-yugabytedb-operator
spec:
serviceAccountName: rook-yugabytedb-operator
containers:
- name: rook-yugabytedb-operator
image: rook/yugabytedb:master
args: ["yugabytedb", "operator"]
env:
- name: POD_NAME
valueFrom:
fieldRef:
fieldPath: metadata.name
- name: POD_NAMESPACE
valueFrom:
fieldRef:
fieldPath: metadata.namespace
EOF
kubectl apply -f rook-operator.yaml
```
You can view the status of the `KubernetesApplication` as its resources are
created:
*Command*
```bash
kubectl get kubernetesapplication -n yugastore-app
```
*Output*
```bash
NAME CLUSTER STATUS DESIRED SUBMITTED
rook-yugabyte yugastore-k8s Submitted 7 7
```
You can also view the individual `KubernetesApplicationResources` as they are
created:
*Command*
```bash
kubectl get kubernetesapplicationresources -n yugastore-app
```
*Output*
```bash
rook-app-namespace Namespace rook-yugabytedb yugastore-k8s Submitted
rook-clusterrole ClusterRole rook-yugabytedb-operator yugastore-k8s Submitted
rook-crds CustomResourceDefinition ybclusters.yugabytedb.rook.io yugastore-k8s Submitted
rook-namespace Namespace rook-yugabytedb-system yugastore-k8s Submitted
rook-serviceaccount Deployment rook-yugabytedb-operator yugastore-k8s Submitted
```
It is not unusual for the `rook-yugabytedb-operator` to fail on first attempt.
It is reliant on the `ClusterRole` and will fail if it is not present when the
container starts. However, the Crossplane `workload` controllers will take care
of recreating it for us!
## Deploy Yugastore into Target Cluster
### Provision YugabyteDB with a Resource Claim
Now that we have a GKE cluster up and running with the Rook Yugabyte operator
installed, we can create our YugabyteDB cluster.
```bash
cat > yugabyteclaim.yaml <<EOF
apiVersion: database.crossplane.io/v1alpha1
kind: PostgreSQLInstance
metadata:
name: yugastore-db
namespace: yugastore-app
labels:
app: yugastore
spec:
classSelector:
matchLabels:
app: yugastore
writeConnectionSecretToRef:
name: yugastore-db-secret
EOF
kubectl apply -f yugabyteclaim.yaml
```
You can view the status of the `PostgreSQLInstance` claim as it waits for the
`YugastoreCluster` to come available:
*Command*
```bash
kubectl get postgresqlinstances -n yugastore-app
```
*Output*
```bash
NAME STATUS CLASS-KIND CLASS-NAME RESOURCE-KIND RESOURCE-NAME AGE
yugastore-db Bound YugabyteClusterClass yuga-cluster YugabyteCluster yugastore-app-yugastore-db-t9xmf 8m38s
```
You can view the status of `YugabyteCluster` itself as it is created:
*Command*
```bash
kubectl get yugabyteclusters.database.rook.crossplane.io yugastore-app-yugastore-db-t9xmf
```
*Output*
```bash
NAME AGE
yugastore-app-yugastore-db-t9xmf 12m
```
### Provision Yugastore with a KubernetesApplication
Now that we have a GKE cluster up and running with the Rook Yugabyte operator
installed, we can create our YugabyteDB cluster and install Yugastore alongside
it.
```bash
cat > yugastore.yaml <<EOF
apiVersion: workload.crossplane.io/v1alpha1
kind: KubernetesApplication
metadata:
name: yugastore
namespace: yugastore-app
labels:
app: yugastore
spec:
resourceSelector:
matchLabels:
app: yugastore
clusterSelector:
matchLabels:
app: yugastore
resourceTemplates:
- metadata:
name: yugastore-namespace
labels:
app: yugastore
spec:
template:
apiVersion: v1
kind: Namespace
metadata:
name: rook-yugastore
labels:
app: yugastore
- metadata:
name: yugastore-deployment
labels:
app: yugastore
spec:
template:
apiVersion: apps/v1
kind: Deployment
metadata:
namespace: rook-yugastore
name: yugastore
labels:
app: yugastore
spec:
selector:
matchLabels:
app: yugastore
template:
metadata:
labels:
app: yugastore
spec:
containers:
- name: yugastore
image: gcr.io/crossplane-playground/yugastore:latest
imagePullPolicy: Always
command: ["/usr/local/yugastore/bin/start-for-crossplane.sh"]
env:
- name: DB_HOST
value: "yb-tserver-hello-ybdb-cluster-1.yb-tservers-hello-ybdb-cluster.rook-yugabytedb.svc.cluster.local"
- name: APP_HOST
value: "localhost"
- name: APP_PORT
value: "3001"
ports:
- containerPort: 3001
name: yugastore
livenessProbe:
exec:
command:
- cat
- healthy
initialDelaySeconds: 5
periodSeconds: 5
- metadata:
name: yugastore-service
labels:
app: yugastore
spec:
template:
apiVersion: v1
kind: Service
metadata:
namespace: rook-yugastore
name: yugastore
labels:
app: yugastore
spec:
ports:
- port: 3001
selector:
app: yugastore
type: LoadBalancer
EOF
kubectl apply -f yugastore.yaml
```
You can view the status of the Yugastore `KubernetesApplication` as its
resources are created:
*Command*
```bash
kubectl get kubernetesapplication yugastore -n yugastore-app
```
*Output*
```bash
NAME CLUSTER STATUS DESIRED SUBMITTED
yugastore yugastore-k8s Submitted 3 3
```
You can also view the individual `KubernetesApplicationResources` as they are
created:
*Command*
```bash
kubectl get kubernetesapplicationresources -n yugastore-app --selector=app=yugastore
```
*Output*
```bash
NAME TEMPLATE-KIND TEMPLATE-NAME CLUSTER STATUS
yugastore-deployment Deployment yugastore yugastore-k8s Submitted
yugastore-namespace Namespace rook-yugastore yugastore-k8s Submitted
yugastore-service Service yugastore yugastore-k8s Submitted
```
## Results
We are primarily interested in the `yugastore-service` as that is what will open
the Yugastore app to the internet. After it is assigned an external IP address,
it can be retrieved with the following:
*Command*
```bash
kubectl get kubernetesapplicationresources yugastore-service -n yugastore-app -o=jsonpath='{.status.remote.loadBalancer.ingress[0].ip}'
```
*Output*
```bash
130.211.206.157
```
Now if you point your browser to port `3001` at the external IP that the service
was assigned, you should see the Yugastore app running!
![alt yugastore](yugastore.png)
## Cleanup
Since all of our configuration is in a single directory, we can cleanup all of
our infrastructure with a single command:
```bash
kubectl delete -f yugastore/
```
## Conclusion and Next Steps
In this guide we:
* Setup a local Kubernetes cluster with Crossplane, stack-gcp, and stack-rook
installed
* Provisioned a GKE Kubernetes cluster
* Installed the Rook Yugabyte operator into the GKE cluster
* Created a YugabyteDB cluster in the GKE cluster
* Deployed Yugastore to the GKE cluster, using the YugabyteDB cluster as its
database
If you would like to learn more about stacks, checkout the other [stacks
guides][stacks]. If you have an existing cluster that you want to provision
resources in, checkout the [services guide][services].
<!-- Named links -->
[Yugastore]: https://github.com/yugabyte/yugastore
[Rook]: https://rook.io/
[Yugabyte operator]: https://rook.io/docs/rook/v1.1/yugabytedb.html
[YugabyteDB]: https://www.yugabyte.com/
[GKE]: https://cloud.google.com/kubernetes-engine/
[KIND]: https://kind.sigs.k8s.io/
[Minikube]: https://github.com/kubernetes/minikube
[install-kubectl]: https://kubernetes.io/docs/tasks/tools/install-kubectl/
[using-helm]: https://docs.helm.sh/using_helm/
[crossplane-install]: install-crossplane.md#alpha
[gcp-stack-install]: install-crossplane.md#gcp-stack
[rook-stack-install]: install-crossplane.md#rook-stack
[cloud-creds]: cloud-providers/gcp/gcp-provider.md
[CustomResourceDefinition]: https://kubernetes.io/docs/concepts/extend-kubernetes/api-extension/custom-resources/
[instance]: https://rook.io/docs/rook/v1.1/yugabytedb-cluster-crd.html
[operator YAML]: https://github.com/rook/rook/blob/master/cluster/examples/kubernetes/yugabytedb/operator.yaml
[complex-workload-design]: https://github.com/crossplaneio/crossplane/blob/master/design/design-doc-complex-workloads.md#design
[services]: services-guide.md
[stacks]: stacks-guide.md

364
docs/v0.4/stacks-guide.md Normal file
View File

@ -0,0 +1,364 @@
---
title: "Stacks Guide"
toc: true
weight: 510
indent: false
---
# Stacks Guide
## Table of Contents
1. [Introduction](#introduction)
2. [Concepts](#concepts)
3. [Before you get started](#before-you-get-started)
4. [Install the Crossplane CLI](#install-the-crossplane-cli)
5. [Install and configure Crossplane](#install-and-configure-crossplane)
6. [Install support for our application into
Crossplane](#install-support-for-our-application-into-crossplane)
7. [Create a Wordpress](#create-a-wordpress)
8. [Clean up](#clean-up)
9. [Conclusion](#conclusion)
10. [Next steps](#next-steps)
11. [References](#references)
## Introduction
Welcome to the Crossplane Stack guide! In this document, we will:
* Learn how to install an existing stack
* Interact with a stack to see how to use it
* Glimpse what is possible with a stack
* Touch a little bit on how stacks work
We will **not**:
* Learn first principles (see the [concepts
document][crossplane-concepts] for that level of detail)
* Develop our own stack from scratch (go to [this development
guide][stack-developer-guide] to learn how to do that)
Let's go!
## Concepts
There are a bunch of things you might want to know to fully understand
what's happening in this document. This guide won't cover them, but
there are other ones that do. Here are some links!
* [Crossplane concepts][crossplane-concepts]
* [Kubernetes concepts][kubernetes-concepts]
## Before you get started
This guide assumes you are using a *nix-like environment. It also
assumes you have a basic working familiarity with the following:
* The terminal environment
* Setting up cloud provider accounts for the cloud provider you want to
use
* [Kubernetes][kubernetes-docs] and [kubectl][kubectl-docs]
You will need:
* A *nix-like environment
* A cloud provider account, for the cloud provider of your choice (out
of the supported providers)
* A locally-configured kubectl which points to a configured Kubernetes
cluster. We will put Crossplane in this cluster, and we'll refer to it
as the control cluster.
## Install the Crossplane CLI
To interact with stacks, we're going to use the [Crossplane
CLI][crossplane-cli], because it's more convenient. To install it, we
can use the one-line curl bash:
```
RELEASE=v0.2.0 && curl -sL https://raw.githubusercontent.com/crossplaneio/crossplane-cli/"${RELEASE}"/bootstrap.sh | RELEASE=${RELEASE} bash
```
To use the latest release, you can use `master` as the `RELEASE` instead
of using a specific version.
## Install and configure Crossplane
To use Crossplane, we'll need to install and configure it. In this case,
we want to use Crossplane with a cloud provider, so we'll need to
configure the provider.
### Install Crossplane
The recommended way of installing Crossplane is by using
[helm][helm-install]. We can grab the most stable version currently
available by using:
```
helm repo add crossplane-alpha https://charts.crossplane.io/alpha
helm install --name crossplane --namespace crossplane-system crossplane-alpha/crossplane
```
For more options for installing, including how to install a more
bleeding-edge version, or how to uninstall, see the [full install
documentation][crossplane-install-docs].
### Create the application namespace
[Kubernetes namespaces][kubernetes-namespaces-docs] are used to isolate
resources in the same cluster, and we'll use them in our Crossplane
control cluster too. Let's create a namespace for our application's
resources. We'll call it `app-project1-dev` for the purposes of this
guide, but any name can be used.
```
kubectl create namespace app-project1-dev
```
The reason we need to create the namespace before we configure the cloud
provider is because we will be setting up some cloud provider
configuration in that namespace. The configuration will help our
application not care about which specific provider it uses. For more
details on how this works, see the Crossplane documentation on [portable
classes][portable-classes-docs].
### Configure support for your cloud provider
Next we'll set up support for our cloud provider of choice! See the
provider-specific guides:
* [AWS][aws-setup]
* [GCP][gcp-setup]
* [Azure][azure-setup]
Then come back here! Don't worry; we'll still be here when you're ready.
Don't see your favorite cloud provider? [Help us add
support][provider-stack-developer-guide] for it!
## Install support for our application into Crossplane
Now that we've got Crossplane set up and configured to use a cloud
provider, we're ready to add support for creating WordPresses! We'll do
this using a Crossplane Stack. For more information about stacks, see
the [full Stack documentation][stack-docs].
We can use the [Crossplane CLI][crossplane-cli] to install our stack which adds support for
Wordpress. Let's install it into a namespace for our project, which
we'll call `app-project1-dev` for the purposes of this guide. To install
to the current namespace, `install` can be used, but since we want to
install to a specific namespace, we will use `generate-install`:
```
kubectl crossplane stack generate-install 'crossplane/sample-stack-wordpress:latest' 'sample-stack-wordpress' | kubectl apply --namespace app-project1-dev -f -
```
Using the `generate-install` command and piping the output to `kubectl
apply` instead of using the `install` command gives us more control over
how the stack's installation is handled. Everything is a Kubernetes
object!
This pulls the stack package from a registry to install it into
Crossplane. For more details about how to use the CLI, see the
[documentation for the CLI][crossplane-cli-docs]. For more details about how stacks work behind
the scenes, see the documentation about the [stack
manager][stack-manager-docs] and the [stack
format][stack-format-docs].
## Create a Wordpress
Now that Crossplane supports Wordpress creation, we can ask Crossplane
to spin up a Wordpress for us. We can do this by creating a Kubernetes
resource that our Wordpress stack will recognize:
```
cat > my-wordpress.yaml <<EOF
apiVersion: wordpress.samples.stacks.crossplane.io/v1alpha1
kind: WordpressInstance
metadata:
name: my-wordpressinstance
EOF
kubectl apply --namespace app-project1-dev -f my-wordpress.yaml
```
To validate that it has been set up correctly, we can run:
```
kubectl -n app-project1-dev get stack
```
The output should look something like:
```
NAME READY VERSION AGE
sample-stack-wordpress True 0.0.1 48s
```
If the control cluster doesn't recognize the Wordpress instance type, it
could be because the stack is still being installed. Wait a few seconds,
and try creating the Wordpress instance again.
### Wait
The Wordpress can take a while to spin up, because behind the scenes
Crossplane is creating all of its dependendencies, which is a database
and Kubernetes cluster. To check the status, you can use [the trace
command](https://github.com/crossplaneio/crossplane-cli/tree/master/docs/trace-command.md)
of the Crossplane CLI.
```
# Get the name of the Kubernetes Application resource which is the top level workload definiton for our Wordpress instance
K8S_APP_NAME=$(kubectl get -n app-project1-dev kubernetesapplication -lstack=sample-stack-wordpress -o=jsonpath='{.items[0].metadata.name}')
# Run the trace command
kubectl crossplane trace -n app-project1-dev kubernetesapplication "${K8S_APP_NAME}"
```
You can also check the status of individual Crossplane resources that
Crossplane is creating for us:
```
# The claim for the database
kubectl get -n app-project1-dev mysqlinstance
# The claim for the Kubernetes cluster
kubectl get -n app-project1-dev kubernetescluster
# The workload definition
kubectl get -n app-project1-dev kubernetesapplication
# The things created on the Kubernetes cluster as part of the workload
kubectl get -n app-project1-dev kubernetesapplicationresource
```
For validation that these resources are spinning up, you can check in
the usual way for your cloud provider, or you can ask for the
statuses of some of the cloud-specific Kubernetes resources provided by
the infrastructure stack that we installed.
For more information about how Crossplane manages databases and
Kubernetes clusters for us, see the more complete documentation about
[claims][claims-docs], [resource classes][resource-classes-docs], and
[workloads][workloads-docs].
### Use
Once everything has been created, the ip address for the Wordpress
instance will show up in the [Crossplane
KubernetesApplicationResource][kubernetesapplicationresource-docs]
which represents the workload's service. Here's a way to watch for the
ip:
```
kubectl get --watch kubernetesapplicationresource -n app-project1-dev -o custom-columns='NAME:.metadata.name,NAMESPACE:.spec.template.metadata.namespace,KIND:.spec.template.kind,SERVICE-EXTERNAL-IP:.status.remote.loadBalancer.ingress[0].ip'
```
The ip will show up on the one which has a `Service` kind.
If you navigate to the ip, you should see the Wordpress first-time
start-up screen in your browser.
If you see it, things are working!
## Clean up
When we want to get rid of everything, we can delete the Wordpress
instance and let Crossplane and Kubernetes clean up the rest. To read
more about how cleanup works, see the documentation on reclaim policies
in Crossplane and garbage collection in Kubernetes.
To delete the Wordpress instance:
```
kubectl delete -n app-project1-dev wordpressinstance my-wordpressinstance
```
We can also remove the stack, using the Crossplane CLI:
```
kubectl crossplane stack uninstall sample-stack-wordpress -n app-project1-dev
```
Removing the stack removes any Wordpress instances that were created.
The cloud provider stack can also be removed using the `kubectl
crossplane stack uninstall` command. Use `kubectl crossplane stack list`
to see what's installed.
## Conclusion
We're done!
In this guide, we:
* Set up Crossplane on a control cluster
* Installed functionality for a cloud provider
* Extended Crossplane to manage Wordpress workloads for us
* Created a Wordpress workload
* Got some initial exposure to some of the tools and concepts of
Crossplane, Crossplane Stacks, and the Crossplane CLI
## Next steps
Crossplane can do a lot.
Now that we've gone through how to use a Crossplane Stack, you may want
to learn more about which stacks are available, or about how to write
your own stack.
To learn more about which stacks are available, check out the [stack registry][stack-registry].
To learn more about how to write your own stack, see the [stack developer
guide][stack-developer-guide].
## References
* [The Crossplane Concepts guide][crossplane-concepts]
* [Crossplane API Reference][crossplane-api-reference]
* [The Stacks Concepts guide][stack-concepts]
* [Crossplane Install Guide][crossplane-install-docs]
* [The Crossplane CLI][crossplane-cli]
* [Stacks Quick Start][stack-quick-start]
* [Stacks Developer Guide][stack-developer-guide]
* [Stack Registry][stack-registry]
* [Provider Stack Developer Guide][provider-stack-developer-guide]
* [AWS documentation][aws-docs]
* [GCP documentation][gcp-docs]
* [Azure documentation][azure-docs]
* [Kubernetes documentation][kubernetes-docs]
<!-- Named links -->
[crossplane-cli]: https://github.com/crossplaneio/crossplane-cli/tree/release-0.2
[crossplane-cli-docs]: https://github.com/crossplaneio/crossplane-cli/blob/release-0.2/README.md
[crossplane-concepts]: concepts.md
[crossplane-install-docs]: install-crossplane.md
[crossplane-api-reference]: api.md
[kubernetesapplicationresource-docs]: https://github.com/crossplaneio/crossplane/blob/master/design/design-doc-complex-workloads.md
[claims-docs]: concepts.md#resource-claims-and-resource-classes
[resource-classes-docs]: concepts.md#resource-claims-and-resource-classes
[portable-classes-docs]: https://github.com/crossplaneio/crossplane/blob/master/design/one-pager-default-resource-class.md
[workloads-docs]: concepts.md#resources-and-workloads
[kubernetes-concepts]: https://kubernetes.io/docs/concepts/
[kubernetes-docs]: https://kubernetes.io/docs/home/
[kubernetes-namespaces-docs]: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/
[kubectl-docs]: https://kubernetes.io/docs/reference/generated/kubectl/kubectl-commands
[helm-install]: https://github.com/helm/helm#install
[aws-docs]: https://docs.aws.amazon.com/
[gcp-docs]: https://cloud.google.com/docs/
[azure-docs]: https://docs.microsoft.com/azure/
[aws-setup]: stacks-guide-aws.md
[gcp-setup]: stacks-guide-gcp.md
[azure-setup]: stacks-guide-azure.md
[stack-docs]: https://github.com/crossplaneio/crossplane/blob/master/design/design-doc-stacks.md#crossplane-stacks
[stack-quick-start]: https://github.com/crossplaneio/crossplane-cli/tree/release-0.2#quick-start-stacks
[stack-concepts]: https://github.com/crossplaneio/crossplane/blob/master/design/design-doc-stacks.md#crossplane-stacks
[stack-registry]: https://hub.docker.com/search?q=crossplane&type=image
[stack-manager-docs]: https://github.com/crossplaneio/crossplane/blob/master/design/design-doc-stacks.md#installation-flow
[stack-format-docs]: https://github.com/crossplaneio/crossplane/blob/master/design/design-doc-stacks.md#stack-package-format
[stack-developer-guide]: developer-guide.md
[provider-stack-developer-guide]: developer-guide.md

133
docs/v0.4/troubleshoot.md Normal file
View File

@ -0,0 +1,133 @@
---
title: Troubleshooting
toc: true
weight: 820
indent: true
---
# Troubleshooting
* [Using the trace command](#using-the-trace-command)
* [Resource Status and Conditions](#resource-status-and-conditions)
* [Crossplane Logs](#crossplane-logs)
* [Pausing Crossplane](#pausing-crossplane)
* [Deleting a Resource Hangs](#deleting-a-resource-hangs)
## Using the trace command
The [Crossplane CLI](https://github.com/crossplaneio/crossplane-cli) trace
command provides a holistic view for a particular object and related
ones to ease debugging and troubleshooting process. It finds the
relevant Crossplane resources for a given one and provides detailed
information as well as an overview indicating what could be wrong.
Usage:
```
kubectl crossplane trace TYPE[.GROUP] NAME [-n| --namespace NAMESPACE] [--kubeconfig KUBECONFIG] [-o| --outputFormat dot]
```
Examples:
```
# Trace a KubernetesApplication
kubectl crossplane trace KubernetesApplication wordpress-app-83f04457-0b1b-4532-9691-f55cf6c0da6e -n app-project1-dev
# Trace a MySQLInstance
kubectl crossplane trace MySQLInstance wordpress-mysql-83f04457-0b1b-4532-9691-f55cf6c0da6e -n app-project1-dev
```
For more information, see [the trace command documentation](https://github.com/crossplaneio/crossplane-cli/tree/master/docs/trace-command.md).
## Resource Status and Conditions
Most Crossplane resources have a `status` section that can represent the current
state of that particular resource. Running `kubectl describe` against a
Crossplane resource will frequently give insightful information about its
condition. For example, to determine the status of a MySQLInstance resource
claim, run:
```shell
kubectl -n app-project1-dev describe mysqlinstance mysql-claim
```
This should produce output that includes:
```console
Status:
Conditions:
Last Transition Time: 2019-09-16T13:46:42Z
Reason: Managed claim is waiting for managed resource to become bindable
Status: False
Type: Ready
Last Transition Time: 2019-09-16T13:46:42Z
Reason: Successfully reconciled managed resource
Status: True
Type: Synced
```
Most Crossplane resources set exactly two condition types; `Ready` and `Synced`.
`Ready` represents the availability of the resource itself - whether it is
creating, deleting, available, unavailable, binding, etc. `Synced` represents
the success of the most recent attempt to 'reconcile' the _desired_ state of the
resource with its _actual_ state. The `Synced` condition is the first place you
should look when a Crossplane resource is not behaving as expected.
## Crossplane Logs
The next place to look to get more information or investigate a failure would
be in the Crossplane pod logs, which should be running in the
`crossplane-system` namespace. To get the current Crossplane logs, run the
following:
```shell
kubectl -n crossplane-system logs -lapp=crossplane
```
Remember that much of Crossplane's functionality is provided by Stacks. You can
use `kubectl logs` to view Stack logs too, though Stacks may not run in the
`crossplane-system` namespace.
## Pausing Crossplane
Sometimes, for example when you encounter a bug. it can be useful to pause
Crossplane if you want to stop it from actively attempting to manage your
resources. To pause Crossplane without deleting all of its resources, run the
following command to simply scale down its deployment:
```bash
kubectl -n crossplane-system scale --replicas=0 deployment/crossplane
```
Once you have been able to rectify the problem or smooth things out, you can unpause Crossplane simply by scaling its deployment back up:
```bash
kubectl -n crossplane-system scale --replicas=1 deployment/crossplane
```
Remember that much of Crossplane's functionality is provided by Stacks. You can
use `kubectl scale` to pause Stack pods too, though Stacks may not run in the
`crossplane-system` namespace.
## Deleting a Resource Hangs
The resources that Crossplane manages will automatically be cleaned up so as not
to leave anything running behind. This is accomplished by using finalizers, but
in certain scenarios the finalizer can prevent the Kubernetes object from
getting deleted.
To deal with this, we essentially want to patch the object to remove its
finalizer, which will then allow it to be deleted completely. Note that this
won't necessarily delete the external resource that Crossplane was managing, so
you will want to go to your cloud provider's console and look there for any
lingering resources to clean up.
In general, a finalizer can be removed from an object with this command:
```console
kubectl patch <resource-type> <resource-name> -p '{"metadata":{"finalizers": []}}' --type=merge
```
For example, for a Workload object (`workloads.compute.crossplane.io`) named
`test-workload`, you can remove its finalizer with:
```console
kubectl patch workloads.compute.crossplane.io test-workload -p '{"metadata":{"finalizers": []}}' --type=merge
```

BIN
docs/v0.4/yugastore.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 MiB