Compare commits
8 Commits
export_fun
...
for-andrey
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
9248ec8c6b | ||
|
|
1dd51a5bf6 | ||
|
|
023956aba6 | ||
|
|
f8630eb26a | ||
|
|
42b10a87ea | ||
|
|
b7f7a65b5c | ||
|
|
36b6d6f708 | ||
|
|
b9fc829256 |
@@ -2,7 +2,6 @@ package main
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"errors"
|
"errors"
|
||||||
"github.com/Masterminds/semver/v3"
|
|
||||||
"github.com/qlik-oss/sense-installer/pkg/qliksense"
|
"github.com/qlik-oss/sense-installer/pkg/qliksense"
|
||||||
"github.com/spf13/cobra"
|
"github.com/spf13/cobra"
|
||||||
)
|
)
|
||||||
@@ -17,9 +16,6 @@ func fetchCmd(q *qliksense.Qliksense) *cobra.Command {
|
|||||||
if len(args) != 1 {
|
if len(args) != 1 {
|
||||||
return errors.New("requires a version (i.e. v1.0.0)")
|
return errors.New("requires a version (i.e. v1.0.0)")
|
||||||
}
|
}
|
||||||
if _, err := semver.NewVersion(args[0]); err != nil {
|
|
||||||
return errors.New("is it not a valid version. should be something like this v1.0.0")
|
|
||||||
}
|
|
||||||
return nil
|
return nil
|
||||||
},
|
},
|
||||||
RunE: func(cmd *cobra.Command, args []string) error {
|
RunE: func(cmd *cobra.Command, args []string) error {
|
||||||
|
|||||||
@@ -2,7 +2,6 @@ package main
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"errors"
|
"errors"
|
||||||
"github.com/Masterminds/semver/v3"
|
|
||||||
"github.com/qlik-oss/sense-installer/pkg/qliksense"
|
"github.com/qlik-oss/sense-installer/pkg/qliksense"
|
||||||
"github.com/spf13/cobra"
|
"github.com/spf13/cobra"
|
||||||
)
|
)
|
||||||
@@ -18,9 +17,6 @@ func installCmd(q *qliksense.Qliksense) *cobra.Command {
|
|||||||
if len(args) != 1 {
|
if len(args) != 1 {
|
||||||
return errors.New("requires a version (i.e. v1.0.0)")
|
return errors.New("requires a version (i.e. v1.0.0)")
|
||||||
}
|
}
|
||||||
if _, err := semver.NewVersion(args[0]); err != nil {
|
|
||||||
return errors.New("is it not a valid version. should be something like this v1.0.0")
|
|
||||||
}
|
|
||||||
return nil
|
return nil
|
||||||
},
|
},
|
||||||
RunE: func(cmd *cobra.Command, args []string) error {
|
RunE: func(cmd *cobra.Command, args []string) error {
|
||||||
@@ -32,6 +28,7 @@ func installCmd(q *qliksense.Qliksense) *cobra.Command {
|
|||||||
f.StringVarP(&opts.AcceptEULA, "acceptEULA", "a", "", "AcceptEULA for qliksense")
|
f.StringVarP(&opts.AcceptEULA, "acceptEULA", "a", "", "AcceptEULA for qliksense")
|
||||||
f.StringVarP(&opts.Namespace, "namespace", "n", "", "Namespace where to install the qliksense")
|
f.StringVarP(&opts.Namespace, "namespace", "n", "", "Namespace where to install the qliksense")
|
||||||
f.StringVarP(&opts.StorageClass, "storageClass", "s", "", "Storage class for qliksense")
|
f.StringVarP(&opts.StorageClass, "storageClass", "s", "", "Storage class for qliksense")
|
||||||
|
f.StringVarP(&opts.MongoDbUri, "mongoDbUri", "m", "", "mongoDbUri for qliksense (i.e. mongodb://qliksense-mongodb:27017/qliksense?ssl=false)")
|
||||||
|
|
||||||
return c
|
return c
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -41,7 +41,9 @@ func initAndExecute() error {
|
|||||||
qliksense.LogDebugMessage("QliksenseHomeDir: %s", qlikSenseHome)
|
qliksense.LogDebugMessage("QliksenseHomeDir: %s", qlikSenseHome)
|
||||||
qliksense.SetUpQliksenseDefaultContext(qlikSenseHome)
|
qliksense.SetUpQliksenseDefaultContext(qlikSenseHome)
|
||||||
|
|
||||||
if err = rootCmd(qliksense.New(qlikSenseHome)).Execute(); err != nil {
|
if qliksenseClient, err := qliksense.New(qlikSenseHome); err != nil {
|
||||||
|
return err
|
||||||
|
} else if err := rootCmd(qliksenseClient).Execute(); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -63,7 +65,11 @@ func setUpPaths() (string, error) {
|
|||||||
}
|
}
|
||||||
qlikSenseHome = filepath.Join(homeDir, qlikSenseDirVar)
|
qlikSenseHome = filepath.Join(homeDir, qlikSenseDirVar)
|
||||||
}
|
}
|
||||||
os.Mkdir(qlikSenseHome, os.ModePerm)
|
|
||||||
|
if err := os.MkdirAll(qlikSenseHome, os.ModePerm); err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
|
||||||
return qlikSenseHome, nil
|
return qlikSenseHome, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
4
go.mod
4
go.mod
@@ -16,7 +16,7 @@ replace (
|
|||||||
k8s.io/apimachinery => k8s.io/apimachinery v0.0.0-20191004115801-a2eda9f80ab8
|
k8s.io/apimachinery => k8s.io/apimachinery v0.0.0-20191004115801-a2eda9f80ab8
|
||||||
k8s.io/client-go => k8s.io/client-go v0.0.0-20191016111102-bec269661e48
|
k8s.io/client-go => k8s.io/client-go v0.0.0-20191016111102-bec269661e48
|
||||||
k8s.io/kubectl => k8s.io/kubectl v0.0.0-20191016120415-2ed914427d51
|
k8s.io/kubectl => k8s.io/kubectl v0.0.0-20191016120415-2ed914427d51
|
||||||
sigs.k8s.io/kustomize/api => github.com/qlik-oss/kustomize/api v0.3.3-0.20200129153315-09eb26c762c8
|
sigs.k8s.io/kustomize/api => github.com/qlik-oss/kustomize/api v0.3.3-0.20200206224201-2e697eccbad9
|
||||||
)
|
)
|
||||||
|
|
||||||
require (
|
require (
|
||||||
@@ -52,7 +52,7 @@ require (
|
|||||||
github.com/mitchellh/go-homedir v1.1.0
|
github.com/mitchellh/go-homedir v1.1.0
|
||||||
github.com/morikuni/aec v1.0.0 // indirect
|
github.com/morikuni/aec v1.0.0 // indirect
|
||||||
github.com/pkg/errors v0.8.1
|
github.com/pkg/errors v0.8.1
|
||||||
github.com/qlik-oss/k-apis v0.0.4
|
github.com/qlik-oss/k-apis v0.0.8
|
||||||
github.com/sirupsen/logrus v1.4.2
|
github.com/sirupsen/logrus v1.4.2
|
||||||
github.com/spf13/cobra v0.0.5
|
github.com/spf13/cobra v0.0.5
|
||||||
github.com/spf13/viper v1.6.1
|
github.com/spf13/viper v1.6.1
|
||||||
|
|||||||
8
go.sum
8
go.sum
@@ -909,8 +909,16 @@ github.com/qlik-oss/k-apis v0.0.3 h1:LJTQik87Rcsl+rphXfyPtxQc9UgQy+XGdT+epQqi+YY
|
|||||||
github.com/qlik-oss/k-apis v0.0.3/go.mod h1:KOFzKVIdRqp47ytnHg3+9zb8fTlnrQjO6aKiwcrCJUE=
|
github.com/qlik-oss/k-apis v0.0.3/go.mod h1:KOFzKVIdRqp47ytnHg3+9zb8fTlnrQjO6aKiwcrCJUE=
|
||||||
github.com/qlik-oss/k-apis v0.0.4 h1:fNX1LsGbNZtR7X/0o/2HAnQkuEJs6JcnedHzacBcbfM=
|
github.com/qlik-oss/k-apis v0.0.4 h1:fNX1LsGbNZtR7X/0o/2HAnQkuEJs6JcnedHzacBcbfM=
|
||||||
github.com/qlik-oss/k-apis v0.0.4/go.mod h1:KOFzKVIdRqp47ytnHg3+9zb8fTlnrQjO6aKiwcrCJUE=
|
github.com/qlik-oss/k-apis v0.0.4/go.mod h1:KOFzKVIdRqp47ytnHg3+9zb8fTlnrQjO6aKiwcrCJUE=
|
||||||
|
github.com/qlik-oss/k-apis v0.0.5 h1:CpiujicAo+clZqy7Pe3CDAqNhTx8cCC3qmzz3ovG7OU=
|
||||||
|
github.com/qlik-oss/k-apis v0.0.5/go.mod h1:KOFzKVIdRqp47ytnHg3+9zb8fTlnrQjO6aKiwcrCJUE=
|
||||||
|
github.com/qlik-oss/k-apis v0.0.7 h1:IBp5U5S9GM889J34yKXEHWEQBA+2rv/dWil+YVGTAd4=
|
||||||
|
github.com/qlik-oss/k-apis v0.0.7/go.mod h1:KOFzKVIdRqp47ytnHg3+9zb8fTlnrQjO6aKiwcrCJUE=
|
||||||
|
github.com/qlik-oss/k-apis v0.0.8 h1:8ZZefgFT+rI4PuE/sp3Wpc+d5LtZBKZuDb2G/YelTOs=
|
||||||
|
github.com/qlik-oss/k-apis v0.0.8/go.mod h1:KOFzKVIdRqp47ytnHg3+9zb8fTlnrQjO6aKiwcrCJUE=
|
||||||
github.com/qlik-oss/kustomize/api v0.3.3-0.20200129153315-09eb26c762c8 h1:WLVkArXf58T+3SHDvSddE8P6OjkeeUtGEgHk8LDdfeo=
|
github.com/qlik-oss/kustomize/api v0.3.3-0.20200129153315-09eb26c762c8 h1:WLVkArXf58T+3SHDvSddE8P6OjkeeUtGEgHk8LDdfeo=
|
||||||
github.com/qlik-oss/kustomize/api v0.3.3-0.20200129153315-09eb26c762c8/go.mod h1:OCt7FTrRVHj4kmR2xLJJUIqu00BTr6GeF09hSmM17Kw=
|
github.com/qlik-oss/kustomize/api v0.3.3-0.20200129153315-09eb26c762c8/go.mod h1:OCt7FTrRVHj4kmR2xLJJUIqu00BTr6GeF09hSmM17Kw=
|
||||||
|
github.com/qlik-oss/kustomize/api v0.3.3-0.20200206224201-2e697eccbad9 h1:iqeqTS4zjp6rPEaxmFB7pemA2CMjOEN5dYSXZaQ82uw=
|
||||||
|
github.com/qlik-oss/kustomize/api v0.3.3-0.20200206224201-2e697eccbad9/go.mod h1:OCt7FTrRVHj4kmR2xLJJUIqu00BTr6GeF09hSmM17Kw=
|
||||||
github.com/quasilyte/go-consistent v0.0.0-20190521200055-c6f3937de18c/go.mod h1:5STLWrekHfjyYwxBRVRXNOSewLJ3PWfDJd1VyTS21fI=
|
github.com/quasilyte/go-consistent v0.0.0-20190521200055-c6f3937de18c/go.mod h1:5STLWrekHfjyYwxBRVRXNOSewLJ3PWfDJd1VyTS21fI=
|
||||||
github.com/rainycape/unidecode v0.0.0-20150907023854-cb7f23ec59be h1:ta7tUOvsPHVHGom5hKW5VXNc2xZIkfCKP8iaqOyYtUQ=
|
github.com/rainycape/unidecode v0.0.0-20150907023854-cb7f23ec59be h1:ta7tUOvsPHVHGom5hKW5VXNc2xZIkfCKP8iaqOyYtUQ=
|
||||||
github.com/rainycape/unidecode v0.0.0-20150907023854-cb7f23ec59be/go.mod h1:MIDFMn7db1kT65GmV94GzpX9Qdi7N/pQlwb+AN8wh+Q=
|
github.com/rainycape/unidecode v0.0.0-20150907023854-cb7f23ec59be/go.mod h1:MIDFMn7db1kT65GmV94GzpX9Qdi7N/pQlwb+AN8wh+Q=
|
||||||
|
|||||||
@@ -2,10 +2,12 @@ package qliksense
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"github.com/mitchellh/go-homedir"
|
"os"
|
||||||
"path"
|
"path"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
|
|
||||||
|
"github.com/mitchellh/go-homedir"
|
||||||
|
|
||||||
"github.com/qlik-oss/k-apis/pkg/cr"
|
"github.com/qlik-oss/k-apis/pkg/cr"
|
||||||
qapi "github.com/qlik-oss/sense-installer/pkg/api"
|
qapi "github.com/qlik-oss/sense-installer/pkg/api"
|
||||||
"gopkg.in/yaml.v2"
|
"gopkg.in/yaml.v2"
|
||||||
@@ -24,14 +26,19 @@ func (q *Qliksense) ConfigApplyQK8s() error {
|
|||||||
fmt.Println("cannot get the current-context cr", err)
|
fmt.Println("cannot get the current-context cr", err)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
return applyConfigToK8s(qcr)
|
return q.applyConfigToK8s(qcr)
|
||||||
}
|
}
|
||||||
|
|
||||||
func applyConfigToK8s(qcr *qapi.QliksenseCR) error {
|
func (q *Qliksense) applyConfigToK8s(qcr *qapi.QliksenseCR) error {
|
||||||
// apply qliksense-init crd first
|
// apply qliksense-init crd first
|
||||||
mroot := qcr.Spec.GetManifestsRoot()
|
mroot := qcr.Spec.GetManifestsRoot()
|
||||||
qInitMsPath := filepath.Join(mroot, Q_INIT_CRD_PATH)
|
qInitMsPath := filepath.Join(mroot, Q_INIT_CRD_PATH)
|
||||||
|
|
||||||
|
if err := os.Setenv("EJSON_KEYDIR", q.QliksenseEjsonKeyDir); err != nil {
|
||||||
|
fmt.Printf("error setting EJSON_KEYDIR environment variable: %v\n", err)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
qInitByte, err := executeKustomizeBuild(qInitMsPath)
|
qInitByte, err := executeKustomizeBuild(qInitMsPath)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Println("cannot generate crds for qliksense-init", err)
|
fmt.Println("cannot generate crds for qliksense-init", err)
|
||||||
|
|||||||
@@ -29,7 +29,7 @@ func fetchAndUpdateCR(qConfig *qapi.QliksenseConfig, version string) error {
|
|||||||
|
|
||||||
if repo, err := kapis_git.CloneRepository(destDir, QLIK_GIT_REPO, nil); err != nil {
|
if repo, err := kapis_git.CloneRepository(destDir, QLIK_GIT_REPO, nil); err != nil {
|
||||||
return err
|
return err
|
||||||
} else if err = kapis_git.Checkout(repo, version, "", nil); err != nil {
|
} else if err = kapis_git.Checkout(repo, version, version, nil); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
qcr.Spec.ManifestsRoot = qConfig.BuildCurrentManifestsRoot(version)
|
qcr.Spec.ManifestsRoot = qConfig.BuildCurrentManifestsRoot(version)
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ package qliksense
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
|
||||||
qapi "github.com/qlik-oss/sense-installer/pkg/api"
|
qapi "github.com/qlik-oss/sense-installer/pkg/api"
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -9,6 +10,7 @@ type InstallCommandOptions struct {
|
|||||||
AcceptEULA string
|
AcceptEULA string
|
||||||
Namespace string
|
Namespace string
|
||||||
StorageClass string
|
StorageClass string
|
||||||
|
MongoDbUri string
|
||||||
}
|
}
|
||||||
|
|
||||||
func (q *Qliksense) InstallQK8s(version string, opts *InstallCommandOptions) error {
|
func (q *Qliksense) InstallQK8s(version string, opts *InstallCommandOptions) error {
|
||||||
@@ -39,15 +41,21 @@ func (q *Qliksense) InstallQK8s(version string, opts *InstallCommandOptions) err
|
|||||||
if opts.AcceptEULA != "" {
|
if opts.AcceptEULA != "" {
|
||||||
qcr.Spec.AddToConfigs("qliksense", "acceptEULA", opts.AcceptEULA)
|
qcr.Spec.AddToConfigs("qliksense", "acceptEULA", opts.AcceptEULA)
|
||||||
}
|
}
|
||||||
|
if opts.MongoDbUri != "" {
|
||||||
|
qcr.Spec.AddToSecrets("qliksense", "mongoDbUri", opts.MongoDbUri)
|
||||||
|
}
|
||||||
if opts.StorageClass != "" {
|
if opts.StorageClass != "" {
|
||||||
qcr.Spec.StorageClassName = opts.StorageClass
|
qcr.Spec.StorageClassName = opts.StorageClass
|
||||||
}
|
}
|
||||||
if opts.Namespace != "" {
|
if opts.Namespace != "" {
|
||||||
qcr.Spec.NameSpace = opts.Namespace
|
qcr.Spec.NameSpace = opts.Namespace
|
||||||
}
|
}
|
||||||
|
// during install always rotate JWT keys
|
||||||
|
// ref: https://github.com/qlik-oss/k-apis/blob/68414dd6c000d4acb15c8cfb3a6b2c4cfa707510/pkg/cr/cr-main.go#L104
|
||||||
|
qcr.Spec.RotateKeys = "yes"
|
||||||
|
qcr.Spec.ReleaseName = qcr.Metadata.Name
|
||||||
qConfig.WriteCurrentContextCR(qcr)
|
qConfig.WriteCurrentContextCR(qcr)
|
||||||
if err := applyConfigToK8s(qcr); err != nil {
|
if err := q.applyConfigToK8s(qcr); err != nil {
|
||||||
fmt.Println("cannot do kubectl apply on manifests")
|
fmt.Println("cannot do kubectl apply on manifests")
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,19 +2,29 @@
|
|||||||
package qliksense
|
package qliksense
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"os"
|
||||||
|
"path"
|
||||||
|
|
||||||
"github.com/gobuffalo/packr/v2"
|
"github.com/gobuffalo/packr/v2"
|
||||||
)
|
)
|
||||||
|
|
||||||
// Qliksense is the logic behind the qliksense client
|
// Qliksense is the logic behind the qliksense client
|
||||||
type Qliksense struct {
|
type Qliksense struct {
|
||||||
QliksenseHome string
|
QliksenseHome string
|
||||||
CrdBox *packr.Box
|
QliksenseEjsonKeyDir string
|
||||||
|
CrdBox *packr.Box ``
|
||||||
}
|
}
|
||||||
|
|
||||||
// New qliksense client, initialized with useful defaults.
|
// New qliksense client, initialized with useful defaults.
|
||||||
func New(qliksenseHome string) *Qliksense {
|
func New(qliksenseHome string) (*Qliksense, error) {
|
||||||
return &Qliksense{
|
qliksenseClient := &Qliksense{
|
||||||
QliksenseHome: qliksenseHome,
|
QliksenseHome: qliksenseHome,
|
||||||
CrdBox: packr.New("crds", "./crds"),
|
CrdBox: packr.New("crds", "./crds"),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
qliksenseClient.QliksenseEjsonKeyDir = path.Join(qliksenseHome, "ejson", "keys")
|
||||||
|
if err := os.MkdirAll(qliksenseClient.QliksenseEjsonKeyDir, os.ModePerm); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return qliksenseClient, nil
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user