1
0
mirror of synced 2026-03-01 19:26:55 +00:00

Compare commits

..

9 Commits

Author SHA1 Message Date
Stefan Prodan
c8586d1ef4 Merge pull request #130 from fluxcd/kustomize-0.0.6
Update kustomize-controller to v0.0.6
2020-07-25 11:26:44 +03:00
stefanprodan
316cba1cb8 Update kustomize-controller to v0.0.6 2020-07-25 11:13:18 +03:00
Stefan Prodan
13dba62b8d Merge pull request #128 from fluxcd/container-registry
Add container registry and image pull secret as install options
2020-07-23 15:34:27 +03:00
stefanprodan
c2ff169c08 Add image pull secret arg to install/bootstrap 2020-07-23 13:38:32 +03:00
stefanprodan
57a1dbfc6d Add container registry option to install/bootstrap 2020-07-23 13:07:34 +03:00
Stefan Prodan
efb39d6fc6 Merge pull request #127 from fluxcd/node-selector
Add linux/amd64 node selector to controllers
2020-07-23 12:44:34 +03:00
Stefan Prodan
b784234430 Merge pull request #126 from fluxcd/uninstall-crs
Delete custom resources during uninstall
2020-07-23 12:44:18 +03:00
stefanprodan
aebad92426 Add linux/amd64 node selector to controllers
Set nodeSelector to linux/amd64 for clusters with mixed nodes (linux, windows, amd64, arm).
2020-07-23 09:59:45 +03:00
stefanprodan
8e67cfd5c9 Delete custom resources during uninstall
Remove Kustomizations, GitRepositories and HelmRepositories before deleting the toolkit controllers and CRDs.
2020-07-23 09:26:10 +03:00
9 changed files with 136 additions and 73 deletions

View File

@@ -45,8 +45,10 @@ var bootstrapCmd = &cobra.Command{
} }
var ( var (
bootstrapVersion string bootstrapVersion string
bootstrapComponents []string bootstrapComponents []string
bootstrapRegistry string
bootstrapImagePullSecret string
) )
const ( const (
@@ -61,7 +63,10 @@ func init() {
"toolkit version") "toolkit version")
bootstrapCmd.PersistentFlags().StringSliceVar(&bootstrapComponents, "components", defaultComponents, bootstrapCmd.PersistentFlags().StringSliceVar(&bootstrapComponents, "components", defaultComponents,
"list of components, accepts comma-separated values") "list of components, accepts comma-separated values")
bootstrapCmd.PersistentFlags().StringVar(&bootstrapRegistry, "registry", "docker.io/fluxcd",
"container registry where the toolkit images are published")
bootstrapCmd.PersistentFlags().StringVar(&bootstrapImagePullSecret, "image-pull-secret", "",
"Kubernetes secret name used for pulling the toolkit images from a private registry")
rootCmd.AddCommand(bootstrapCmd) rootCmd.AddCommand(bootstrapCmd)
} }
@@ -73,7 +78,7 @@ func generateInstallManifests(targetPath, namespace, tmpDir string) (string, err
return "", fmt.Errorf("generating manifests failed: %w", err) return "", fmt.Errorf("generating manifests failed: %w", err)
} }
if err := genInstallManifests(bootstrapVersion, namespace, bootstrapComponents, tkDir); err != nil { if err := genInstallManifests(bootstrapVersion, namespace, bootstrapComponents, bootstrapRegistry, bootstrapImagePullSecret, tkDir); err != nil {
return "", fmt.Errorf("generating manifests failed: %w", err) return "", fmt.Errorf("generating manifests failed: %w", err)
} }

View File

@@ -54,11 +54,13 @@ If a previous version is installed, then an in-place upgrade will be performed.`
} }
var ( var (
installExport bool installExport bool
installDryRun bool installDryRun bool
installManifestsPath string installManifestsPath string
installVersion string installVersion string
installComponents []string installComponents []string
installRegistry string
installImagePullSecret string
) )
func init() { func init() {
@@ -70,8 +72,12 @@ func init() {
"toolkit version") "toolkit version")
installCmd.Flags().StringSliceVar(&installComponents, "components", defaultComponents, installCmd.Flags().StringSliceVar(&installComponents, "components", defaultComponents,
"list of components, accepts comma-separated values") "list of components, accepts comma-separated values")
installCmd.Flags().StringVarP(&installManifestsPath, "manifests", "", "", installCmd.Flags().StringVar(&installManifestsPath, "manifests", "",
"path to the manifest directory, dev only") "path to the manifest directory, dev only")
installCmd.Flags().StringVar(&installRegistry, "registry", "docker.io/fluxcd",
"container registry where the toolkit images are published")
installCmd.Flags().StringVar(&installImagePullSecret, "image-pull-secret", "",
"Kubernetes secret name used for pulling the toolkit images from a private registry")
rootCmd.AddCommand(installCmd) rootCmd.AddCommand(installCmd)
} }
@@ -97,7 +103,7 @@ func installCmdRun(cmd *cobra.Command, args []string) error {
logger.Generatef("generating manifests") logger.Generatef("generating manifests")
} }
if kustomizePath == "" { if kustomizePath == "" {
err = genInstallManifests(installVersion, namespace, installComponents, tmpDir) err = genInstallManifests(installVersion, namespace, installComponents, installRegistry, installImagePullSecret, tmpDir)
if err != nil { if err != nil {
return fmt.Errorf("install failed: %w", err) return fmt.Errorf("install failed: %w", err)
} }
@@ -185,11 +191,14 @@ fieldSpecs:
var kustomizationTmpl = `--- var kustomizationTmpl = `---
{{- $eventsAddr := .EventsAddr }} {{- $eventsAddr := .EventsAddr }}
{{- $registry := .Registry }}
apiVersion: kustomize.config.k8s.io/v1beta1 apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization kind: Kustomization
namespace: {{.Namespace}} namespace: {{.Namespace}}
transformers: transformers:
- labels.yaml - labels.yaml
resources: resources:
- namespace.yaml - namespace.yaml
- policies.yaml - policies.yaml
@@ -198,20 +207,33 @@ resources:
- {{.}}.yaml - {{.}}.yaml
{{- end }} {{- end }}
patches:
- path: node-selector.yaml
target:
kind: Deployment
patchesJson6902: patchesJson6902:
{{- range $i, $v := .Components }} {{- range $i, $component := .Components }}
{{- if ne $v "notification-controller" }} {{- if ne $component "notification-controller" }}
- target: - target:
group: apps group: apps
version: v1 version: v1
kind: Deployment kind: Deployment
name: {{$v}} name: {{$component}}
patch: |- patch: |-
- op: replace - op: replace
path: /spec/template/spec/containers/0/args/0 path: /spec/template/spec/containers/0/args/0
value: --events-addr={{$eventsAddr}} value: --events-addr={{$eventsAddr}}
{{- end }} {{- end }}
{{- end }} {{- end }}
{{- if $registry }}
images:
{{- range $i, $component := .Components }}
- name: fluxcd/{{$component}}
newName: {{$registry}}/{{$component}}
{{- end }}
{{- end }}
` `
var kustomizationRolesTmpl = `--- var kustomizationRolesTmpl = `---
@@ -222,6 +244,23 @@ resources:
nameSuffix: -{{.Namespace}} nameSuffix: -{{.Namespace}}
` `
var nodeSelectorTmpl = `---
apiVersion: apps/v1
kind: Deployment
metadata:
name: all
spec:
template:
spec:
nodeSelector:
kubernetes.io/arch: amd64
kubernetes.io/os: linux
{{- if .ImagePullSecret }}
imagePullSecrets:
- name: {{.ImagePullSecret}}
{{- end }}
`
func downloadManifests(version string, tmpDir string) error { func downloadManifests(version string, tmpDir string) error {
ghURL := "https://github.com/fluxcd/toolkit/releases/latest/download/manifests.tar.gz" ghURL := "https://github.com/fluxcd/toolkit/releases/latest/download/manifests.tar.gz"
if strings.HasPrefix(version, "v") { if strings.HasPrefix(version, "v") {
@@ -256,22 +295,26 @@ func downloadManifests(version string, tmpDir string) error {
return nil return nil
} }
func genInstallManifests(version string, namespace string, components []string, tmpDir string) error { func genInstallManifests(version string, namespace string, components []string, registry, imagePullSecret, tmpDir string) error {
eventsAddr := "" eventsAddr := ""
if utils.containsItemString(components, defaultNotification) { if utils.containsItemString(components, defaultNotification) {
eventsAddr = fmt.Sprintf("http://%s/", defaultNotification) eventsAddr = fmt.Sprintf("http://%s/", defaultNotification)
} }
model := struct { model := struct {
Version string Version string
Namespace string Namespace string
Components []string Components []string
EventsAddr string EventsAddr string
Registry string
ImagePullSecret string
}{ }{
Version: version, Version: version,
Namespace: namespace, Namespace: namespace,
Components: components, Components: components,
EventsAddr: eventsAddr, EventsAddr: eventsAddr,
Registry: registry,
ImagePullSecret: imagePullSecret,
} }
if err := downloadManifests(version, tmpDir); err != nil { if err := downloadManifests(version, tmpDir); err != nil {
@@ -286,6 +329,10 @@ func genInstallManifests(version string, namespace string, components []string,
return fmt.Errorf("generate labels failed: %w", err) return fmt.Errorf("generate labels failed: %w", err)
} }
if err := utils.execTemplate(model, nodeSelectorTmpl, path.Join(tmpDir, "node-selector.yaml")); err != nil {
return fmt.Errorf("generate node selector failed: %w", err)
}
if err := utils.execTemplate(model, kustomizationTmpl, path.Join(tmpDir, "kustomization.yaml")); err != nil { if err := utils.execTemplate(model, kustomizationTmpl, path.Join(tmpDir, "kustomization.yaml")); err != nil {
return fmt.Errorf("generate kustomization failed: %w", err) return fmt.Errorf("generate kustomization failed: %w", err)
} }

View File

@@ -19,10 +19,12 @@ package main
import ( import (
"context" "context"
"fmt" "fmt"
"time"
"github.com/manifoldco/promptui" "github.com/manifoldco/promptui"
"github.com/spf13/cobra" "github.com/spf13/cobra"
kustomizev1 "github.com/fluxcd/kustomize-controller/api/v1alpha1"
sourcev1 "github.com/fluxcd/source-controller/api/v1alpha1"
) )
var uninstallCmd = &cobra.Command{ var uninstallCmd = &cobra.Command{
@@ -33,24 +35,24 @@ var uninstallCmd = &cobra.Command{
tk uninstall --dry-run --namespace=gitops-system tk uninstall --dry-run --namespace=gitops-system
# Uninstall all components and delete custom resource definitions # Uninstall all components and delete custom resource definitions
tk uninstall --crds --namespace=gitops-system tk uninstall --resources --crds --namespace=gitops-system
`, `,
RunE: uninstallCmdRun, RunE: uninstallCmdRun,
} }
var ( var (
uninstallCRDs bool uninstallCRDs bool
uninstallKustomizations bool uninstallResources bool
uninstallDryRun bool uninstallDryRun bool
uninstallSilent bool uninstallSilent bool
) )
func init() { func init() {
uninstallCmd.Flags().BoolVarP(&uninstallKustomizations, "kustomizations", "", false, uninstallCmd.Flags().BoolVar(&uninstallResources, "resources", false,
"removes all Kustomizations previously installed") "removes custom resources such as Kustomizations, GitRepositories and HelmRepositories")
uninstallCmd.Flags().BoolVarP(&uninstallCRDs, "crds", "", false, uninstallCmd.Flags().BoolVar(&uninstallCRDs, "crds", false,
"removes all CRDs previously installed") "removes all CRDs previously installed")
uninstallCmd.Flags().BoolVarP(&uninstallDryRun, "dry-run", "", false, uninstallCmd.Flags().BoolVar(&uninstallDryRun, "dry-run", false,
"only print the object that would be deleted") "only print the object that would be deleted")
uninstallCmd.Flags().BoolVarP(&uninstallSilent, "silent", "s", false, uninstallCmd.Flags().BoolVarP(&uninstallSilent, "silent", "s", false,
"delete components without asking for confirmation") "delete components without asking for confirmation")
@@ -75,18 +77,19 @@ func uninstallCmdRun(cmd *cobra.Command, args []string) error {
} }
} }
if uninstallKustomizations { if uninstallResources {
logger.Actionf("uninstalling kustomizations") logger.Actionf("uninstalling custom resources")
command := fmt.Sprintf("kubectl -n %s delete kustomizations --all --timeout=%s %s", for _, kind := range []string{
namespace, timeout.String(), dryRun) kustomizev1.KustomizationKind,
if _, err := utils.execCommand(ctx, ModeOS, command); err != nil { sourcev1.GitRepositoryKind,
return fmt.Errorf("uninstall failed") sourcev1.HelmRepositoryKind,
} {
command := fmt.Sprintf("kubectl -n %s delete %s --all --timeout=%s %s",
namespace, kind, timeout.String(), dryRun)
if _, err := utils.execCommand(ctx, ModeOS, command); err != nil {
return fmt.Errorf("uninstall failed")
}
} }
// TODO: use the kustomizations snapshots to create a list of objects
// that are subject to deletion and wait for all of them to be terminated
logger.Waitingf("waiting on GC")
time.Sleep(30 * time.Second)
} }
kinds := "namespace,clusterroles,clusterrolebindings" kinds := "namespace,clusterroles,clusterrolebindings"

View File

@@ -9,9 +9,11 @@ The bootstrap sub-commands bootstrap the toolkit components on the targeted Git
### Options ### Options
``` ```
--components strings list of components, accepts comma-separated values (default [source-controller,kustomize-controller,helm-controller,notification-controller]) --components strings list of components, accepts comma-separated values (default [source-controller,kustomize-controller,helm-controller,notification-controller])
-h, --help help for bootstrap -h, --help help for bootstrap
-v, --version string toolkit version (default "latest") --image-pull-secret string Kubernetes secret name used for pulling the toolkit images from a private registry
--registry string container registry where the toolkit images are published (default "docker.io/fluxcd")
-v, --version string toolkit version (default "latest")
``` ```
### Options inherited from parent commands ### Options inherited from parent commands

View File

@@ -54,12 +54,14 @@ tk bootstrap github [flags]
### Options inherited from parent commands ### Options inherited from parent commands
``` ```
--components strings list of components, accepts comma-separated values (default [source-controller,kustomize-controller,helm-controller,notification-controller]) --components strings list of components, accepts comma-separated values (default [source-controller,kustomize-controller,helm-controller,notification-controller])
--kubeconfig string path to the kubeconfig file (default "~/.kube/config") --image-pull-secret string Kubernetes secret name used for pulling the toolkit images from a private registry
--namespace string the namespace scope for this operation (default "gitops-system") --kubeconfig string path to the kubeconfig file (default "~/.kube/config")
--timeout duration timeout for this operation (default 5m0s) --namespace string the namespace scope for this operation (default "gitops-system")
--verbose print generated objects --registry string container registry where the toolkit images are published (default "docker.io/fluxcd")
-v, --version string toolkit version (default "latest") --timeout duration timeout for this operation (default 5m0s)
--verbose print generated objects
-v, --version string toolkit version (default "latest")
``` ```
### SEE ALSO ### SEE ALSO

View File

@@ -50,12 +50,14 @@ tk bootstrap gitlab [flags]
### Options inherited from parent commands ### Options inherited from parent commands
``` ```
--components strings list of components, accepts comma-separated values (default [source-controller,kustomize-controller,helm-controller,notification-controller]) --components strings list of components, accepts comma-separated values (default [source-controller,kustomize-controller,helm-controller,notification-controller])
--kubeconfig string path to the kubeconfig file (default "~/.kube/config") --image-pull-secret string Kubernetes secret name used for pulling the toolkit images from a private registry
--namespace string the namespace scope for this operation (default "gitops-system") --kubeconfig string path to the kubeconfig file (default "~/.kube/config")
--timeout duration timeout for this operation (default 5m0s) --namespace string the namespace scope for this operation (default "gitops-system")
--verbose print generated objects --registry string container registry where the toolkit images are published (default "docker.io/fluxcd")
-v, --version string toolkit version (default "latest") --timeout duration timeout for this operation (default 5m0s)
--verbose print generated objects
-v, --version string toolkit version (default "latest")
``` ```
### SEE ALSO ### SEE ALSO

View File

@@ -31,12 +31,14 @@ tk install [flags]
### Options ### Options
``` ```
--components strings list of components, accepts comma-separated values (default [source-controller,kustomize-controller,helm-controller,notification-controller]) --components strings list of components, accepts comma-separated values (default [source-controller,kustomize-controller,helm-controller,notification-controller])
--dry-run only print the object that would be applied --dry-run only print the object that would be applied
--export write the install manifests to stdout and exit --export write the install manifests to stdout and exit
-h, --help help for install -h, --help help for install
--manifests string path to the manifest directory, dev only --image-pull-secret string Kubernetes secret name used for pulling the toolkit images from a private registry
-v, --version string toolkit version (default "latest") --manifests string path to the manifest directory, dev only
--registry string container registry where the toolkit images are published (default "docker.io/fluxcd")
-v, --version string toolkit version (default "latest")
``` ```
### Options inherited from parent commands ### Options inherited from parent commands

View File

@@ -17,18 +17,18 @@ tk uninstall [flags]
tk uninstall --dry-run --namespace=gitops-system tk uninstall --dry-run --namespace=gitops-system
# Uninstall all components and delete custom resource definitions # Uninstall all components and delete custom resource definitions
tk uninstall --crds --namespace=gitops-system tk uninstall --resources --crds --namespace=gitops-system
``` ```
### Options ### Options
``` ```
--crds removes all CRDs previously installed --crds removes all CRDs previously installed
--dry-run only print the object that would be deleted --dry-run only print the object that would be deleted
-h, --help help for uninstall -h, --help help for uninstall
--kustomizations removes all Kustomizations previously installed --resources removes custom resources such as Kustomizations, GitRepositories and HelmRepositories
-s, --silent delete components without asking for confirmation -s, --silent delete components without asking for confirmation
``` ```
### Options inherited from parent commands ### Options inherited from parent commands

View File

@@ -1,8 +1,8 @@
apiVersion: kustomize.config.k8s.io/v1beta1 apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization kind: Kustomization
resources: resources:
- github.com/fluxcd/kustomize-controller/config//crd?ref=v0.0.5 - github.com/fluxcd/kustomize-controller/config//crd?ref=v0.0.6
- github.com/fluxcd/kustomize-controller/config//manager?ref=v0.0.5 - github.com/fluxcd/kustomize-controller/config//manager?ref=v0.0.6
patchesJson6902: patchesJson6902:
- target: - target:
group: apps group: apps