Compare commits
5 Commits
ksm-dashbo
...
context-ns
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
a01e6a6c3b | ||
|
|
12efb1967e | ||
|
|
56b1e80758 | ||
|
|
baf874ea67 | ||
|
|
28262f59d3 |
@@ -57,7 +57,7 @@ type checkFlags struct {
|
||||
}
|
||||
|
||||
var kubernetesConstraints = []string{
|
||||
">=1.24.0-0",
|
||||
">=1.25.0-0",
|
||||
}
|
||||
|
||||
var checkArgs checkFlags
|
||||
|
||||
@@ -101,7 +101,7 @@ func createImageRepositoryRun(cmd *cobra.Command, args []string) error {
|
||||
var repo = imagev1.ImageRepository{
|
||||
ObjectMeta: metav1.ObjectMeta{
|
||||
Name: objectName,
|
||||
Namespace: *kubeconfigArgs.Namespace,
|
||||
Namespace: GetDesiredNamespace(kubeconfigArgs),
|
||||
Labels: labels,
|
||||
},
|
||||
Spec: imagev1.ImageRepositorySpec{
|
||||
|
||||
@@ -91,6 +91,12 @@ func TestDiffKustomization(t *testing.T) {
|
||||
objectFile: "./testdata/diff-kustomization/stringdata-sops-secret.yaml",
|
||||
assert: assertGoldenFile("./testdata/diff-kustomization/diff-with-drifted-stringdata-sops-secret.golden"),
|
||||
},
|
||||
{
|
||||
name: "diff where kustomization file has multiple objects with the same name",
|
||||
args: "diff kustomization podinfo --path ./testdata/build-kustomization/podinfo --progress-bar=false --kustomization-file ./testdata/diff-kustomization/flux-kustomization-multiobj.yaml",
|
||||
objectFile: "",
|
||||
assert: assertGoldenFile("./testdata/diff-kustomization/nothing-is-deployed.golden"),
|
||||
},
|
||||
}
|
||||
|
||||
tmpl := map[string]string{
|
||||
|
||||
@@ -146,9 +146,11 @@ func (get getCommand) run(cmd *cobra.Command, args []string) error {
|
||||
return err
|
||||
}
|
||||
|
||||
ns := GetDesiredNamespace(kubeconfigArgs)
|
||||
|
||||
var listOpts []client.ListOption
|
||||
if !getArgs.allNamespaces {
|
||||
listOpts = append(listOpts, client.InNamespace(*kubeconfigArgs.Namespace))
|
||||
listOpts = append(listOpts, client.InNamespace(ns))
|
||||
}
|
||||
|
||||
if len(args) > 0 {
|
||||
@@ -190,12 +192,12 @@ func (get getCommand) run(cmd *cobra.Command, args []string) error {
|
||||
logger.Failuref("%s object '%s' not found in %s namespace",
|
||||
get.kind,
|
||||
args[0],
|
||||
namespaceNameOrAny(getArgs.allNamespaces, *kubeconfigArgs.Namespace),
|
||||
namespaceNameOrAny(getArgs.allNamespaces, ns),
|
||||
)
|
||||
} else if !getAll {
|
||||
logger.Failuref("no %s objects found in %s namespace",
|
||||
get.kind,
|
||||
namespaceNameOrAny(getArgs.allNamespaces, *kubeconfigArgs.Namespace),
|
||||
namespaceNameOrAny(getArgs.allNamespaces, ns),
|
||||
)
|
||||
}
|
||||
return nil
|
||||
|
||||
@@ -146,7 +146,7 @@ func installCmdRun(cmd *cobra.Command, args []string) error {
|
||||
opts := install.Options{
|
||||
BaseURL: installArgs.manifestsPath,
|
||||
Version: installArgs.version,
|
||||
Namespace: *kubeconfigArgs.Namespace,
|
||||
Namespace: GetDesiredNamespace(kubeconfigArgs),
|
||||
Components: components,
|
||||
Registry: installArgs.registry,
|
||||
ImagePullSecret: installArgs.imagePullSecret,
|
||||
@@ -181,7 +181,7 @@ func installCmdRun(cmd *cobra.Command, args []string) error {
|
||||
}
|
||||
|
||||
logger.Successf("manifests build completed")
|
||||
logger.Actionf("installing components in %s namespace", *kubeconfigArgs.Namespace)
|
||||
logger.Actionf("installing components in %s namespace", opts.Namespace)
|
||||
|
||||
applyOutput, err := utils.Apply(ctx, kubeconfigArgs, kubeclientOptions, tmpDir, filepath.Join(tmpDir, manifest.Path))
|
||||
if err != nil {
|
||||
|
||||
@@ -105,6 +105,10 @@ Command line utility for assembling Kubernetes CD pipelines the GitOps way.`,
|
||||
return fmt.Errorf("error getting namespace: %w", err)
|
||||
}
|
||||
|
||||
if ns == "" {
|
||||
return nil
|
||||
}
|
||||
|
||||
if e := validation.IsDNS1123Label(ns); len(e) > 0 {
|
||||
return fmt.Errorf("namespace must be a valid DNS label: %q", ns)
|
||||
}
|
||||
@@ -140,7 +144,6 @@ func init() {
|
||||
rootCmd.PersistentFlags().DurationVar(&rootArgs.timeout, "timeout", 5*time.Minute, "timeout for this operation")
|
||||
rootCmd.PersistentFlags().BoolVar(&rootArgs.verbose, "verbose", false, "print generated objects")
|
||||
|
||||
configureDefaultNamespace()
|
||||
kubeconfigArgs.APIServer = nil // prevent AddFlags from configuring --server flag
|
||||
kubeconfigArgs.Timeout = nil // prevent AddFlags from configuring --request-timeout flag, we have --timeout instead
|
||||
kubeconfigArgs.AddFlags(rootCmd.PersistentFlags())
|
||||
@@ -198,8 +201,10 @@ func main() {
|
||||
}
|
||||
}
|
||||
|
||||
func configureDefaultNamespace() {
|
||||
*kubeconfigArgs.Namespace = rootArgs.defaults.Namespace
|
||||
func GetDesiredNamespace(cfg *genericclioptions.ConfigFlags) string {
|
||||
if *cfg.Namespace != "" {
|
||||
return *cfg.Namespace
|
||||
}
|
||||
fromEnv := os.Getenv("FLUX_SYSTEM_NAMESPACE")
|
||||
if fromEnv != "" {
|
||||
// namespace must be a valid DNS label. Assess against validation
|
||||
@@ -207,11 +212,28 @@ func configureDefaultNamespace() {
|
||||
// may not be actively provided by end-user.
|
||||
if e := validation.IsDNS1123Label(fromEnv); len(e) > 0 {
|
||||
logger.Warningf(" ignoring invalid FLUX_SYSTEM_NAMESPACE: %q", fromEnv)
|
||||
return
|
||||
} else {
|
||||
return fromEnv
|
||||
}
|
||||
|
||||
kubeconfigArgs.Namespace = &fromEnv
|
||||
}
|
||||
|
||||
if _, has := os.LookupEnv("FLUX_NS_FOLLOW_KUBECONTEXT"); has {
|
||||
rawCfg, err := cfg.ToRawKubeConfigLoader().RawConfig()
|
||||
if err != nil {
|
||||
logger.Warningf(" failed parsing kubeconfig, ignoring: %q", fromEnv)
|
||||
} else {
|
||||
ctx := *cfg.Context
|
||||
if ctx == "" {
|
||||
ctx = rawCfg.CurrentContext
|
||||
}
|
||||
ns := rawCfg.Contexts[ctx].Namespace
|
||||
if ns != "" {
|
||||
return ns
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return rootArgs.defaults.Namespace
|
||||
}
|
||||
|
||||
// readPasswordFromStdin reads a password from stdin and returns the input
|
||||
|
||||
@@ -85,7 +85,7 @@ func buildComponentObjectRefs(components ...string) ([]object.ObjMetadata, error
|
||||
var objRefs []object.ObjMetadata
|
||||
for _, deployment := range components {
|
||||
objRefs = append(objRefs, object.ObjMetadata{
|
||||
Namespace: *kubeconfigArgs.Namespace,
|
||||
Namespace: GetDesiredNamespace(kubeconfigArgs),
|
||||
Name: deployment,
|
||||
GroupKind: schema.GroupKind{Group: "apps", Kind: "Deployment"},
|
||||
})
|
||||
|
||||
2
cmd/flux/testdata/check/check_pre.golden
vendored
2
cmd/flux/testdata/check/check_pre.golden
vendored
@@ -1,3 +1,3 @@
|
||||
► checking prerequisites
|
||||
✔ Kubernetes {{ .serverVersion }} >=1.24.0-0
|
||||
✔ Kubernetes {{ .serverVersion }} >=1.25.0-0
|
||||
✔ prerequisites checks passed
|
||||
|
||||
19
cmd/flux/testdata/diff-kustomization/flux-kustomization-multiobj.yaml
vendored
Normal file
19
cmd/flux/testdata/diff-kustomization/flux-kustomization-multiobj.yaml
vendored
Normal file
@@ -0,0 +1,19 @@
|
||||
apiVersion: v1
|
||||
kind: Namespace
|
||||
metadata:
|
||||
name: podinfo
|
||||
|
||||
---
|
||||
apiVersion: kustomize.toolkit.fluxcd.io/v1
|
||||
kind: Kustomization
|
||||
metadata:
|
||||
name: podinfo
|
||||
spec:
|
||||
interval: 5m0s
|
||||
path: ./kustomize
|
||||
force: true
|
||||
prune: true
|
||||
sourceRef:
|
||||
kind: GitRepository
|
||||
name: podinfo
|
||||
targetNamespace: default
|
||||
@@ -333,7 +333,7 @@ func (b *Builder) unMarshallKustomization() (*kustomizev1.Kustomization, error)
|
||||
k := &kustomizev1.Kustomization{}
|
||||
decoder := k8syaml.NewYAMLOrJSONDecoder(bytes.NewBuffer(data), len(data))
|
||||
// check for kustomization in yaml with the same name and namespace
|
||||
for !(k.Name == b.name && (k.Namespace == b.namespace || k.Namespace == "")) {
|
||||
for {
|
||||
err = decoder.Decode(k)
|
||||
if err != nil {
|
||||
if err == io.EOF {
|
||||
@@ -343,6 +343,13 @@ func (b *Builder) unMarshallKustomization() (*kustomizev1.Kustomization, error)
|
||||
return nil, fmt.Errorf("failed to unmarshall kustomization file %s: %w", b.kustomizationFile, err)
|
||||
}
|
||||
}
|
||||
|
||||
if strings.HasPrefix(k.APIVersion, kustomizev1.GroupVersion.Group+"/") &&
|
||||
k.Kind == kustomizev1.KustomizationKind &&
|
||||
k.Name == b.name &&
|
||||
(k.Namespace == b.namespace || k.Namespace == "") {
|
||||
break
|
||||
}
|
||||
}
|
||||
return k, nil
|
||||
}
|
||||
|
||||
@@ -189,6 +189,12 @@ func Test_unMarshallKustomization(t *testing.T) {
|
||||
wantErr: true,
|
||||
errString: "failed find kustomization with name",
|
||||
},
|
||||
{
|
||||
name: "yaml containing other resource with same name as kustomization",
|
||||
localKsFile: "testdata/local-kustomization/invalid-resource.yaml",
|
||||
wantErr: true,
|
||||
errString: "failed find kustomization with name",
|
||||
},
|
||||
}
|
||||
|
||||
b := &Builder{
|
||||
@@ -324,7 +330,10 @@ func Test_ResolveKustomization(t *testing.T) {
|
||||
},
|
||||
}
|
||||
|
||||
b := &Builder{}
|
||||
b := &Builder{
|
||||
name: "podinfo",
|
||||
namespace: "flux-system",
|
||||
}
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
b.kustomizationFile = tt.localKsFile
|
||||
|
||||
4
internal/build/testdata/local-kustomization/invalid-resource.yaml
vendored
Normal file
4
internal/build/testdata/local-kustomization/invalid-resource.yaml
vendored
Normal file
@@ -0,0 +1,4 @@
|
||||
apiVersion: v1
|
||||
kind: Namespace
|
||||
metadata:
|
||||
name: podinfo
|
||||
Reference in New Issue
Block a user