From cbdf0d6d013a559087bc15fd3c1449fe53506bf2 Mon Sep 17 00:00:00 2001 From: Thomas Felix Date: Wed, 4 Nov 2026 11:47:02 +0100 Subject: [PATCH] feat(client): report whether a binding waits for approval With four-eyes approval on, meshStack keeps a binding created through the API pending until a person approves it in meshPanel. Workspace and project bindings now carry "status.approval", ASSIGNED or PENDING, so the Terraform provider can tell its users. Group bindings get a status for this. BD-2877 Co-Authored-By: Claude Opus 5.5 --- client/binding_status.go | 23 +++++++++++++++++++++++ client/project_group_binding.go | 2 ++ client/project_user_binding.go | 4 +++- client/workspace_group_binding.go | 2 ++ 4 files changed, 30 insertions(+), 1 deletion(-) create mode 100644 client/binding_status.go diff --git a/client/binding_status.go b/client/binding_status.go new file mode 100644 index 0000000..fb084ab --- /dev/null +++ b/client/binding_status.go @@ -0,0 +1,23 @@ +package client + +import "github.com/meshcloud/meshstack-cli/client/types/enum" + +type MeshBindingApproval string + +var ( + MeshBindingApprovals = enum.Enum[MeshBindingApproval]{} + MeshBindingApprovalAssigned = MeshBindingApprovals.Entry("ASSIGNED") + MeshBindingApprovalPending = MeshBindingApprovals.Entry("PENDING") +) + +type MeshGroupBindingStatus struct { + Approval enum.Entry[MeshBindingApproval] `json:"approval,omitempty" tfsdk:"approval"` +} + +func (s *MeshGroupBindingStatus) WaitsForApproval() bool { + return s != nil && s.Approval == MeshBindingApprovalPending +} + +func (s *MeshUserBindingStatus) WaitsForApproval() bool { + return s != nil && s.Approval == MeshBindingApprovalPending +} diff --git a/client/project_group_binding.go b/client/project_group_binding.go index f0f2d27..5920412 100644 --- a/client/project_group_binding.go +++ b/client/project_group_binding.go @@ -9,6 +9,8 @@ import ( type MeshProjectGroupBinding struct { MeshProjectBinding + + Status *MeshGroupBindingStatus `json:"status,omitempty" tfsdk:"status"` } type MeshProjectGroupBindingClient interface { diff --git a/client/project_user_binding.go b/client/project_user_binding.go index bf13217..7bd62cb 100644 --- a/client/project_user_binding.go +++ b/client/project_user_binding.go @@ -4,6 +4,7 @@ import ( "context" "github.com/meshcloud/meshstack-cli/client/internal" + "github.com/meshcloud/meshstack-cli/client/types/enum" "github.com/meshcloud/meshstack-cli/internal/http" ) @@ -14,7 +15,8 @@ type MeshProjectUserBinding struct { } type MeshUserBindingStatus struct { - UserDisabled bool `json:"userDisabled" tfsdk:"user_disabled"` + UserDisabled bool `json:"userDisabled" tfsdk:"user_disabled"` + Approval enum.Entry[MeshBindingApproval] `json:"approval,omitempty" tfsdk:"approval"` } type MeshProjectUserBindingClient interface { diff --git a/client/workspace_group_binding.go b/client/workspace_group_binding.go index 4c4da9c..d2e4bc5 100644 --- a/client/workspace_group_binding.go +++ b/client/workspace_group_binding.go @@ -9,6 +9,8 @@ import ( type MeshWorkspaceGroupBinding struct { MeshWorkspaceBinding + + Status *MeshGroupBindingStatus `json:"status,omitempty" tfsdk:"status"` } type MeshWorkspaceGroupBindingClient interface {