Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

adding data source for tanzu kubernetes clusters #444

Merged
merged 2 commits into from
Nov 12, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
206 changes: 206 additions & 0 deletions docs/data-sources/tanzu_kubernetes_cluster.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,206 @@
---
Title: "Tanzu Kubernetes Cluster (Class-based Cluster) Data Source"
Description: |-
Reading a unified Tanzu Kubernetes Grid cluster.
---

# Tanzu Kubernetes Cluster (Class-based Cluster) Data Source

This data source "tanzu-mission-control_tanzu_kubernetes_cluster" enables users get the details for a TMC managed Tanzu Kubernetes Grid cluster for both Tanzu Kubernetes Grid Vsphere 2.x & Tanzu Kubernetes Grid Service 2.x.


## Example Usage

```terraform
data "tanzu-mission-control_tanzu_kubernetes_cluster" "read_tanzu_cluster" {
name = "tanzu-cluster"
management_cluster_name = "tanzu-mgmt-cluster"
provisioner_name = "tanzu-provisioner"
}
```


<!-- schema generated by tfplugindocs -->
## Schema

### Required

- `management_cluster_name` (String) Management cluster name
- `name` (String) Cluster name
- `provisioner_name` (String) Cluster provisioner name

### Optional

- `meta` (Block List, Max: 1) Metadata for the resource (see [below for nested schema](#nestedblock--meta))
- `spec` (Block List, Max: 1) Spec of tanzu kubernetes cluster. (see [below for nested schema](#nestedblock--spec))
- `timeout_policy` (Block List, Max: 1) Timeout policy for Tanzu Kubernetes cluster. (see [below for nested schema](#nestedblock--timeout_policy))

### Read-Only

- `id` (String) The ID of this resource.

<a id="nestedblock--meta"></a>
### Nested Schema for `meta`

Optional:

- `annotations` (Map of String) Annotations for the resource
- `description` (String) Description of the resource
- `labels` (Map of String) Labels for the resource

Read-Only:

- `resource_version` (String) Resource version of the resource
- `uid` (String) UID of the resource


<a id="nestedblock--spec"></a>
### Nested Schema for `spec`

Required:

- `topology` (Block List, Min: 1, Max: 1) The cluster topology. (see [below for nested schema](#nestedblock--spec--topology))

Optional:

- `cluster_group_name` (String) Name of the cluster group to which this cluster belongs.
- `image_registry` (String) Name of the image registry configuration to use.
- `proxy_name` (String) Name of the proxy configuration to use.

Read-Only:

- `kubeconfig` (String) Cluster's kubeconfig.
- `tmc_managed` (Boolean) TMC-managed flag indicates if the cluster is managed by tmc.
(Default: False)

<a id="nestedblock--spec--topology"></a>
### Nested Schema for `spec.topology`

Required:

- `cluster_variables` (String) Variables configuration for the cluster.
- `control_plane` (Block List, Min: 1, Max: 1) Control plane specific configuration. (see [below for nested schema](#nestedblock--spec--topology--control_plane))
- `nodepool` (Block List, Min: 1) (Repeatable Block) Node pool definition for the cluster. (see [below for nested schema](#nestedblock--spec--topology--nodepool))
- `version` (String) Kubernetes version of the cluster.

Optional:

- `cluster_class` (String) The name of the cluster class for the cluster.
- `core_addon` (Block List) (Repeatable Block) The core addons. (see [below for nested schema](#nestedblock--spec--topology--core_addon))
- `network` (Block List, Max: 1) Network specific configuration. (see [below for nested schema](#nestedblock--spec--topology--network))

<a id="nestedblock--spec--topology--control_plane"></a>
### Nested Schema for `spec.topology.control_plane`

Required:

- `replicas` (Number) Number of replicas

Optional:

- `meta` (Block List, Max: 1) Metadata for the resource (see [below for nested schema](#nestedblock--spec--topology--control_plane--meta))
- `os_image` (Block List, Max: 1) OS image block (see [below for nested schema](#nestedblock--spec--topology--control_plane--os_image))

<a id="nestedblock--spec--topology--control_plane--meta"></a>
### Nested Schema for `spec.topology.control_plane.meta`

Optional:

- `annotations` (Map of String) Annotations for the resource
- `description` (String) Description of the resource
- `labels` (Map of String) Labels for the resource

Read-Only:

- `resource_version` (String) Resource version of the resource
- `uid` (String) UID of the resource


<a id="nestedblock--spec--topology--control_plane--os_image"></a>
### Nested Schema for `spec.topology.control_plane.os_image`

Required:

- `arch` (String) The architecture of the OS image.
- `name` (String) The name of the OS image.
- `version` (String) The version of the OS image.



<a id="nestedblock--spec--topology--nodepool"></a>
### Nested Schema for `spec.topology.nodepool`

Required:

- `name` (String) Name of the node pool.
- `spec` (Block List, Min: 1) Spec for the node pool. (see [below for nested schema](#nestedblock--spec--topology--nodepool--spec))

Optional:

- `description` (String) Description of the node pool.

<a id="nestedblock--spec--topology--nodepool--spec"></a>
### Nested Schema for `spec.topology.nodepool.spec`

Required:

- `replicas` (Number) Number of replicas
- `worker_class` (String) The name of the machine deployment class used to create the node pool.

Optional:

- `failure_domain` (String) The failure domain the machines will be created in.
- `meta` (Block List, Max: 1) Metadata for the resource (see [below for nested schema](#nestedblock--spec--topology--nodepool--spec--meta))
- `os_image` (Block List, Max: 1) OS image block (see [below for nested schema](#nestedblock--spec--topology--nodepool--spec--os_image))
- `overrides` (String) Overrides can be used to override cluster level variables.

<a id="nestedblock--spec--topology--nodepool--spec--meta"></a>
### Nested Schema for `spec.topology.nodepool.spec.meta`

Optional:

- `annotations` (Map of String) Annotations for the resource
- `labels` (Map of String) Labels for the resource


<a id="nestedblock--spec--topology--nodepool--spec--os_image"></a>
### Nested Schema for `spec.topology.nodepool.spec.os_image`

Required:

- `arch` (String) The architecture of the OS image.
- `name` (String) The name of the OS image.
- `version` (String) The version of the OS image.




<a id="nestedblock--spec--topology--core_addon"></a>
### Nested Schema for `spec.topology.core_addon`

Required:

- `provider` (String) Provider of core add on
- `type` (String) Type of core add on


<a id="nestedblock--spec--topology--network"></a>
### Nested Schema for `spec.topology.network`

Optional:

- `pod_cidr_blocks` (List of String) Pod CIDR for Kubernetes pods defaults to 192.168.0.0/16.
- `service_cidr_blocks` (List of String) Service CIDR for kubernetes services defaults to 10.96.0.0/12.
- `service_domain` (String) Domain name for services.




<a id="nestedblock--timeout_policy"></a>
### Nested Schema for `timeout_policy`

Optional:

- `fail_on_timeout` (Boolean) Fail on timeout if timeout is reached and cluster is not ready. (Default = true)
- `timeout` (Number) Timeout in minutes for tanzu kubernetes creation process. A value of 0 means that no timeout is set. (Default: 60)
- `wait_for_kubeconfig` (Boolean) Wait for kubeconfig. (Default = true)
5 changes: 5 additions & 0 deletions examples/data-sources/tanzukubernetescluster/data-source.tf
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
data "tanzu-mission-control_tanzu_kubernetes_cluster" "read_tanzu_cluster" {
name = "tanzu-cluster"
management_cluster_name = "tanzu-mgmt-cluster"
provisioner_name = "tanzu-provisioner"
}
1 change: 1 addition & 0 deletions internal/provider/provider.go
Original file line number Diff line number Diff line change
Expand Up @@ -95,6 +95,7 @@ func Provider() *schema.Provider {
customiamrole.ResourceName: customiamrole.ResourceCustomIAMRole(),
},
DataSourcesMap: map[string]*schema.Resource{
utkgresource.ResourceName: utkgresource.DataSourceTanzuKubernetesCluster(),
cluster.ResourceName: cluster.DataSourceTMCCluster(),
ekscluster.ResourceName: ekscluster.DataSourceTMCEKSCluster(),
akscluster.ResourceName: akscluster.DataSourceTMCAKSCluster(),
Expand Down
64 changes: 64 additions & 0 deletions internal/resources/tanzukubernetescluster/data_source.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
/*
Copyright 2022 VMware, Inc. All Rights Reserved.
SPDX-License-Identifier: MPL-2.0
*/

package tanzukubernetescluster

import (
"context"
"strings"

"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
"github.com/pkg/errors"

"github.com/vmware/terraform-provider-tanzu-mission-control/internal/authctx"
"github.com/vmware/terraform-provider-tanzu-mission-control/internal/helper"
tanzukubernetesclustermodels "github.com/vmware/terraform-provider-tanzu-mission-control/internal/models/tanzukubernetescluster"
)

func DataSourceTanzuKubernetesCluster() *schema.Resource {
return &schema.Resource{
ReadContext: func(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
return dataSourceTanzuKubernetesClusterRead(helper.GetContextWithCaller(ctx, helper.DataRead), d, m)
},
Schema: tanzuKubernetesClusterSchema,
}
}

func dataSourceTanzuKubernetesClusterRead(_ context.Context, data *schema.ResourceData, m interface{}) (diags diag.Diagnostics) {
var (
resp *tanzukubernetesclustermodels.VmwareTanzuManageV1alpha1ManagementClusterProvisionerTanzukubernetesClusterData
)

config := m.(authctx.TanzuContext)
model, err := tfModelResourceConverter.ConvertTFSchemaToAPIModel(data, []string{NameKey, ProvisionerNameKey, ManagementClusterNameKey, TimeoutPolicyKey})

if err != nil {
return diag.FromErr(errors.Wrapf(err, "Couldn't read TKG Cluster."))
}

clusterFn := model.FullName

resp, err = readFullClusterResource(&config, clusterFn)

if err != nil {
return diag.FromErr(errors.Wrapf(err, "Couldn't read TKG cluster.\nManagement Cluster Name: %s, Provisioner: %s, Cluster Name: %s",
clusterFn.ManagementClusterName, clusterFn.ProvisionerName, clusterFn.Name))
} else if resp != nil {
kubernetesClusterModel := resp.TanzuKubernetesCluster

err = tfModelResourceConverter.FillTFSchema(kubernetesClusterModel, data)

if err != nil {
diags = diag.FromErr(err)
}

fullNameList := []string{kubernetesClusterModel.FullName.ManagementClusterName, kubernetesClusterModel.FullName.ProvisionerName, kubernetesClusterModel.FullName.Name}

data.SetId(strings.Join(fullNameList, "/"))
}

return diags
}
2 changes: 1 addition & 1 deletion internal/resources/tanzukubernetescluster/schema.go
Original file line number Diff line number Diff line change
Expand Up @@ -108,7 +108,7 @@ var provisionerNameSchema = &schema.Schema{
var specSchema = &schema.Schema{
Type: schema.TypeList,
Description: "Spec of tanzu kubernetes cluster.",
Required: true,
Optional: true,
MaxItems: 1,
Elem: &schema.Resource{
Schema: map[string]*schema.Schema{
Expand Down
17 changes: 17 additions & 0 deletions templates/data-sources/tanzu_kubernetes_cluster.md.tmpl
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
---
Title: "Tanzu Kubernetes Cluster (Class-based Cluster) Data Source"
Description: |-
Reading a unified Tanzu Kubernetes Grid cluster.
---

# Tanzu Kubernetes Cluster (Class-based Cluster) Data Source

This data source "tanzu-mission-control_tanzu_kubernetes_cluster" enables users get the details for a TMC managed Tanzu Kubernetes Grid cluster for both Tanzu Kubernetes Grid Vsphere 2.x & Tanzu Kubernetes Grid Service 2.x.


## Example Usage

{{ tffile "examples/data-sources/tanzukubernetescluster/data-source.tf" }}


{{ .SchemaMarkdown | trimspace }}
Loading