Documentation
¶
Index ¶
- Constants
- Variables
- func AllAuthTypes() []string
- func FormatQueryDuration(d time.Duration) string
- func NormalizeSaslMechanism(mechanism string) string
- type ACLMapping
- type AWSClientInformation
- type Acls
- type AuthMethodConfig
- type AuthType
- type BastionHostRequest
- type BrokerType
- type CloudWatchTimeWindow
- type ClusterAuth
- type ClusterMetrics
- type ClusterNetworking
- type ClusterPlanInputs
- type ClusterSizing
- type ClusterType
- type ClusterTypeDecision
- type ConnectorSummary
- type CostAggregate
- type CostInformation
- type CostMetadata
- type CostQueryInfo
- type CostQueryTimePeriod
- type Credentials
- type DiscoveredClient
- type DiscoveredCluster
- type DiscoveredRegion
- type ExtOutboundClusterKafkaBroker
- type ExtOutboundClusterKafkaEndpoint
- type FieldCitation
- type GatewayResource
- type GatewaySpec
- type GlueSchema
- type GlueSchemaRegistryInformation
- type GlueSchemaRegistryMigrationConfig
- type GlueSchemaVersion
- type HardLimitTrigger
- type IAMConfig
- type JolokiaAuthConfig
- type JolokiaConfig
- type JolokiaTLSConfig
- type KafkaAdminClientInformation
- type KcpBuildInfo
- type MSKSourcesState
- type Manifest
- type MetricAggregate
- type MetricBackend
- type MetricMetadata
- type MetricQueryInfo
- type MigrateAclsRequest
- type MigrateGlueSchemasRequest
- type MigrateSchemasRequest
- type MigrationConfig
- type MigrationInfraTerraformModule
- type MigrationInfraTerraformProject
- type MigrationScriptsTerraformFolder
- type MigrationScriptsTerraformProject
- type MigrationState
- type MigrationType
- type MigrationWizardRequest
- type MirrorTopicsRequest
- type Networking
- type NetworkingDecision
- type OSKClusterAuth
- type OSKClusterMetadata
- type OSKCredentialMetadata
- type OSKCredentials
- type OSKDiscoveredCluster
- type OSKSourcesState
- type OpenQuestion
- type Plan
- type PlanHeader
- type PlanInputs
- type PlanInputsResolved
- type ProcessedAggregates
- type ProcessedCluster
- type ProcessedClusterMetrics
- type ProcessedCost
- type ProcessedCostBreakdown
- type ProcessedMSKSource
- type ProcessedMetric
- type ProcessedOSKCluster
- type ProcessedOSKSource
- type ProcessedRegion
- type ProcessedRegionCosts
- type ProcessedSource
- type ProcessedState
- type PrometheusAuthConfig
- type PrometheusConfig
- type PrometheusTLSConfig
- type RegionAuth
- type ReverseProxyRequest
- type Route
- type RouteFence
- type RouteSecurity
- type RouteSecurityAuthentication
- type RouteSecurityConfig
- type RouteStreamingDomain
- type RuleEvaluation
- type RuleOutcome
- type SASLPlainConfig
- type SASLScramConfig
- type SchemaRegistriesState
- type SchemaRegistryAuthType
- type SchemaRegistryExporterConfig
- type SchemaRegistryInformation
- type SelfManagedConnector
- type SelfManagedConnectors
- type ServiceCostAggregates
- type SizingMathDetail
- type SourceClusterSummary
- type SourceEnvironment
- type SourceType
- type State
- func (s *State) GetClusterByArn(clusterArn string) (*DiscoveredCluster, error)
- func (s *State) GetOSKClusterByID(id string) (*OSKDiscoveredCluster, error)
- func (s *State) PersistStateFile(stateFile string) error
- func (s *State) UpsertDiscoveredClients(regionName string, clusterName string, discoveredClients []DiscoveredClient) error
- func (s *State) UpsertRegion(newRegion DiscoveredRegion)
- func (s *State) WriteReportCommands(filePath string, stateFilePath string) error
- func (s *State) WriteToFile(filePath string) error
- type StreamingDomain
- type Subject
- type SubnetInfo
- type TLSConfig
- type TargetClusterWizardRequest
- type TerraformFiles
- type TerraformOutput
- type TerraformOutputOld
- type TerraformOutputValue
- type TerraformState
- type TerraformVariable
- type TopicDetails
- type TopicSummary
- type Topics
- type Topology
- type UnauthenticatedPlaintextConfig
- type UnauthenticatedTLSConfig
Constants ¶
const ( StateUninitialized = "uninitialized" StateInitialized = "initialized" StateLagsOk = "lags_ok" StateFenced = "fenced" StatePromoted = "promoted" StateSwitched = "switched" )
FSM State constants
const ( EventInitialize = "initialize" EventWaitForLags = "wait_for_lags" EventFence = "fence" EventPromote = "promote" EventSwitch = "switch" )
FSM Event constants
const ( ServiceAWSCertificateManager = "AWS Certificate Manager" ServiceMSK = "Amazon Managed Streaming for Apache Kafka" ServiceEC2Other = "EC2 - Other" ServiceELB = "Amazon Elastic Load Balancing" ServiceVPC = "Amazon Virtual Private Cloud" )
AWS service name constants — single source of truth for Cost Explorer service filters. Frontend constants (cmd/ui/frontend/src/constants/index.ts AWS_SERVICES) should mirror these.
const ( MigrateTopicsModeMirror = "mirror" MigrateTopicsModeNew = "new" )
MigrateTopicsMode values for MirrorTopicsRequest.Mode.
Variables ¶
var AclMap = map[string]ACLMapping{ "kafka-cluster:AlterCluster": { Operation: "Alter", ResourceType: "Cluster", RequiresPattern: false, }, "kafka-cluster:AlterClusterDynamicConfiguration": { Operation: "AlterConfigs", ResourceType: "Cluster", RequiresPattern: false, }, "kafka-cluster:AlterGroup": { Operation: "Read", ResourceType: "Group", RequiresPattern: true, }, "kafka-cluster:AlterTopic": { Operation: "Alter", ResourceType: "Topic", RequiresPattern: true, }, "kafka-cluster:AlterTopicDynamicConfiguration": { Operation: "AlterConfigs", ResourceType: "Topic", RequiresPattern: true, }, "kafka-cluster:AlterTransactionalId": { Operation: "Write", ResourceType: "TransactionalId", RequiresPattern: true, }, "kafka-cluster:CreateTopic": { Operation: "Create", ResourceType: "Topic", RequiresPattern: true, }, "kafka-cluster:DeleteGroup": { Operation: "Delete", ResourceType: "Group", RequiresPattern: true, }, "kafka-cluster:DeleteTopic": { Operation: "Delete", ResourceType: "Topic", RequiresPattern: true, }, "kafka-cluster:DescribeCluster": { Operation: "Describe", ResourceType: "Cluster", RequiresPattern: false, }, "kafka-cluster:DescribeClusterDynamicConfiguration": { Operation: "DescribeConfigs", ResourceType: "Cluster", RequiresPattern: false, }, "kafka-cluster:DescribeGroup": { Operation: "Describe", ResourceType: "Group", RequiresPattern: true, }, "kafka-cluster:DescribeTopic": { Operation: "Describe", ResourceType: "Topic", RequiresPattern: true, }, "kafka-cluster:DescribeTopicDynamicConfiguration": { Operation: "DescribeConfigs", ResourceType: "Topic", RequiresPattern: true, }, "kafka-cluster:DescribeTransactionalId": { Operation: "Describe", ResourceType: "TransactionalId", RequiresPattern: true, }, "kafka-cluster:ReadData": { Operation: "Read", ResourceType: "Topic", RequiresPattern: true, }, "kafka-cluster:WriteData": { Operation: "Write", ResourceType: "Topic", RequiresPattern: true, }, "kafka-cluster:WriteDataIdempotently": { Operation: "IdempotentWrite", ResourceType: "Cluster", RequiresPattern: true, }, }
https://docs.aws.amazon.com/service-authorization/latest/reference/list_apachekafkaapisforamazonmskclusters.html https://docs.confluent.io/cloud/current/security/access-control/acl.html#acl-resources-and-operations-for-ccloud-summary
Functions ¶
func AllAuthTypes ¶
func AllAuthTypes() []string
AllAuthTypes returns all possible AuthType values as strings This can be called statically without needing an AuthType instance
func FormatQueryDuration ¶ added in v0.8.0
FormatQueryDuration formats a duration for display, using days when >= 24h. Examples: "5m", "2h30m", "7d2h", "30d".
func NormalizeSaslMechanism ¶ added in v0.8.0
NormalizeSaslMechanism converts shorthand mechanism values (e.g. "SHA256") to the Kafka-standard format (e.g. "SCRAM-SHA-256"). Returns empty string for empty input.
Types ¶
type ACLMapping ¶ added in v0.2.1
type AWSClientInformation ¶ added in v0.4.0
type AWSClientInformation struct {
MskClusterConfig kafkatypes.Cluster `json:"msk_cluster_config"`
ClientVpcConnections []kafkatypes.ClientVpcConnection `json:"client_vpc_connections"`
ClusterOperations []kafkatypes.ClusterOperationV2Summary `json:"cluster_operations"`
Nodes []kafkatypes.NodeInfo `json:"nodes"`
ScramSecrets []string `json:"ScramSecrets"`
BootstrapBrokers kafka.GetBootstrapBrokersOutput `json:"bootstrap_brokers"`
Policy kafka.GetClusterPolicyOutput `json:"policy"`
CompatibleVersions kafka.GetCompatibleKafkaVersionsOutput `json:"compatible_versions"`
ClusterNetworking ClusterNetworking `json:"cluster_networking"`
Connectors []ConnectorSummary `json:"connectors"`
}
func (*AWSClientInformation) GetBootstrapBrokersForAuthType ¶ added in v0.4.0
func (c *AWSClientInformation) GetBootstrapBrokersForAuthType(authType AuthType) ([]string, error)
Returns only one bootstrap broker per authentication type.
type Acls ¶ added in v0.2.1
type Acls struct {
ResourceType string `json:"ResourceType"`
ResourceName string `json:"ResourceName"`
ResourcePatternType string `json:"ResourcePatternType"`
Principal string `json:"Principal"`
Host string `json:"Host"`
Operation string `json:"Operation"`
PermissionType string `json:"PermissionType"`
}
Preferred over sarama.ResourceAcls because it is flattened vs sarama's nested structure.
type AuthMethodConfig ¶ added in v0.2.7
type AuthMethodConfig struct {
IAM *IAMConfig `yaml:"iam,omitempty"`
SASLScram *SASLScramConfig `yaml:"sasl_scram,omitempty"`
SASLPlain *SASLPlainConfig `yaml:"sasl_plain,omitempty"`
TLS *TLSConfig `yaml:"tls,omitempty"`
UnauthenticatedTLS *UnauthenticatedTLSConfig `yaml:"unauthenticated_tls,omitempty"`
UnauthenticatedPlaintext *UnauthenticatedPlaintextConfig `yaml:"unauthenticated_plaintext,omitempty"`
}
func (*AuthMethodConfig) MergeWith ¶ added in v0.4.0
func (amc *AuthMethodConfig) MergeWith(existing AuthMethodConfig)
MergeWith preserves existing auth configurations only for auth methods that still exist in the new config
type AuthType ¶
type AuthType string
AuthType represents the different authentication types supported by MSK clusters
const ( AuthTypeSASLSCRAM AuthType = "SASL/SCRAM" AuthTypeIAM AuthType = "SASL/IAM" AuthTypeTLS AuthType = "TLS" AuthTypeUnauthenticatedPlaintext AuthType = "Unauthenticated (Plaintext)" AuthTypeUnauthenticatedTLS AuthType = "Unauthenticated (TLS Encryption)" AuthTypeSASLPlain AuthType = "SASL/PLAIN" )
type BastionHostRequest ¶ added in v0.8.0
type BrokerType ¶ added in v0.6.4
type BrokerType string
----- metrics -----
const ( BrokerTypeExpress BrokerType = "express" BrokerTypeStandard BrokerType = "standard" )
type CloudWatchTimeWindow ¶ added in v0.4.0
type ClusterAuth ¶ added in v0.4.0
type ClusterAuth struct {
Name string `yaml:"name"`
Arn string `yaml:"arn"`
AuthMethod AuthMethodConfig `yaml:"auth_method"`
}
func (ClusterAuth) GetAuthMethods ¶ added in v0.4.0
func (ce ClusterAuth) GetAuthMethods() []AuthType
Gets a list of the authentication method(s) selected in the `creds.yaml` file generated during discovery.
func (ClusterAuth) GetSelectedAuthType ¶ added in v0.4.0
func (ce ClusterAuth) GetSelectedAuthType() (AuthType, error)
type ClusterMetrics ¶
type ClusterMetrics struct {
MetricMetadata MetricMetadata `json:"metadata"`
Results []cloudwatchtypes.MetricDataResult `json:"results"`
QueryInfo []MetricQueryInfo `json:"query_info"`
}
type ClusterNetworking ¶ added in v0.2.2
type ClusterNetworking struct {
VpcId string `json:"vpc_id"`
SubnetIds []string `json:"subnet_ids"`
SecurityGroups []string `json:"security_groups"`
Subnets []SubnetInfo `json:"subnets"`
}
type ClusterPlanInputs ¶ added in v0.8.1
type ClusterPlanInputs struct {
SLATarget *string `yaml:"sla_target,omitempty" json:"sla_target,omitempty"`
HeadroomFraction *float64 `yaml:"headroom_fraction,omitempty" json:"headroom_fraction,omitempty"`
SpikyWorkloadRatio *float64 `yaml:"spiky_workload_ratio,omitempty" json:"spiky_workload_ratio,omitempty"`
EnforceSchemasAtTheBroker *bool `yaml:"enforce_schemas_at_the_broker,omitempty" json:"enforce_schemas_at_the_broker,omitempty"`
RequiresHighThroughputRESTProduceAPI *bool `yaml:"requires_high_throughput_rest_produce_api,omitempty" json:"requires_high_throughput_rest_produce_api,omitempty"`
Requires9995SLAWithinSingleZone *bool `yaml:"requires_99_95_sla_within_a_single_zone,omitempty" json:"requires_99_95_sla_within_a_single_zone,omitempty"`
TargetCloud *string `yaml:"target_cloud,omitempty" json:"target_cloud,omitempty"`
ExistingVPCConnectivity *string `yaml:"existing_vpc_connectivity,omitempty" json:"existing_vpc_connectivity,omitempty"`
CCEgressRequired *bool `yaml:"cc_egress_required,omitempty" json:"cc_egress_required,omitempty"`
ProjectedPNIGatewayCount *int `yaml:"projected_pni_gateway_count,omitempty" json:"projected_pni_gateway_count,omitempty"`
}
ClusterPlanInputs is the per-cluster override slice of PlanInputs. All fields are optional pointers so the resolver can detect "not set for this cluster" and fall back to the global default.
**Intentionally global-only** (not in this struct):
- `sizing_percentile` — the Appendix A1 preamble names a single percentile for the whole plan; mixing P95 + P99 in one run would desync the prose. If a customer genuinely needs different percentiles per cluster, run the plan twice with different inputs and merge — explicit beats invisible.
type ClusterSizing ¶ added in v0.8.1
type ClusterSizing struct {
ClusterID string `json:"cluster_id"`
// SizedInMBps / SizedOutMBps hold the throughput at the configured
// `sizing_percentile` (default p95; alternates p99, max). Read
// `plan.inputs.sizing_percentile` to see which percentile was used.
SizedInMBps float64 `json:"sized_in_mbps"`
SizedOutMBps float64 `json:"sized_out_mbps"`
PeakInMBps float64 `json:"peak_in_mbps"`
PeakOutMBps float64 `json:"peak_out_mbps"`
UserPartitions int `json:"user_partitions"`
InternalPartitions int `json:"internal_partitions"`
IngressRatio float64 `json:"ingress_ratio"`
EgressRatio float64 `json:"egress_ratio"`
PartitionRatio float64 `json:"partition_ratio"`
MaxRatio float64 `json:"max_ratio"`
// MaxRatioDriver names which of the three dimensions produced MaxRatio:
// "ingress", "egress", or "partitions". Tracked at compute time so the
// renderer never has to do a float-equality comparison to recover it.
MaxRatioDriver string `json:"max_ratio_driver,omitempty"`
SizedECKU int `json:"sized_ecku"`
SLAFloorECKU int `json:"sla_floor_ecku"`
FinalECKU int `json:"final_ecku"`
PeakBurstInRatio float64 `json:"peak_burst_in_ratio"`
PeakBurstOutRatio float64 `json:"peak_burst_out_ratio"`
PeakBurstECKU int `json:"peak_burst_ecku"`
PeakBurstPctOfPLCap float64 `json:"peak_burst_pct_of_pl_cap"`
SpikyIngress bool `json:"spiky_ingress"`
SpikyEgress bool `json:"spiky_egress"`
Citations []FieldCitation `json:"citations"`
// Degraded is true when throughput metrics were missing from the state
// file. Numbers fall back to the SLA floor and the renderer surfaces
// the gap rather than silently asserting a sized eCKU.
Degraded bool `json:"degraded,omitempty"`
DegradedReason string `json:"degraded_reason,omitempty"`
// InputsMissing names load-bearing scan signals that weren't
// available when sizing was computed (e.g. `"topics"`, `"acls"`,
// `"brokers"`). The verdict from downstream decisions may still be
// solid if driven by customer-declared flags; the renderer reads
// this list to mark sizing as provisional rather than blanket-
// deferring the cluster.
InputsMissing []string `json:"inputs_missing,omitempty"`
}
type ClusterType ¶ added in v0.8.1
type ClusterType string
ClusterType represents the Confluent Cloud cluster verdict. Freight is in the Confluent product but not produced by DecideClusterType today — when a rule that emits Freight lands, add the constant then.
const ( ClusterTypeEnterprise ClusterType = "Enterprise" ClusterTypeDedicated ClusterType = "Dedicated" )
func (ClusterType) IsValid ¶ added in v0.8.1
func (c ClusterType) IsValid() bool
type ClusterTypeDecision ¶ added in v0.8.1
type ClusterTypeDecision struct {
ClusterID string `json:"cluster_id"`
Verdict ClusterType `json:"verdict"`
Triggers []HardLimitTrigger `json:"triggers,omitempty"`
// Topology is populated for Dedicated verdicts (MZ default; SZ when the
// 99.95% single-zone SLA rule fires). Empty for Enterprise.
Topology Topology `json:"topology,omitempty"`
// FinalCKU mirrors the sizing's FinalECKU under the Dedicated unit
// (Confluent Kafka Unit). Set only when Verdict == Dedicated.
FinalCKU *int `json:"final_cku,omitempty"`
// InputsMissing names load-bearing scan / plan-input signals that
// weren't available when this decision was computed (e.g. `"topics"`,
// `"acls"`). **Observational only** — set post-hoc in
// `PlanService.Build` after `DecideClusterType` has already run; the
// Verdict itself was computed against whatever inputs WERE present.
// Markdown reads this to flag the sizing column as provisional;
// JSON consumers can branch on the list.
InputsMissing []string `json:"inputs_missing,omitempty"`
// EvaluatedRules is the full audit trail for the hard-limit catalog
// against this cluster — every rule's outcome (fired / not_fired /
// skipped) with evidence. Read-only audit shape; the renderer
// surfaces it as a collapsed appendix.
EvaluatedRules []RuleEvaluation `json:"evaluated_rules,omitempty"`
}
type ConnectorSummary ¶ added in v0.4.0
type ConnectorSummary struct {
ConnectorArn string `json:"connector_arn"`
ConnectorName string `json:"connector_name"`
ConnectorState string `json:"connector_state"`
CreationTime string `json:"creation_time"`
KafkaCluster kafkaconnecttypes.ApacheKafkaClusterDescription `json:"kafka_cluster"`
KafkaClusterClientAuthentication kafkaconnecttypes.KafkaClusterClientAuthenticationDescription `json:"kafka_cluster_client_authentication"`
Capacity kafkaconnecttypes.CapacityDescription `json:"capacity"`
Plugins []kafkaconnecttypes.PluginDescription `json:"plugins"`
ConnectorConfiguration map[string]string `json:"connector_configuration"`
}
type CostAggregate ¶ added in v0.4.0
type CostInformation ¶ added in v0.4.0
type CostInformation struct {
CostMetadata CostMetadata `json:"metadata"`
CostResults []costexplorertypes.ResultByTime `json:"results"`
QueryInfo CostQueryInfo `json:"query_info"`
}
type CostMetadata ¶ added in v0.4.0
type CostQueryInfo ¶ added in v0.6.9
type CostQueryInfo struct {
TimePeriod CostQueryTimePeriod `json:"time_period"`
Granularity string `json:"granularity"`
Services []string `json:"services"`
Regions []string `json:"regions"`
GroupBy []string `json:"group_by"`
Metrics []string `json:"metrics"`
Tags map[string][]string `json:"tags,omitempty"`
AWSCLICommand string `json:"aws_cli_command"`
ConsoleURL string `json:"console_url"`
AggregationNote string `json:"aggregation_note"`
}
type CostQueryTimePeriod ¶ added in v0.6.9
----- costs -----
type Credentials ¶ added in v0.2.7
type Credentials struct {
Regions []RegionAuth `yaml:"regions"`
}
func NewCredentialsFrom ¶ added in v0.4.0
func NewCredentialsFrom(fromCredentials *Credentials) *Credentials
func NewCredentialsFromFile ¶ added in v0.4.0
func NewCredentialsFromFile(credentialsYamlPath string) (*Credentials, []error)
func (*Credentials) FindClusterByArn ¶ added in v0.7.0
func (c *Credentials) FindClusterByArn(arn string) (*ClusterAuth, error)
FindClusterByArn searches all regions for a cluster matching the given ARN.
func (*Credentials) ToYaml ¶ added in v0.2.7
func (c *Credentials) ToYaml() ([]byte, error)
func (*Credentials) UpsertRegion ¶ added in v0.4.0
func (c *Credentials) UpsertRegion(newRegion RegionAuth)
UpsertRegion inserts a new region or updates an existing one by name Automatically preserves existing cluster auth configurations
func (Credentials) Validate ¶ added in v0.2.7
func (c Credentials) Validate() (bool, []error)
func (*Credentials) WriteToFile ¶ added in v0.2.7
func (c *Credentials) WriteToFile(filePath string) error
type DiscoveredClient ¶ added in v0.5.2
type DiscoveredCluster ¶ added in v0.4.0
type DiscoveredCluster struct {
Name string `json:"name"`
Arn string `json:"arn"`
Region string `json:"region"`
ClusterMetrics ClusterMetrics `json:"metrics"`
AWSClientInformation AWSClientInformation `json:"aws_client_information"`
KafkaAdminClientInformation KafkaAdminClientInformation `json:"kafka_admin_client_information"`
DiscoveredClients []DiscoveredClient `json:"discovered_clients"`
}
type DiscoveredRegion ¶ added in v0.4.0
type DiscoveredRegion struct {
Name string `json:"name"`
Configurations []kafka.DescribeConfigurationRevisionOutput `json:"configurations"`
Costs CostInformation `json:"costs"`
Clusters []DiscoveredCluster `json:"clusters"`
// internal only - exclude from JSON output
ClusterArns []string `json:"-"`
}
func (*DiscoveredRegion) RefreshClusters ¶ added in v0.4.0
func (dr *DiscoveredRegion) RefreshClusters(newClusters []DiscoveredCluster)
RefreshClusters replaces the cluster list but merges KafkaAdminClientInformation from existing clusters New discoveries take precedence over old values (only uses old values when new values are empty/nil)
type ExtOutboundClusterKafkaBroker ¶ added in v0.5.0
type ExtOutboundClusterKafkaBroker struct {
ID string `json:"broker_id"`
SubnetID string `json:"subnet_id"`
Endpoints []ExtOutboundClusterKafkaEndpoint `json:"endpoints"`
}
type ExtOutboundClusterKafkaEndpoint ¶ added in v0.5.0
type FieldCitation ¶ added in v0.8.1
type GatewayResource ¶ added in v0.7.0
type GatewayResource struct {
Spec GatewaySpec `yaml:"spec"`
}
type GatewaySpec ¶ added in v0.7.0
type GatewaySpec struct {
StreamingDomains []StreamingDomain `yaml:"streamingDomains"`
Routes []Route `yaml:"routes"`
}
type GlueSchema ¶ added in v0.7.2
type GlueSchema struct {
SchemaName string `json:"schema_name"`
SchemaArn string `json:"schema_arn"`
DataFormat string `json:"data_format"`
Versions []GlueSchemaVersion `json:"versions"`
Latest *GlueSchemaVersion `json:"latest_version"`
}
type GlueSchemaRegistryInformation ¶ added in v0.7.2
type GlueSchemaRegistryInformation struct {
RegistryName string `json:"registry_name"`
RegistryArn string `json:"registry_arn"`
Region string `json:"region"`
Schemas []GlueSchema `json:"schemas"`
}
type GlueSchemaRegistryMigrationConfig ¶ added in v0.7.2
type GlueSchemaRegistryMigrationConfig struct {
Migrate bool `json:"migrate"`
RegistryName string `json:"registry_name"`
Region string `json:"region"`
Schemas []GlueSchema `json:"schemas"`
}
type GlueSchemaVersion ¶ added in v0.7.2
type HardLimitTrigger ¶ added in v0.8.1
type HardLimitTrigger struct {
RowID string `json:"row_id"`
Description string `json:"description"`
Evidence string `json:"evidence"`
// CustomerDeclared marks rules whose only signal is a customer-set
// `plan-inputs.yaml` flag. Renderer surfaces a cost callout on these
// so a wrong `true` doesn't quietly flip the verdict from Enterprise
// to Dedicated (Dedicated has a higher monthly cost).
CustomerDeclared bool `json:"customer_declared,omitempty"`
}
type JolokiaAuthConfig ¶ added in v0.8.0
type JolokiaAuthConfig struct {
Username string `yaml:"username"`
Password string `yaml:"password"`
}
JolokiaAuthConfig contains authentication credentials for Jolokia
type JolokiaConfig ¶ added in v0.8.0
type JolokiaConfig struct {
Endpoints []string `yaml:"endpoints"`
Auth *JolokiaAuthConfig `yaml:"auth,omitempty"`
TLS *JolokiaTLSConfig `yaml:"tls,omitempty"`
}
JolokiaConfig contains Jolokia monitoring configuration for a cluster
type JolokiaTLSConfig ¶ added in v0.8.0
type JolokiaTLSConfig struct {
CACert string `yaml:"ca_cert,omitempty"`
InsecureSkipVerify bool `yaml:"insecure_skip_verify,omitempty"`
}
JolokiaTLSConfig contains TLS configuration for Jolokia connections
type KafkaAdminClientInformation ¶ added in v0.4.0
type KafkaAdminClientInformation struct {
ClusterID string `json:"cluster_id"`
DiscoveredBrokers []string `json:"discovered_brokers,omitempty"`
SaslMechanism string `json:"sasl_mechanism,omitempty"`
Topics *Topics `json:"topics"`
Acls []Acls `json:"acls"`
SelfManagedConnectors *SelfManagedConnectors `json:"self_managed_connectors"`
}
func (*KafkaAdminClientInformation) CalculateTopicSummary ¶ added in v0.4.0
func (c *KafkaAdminClientInformation) CalculateTopicSummary() TopicSummary
func (*KafkaAdminClientInformation) MergeFrom ¶ added in v0.6.0
func (c *KafkaAdminClientInformation) MergeFrom(other KafkaAdminClientInformation)
MergeFrom merges values from another KafkaAdminClientInformation New discoveries are added, old data is preserved, duplicates are merged (new takes precedence)
func (*KafkaAdminClientInformation) SetTopics ¶ added in v0.4.0
func (c *KafkaAdminClientInformation) SetTopics(topicDetails []TopicDetails)
type KcpBuildInfo ¶ added in v0.3.1
type MSKSourcesState ¶ added in v0.8.0
type MSKSourcesState struct {
Regions []DiscoveredRegion `json:"regions"`
}
MSKSourcesState contains all MSK-specific data
type Manifest ¶
type Manifest struct {
MigrationInfraType MigrationType `json:"migration_infra_type"`
}
type MetricAggregate ¶ added in v0.4.0
type MetricAggregate struct {
Average *float64 `json:"avg"`
Maximum *float64 `json:"max"`
Minimum *float64 `json:"min"`
P95 *float64 `json:"p95"`
P99 *float64 `json:"p99"`
// Count is the sample size of the aggregate. With `omitempty`,
// "unknown" and "exactly 0 samples" both render as absent — treat
// absence as "no sample data".
Count int `json:"count,omitempty"`
}
type MetricBackend ¶ added in v0.8.0
type MetricBackend string
MetricBackend represents the metrics collection backend
const ( MetricBackendCloudWatch MetricBackend = "cloudwatch" MetricBackendJolokia MetricBackend = "jolokia" MetricBackendPrometheus MetricBackend = "prometheus" )
type MetricMetadata ¶ added in v0.4.0
type MetricMetadata struct {
ClusterType string `json:"cluster_type"`
NumberOfBrokerNodes int `json:"number_of_broker_nodes"`
KafkaVersion string `json:"kafka_version"`
BrokerAzDistribution string `json:"broker_az_distribution"`
EnhancedMonitoring string `json:"enhanced_monitoring"`
StartDate time.Time `json:"start_date"`
EndDate time.Time `json:"end_date"`
Period int32 `json:"period"`
FollowerFetching bool `json:"follower_fetching"`
InstanceType string `json:"instance_type"`
TieredStorage bool `json:"tiered_storage"`
BrokerType BrokerType `json:"broker_type"`
}
type MetricQueryInfo ¶ added in v0.6.9
type MetricQueryInfo struct {
MetricName string `json:"metric_name"`
SourceType MetricBackend `json:"source_type,omitempty"`
// CloudWatch fields
Namespace string `json:"namespace,omitempty"`
Dimensions string `json:"dimensions,omitempty"`
Statistic string `json:"statistic,omitempty"`
Period int32 `json:"period,omitempty"`
SearchExpression string `json:"search_expression,omitempty"`
MathExpression string `json:"math_expression,omitempty"`
AWSCLICommand string `json:"aws_cli_command,omitempty"`
ConsoleSourceJSON string `json:"console_source_json,omitempty"`
// Jolokia fields
MBeanPath string `json:"mbean_path,omitempty"`
JolokiaURL string `json:"jolokia_url,omitempty"`
// Prometheus fields
PromQLQuery string `json:"promql_query,omitempty"`
PrometheusURL string `json:"prometheus_url,omitempty"`
PrometheusMetricName string `json:"prometheus_metric_name,omitempty"`
// Shared fields
CurlCommand string `json:"curl_command,omitempty"` // Jolokia curl or Prometheus API curl
QueryDuration string `json:"query_duration,omitempty"`
AggregationNote string `json:"aggregation_note"`
}
type MigrateAclsRequest ¶ added in v0.5.2
type MigrateAclsRequest struct {
SelectedPrincipals []string `json:"selected_principals"`
TargetClusterId string `json:"target_cluster_id"`
TargetClusterRestEndpoint string `json:"target_cluster_rest_endpoint"`
PreventDestroy bool `json:"prevent_destroy"`
SourceType string `json:"source_type"`
ClusterId string `json:"cluster_id"`
// This is not sent by the UI payload but instead built by the API service before being passed on to the HCL service.
AclsByPrincipal map[string][]Acls `json:"-"`
}
type MigrateGlueSchemasRequest ¶ added in v0.7.2
type MigrateGlueSchemasRequest struct {
ConfluentCloudSchemaRegistryURL string `json:"confluent_cloud_schema_registry_url"`
GlueRegistries []GlueSchemaRegistryMigrationConfig `json:"glue_registries"`
}
type MigrateSchemasRequest ¶ added in v0.5.0
type MigrateSchemasRequest struct {
ConfluentCloudSchemaRegistryURL string `json:"confluent_cloud_schema_registry_url"`
SchemaRegistries []SchemaRegistryExporterConfig `json:"schema_registries"`
}
type MigrationConfig ¶ added in v0.7.0
type MigrationConfig struct {
MigrationId string `json:"migration_id"`
CurrentState string `json:"current_state"`
// Gateway configuration
KubeConfigPath string `json:"kube_config_path"`
// Source cluster configuration
SourceBootstrap string `json:"source_bootstrap"`
// Destination cluster configuration
ClusterBootstrap string `json:"cluster_bootstrap"`
ClusterId string `json:"cluster_id"`
ClusterRestEndpoint string `json:"cluster_rest_endpoint"`
ClusterLinkName string `json:"cluster_link_name"`
Topics []string `json:"topics"`
// Migration runtime data (populated during initialization)
ClusterLinkTopics []string `json:"cluster_link_topics"`
ClusterLinkConfigs map[string]string `json:"cluster_link_configs"`
// Operator intent: pause cluster-link consumer offset sync for the duration of execute.
// PauseConsumerOffsetSync records the operator's choice at init time.
// PauseConsumerOffsetSyncFlipped is set when kcp has executed the disable AlterConfigs and
// not yet restored — supports drift detection, idempotent resume, and remediation messaging.
PauseConsumerOffsetSync bool `json:"pause_consumer_offset_sync"`
PauseConsumerOffsetSyncFlipped bool `json:"pause_consumer_offset_sync_flipped"`
// Gateway CR configuration
InitialCrName string `json:"initial_cr_name"`
K8sNamespace string `json:"k8s_namespace"`
InitialCrYAML []byte `json:"initial_cr_yaml"`
FencedCrYAML []byte `json:"fenced_cr_yaml"`
SwitchoverCrYAML []byte `json:"switchover_cr_yaml"`
}
MigrationConfig holds all domain configuration for a migration This is pure data with no behavior - just fields that get serialized
type MigrationInfraTerraformModule ¶ added in v0.5.0
type MigrationInfraTerraformModule struct {
Name string `json:"name"`
MainTf string `json:"main.tf"`
VariablesTf string `json:"variables.tf"`
OutputsTf string `json:"outputs.tf"`
VersionsTf string `json:"versions.tf"`
AdditionalFiles map[string]string `json:"additional_files"`
}
MigrationInfraTerraformModule represents a Terraform module within the migration infrastructure configuration. Each module contains its own Terraform files and additional assets.
type MigrationInfraTerraformProject ¶ added in v0.5.0
type MigrationInfraTerraformProject struct {
MainTf string `json:"main.tf"`
ProvidersTf string `json:"providers.tf"`
VariablesTf string `json:"variables.tf"`
OutputsTf string `json:"outputs.tf"`
ReadmeMd string `json:"README.md"`
InputsAutoTfvars string `json:"inputs.auto.tfvars"`
Modules []MigrationInfraTerraformModule `json:"modules"`
}
MigrationInfraTerraformProject represents the complete Terraform configuration for migration infrastructure. "project" = root config + modules
type MigrationScriptsTerraformFolder ¶ added in v0.5.0
type MigrationScriptsTerraformFolder struct {
Name string `json:"name"`
MainTf string `json:"main.tf"`
ProvidersTf string `json:"providers.tf"`
VariablesTf string `json:"variables.tf"`
InputsAutoTfvars string `json:"inputs.auto.tfvars"`
AdditionalFiles map[string]string `json:"additional_files,omitempty"`
}
MigrationScriptsTerraformFolder represents a Terraform folder within the migration scripts
type MigrationScriptsTerraformProject ¶ added in v0.5.0
type MigrationScriptsTerraformProject struct {
// not really a module, but its the same structure
Folders []MigrationScriptsTerraformFolder `json:"modules"`
}
MigrationScriptsTerraformProject represents the complete Terraform configuration for migration scripts
type MigrationState ¶ added in v0.7.0
type MigrationState struct {
Migrations []MigrationConfig `json:"migrations"`
KcpBuildInfo KcpBuildInfo `json:"kcp_build_info"`
Timestamp time.Time `json:"timestamp"`
}
MigrationState represents the migration state file structure This is a dedicated state file for migration commands (init, execute, list)
func NewMigrationState ¶ added in v0.7.0
func NewMigrationState() *MigrationState
NewMigrationState creates a new empty MigrationState with metadata
func NewMigrationStateFromFile ¶ added in v0.7.0
func NewMigrationStateFromFile(filePath string) (*MigrationState, error)
NewMigrationStateFromFile loads a MigrationState from a JSON file
func (*MigrationState) GetMigrationById ¶ added in v0.7.0
func (ms *MigrationState) GetMigrationById(migrationId string) (*MigrationConfig, error)
GetMigrationById retrieves a migration by its ID
func (*MigrationState) UpsertMigration ¶ added in v0.7.0
func (ms *MigrationState) UpsertMigration(config MigrationConfig)
UpsertMigration adds a new migration or updates an existing one by ID
func (*MigrationState) WriteToFile ¶ added in v0.7.0
func (ms *MigrationState) WriteToFile(filePath string) error
WriteToFile saves the MigrationState to a JSON file using atomic write
type MigrationType ¶ added in v0.5.0
type MigrationType int
const ( PublicMskEndpoints MigrationType = 1 ExternalOutboundClusterLink MigrationType = 2 ExternalOutboundClusterLinkPlaintext MigrationType = 3 JumpClusterSaslScram MigrationType = 4 JumpClusterIam MigrationType = 5 )
func ToMigrationType ¶ added in v0.5.0
func ToMigrationType(input string) (MigrationType, error)
func (MigrationType) IsValid ¶ added in v0.5.0
func (m MigrationType) IsValid() bool
func (MigrationType) RequiresSaslScram ¶ added in v0.8.0
func (m MigrationType) RequiresSaslScram() bool
type MigrationWizardRequest ¶ added in v0.5.0
type MigrationWizardRequest struct {
HasPublicEndpoints bool `json:"has_public_brokers"`
VpcId string `json:"vpc_id"`
UseJumpClusters bool `json:"use_jump_clusters"`
ExtOutboundSecurityGroupId string `json:"ext_outbound_security_group_id"`
ExtOutboundSubnetId string `json:"ext_outbound_subnet_id"`
ExtOutboundBrokers []ExtOutboundClusterKafkaBroker `json:"source_kafka_brokers"`
ExistingPrivateLinkVpceId string `json:"existing_private_link_vpce_id"`
HasExistingInternetGateway bool `json:"has_existing_internet_gateway"`
JumpClusterInstanceType string `json:"jump_cluster_instance_type"`
JumpClusterBrokerStorage int `json:"jump_cluster_broker_storage"`
JumpClusterBrokerSubnetCidr []string `json:"jump_cluster_broker_subnet_cidr"`
JumpClusterSetupHostSubnetCidr string `json:"jump_cluster_setup_host_subnet_cidr"`
JumpClusterAuthType string `json:"jump_cluster_auth_type"`
SourceClusterId string `json:"source_cluster_id"`
JumpClusterIamAuthRoleName string `json:"jump_cluster_iam_auth_role_name"`
SourceSaslScramBootstrapServers string `json:"source_sasl_scram_bootstrap_servers"`
SourceSaslScramMechanism string `json:"source_sasl_scram_mechanism"`
SourcePlaintextBootstrapServers string `json:"source_plaintext_bootstrap_servers"`
SourceSaslIamBootstrapServers string `json:"source_sasl_iam_bootstrap_servers"`
SourceRegion string `json:"source_region"`
TargetEnvironmentId string `json:"target_environment_id"`
TargetClusterId string `json:"target_cluster_id"`
TargetRestEndpoint string `json:"target_rest_endpoint"`
TargetBootstrapEndpoint string `json:"target_bootstrap_endpoint"`
ClusterLinkName string `json:"cluster_link_name"`
TargetClusterType string `json:"target_cluster_type"`
}
type MirrorTopicsRequest ¶ added in v0.5.0
type MirrorTopicsRequest struct {
// SelectedTopics is the legacy name-only list sent by the UI wizard. The CLI
// populates Topics instead; the HCL service falls back to SelectedTopics when
// Topics is empty (mirror-mode UI path only — new mode requires Topics).
SelectedTopics []string `json:"selected_topics"`
// Topics carries the full topic details (partitions, configs) needed by new mode.
// Not part of the JSON wire format — the CLI populates this from state directly.
Topics []TopicDetails `json:"-"`
ClusterLinkName string `json:"cluster_link_name"`
TargetClusterId string `json:"target_cluster_id"`
TargetClusterRestEndpoint string `json:"target_cluster_rest_endpoint"`
// Mode selects the generator: "mirror" emits confluent_kafka_mirror_topic
// resources; "new" emits confluent_kafka_topic resources with no data forward.
Mode string `json:"mode"`
IncludePatterns []string `json:"topics_include"`
ExcludePatterns []string `json:"topics_exclude"`
// SourceType and ClusterId identify the source cluster in the loaded state
// file. The UI wizard sends these as hidden fields so the API handler can
// hydrate Topics from state for --mode new. The CLI populates Topics
// directly and leaves these empty.
SourceType string `json:"source_type"`
ClusterId string `json:"cluster_id"`
}
MirrorTopicsRequest carries the inputs for `kcp create-asset migrate-topics` in both --mode mirror and --mode new. The name is kept for backward compatibility with the UI wire format; consider renaming to MigrateTopicsRequest in a future change.
type Networking ¶ added in v0.8.1
type Networking string
Networking represents the per-cluster networking verdict.
const ( NetworkingPrivateLink Networking = "PrivateLink" NetworkingPNI Networking = "PNI" NetworkingTransitGateway Networking = "TransitGateway" NetworkingVPCPeering Networking = "VPCPeering" )
func (Networking) IsValid ¶ added in v0.8.1
func (n Networking) IsValid() bool
type NetworkingDecision ¶ added in v0.8.1
type NetworkingDecision struct {
ClusterID string `json:"cluster_id"`
Verdict Networking `json:"verdict"`
PeakBurstECKU int `json:"peak_burst_ecku"`
PercentageOfCap float64 `json:"percentage_of_cap"`
Reason string `json:"reason"`
// InputsMissing — see ClusterTypeDecision.InputsMissing. Populated
// in lockstep so JSON consumers see the same gating signal on both
// decisions for an affected cluster. **JSON-consumer-only**: the
// markdown renderer reads the sister field on `ClusterTypeDecision`
// (and the same list on `ClusterSizing`) — this copy is here so
// downstream JSON branching doesn't need a cross-reference lookup.
InputsMissing []string `json:"inputs_missing,omitempty"`
}
type OSKClusterAuth ¶ added in v0.8.0
type OSKClusterAuth struct {
ID string `yaml:"id"`
BootstrapServers []string `yaml:"bootstrap_servers"`
AuthMethod AuthMethodConfig `yaml:"auth_method"`
InsecureSkipTLSVerify bool `yaml:"insecure_skip_tls_verify,omitempty"` // Only set true for test environments with self-signed certs
Metadata OSKCredentialMetadata `yaml:"metadata,omitempty"`
Jolokia *JolokiaConfig `yaml:"jolokia,omitempty"`
Prometheus *PrometheusConfig `yaml:"prometheus,omitempty"`
}
OSKClusterAuth contains authentication details for a single OSK cluster
func (OSKClusterAuth) GetAuthMethods ¶ added in v0.8.0
func (c OSKClusterAuth) GetAuthMethods() []AuthType
GetAuthMethods returns the enabled authentication methods for this cluster
func (OSKClusterAuth) GetSelectedAuthType ¶ added in v0.8.0
func (c OSKClusterAuth) GetSelectedAuthType() (AuthType, error)
GetSelectedAuthType returns the selected auth type for the cluster
func (OSKClusterAuth) HasJolokiaConfig ¶ added in v0.8.0
func (c OSKClusterAuth) HasJolokiaConfig() bool
HasJolokiaConfig returns true if the cluster has Jolokia configuration
func (OSKClusterAuth) HasPrometheusConfig ¶ added in v0.8.0
func (c OSKClusterAuth) HasPrometheusConfig() bool
HasPrometheusConfig returns true if the cluster has Prometheus configuration
type OSKClusterMetadata ¶ added in v0.8.0
type OSKClusterMetadata struct {
Environment string `json:"environment,omitempty"`
Location string `json:"location,omitempty"`
KafkaVersion string `json:"kafka_version,omitempty"`
Labels map[string]string `json:"labels,omitempty"`
LastScanned time.Time `json:"last_scanned"`
}
OSKClusterMetadata contains optional metadata about OSK clusters
type OSKCredentialMetadata ¶ added in v0.8.0
type OSKCredentialMetadata struct {
Environment string `yaml:"environment,omitempty"`
Location string `yaml:"location,omitempty"`
Labels map[string]string `yaml:"labels,omitempty"`
}
OSKCredentialMetadata allows users to add optional organizational metadata
type OSKCredentials ¶ added in v0.8.0
type OSKCredentials struct {
Clusters []OSKClusterAuth `yaml:"clusters"`
}
OSKCredentials represents the osk-credentials.yaml file
func NewOSKCredentialsFromFile ¶ added in v0.8.0
func NewOSKCredentialsFromFile(credentialsYamlPath string) (*OSKCredentials, []error)
NewOSKCredentialsFromFile loads OSK credentials from a YAML file
func (OSKCredentials) Validate ¶ added in v0.8.0
func (c OSKCredentials) Validate() (bool, []error)
Validate checks that the credentials file is valid
func (*OSKCredentials) WriteToFile ¶ added in v0.8.0
func (c *OSKCredentials) WriteToFile(filePath string) error
WriteToFile writes the credentials to a YAML file
type OSKDiscoveredCluster ¶ added in v0.8.0
type OSKDiscoveredCluster struct {
ID string `json:"id"`
BootstrapServers []string `json:"bootstrap_servers"`
KafkaAdminClientInformation KafkaAdminClientInformation `json:"kafka_admin_client_information"`
ClusterMetrics *ProcessedClusterMetrics `json:"metrics,omitempty"`
DiscoveredClients []DiscoveredClient `json:"discovered_clients"`
Metadata OSKClusterMetadata `json:"metadata"`
}
OSKDiscoveredCluster represents a discovered OSK cluster
type OSKSourcesState ¶ added in v0.8.0
type OSKSourcesState struct {
Clusters []OSKDiscoveredCluster `json:"clusters"`
}
OSKSourcesState contains all OSK-specific data
type OpenQuestion ¶ added in v0.8.1
type OpenQuestion struct {
ID string `json:"id"`
ClusterID string `json:"cluster_id,omitempty"`
Title string `json:"title"`
Body string `json:"body"`
HowToClose string `json:"how_to_close"`
}
OpenQuestion is a per-cluster (or plan-level) gap the customer needs to close before the Plan recommendation is fully reliable. State-file gaps (missing metrics, missing ACLs) resolve by re-running a `kcp scan` command; inferred-signal questions (spiky workload) resolve by acknowledging or overriding the input.
type Plan ¶ added in v0.8.1
type Plan struct {
Header PlanHeader `json:"header"`
Inputs PlanInputsResolved `json:"inputs"`
SourceEnvironment SourceEnvironment `json:"source_environment"`
Sizing []ClusterSizing `json:"sizing"`
ClusterTypeDecision []ClusterTypeDecision `json:"cluster_type_decision"`
NetworkingDecision []NetworkingDecision `json:"networking_decision"`
SizingAppendix []SizingMathDetail `json:"sizing_appendix"`
OpenQuestions []OpenQuestion `json:"open_questions,omitempty"`
}
Plan is the deterministic Migration Plan emitted by `kcp report plan`. This MVP scope covers source-environment summary, sizing, cluster-type decision, and networking decision only. Auth approach, switchover, red flags, cost reconciliation, and the rest of the §4 surface in the design doc land in follow-up PRs.
type PlanHeader ¶ added in v0.8.1
type PlanHeader struct {
Source string `json:"source"`
StateFilePath string `json:"state_file_path"`
KCPVersion string `json:"kcp_version"`
GeneratedAt time.Time `json:"generated_at"`
// PlanSchemaVersion is a string while the JSON shape is still
// shifting: top-level keys (auth_approach, switchover_approach,
// red_flags, …) are landing in follow-up PRs. Hub consumers should
// treat "1-experimental" as "additive changes only; renames may
// happen". Bumps to "1" once §4 of the design ships in full.
PlanSchemaVersion string `json:"plan_schema_version"`
}
type PlanInputs ¶ added in v0.8.1
type PlanInputs struct {
// Sizing overrides (defaults live in plan-config.yaml).
SLATarget *string `yaml:"sla_target,omitempty" json:"sla_target,omitempty"`
SizingPercentile *string `yaml:"sizing_percentile,omitempty" json:"sizing_percentile,omitempty"`
HeadroomFraction *float64 `yaml:"headroom_fraction,omitempty" json:"headroom_fraction,omitempty"`
SpikyWorkloadRatio *float64 `yaml:"spiky_workload_ratio,omitempty" json:"spiky_workload_ratio,omitempty"`
// Customer-declared hard requirements that force Dedicated.
// Default `false`; only the customer (or an SE on their behalf) sets these.
EnforceSchemasAtTheBroker *bool `yaml:"enforce_schemas_at_the_broker,omitempty" json:"enforce_schemas_at_the_broker,omitempty"`
RequiresHighThroughputRESTProduceAPI *bool `yaml:"requires_high_throughput_rest_produce_api,omitempty" json:"requires_high_throughput_rest_produce_api,omitempty"`
Requires9995SLAWithinSingleZone *bool `yaml:"requires_99_95_sla_within_a_single_zone,omitempty" json:"requires_99_95_sla_within_a_single_zone,omitempty"`
// When source auth includes mTLS AND target_cloud is not `aws`,
// Dedicated is required because only Dedicated supports mTLS on
// Azure / GCP. MSK is AWS-only so this defaults to `aws`.
TargetCloud *string `yaml:"target_cloud,omitempty" json:"target_cloud,omitempty"`
// Existing VPC connectivity to MSK. When set to `transit_gateway`
// or `vpc_peering` and the cluster is Dedicated, the same pattern
// is recommended for Confluent Cloud. `privatelink_or_pni` (default)
// keeps the AWS-to-AWS Enterprise default (PNI) unless one of the
// PrivateLink triggers fires (see CCEgressRequired,
// ProjectedPNIGatewayCount, non-AWS target_cloud).
ExistingVPCConnectivity *string `yaml:"existing_vpc_connectivity,omitempty" json:"existing_vpc_connectivity,omitempty"`
// CCEgressRequired = "Do CC-side workloads need to push traffic
// back into your customer VPC?" PNI does not natively support
// egress from CC into customer infrastructure; when true the
// networking default flips from PNI to PrivateLink.
CCEgressRequired *bool `yaml:"cc_egress_required,omitempty" json:"cc_egress_required,omitempty"`
// ProjectedPNIGatewayCount — projected PNI gateway count for the
// deployment. When ≥ 2, the recommendation flips from PNI to
// PrivateLink. Default 1 (single gateway).
ProjectedPNIGatewayCount *int `yaml:"projected_pni_gateway_count,omitempty" json:"projected_pni_gateway_count,omitempty"`
// Clusters — per-cluster overrides keyed by source cluster name.
// Heterogeneous fleets (mixed-SLA, mixed-tier) need finer-grained
// inputs than the global flags above; without this, flipping a
// single global flag like `requires_99_95_sla_within_a_single_zone:
// true` would force Dedicated SZ on every cluster including
// idle / Zookeeper / Serverless ones. Resolution: per-cluster
// override wins; fall back to global default. Only the subset of
// fields that makes sense per-cluster lives here.
Clusters map[string]ClusterPlanInputs `yaml:"clusters,omitempty" json:"clusters,omitempty"`
}
PlanInputs is the parsed plan-inputs.yaml. Pointers distinguish "unset" from the zero value so the loader can echo only the fields the customer explicitly set.
MVP scope: sizing knobs + the customer-declared hard-requirement flags that force Dedicated, plus the networking-topology signal that selects PNI / Transit Gateway / VPC Peering on the Dedicated path.
Customer-declared flags that flip the cluster-type verdict (`EnforceSchemasAtTheBroker`, `RequiresHighThroughputRESTProduceAPI`, `Requires9995SLAWithinSingleZone`) are wrong-click sensitive — a misfired `true` quietly raises the monthly cost. The renderer surfaces a ⚠ cost callout on the Dedicated verdict when any of them is the reason.
type PlanInputsResolved ¶ added in v0.8.1
type PlanInputsResolved struct {
// Raw preserves the original customer-supplied `PlanInputs`. **Note:**
// the flat fields below carry the *global* resolved view; per-cluster
// overrides (`Raw.Clusters[<name>]`) are layered on top per cluster
// inside `PlanService.Build` via `ResolvePlanInputsForCluster` — they
// are NOT applied to the values stored here. JSON consumers wanting
// the per-cluster view should re-run the resolver against `Raw`.
Raw *PlanInputs `json:"raw,omitempty"`
SLATarget string `json:"sla_target"`
SizingPercentile string `json:"sizing_percentile"`
HeadroomFraction float64 `json:"headroom_fraction"`
SpikyWorkloadRatio float64 `json:"spiky_workload_ratio"`
// Customer-declared hard requirements. Booleans (not *bool) — defaults
// resolve to false, which is the safe verdict (no escalation to Dedicated).
EnforceSchemasAtTheBroker bool `json:"enforce_schemas_at_the_broker"`
RequiresHighThroughputRESTProduceAPI bool `json:"requires_high_throughput_rest_produce_api"`
Requires9995SLAWithinSingleZone bool `json:"requires_99_95_sla_within_a_single_zone"`
// Target cloud + existing VPC connectivity (Dedicated-path networking).
TargetCloud string `json:"target_cloud"`
ExistingVPCConnectivity string `json:"existing_vpc_connectivity"`
// Networking triggers that flip the AWS-Enterprise default from PNI
// to PrivateLink. CCEgressRequired and ProjectedPNIGatewayCount are
// workload properties, not state-derived.
CCEgressRequired bool `json:"cc_egress_required"`
ProjectedPNIGatewayCount int `json:"projected_pni_gateway_count"`
}
PlanInputsResolved is the customer's PlanInputs merged with pinned defaults from plan-config.yaml. Raw preserves the original customer input (nil pointers for fields they didn't set); the flat fields below are the merged values PlanService computes against.
type ProcessedAggregates ¶ added in v0.4.0
type ProcessedAggregates struct {
AWSCertificateManager ServiceCostAggregates `json:"AWS Certificate Manager"`
AmazonManagedStreamingForApacheKafka ServiceCostAggregates `json:"Amazon Managed Streaming for Apache Kafka"`
EC2Other ServiceCostAggregates `json:"EC2 - Other"`
ElasticLoadBalancing ServiceCostAggregates `json:"Amazon Elastic Load Balancing"`
AmazonVPC ServiceCostAggregates `json:"Amazon Virtual Private Cloud"`
}
ProcessedAggregates represents the specific services we query
func NewProcessedAggregates ¶ added in v0.4.0
func NewProcessedAggregates() ProcessedAggregates
NewProcessedAggregates creates a new ProcessedAggregates with all maps initialized
func (*ProcessedAggregates) ForService ¶ added in v0.6.10
func (a *ProcessedAggregates) ForService(name string) *ServiceCostAggregates
ForService returns a pointer to the ServiceCostAggregates for the given service name, or nil if the service is not recognized.
type ProcessedCluster ¶ added in v0.4.0
type ProcessedCluster struct {
Name string `json:"name"`
Arn string `json:"arn"`
Region string `json:"region"`
ClusterMetrics ProcessedClusterMetrics `json:"metrics"` // Flattened from raw CloudWatch metrics
AWSClientInformation AWSClientInformation `json:"aws_client_information"`
KafkaAdminClientInformation KafkaAdminClientInformation `json:"kafka_admin_client_information"`
DiscoveredClients []DiscoveredClient `json:"discovered_clients"`
}
ProcessedCluster contains the complete cluster data with flattened metrics This is the full cluster information with processed metrics, unlike the simplified version in types.go
type ProcessedClusterMetrics ¶ added in v0.4.0
type ProcessedClusterMetrics struct {
Region string `json:"region"`
ClusterArn string `json:"cluster_arn"`
Metadata MetricMetadata `json:"metadata"`
Metrics []ProcessedMetric `json:"results"`
Aggregates map[string]MetricAggregate `json:"aggregates"`
QueryInfo []MetricQueryInfo `json:"query_info"`
// OSK-specific fields (optional, omitempty for MSK clusters)
Environment string `json:"environment,omitempty"`
Location string `json:"location,omitempty"`
}
type ProcessedCost ¶ added in v0.4.0
type ProcessedCost struct {
Start string `json:"start"`
End string `json:"end"`
Service string `json:"service"`
UsageType string `json:"usage_type"`
Values ProcessedCostBreakdown `json:"values"`
}
type ProcessedCostBreakdown ¶ added in v0.4.0
type ProcessedMSKSource ¶ added in v0.8.0
type ProcessedMSKSource struct {
Regions []ProcessedRegion `json:"regions"`
}
ProcessedMSKSource contains processed MSK data (regions)
type ProcessedMetric ¶ added in v0.4.0
type ProcessedOSKCluster ¶ added in v0.8.0
type ProcessedOSKCluster struct {
ID string `json:"id"`
BootstrapServers []string `json:"bootstrap_servers"`
KafkaAdminClientInformation KafkaAdminClientInformation `json:"kafka_admin_client_information"`
ClusterMetrics *ProcessedClusterMetrics `json:"metrics,omitempty"`
DiscoveredClients []DiscoveredClient `json:"discovered_clients"`
Metadata OSKClusterMetadata `json:"metadata"`
}
ProcessedOSKCluster represents an OSK cluster in the API response
type ProcessedOSKSource ¶ added in v0.8.0
type ProcessedOSKSource struct {
Clusters []ProcessedOSKCluster `json:"clusters"`
}
ProcessedOSKSource contains processed OSK data (flat cluster array)
type ProcessedRegion ¶ added in v0.4.0
type ProcessedRegion struct {
Name string `json:"name"`
Configurations []kafka.DescribeConfigurationRevisionOutput `json:"configurations"`
Costs ProcessedRegionCosts `json:"costs"` // Flattened from raw AWS Cost Explorer data
Clusters []ProcessedCluster `json:"clusters"` // Simplified from full DiscoveredCluster data
}
ProcessedRegion mirrors DiscoveredRegion but with flattened costs and simplified clusters
type ProcessedRegionCosts ¶ added in v0.4.0
type ProcessedRegionCosts struct {
Region string `json:"region"`
Metadata CostMetadata `json:"metadata"`
Results []ProcessedCost `json:"results"`
Aggregates ProcessedAggregates `json:"aggregates"`
QueryInfo CostQueryInfo `json:"query_info"`
}
type ProcessedSource ¶ added in v0.8.0
type ProcessedSource struct {
Type SourceType `json:"type"`
MSKData *ProcessedMSKSource `json:"msk_data,omitempty"`
OSKData *ProcessedOSKSource `json:"osk_data,omitempty"`
}
ProcessedSource represents a unified source (MSK or OSK) with discriminated union
type ProcessedState ¶ added in v0.4.0
type ProcessedState struct {
Sources []ProcessedSource `json:"sources"`
SchemaRegistries *SchemaRegistriesState `json:"schema_registries,omitempty"`
KcpBuildInfo interface{} `json:"kcp_build_info,omitempty"`
Timestamp time.Time `json:"timestamp"`
}
ProcessedState represents the transformed output data structure This is what comes OUT of the frontend/API after processing the raw State data Same structure as State but with costs and metrics flattened for easier frontend consumption
type PrometheusAuthConfig ¶ added in v0.8.0
type PrometheusAuthConfig struct {
Username string `yaml:"username"`
Password string `yaml:"password"`
}
PrometheusAuthConfig holds HTTP basic auth credentials for Prometheus
type PrometheusConfig ¶ added in v0.8.0
type PrometheusConfig struct {
URL string `yaml:"url"`
Auth *PrometheusAuthConfig `yaml:"auth,omitempty"`
TLS *PrometheusTLSConfig `yaml:"tls,omitempty"`
}
PrometheusConfig holds Prometheus connection details for metrics queries
type PrometheusTLSConfig ¶ added in v0.8.0
type PrometheusTLSConfig struct {
CACert string `yaml:"ca_cert,omitempty"`
InsecureSkipVerify bool `yaml:"insecure_skip_verify,omitempty"`
}
PrometheusTLSConfig holds TLS settings for Prometheus HTTPS connections
type RegionAuth ¶ added in v0.4.0
type RegionAuth struct {
Name string `yaml:"name"`
Clusters []ClusterAuth `yaml:"clusters"`
}
func (*RegionAuth) MergeClusterConfigs ¶ added in v0.4.0
func (ra *RegionAuth) MergeClusterConfigs(existingRegion RegionAuth)
MergeClusterConfigs preserves existing cluster auth configurations from the existing region
type ReverseProxyRequest ¶ added in v0.5.0
type Route ¶ added in v0.7.0
type Route struct {
Name string `yaml:"name"`
StreamingDomain RouteStreamingDomain `yaml:"streamingDomain"`
Security RouteSecurity `yaml:"security"`
Fence *RouteFence `yaml:"fence,omitempty"`
}
type RouteFence ¶ added in v0.7.0
type RouteSecurity ¶ added in v0.7.0
type RouteSecurity struct {
Auth string `yaml:"auth"`
Client RouteSecurityConfig `yaml:"client"`
Cluster RouteSecurityConfig `yaml:"cluster"`
}
type RouteSecurityAuthentication ¶ added in v0.7.0
type RouteSecurityAuthentication struct {
Type string `yaml:"type"`
}
type RouteSecurityConfig ¶ added in v0.7.0
type RouteSecurityConfig struct {
Authentication RouteSecurityAuthentication `yaml:"authentication"`
}
type RouteStreamingDomain ¶ added in v0.7.0
type RuleEvaluation ¶ added in v0.8.1
type RuleEvaluation struct {
RowID string `json:"row_id"`
Description string `json:"description"`
Outcome RuleOutcome `json:"outcome"`
Evidence string `json:"evidence,omitempty"`
SkipReason string `json:"skip_reason,omitempty"`
}
RuleEvaluation is one row of the per-cluster hard-limit audit trail. Triggers (above) carries only the fired rules — this carries every evaluation including not-fired and skipped, so the rendered appendix can show negative evidence ("ACL cap not exceeded: 47 < 4000") and skip rationales ("AclsScanned == false; rule inconclusive").
type RuleOutcome ¶ added in v0.8.1
type RuleOutcome string
RuleOutcome enumerates the possible outcomes of evaluating one hard-limit rule against a cluster. Persisted in the audit trail so a reviewer can replay "what would the rules engine have said given this state" without re-running the tool.
The string values below ("fired" / "not_fired" / "skipped") are **stable** and intended for downstream consumers to match on by equality. Don't rename without a coordinated migration of consumers + a plan_schema_version bump.
const ( RuleFired RuleOutcome = "fired" // rule fired — its evidence is recorded RuleNotFired RuleOutcome = "not_fired" // rule evaluated and explicitly didn't fire RuleSkipped RuleOutcome = "skipped" // rule was not evaluated (missing inputs) )
type SASLPlainConfig ¶ added in v0.7.2
type SASLScramConfig ¶ added in v0.2.7
type SchemaRegistriesState ¶ added in v0.7.2
type SchemaRegistriesState struct {
ConfluentSchemaRegistry []SchemaRegistryInformation `json:"confluent_schema_registry,omitempty"`
AWSGlue []GlueSchemaRegistryInformation `json:"aws_glue,omitempty"`
}
SchemaRegistriesState holds schema registries organized by type
func (*SchemaRegistriesState) UpsertConfluentSchemaRegistry ¶ added in v0.7.2
func (s *SchemaRegistriesState) UpsertConfluentSchemaRegistry(sr SchemaRegistryInformation)
UpsertConfluentSchemaRegistry inserts or updates a Confluent SR entry, matched by URL
func (*SchemaRegistriesState) UpsertGlueSchemaRegistry ¶ added in v0.7.2
func (s *SchemaRegistriesState) UpsertGlueSchemaRegistry(gr GlueSchemaRegistryInformation)
UpsertGlueSchemaRegistry inserts or updates a Glue SR entry, matched by RegistryName+Region
type SchemaRegistryAuthType ¶ added in v0.4.2
type SchemaRegistryAuthType string
SchemaRegistryAuthType represents the different authentication types supported by Schema Registry
const ( SchemaRegistryAuthTypeUnauthenticated SchemaRegistryAuthType = "Unauthenticated" SchemaRegistryAuthTypeBasicAuth SchemaRegistryAuthType = "BasicAuth" )
type SchemaRegistryExporterConfig ¶ added in v0.5.0
type SchemaRegistryInformation ¶ added in v0.4.2
type SchemaRegistryInformation struct {
Type string `json:"type"`
URL string `json:"url"`
DefaultCompatibility schemaregistry.Compatibility `json:"default_compatibility"`
Contexts []string `json:"contexts"`
Subjects []Subject `json:"subjects"`
}
type SelfManagedConnector ¶ added in v0.4.2
type SelfManagedConnectors ¶ added in v0.4.2
type SelfManagedConnectors struct {
Connectors []SelfManagedConnector `json:"connectors"`
}
type ServiceCostAggregates ¶ added in v0.4.0
type ServiceCostAggregates struct {
UnblendedCost map[string]any `json:"unblended_cost"`
BlendedCost map[string]any `json:"blended_cost"`
AmortizedCost map[string]any `json:"amortized_cost"`
NetAmortizedCost map[string]any `json:"net_amortized_cost"`
NetUnblendedCost map[string]any `json:"net_unblended_cost"`
}
ServiceCostAggregates represents cost aggregates for a single service Uses explicit fields for each metric type instead of a map
type SizingMathDetail ¶ added in v0.8.1
type SizingMathDetail struct {
ClusterID string `json:"cluster_id"`
Formula string `json:"formula"`
IntermediateSteps []string `json:"intermediate_steps"`
Citations []FieldCitation `json:"citations,omitempty"`
}
type SourceClusterSummary ¶ added in v0.8.1
type SourceClusterSummary struct {
ClusterID string `json:"cluster_id"`
Region string `json:"region"`
BrokerCount int `json:"broker_count"`
TopicCount int `json:"topic_count"`
KafkaVersion string `json:"kafka_version,omitempty"`
// IsServerless flags MSK Serverless source clusters. Set to true
// when MskClusterConfig.ClusterType == "SERVERLESS"; the renderer
// uses it to suppress Provisioned-only framing (broker counts,
// "incomplete scan" guidance) that doesn't apply to Serverless.
IsServerless bool `json:"is_serverless,omitempty"`
}
type SourceEnvironment ¶ added in v0.8.1
type SourceEnvironment struct {
Clusters []SourceClusterSummary `json:"clusters"`
TotalRegions int `json:"total_regions"`
}
type SourceType ¶ added in v0.8.0
type SourceType string
SourceType represents the type of Kafka source
const ( SourceTypeMSK SourceType = "msk" SourceTypeOSK SourceType = "osk" )
type State ¶ added in v0.4.0
type State struct {
MSKSources *MSKSourcesState `json:"msk_sources,omitempty"`
OSKSources *OSKSourcesState `json:"osk_sources,omitempty"`
SchemaRegistries *SchemaRegistriesState `json:"schema_registries,omitempty"`
KcpBuildInfo KcpBuildInfo `json:"kcp_build_info"`
Timestamp time.Time `json:"timestamp"`
}
State represents the unified state file (kcp-state.json)
func NewStateFrom ¶ added in v0.4.0
func NewStateFromBytes ¶ added in v0.8.0
func NewStateFromFile ¶ added in v0.4.0
func (*State) GetClusterByArn ¶ added in v0.5.2
func (s *State) GetClusterByArn(clusterArn string) (*DiscoveredCluster, error)
func (*State) GetOSKClusterByID ¶ added in v0.8.0
func (s *State) GetOSKClusterByID(id string) (*OSKDiscoveredCluster, error)
GetOSKClusterByID looks up an OSK cluster by the user-provided ID from credentials
func (*State) PersistStateFile ¶ added in v0.4.0
func (*State) UpsertDiscoveredClients ¶ added in v0.5.2
func (s *State) UpsertDiscoveredClients(regionName string, clusterName string, discoveredClients []DiscoveredClient) error
func (*State) UpsertRegion ¶ added in v0.4.0
func (s *State) UpsertRegion(newRegion DiscoveredRegion)
func (*State) WriteReportCommands ¶ added in v0.4.5
func (*State) WriteToFile ¶ added in v0.4.0
type StreamingDomain ¶ added in v0.7.0
type StreamingDomain struct {
Name string `yaml:"name"`
}
type Subject ¶ added in v0.4.2
type Subject struct {
Name string `json:"name"`
SchemaType string `json:"schema_type"`
Compatibility string `json:"compatibility,omitempty"`
Versions []schemaregistry.SchemaMetadata `json:"versions"`
Latest schemaregistry.SchemaMetadata `json:"latest_schema"`
}
type SubnetInfo ¶ added in v0.2.2
type TargetClusterWizardRequest ¶ added in v0.5.0
type TargetClusterWizardRequest struct {
AwsRegion string `json:"aws_region"`
NeedsEnvironment bool `json:"needs_environment"`
EnvironmentName string `json:"environment_name"`
EnvironmentId string `json:"environment_id"`
NeedsCluster bool `json:"needs_cluster"`
ClusterName string `json:"cluster_name"`
ClusterType string `json:"cluster_type"`
ClusterAvailability string `json:"cluster_availability"` // "SINGLE_ZONE" or "MULTI_ZONE"
ClusterCku int `json:"cluster_cku"` // Number of CKUs (1+, MULTI_ZONE requires >= 2)
NeedsPrivateLink bool `json:"needs_private_link"`
UseExistingRoute53Zone bool `json:"use_existing_route53_zone"`
PreventDestroy bool `json:"prevent_destroy"`
VpcId string `json:"vpc_id"`
SubnetCidrRanges []string `json:"subnet_cidr_ranges"`
}
type TerraformFiles ¶ added in v0.5.0
type TerraformFiles struct {
MainTf string `json:"main.tf"`
ProvidersTf string `json:"providers.tf"`
VariablesTf string `json:"variables.tf"`
InputsAutoTfvars string `json:"inputs.auto.tfvars"`
OutputsTf string `json:"outputs.tf"`
PerPrincipalTf map[string]string `json:"per_principal_tf,omitempty"`
}
type TerraformOutput ¶
type TerraformOutputOld ¶ added in v0.5.0
type TerraformOutputOld struct {
ConfluentCloudClusterApiKey TerraformOutputValue `json:"confluent_cloud_cluster_api_key"`
ConfluentCloudClusterApiKeySecret TerraformOutputValue `json:"confluent_cloud_cluster_api_key_secret"`
ConfluentCloudClusterId TerraformOutputValue `json:"confluent_cloud_cluster_id"`
ConfluentCloudClusterRestEndpoint TerraformOutputValue `json:"confluent_cloud_cluster_rest_endpoint"`
ConfluentCloudClusterBootstrapEndpoint TerraformOutputValue `json:"confluent_cloud_cluster_bootstrap_endpoint"`
ConfluentPlatformControllerBootstrapServer TerraformOutputValue `json:"confluent_platform_controller_bootstrap_server"`
}
a type for the output.json file in the target_env folder NOTE: This will be deprecated once we are completely on the HCL-servrice based approach.
type TerraformOutputValue ¶
type TerraformState ¶
type TerraformState struct {
Outputs TerraformOutputOld `json:"outputs"`
}
type TerraformVariable ¶ added in v0.5.0
type TopicDetails ¶ added in v0.3.4
type TopicSummary ¶ added in v0.3.4
type TopicSummary struct {
Topics int `json:"topics"`
InternalTopics int `json:"internal_topics"`
TotalPartitions int `json:"total_partitions"`
TotalInternalPartitions int `json:"total_internal_partitions"`
CompactTopics int `json:"compact_topics"`
CompactInternalTopics int `json:"compact_internal_topics"`
CompactPartitions int `json:"compact_partitions"`
CompactInternalPartitions int `json:"compact_internal_partitions"`
RemoteStorageTopics int `json:"remote_storage_topics"`
}
func CalculateTopicSummaryFromDetails ¶ added in v0.3.4
func CalculateTopicSummaryFromDetails(topicDetails []TopicDetails) TopicSummary
type Topics ¶ added in v0.3.3
type Topics struct {
Summary TopicSummary `json:"summary"`
Details []TopicDetails `json:"details"`
}
type Topology ¶ added in v0.8.1
type Topology string
Topology distinguishes Multi-Zone (MZ) from Single-Zone (SZ) Dedicated clusters. Only meaningful when Verdict == Dedicated; Enterprise clusters have no topology dimension at this layer.
type UnauthenticatedPlaintextConfig ¶ added in v0.4.0
type UnauthenticatedPlaintextConfig struct {
Use bool `yaml:"use"`
}
type UnauthenticatedTLSConfig ¶ added in v0.4.0
type UnauthenticatedTLSConfig struct {
Use bool `yaml:"use"`
}