-
Notifications
You must be signed in to change notification settings - Fork 67
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
Allow Kubernetes Agent to be registered as a worker #655
Changes from all commits
e44242f
4bfd2d8
74eb654
cc23624
e3b972f
cea6f0f
e60707a
72fd4c7
46c29f2
c183325
cb50746
949a1b6
b04c7ea
577db6a
6432d3b
ae82ee0
3955a95
9215277
3153a42
ea9b891
142eeeb
1631a56
fcd96a8
c73f5e4
133eb2b
7ef0bb6
8bdcb0b
1d7e1cd
b316ba8
8c7d0c0
140a672
fbae2c2
a4ffcd1
653b443
63b0412
8db84aa
5cecf88
0dc91ee
7e4a4d7
318d6b9
a7cfbf9
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
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) | ||
|
||
|
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. | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Most other targets have thumbprint as optional. This is probably required for the agent vs other targets but just want to raise it to double check this is correct. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. It is required here because of the way the Kubernetes agent is installed as a polling Tentacle. Normally the agent sends its own thumbprint to Octopus server during installation where it registers itself as a target/worker. However, in the case of Terraform the resource in Octopus server is being created first so the exact thumbprint must be known ahead of time. |
||
- `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> | ||
``` |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
terraform import [options] octopusdeploy_kubernetes_agent_worker.<name> <machine-id> |
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 | ||
} |
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 | ||
} |
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") | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Is there any reason why |
||
} | ||
|
||
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 | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Do we have docs in other places that give examples on how to use this terraform provider in conjunction with the helm provider to actually create the kubernetes agent/worker?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
no - not yet - we'll make docs along the lines of those used for the deployment-target docs