173 lines
10 KiB
Go
173 lines
10 KiB
Go
package config
|
|
|
|
type Config struct {
|
|
Kubeconfig string `yaml:"kubeconfig"`
|
|
SSHUser string `yaml:"ssh_user"`
|
|
SSHPort int `yaml:"ssh_port"`
|
|
SSHConfigFile string `yaml:"ssh_config_file"`
|
|
SSHIdentityFile string `yaml:"ssh_identity_file"`
|
|
SSHNodeHosts map[string]string `yaml:"ssh_node_hosts"`
|
|
SSHNodeUsers map[string]string `yaml:"ssh_node_users"`
|
|
SSHManagedNodes []string `yaml:"ssh_managed_nodes"`
|
|
SSHJumpHost string `yaml:"ssh_jump_host"`
|
|
SSHJumpUser string `yaml:"ssh_jump_user"`
|
|
IACRepoPath string `yaml:"iac_repo_path"`
|
|
ExpectedFluxBranch string `yaml:"expected_flux_branch"`
|
|
ExpectedFluxSource string `yaml:"expected_flux_source_url"`
|
|
ControlPlanes []string `yaml:"control_planes"`
|
|
Workers []string `yaml:"workers"`
|
|
LocalBootstrapPaths []string `yaml:"local_bootstrap_paths"`
|
|
ExcludedNamespaces []string `yaml:"excluded_namespaces"`
|
|
Startup Startup `yaml:"startup"`
|
|
Shutdown Shutdown `yaml:"shutdown"`
|
|
UPS UPS `yaml:"ups"`
|
|
Coordination Coordination `yaml:"coordination"`
|
|
Metrics Metrics `yaml:"metrics"`
|
|
State State `yaml:"state"`
|
|
}
|
|
|
|
type Startup struct {
|
|
APIWaitSeconds int `yaml:"api_wait_seconds"`
|
|
APIPollSeconds int `yaml:"api_poll_seconds"`
|
|
ShutdownCooldownSeconds int `yaml:"shutdown_cooldown_seconds"`
|
|
MinimumBatteryPercent float64 `yaml:"minimum_battery_percent"`
|
|
RequireNodeInventoryReach bool `yaml:"require_node_inventory_reachability"`
|
|
NodeInventoryReachWaitSeconds int `yaml:"node_inventory_reachability_wait_seconds"`
|
|
NodeInventoryReachPollSeconds int `yaml:"node_inventory_reachability_poll_seconds"`
|
|
RequiredNodeLabels map[string]map[string]string `yaml:"required_node_labels"`
|
|
RequireTimeSync bool `yaml:"require_time_sync"`
|
|
TimeSyncWaitSeconds int `yaml:"time_sync_wait_seconds"`
|
|
TimeSyncPollSeconds int `yaml:"time_sync_poll_seconds"`
|
|
TimeSyncMode string `yaml:"time_sync_mode"`
|
|
TimeSyncQuorum int `yaml:"time_sync_quorum"`
|
|
ReconcileAccessOnBoot bool `yaml:"reconcile_access_on_boot"`
|
|
AutoEtcdRestoreOnAPIFailure bool `yaml:"auto_etcd_restore_on_api_failure"`
|
|
EtcdRestoreControlPlane string `yaml:"etcd_restore_control_plane"`
|
|
RequireStorageReady bool `yaml:"require_storage_ready"`
|
|
StorageReadyWaitSeconds int `yaml:"storage_ready_wait_seconds"`
|
|
StorageReadyPollSeconds int `yaml:"storage_ready_poll_seconds"`
|
|
StorageMinReadyNodes int `yaml:"storage_min_ready_nodes"`
|
|
StorageCriticalPVCs []string `yaml:"storage_critical_pvcs"`
|
|
RequirePostStartProbes bool `yaml:"require_post_start_probes"`
|
|
PostStartProbeWaitSeconds int `yaml:"post_start_probe_wait_seconds"`
|
|
PostStartProbePollSeconds int `yaml:"post_start_probe_poll_seconds"`
|
|
PostStartProbes []string `yaml:"post_start_probes"`
|
|
RequireServiceChecklist bool `yaml:"require_service_checklist"`
|
|
ServiceChecklistWaitSeconds int `yaml:"service_checklist_wait_seconds"`
|
|
ServiceChecklistPollSeconds int `yaml:"service_checklist_poll_seconds"`
|
|
ServiceChecklistStabilitySec int `yaml:"service_checklist_stability_seconds"`
|
|
ServiceChecklistAuth ServiceChecklistAuthSettings `yaml:"service_checklist_auth"`
|
|
ServiceChecklist []ServiceChecklistCheck `yaml:"service_checklist"`
|
|
RequireCriticalServiceEndpoints bool `yaml:"require_critical_service_endpoints"`
|
|
CriticalServiceEndpointWaitSec int `yaml:"critical_service_endpoint_wait_seconds"`
|
|
CriticalServiceEndpointPollSec int `yaml:"critical_service_endpoint_poll_seconds"`
|
|
CriticalServiceEndpoints []string `yaml:"critical_service_endpoints"`
|
|
RequireIngressChecklist bool `yaml:"require_ingress_checklist"`
|
|
IngressChecklistWaitSeconds int `yaml:"ingress_checklist_wait_seconds"`
|
|
IngressChecklistPollSeconds int `yaml:"ingress_checklist_poll_seconds"`
|
|
IngressChecklistAccepted []int `yaml:"ingress_checklist_accepted_statuses"`
|
|
IngressChecklistIgnoreHosts []string `yaml:"ingress_checklist_ignore_hosts"`
|
|
IngressChecklistInsecureSkip bool `yaml:"ingress_checklist_insecure_skip_tls"`
|
|
RequireNodeSSHAuth bool `yaml:"require_node_ssh_auth"`
|
|
NodeSSHAuthWaitSeconds int `yaml:"node_ssh_auth_wait_seconds"`
|
|
NodeSSHAuthPollSeconds int `yaml:"node_ssh_auth_poll_seconds"`
|
|
RequireFluxHealth bool `yaml:"require_flux_health"`
|
|
FluxHealthWaitSeconds int `yaml:"flux_health_wait_seconds"`
|
|
FluxHealthPollSeconds int `yaml:"flux_health_poll_seconds"`
|
|
IgnoreFluxKustomizations []string `yaml:"ignore_flux_kustomizations"`
|
|
RequireWorkloadConvergence bool `yaml:"require_workload_convergence"`
|
|
WorkloadConvergenceWaitSeconds int `yaml:"workload_convergence_wait_seconds"`
|
|
WorkloadConvergencePollSeconds int `yaml:"workload_convergence_poll_seconds"`
|
|
IgnoreWorkloadNamespaces []string `yaml:"ignore_workload_namespaces"`
|
|
IgnoreWorkloads []string `yaml:"ignore_workloads"`
|
|
IgnoreUnavailableNodes []string `yaml:"ignore_unavailable_nodes"`
|
|
AutoRecycleStuckPods bool `yaml:"auto_recycle_stuck_pods"`
|
|
StuckPodGraceSeconds int `yaml:"stuck_pod_grace_seconds"`
|
|
VaultUnsealKeyFile string `yaml:"vault_unseal_key_file"`
|
|
VaultUnsealBreakglassCommand string `yaml:"vault_unseal_breakglass_command"`
|
|
VaultUnsealBreakglassTimeout int `yaml:"vault_unseal_breakglass_timeout_seconds"`
|
|
}
|
|
|
|
type ServiceChecklistCheck struct {
|
|
Name string `yaml:"name"`
|
|
URL string `yaml:"url"`
|
|
AcceptedStatuses []int `yaml:"accepted_statuses"`
|
|
RequireRobotAuth bool `yaml:"require_robot_auth"`
|
|
FollowRedirects bool `yaml:"follow_redirects"`
|
|
LocationContains string `yaml:"location_contains"`
|
|
LocationNotContains string `yaml:"location_not_contains"`
|
|
FinalURLContains string `yaml:"final_url_contains"`
|
|
FinalURLNotContains string `yaml:"final_url_not_contains"`
|
|
BodyContains string `yaml:"body_contains"`
|
|
BodyNotContains string `yaml:"body_not_contains"`
|
|
TimeoutSeconds int `yaml:"timeout_seconds"`
|
|
InsecureSkipTLS bool `yaml:"insecure_skip_tls"`
|
|
}
|
|
|
|
type ServiceChecklistAuthSettings struct {
|
|
Mode string `yaml:"mode"`
|
|
KeycloakBaseURL string `yaml:"keycloak_base_url"`
|
|
Realm string `yaml:"realm"`
|
|
RobotUsername string `yaml:"robot_username"`
|
|
AdminSecretNamespace string `yaml:"admin_secret_namespace"`
|
|
AdminSecretName string `yaml:"admin_secret_name"`
|
|
AdminSecretUsernameKey string `yaml:"admin_secret_username_key"`
|
|
AdminSecretPasswordKey string `yaml:"admin_secret_password_key"`
|
|
}
|
|
|
|
type Shutdown struct {
|
|
DefaultBudgetSeconds int `yaml:"default_budget_seconds"`
|
|
HistoryMinSamples int `yaml:"history_min_samples"`
|
|
EmergencyBudgetSec int `yaml:"emergency_budget_seconds"`
|
|
EmergencyMinSamples int `yaml:"emergency_history_min_samples"`
|
|
EmergencySkipEtcd bool `yaml:"emergency_skip_etcd_snapshot"`
|
|
EmergencySkipDrain bool `yaml:"emergency_skip_drain"`
|
|
SkipEtcdSnapshot bool `yaml:"skip_etcd_snapshot"`
|
|
SkipDrain bool `yaml:"skip_drain"`
|
|
DrainParallelism int `yaml:"drain_parallelism"`
|
|
ScaleParallelism int `yaml:"scale_parallelism"`
|
|
SSHParallelism int `yaml:"ssh_parallelism"`
|
|
}
|
|
|
|
type UPS struct {
|
|
Enabled bool `yaml:"enabled"`
|
|
Provider string `yaml:"provider"`
|
|
Target string `yaml:"target"`
|
|
Targets []UPSTarget `yaml:"targets"`
|
|
PollSeconds int `yaml:"poll_seconds"`
|
|
RuntimeSafetyFactor float64 `yaml:"runtime_safety_factor"`
|
|
DebounceCount int `yaml:"debounce_count"`
|
|
TelemetryTimeoutSeconds int `yaml:"telemetry_timeout_seconds"`
|
|
}
|
|
|
|
type UPSTarget struct {
|
|
Name string `yaml:"name"`
|
|
Target string `yaml:"target"`
|
|
}
|
|
|
|
type Coordination struct {
|
|
ForwardShutdownHost string `yaml:"forward_shutdown_host"`
|
|
ForwardShutdownUser string `yaml:"forward_shutdown_user"`
|
|
ForwardShutdownConfig string `yaml:"forward_shutdown_config"`
|
|
PeerHosts []string `yaml:"peer_hosts"`
|
|
FallbackLocalShutdown bool `yaml:"fallback_local_shutdown"`
|
|
CommandTimeoutSeconds int `yaml:"command_timeout_seconds"`
|
|
StartupGuardMaxAgeSec int `yaml:"startup_guard_max_age_seconds"`
|
|
Role string `yaml:"role"`
|
|
AllowStartupOnBattery bool `yaml:"allow_startup_on_battery"`
|
|
}
|
|
|
|
type Metrics struct {
|
|
Enabled bool `yaml:"enabled"`
|
|
BindAddr string `yaml:"bind_addr"`
|
|
Path string `yaml:"path"`
|
|
}
|
|
|
|
type State struct {
|
|
Dir string `yaml:"dir"`
|
|
ReportsDir string `yaml:"reports_dir"`
|
|
RunHistoryPath string `yaml:"run_history_path"`
|
|
LockPath string `yaml:"lock_path"`
|
|
IntentPath string `yaml:"intent_path"`
|
|
}
|