-
Notifications
You must be signed in to change notification settings - Fork 67
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
feat: Add Kubernetes agent as worker (#655)
* add k8s worker to terraform * create schema_worker * adding examples I think * might be working * don't lose file * personal review of production code * move files around for testing * updated integration test * trying to get workerpool_ids working again * force worker to on in int tests * no idea * pre merge * use newer test framework * new framework for test * add some help output * change comms style * fix enabled/disabled * fix naming * flip it all around again * ensure upgrade locked is false by default * revert workflow file * not sure what was done in this commit - maybe drop? * hack container creation into int test * update test to conform with the new way of integration testing * regenerate docs * edit * remove random char * fix * use space aware go client functions * regenerate docs to pass the doc validation github action * try add newline * isolate test container * data source result must not be optional * put newline back so validate docs is happy --------- Co-authored-by: Kevin Tchang <[email protected]>
- Loading branch information
Showing
24 changed files
with
907 additions
and
3 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,58 @@ | ||
--- | ||
# generated by https://github.com/hashicorp/terraform-plugin-docs | ||
page_title: "octopusdeploy_kubernetes_agent_workers Data Source - terraform-provider-octopusdeploy" | ||
subcategory: "" | ||
description: |- | ||
Provides information about existing kubernetes agent workers. | ||
--- | ||
|
||
# octopusdeploy_kubernetes_agent_workers (Data Source) | ||
|
||
Provides information about existing kubernetes agent workers. | ||
|
||
|
||
|
||
<!-- schema generated by tfplugindocs --> | ||
## Schema | ||
|
||
### Optional | ||
|
||
- `health_statuses` (List of String) A filter to search by a list of health statuses of resources. Valid health statuses are `HasWarnings`, `Healthy`, `Unavailable`, `Unhealthy`, or `Unknown`. | ||
- `ids` (List of String) A filter to search by a list of IDs. | ||
- `is_disabled` (Boolean) A filter to search by the disabled status of a resource. | ||
- `name` (String) A filter to search by name. | ||
- `partial_name` (String) A filter to search by the partial match of a name. | ||
- `roles` (List of String) A filter to search by a list of role IDs. | ||
- `shell_names` (List of String) A list of shell names to match in the query and/or search | ||
- `skip` (Number) A filter to specify the number of items to skip in the response. | ||
- `space_id` (String) The space ID associated with this resource. | ||
- `take` (Number) A filter to specify the number of items to take (or return) in the response. | ||
- `thumbprint` (String) The thumbprint of the deployment target to match in the query and/or search | ||
|
||
### Read-Only | ||
|
||
- `id` (String) An auto-generated identifier that includes the timestamp when this data source was last modified. | ||
- `kubernetes_agent_workers` (List of Object) A list of kubernetes agent workers that match the filter(s). (see [below for nested schema](#nestedatt--kubernetes_agent_workers)) | ||
|
||
<a id="nestedatt--kubernetes_agent_workers"></a> | ||
### Nested Schema for `kubernetes_agent_workers` | ||
|
||
Read-Only: | ||
|
||
- `agent_helm_release_name` (String) | ||
- `agent_kubernetes_namespace` (String) | ||
- `agent_tentacle_version` (String) | ||
- `agent_upgrade_status` (String) | ||
- `agent_version` (String) | ||
- `communication_mode` (String) | ||
- `id` (String) | ||
- `is_disabled` (Boolean) | ||
- `machine_policy_id` (String) | ||
- `name` (String) | ||
- `space_id` (String) | ||
- `thumbprint` (String) | ||
- `upgrade_locked` (Boolean) | ||
- `uri` (String) | ||
- `worker_pool_ids` (List of String) | ||
|
||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,67 @@ | ||
--- | ||
# generated by https://github.com/hashicorp/terraform-plugin-docs | ||
page_title: "octopusdeploy_kubernetes_agent_worker Resource - terraform-provider-octopusdeploy" | ||
subcategory: "" | ||
description: |- | ||
This resource manages Kubernetes agent workers in Octopus Deploy. | ||
--- | ||
|
||
# octopusdeploy_kubernetes_agent_worker (Resource) | ||
|
||
This resource manages Kubernetes agent workers in Octopus Deploy. | ||
|
||
## Example Usage | ||
|
||
```terraform | ||
resource "octopusdeploy_kubernetes_agent_worker" "minimal" { | ||
name = "agent-minimal" | ||
worker_pools = ["worker-pools-1"] | ||
thumbprint = "96203ED84246201C26A2F4360D7CBC36AC1D232D" | ||
uri = "poll://kcxzcv2fpsxkn6tk9u6d/" | ||
} | ||
resource "octopusdeploy_kubernetes_agent_worker" "optionals" { | ||
name = "agent-optionals" | ||
worker_pools = ["worker-pools-1", "worker-pools-3"] | ||
thumbprint = "96203ED84246201C26A2F4360D7CBC36AC1D232D" | ||
uri = "poll://kcxzcv2fpsxkn6tk9u6d/" | ||
machine_policy_id = "machinepolicies-1" | ||
upgrade_locked = true | ||
is_disabled = true | ||
} | ||
``` | ||
|
||
<!-- schema generated by tfplugindocs --> | ||
## Schema | ||
|
||
### Required | ||
|
||
- `name` (String) The name of this resource. | ||
- `thumbprint` (String) The thumbprint of the Kubernetes agent's certificate used by server to verify the identity of the agent. This is the same thumbprint that was used when installing the agent. | ||
- `uri` (String) The URI of the Kubernetes agent's used by the server to queue messages. This is the same subscription uri that was used when installing the agent. | ||
- `worker_pool_ids` (List of String) A list of worker pool Ids specifying the pools in which this worker belongs | ||
|
||
### Optional | ||
|
||
- `communication_mode` (String) The communication mode used by the Kubernetes agent to communicate with Octopus Server. Currently, the only supported value is 'Polling'. | ||
- `id` (String) The unique ID for this resource. | ||
- `is_disabled` (Boolean) Whether the Kubernetes agent is disabled. If the agent is disabled, it will not be included in any deployments. | ||
- `machine_policy_id` (String) Optional ID of the machine policy that the Kubernetes agent will use. If not provided the default machine policy will be used. | ||
- `space_id` (String) The space ID associated with this resource. | ||
- `upgrade_locked` (Boolean) If enabled the Kubernetes agent will not automatically upgrade and will stay on the currently installed version, even if the associated machine policy is configured to automatically upgrade. | ||
|
||
### Read-Only | ||
|
||
- `agent_helm_release_name` (String) Name of the Helm release that the agent belongs to. | ||
- `agent_kubernetes_namespace` (String) Name of the Kubernetes namespace where the agent is installed. | ||
- `agent_tentacle_version` (String) Current Tentacle version of the agent | ||
- `agent_upgrade_status` (String) Current upgrade availability status of the agent. One of 'NoUpgrades', 'UpgradeAvailable', 'UpgradeSuggested', 'UpgradeRequired' | ||
- `agent_version` (String) Current Helm chart version of the agent. | ||
|
||
## Import | ||
|
||
Import is supported using the following syntax: | ||
|
||
```shell | ||
terraform import [options] octopusdeploy_kubernetes_agent_worker.<name> <machine-id> | ||
``` |
1 change: 1 addition & 0 deletions
1
examples/resources/octopusdeploy_kubernetes_agent_worker/import.sh
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
terraform import [options] octopusdeploy_kubernetes_agent_worker.<name> <machine-id> |
16 changes: 16 additions & 0 deletions
16
examples/resources/octopusdeploy_kubernetes_agent_worker/resource.tf
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,16 @@ | ||
resource "octopusdeploy_kubernetes_agent_worker" "minimal" { | ||
name = "agent-minimal" | ||
worker_pools = ["worker-pools-1"] | ||
thumbprint = "96203ED84246201C26A2F4360D7CBC36AC1D232D" | ||
uri = "poll://kcxzcv2fpsxkn6tk9u6d/" | ||
} | ||
|
||
resource "octopusdeploy_kubernetes_agent_worker" "optionals" { | ||
name = "agent-optionals" | ||
worker_pools = ["worker-pools-1", "worker-pools-3"] | ||
thumbprint = "96203ED84246201C26A2F4360D7CBC36AC1D232D" | ||
uri = "poll://kcxzcv2fpsxkn6tk9u6d/" | ||
machine_policy_id = "machinepolicies-1" | ||
upgrade_locked = true | ||
is_disabled = true | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,51 @@ | ||
package octopusdeploy | ||
|
||
import ( | ||
"context" | ||
"github.com/OctopusDeploy/go-octopusdeploy/v2/pkg/client" | ||
"github.com/OctopusDeploy/go-octopusdeploy/v2/pkg/machines" | ||
"github.com/hashicorp/terraform-plugin-sdk/v2/diag" | ||
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" | ||
"time" | ||
) | ||
|
||
func dataSourceKubernetesAgentWorkers() *schema.Resource { | ||
return &schema.Resource{ | ||
Description: "Provides information about existing kubernetes agent workers.", | ||
ReadContext: dataSourceKubernetesAgentWorkersRead, | ||
Schema: getKubernetesAgentWorkerDataSchema(), | ||
} | ||
} | ||
|
||
func dataSourceKubernetesAgentWorkersRead(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics { | ||
query := machines.WorkersQuery{ | ||
CommunicationStyles: []string{"KubernetesTentacle"}, | ||
HealthStatuses: expandArray(d.Get("health_statuses").([]interface{})), | ||
IDs: expandArray(d.Get("ids").([]interface{})), | ||
IsDisabled: d.Get("is_disabled").(bool), | ||
Name: d.Get("name").(string), | ||
PartialName: d.Get("partial_name").(string), | ||
ShellNames: expandArray(d.Get("shell_names").([]interface{})), | ||
Skip: d.Get("skip").(int), | ||
Take: d.Get("take").(int), | ||
Thumbprint: d.Get("thumbprint").(string), | ||
} | ||
|
||
client := m.(*client.Client) | ||
existingWorkers, err := client.Workers.Get(query) | ||
if err != nil { | ||
return diag.FromErr(err) | ||
} | ||
|
||
flattenedKubernetesAgents := []interface{}{} | ||
for _, worker := range existingWorkers.Items { | ||
flattenedKubernetesAgents = append(flattenedKubernetesAgents, flattenKubernetesAgentWorker(worker)) | ||
} | ||
|
||
err = d.Set("kubernetes_agent_workers", flattenedKubernetesAgents) | ||
if err != nil { | ||
return diag.FromErr(err) | ||
} | ||
d.SetId("KubernetesAgentWorkers " + time.Now().UTC().String()) | ||
return nil | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,79 @@ | ||
package octopusdeploy | ||
|
||
import ( | ||
"context" | ||
"github.com/OctopusDeploy/go-octopusdeploy/v2/pkg/client" | ||
"github.com/OctopusDeploy/go-octopusdeploy/v2/pkg/workers" | ||
"github.com/OctopusDeploy/terraform-provider-octopusdeploy/internal/errors" | ||
"github.com/hashicorp/terraform-plugin-sdk/v2/diag" | ||
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" | ||
) | ||
|
||
func resourceKubernetesAgentWorker() *schema.Resource { | ||
return &schema.Resource{ | ||
CreateContext: resourceKubernetesAgentWorkerCreate, | ||
DeleteContext: resourceKubernetesAgentWorkerDelete, | ||
Description: "This resource manages Kubernetes agent workers in Octopus Deploy.", | ||
Importer: getImporter(), | ||
ReadContext: resourceKubernetesAgentWorkerRead, | ||
Schema: getKubernetesAgentWorkerSchema(), | ||
UpdateContext: resourceKubernetesAgentWorkerUpdate, | ||
} | ||
} | ||
|
||
func resourceKubernetesAgentWorkerCreate(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics { | ||
worker := expandKubernetesAgentWorker(d) | ||
client := m.(*client.Client) | ||
createdWorker, err := workers.Add(client, worker) | ||
if err != nil { | ||
return diag.FromErr(err) | ||
} | ||
|
||
d.SetId(createdWorker.GetID()) | ||
return nil | ||
} | ||
|
||
func resourceKubernetesAgentWorkerRead(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics { | ||
client := m.(*client.Client) | ||
Worker, err := workers.GetByID(client, d.Get("space_id").(string), d.Id()) | ||
if err != nil { | ||
return errors.ProcessApiError(ctx, d, err, "kubernetes tentacle worker") | ||
} | ||
|
||
flattenedKubernetesAgentWorker := flattenKubernetesAgentWorker(Worker) | ||
for key, value := range flattenedKubernetesAgentWorker { | ||
if key != "id" { | ||
err := d.Set(key, value) | ||
if err != nil { | ||
return diag.FromErr(err) | ||
} | ||
} | ||
} | ||
|
||
return nil | ||
} | ||
|
||
func resourceKubernetesAgentWorkerDelete(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics { | ||
client := m.(*client.Client) | ||
if err := workers.DeleteByID(client, d.Get("space_id").(string), d.Id()); err != nil { | ||
return diag.FromErr(err) | ||
} | ||
d.SetId("") | ||
return nil | ||
} | ||
|
||
func resourceKubernetesAgentWorkerUpdate(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics { | ||
worker := expandKubernetesAgentWorker(d) | ||
client := m.(*client.Client) | ||
|
||
worker.ID = d.Id() | ||
|
||
updatedWorker, err := workers.Update(client, worker) | ||
if err != nil { | ||
return diag.FromErr(err) | ||
} | ||
|
||
d.SetId(updatedWorker.GetID()) | ||
|
||
return nil | ||
} |
Oops, something went wrong.