Skip to content

Commit be3d586

Browse files
authored
Merge pull request #9 from confidential-devhub/multi-yaml
Multi yaml support
2 parents 57c8c0d + 9239996 commit be3d586

17 files changed

+1261
-16
lines changed

cmd/apply.go

Lines changed: 37 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -110,25 +110,53 @@ func runApply(_ *cobra.Command, _ []string) error {
110110
rc = cfg.RuntimeClass
111111
}
112112

113-
// Load manifest
113+
// Load manifest (supports multi-document YAML)
114114
fmt.Printf("Loading manifest: %s\n", manifestFile)
115-
m, err := manifest.Load(manifestFile)
115+
manifestSet, err := manifest.LoadMultiDocument(manifestFile)
116116
if err != nil {
117117
return fmt.Errorf("failed to load manifest: %w", err)
118118
}
119119

120+
// Get the primary workload manifest
121+
m := manifestSet.GetPrimaryManifest()
122+
if m == nil {
123+
return fmt.Errorf("no workload manifest (Pod, Deployment, etc.) found in file")
124+
}
125+
120126
fmt.Printf("Transforming %s '%s' for CoCo...\n", m.GetKind(), m.GetName())
121127

122128
// Validate initContainer flags
123129
if (initContainerImg != "" || initContainerCmd != "") && !addInitContainer {
124130
return fmt.Errorf("--init-container-img and --init-container-cmd require --init-container flag")
125131
}
126132

133+
// Auto-detect sidecar port from Service if present and not manually specified
134+
if (enableSidecar || cfg.Sidecar.Enabled) && sidecarPortForward == 0 {
135+
detectedPort, err := manifestSet.GetServiceTargetPort()
136+
if err != nil {
137+
// Log warning but don't fail - user might provide port via config
138+
fmt.Printf(" ⚠ Warning: Could not auto-detect Service port: %v\n", err)
139+
fmt.Println(" You can manually specify --sidecar-port-forward")
140+
} else if detectedPort > 0 {
141+
// Validate port doesn't conflict with sidecar HTTPS port (8443)
142+
if detectedPort == 8443 {
143+
return fmt.Errorf("detected Service targetPort %d conflicts with sidecar HTTPS port 8443; please use a different port or specify --sidecar-port-forward manually", detectedPort)
144+
}
145+
sidecarPortForward = detectedPort
146+
fmt.Printf(" ✓ Auto-detected Service targetPort: %d (will be forwarded via sidecar)\n", sidecarPortForward)
147+
}
148+
}
149+
127150
// Validate sidecar flags
128151
if sidecarPortForward > 0 && !enableSidecar && !cfg.Sidecar.Enabled {
129152
return fmt.Errorf("--sidecar-port-forward requires --sidecar flag or sidecar enabled in config")
130153
}
131154

155+
// Additional validation: ensure forward port doesn't conflict with sidecar HTTPS port
156+
if sidecarPortForward == 8443 && (enableSidecar || cfg.Sidecar.Enabled) {
157+
return fmt.Errorf("sidecar port forward cannot be 8443 (conflicts with sidecar HTTPS port)")
158+
}
159+
132160
// Transform manifest
133161
if err := transformManifest(m, cfg, rc, skipApply); err != nil {
134162
return fmt.Errorf("failed to transform manifest: %w", err)
@@ -604,6 +632,13 @@ func handleImagePullSecrets(m *manifest.Manifest, cfg *config.CocoConfig, skipAp
604632

605633
// For each key in the imagePullSecret, create an entry
606634
for _, key := range secretKeys.Keys {
635+
// Handle .dockercfg format conversion
636+
// Trustee only handles dockerconfigjson, so if the secret is in .dockercfg format,
637+
// it will be converted to .dockerconfigjson during upload
638+
if key == ".dockercfg" {
639+
key = ".dockerconfigjson"
640+
}
641+
607642
// Strip leading "." from key name for KBS storage
608643
// e.g., ".dockerconfigjson" becomes "dockerconfigjson"
609644
kbsKey := strings.TrimPrefix(key, ".")

0 commit comments

Comments
 (0)