Skip to content

Commit

Permalink
Generate with repl KOTS template functions
Browse files Browse the repository at this point in the history
  • Loading branch information
marccampbell committed Feb 26, 2020
1 parent 26e2fcf commit f3e0c3e
Show file tree
Hide file tree
Showing 5 changed files with 50 additions and 26 deletions.
2 changes: 1 addition & 1 deletion .github/workflows/build-and-test.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -97,7 +97,7 @@ jobs:
path: bin/
- run: chmod +x bin/kubectl-schemahero

- run: ./bin/kubectl-schemahero install --yaml --out-dir ./kots
- run: ./bin/kubectl-schemahero install --yaml --out-dir ./kots --enterprise

- name: Lint the release
id: lint-action
Expand Down
9 changes: 9 additions & 0 deletions kots/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
cluster-role-binding.yaml
cluster-role.yaml
databases_crd.yaml
tables_crd.yaml
migrations_crd.yaml
service.yaml
namespace.yaml
secret.yaml
manager.yaml
5 changes: 3 additions & 2 deletions pkg/cli/schemaherokubectlcli/install.go
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ func InstallCmd() *cobra.Command {
}

if v.GetBool("yaml") {
manifests, err := installer.GenerateOperatorYAML(v.GetString("extensions-api"))
manifests, err := installer.GenerateOperatorYAML(v.GetString("extensions-api"), v.GetBool("enterprise"))
if err != nil {
fmt.Printf("Error: %s\n", err.Error())
return err
Expand Down Expand Up @@ -61,7 +61,7 @@ func InstallCmd() *cobra.Command {
}
return nil
}
if err := installer.InstallOperator(); err != nil {
if err := installer.InstallOperator(v.GetBool("enterprise")); err != nil {
fmt.Printf("Error: %s\n", err.Error())
return err
}
Expand All @@ -74,6 +74,7 @@ func InstallCmd() *cobra.Command {
cmd.Flags().Bool("yaml", false, "If present, don't install the operator, just generate the yaml")
cmd.Flags().String("out-dir", "", "If present and --yaml also specified, write all of the manifests to this directory")
cmd.Flags().String("extensions-api", "", "version of apiextensions.k8s.io to generate. if unset, will detect best version from kubernetes version")
cmd.Flags().Bool("enterprise", false, "If preset, generate enterprise YAML with KOTS template functions. This probably isn't what you want")

return cmd
}
8 changes: 4 additions & 4 deletions pkg/installer/installer.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ import (
"sigs.k8s.io/controller-runtime/pkg/client/config"
)

func GenerateOperatorYAML(requestedExtensionsAPIVersion string) (map[string][]byte, error) {
func GenerateOperatorYAML(requestedExtensionsAPIVersion string, isEnterprise bool) (map[string][]byte, error) {
manifests := map[string][]byte{}

useExtensionsV1Beta1 := false
Expand Down Expand Up @@ -65,7 +65,7 @@ func GenerateOperatorYAML(requestedExtensionsAPIVersion string) (map[string][]by
}
manifests["secret.yaml"] = manifest

manifest, err = managerYAML()
manifest, err = managerYAML(isEnterprise)
if err != nil {
return nil, errors.Wrap(err, "failed to get manager")
}
Expand All @@ -74,7 +74,7 @@ func GenerateOperatorYAML(requestedExtensionsAPIVersion string) (map[string][]by
return manifests, nil
}

func InstallOperator() error {
func InstallOperator(isEnterprise bool) error {
cfg, err := config.GetConfig()
if err != nil {
return errors.Wrap(err, "failed to get kubernetes config")
Expand Down Expand Up @@ -118,7 +118,7 @@ func InstallOperator() error {
return errors.Wrap(err, "failed to create secret")
}

if err := ensureManager(client); err != nil {
if err := ensureManager(client, isEnterprise); err != nil {
return errors.Wrap(err, "failed to create manager")
}

Expand Down
52 changes: 33 additions & 19 deletions pkg/installer/manager.go
Original file line number Diff line number Diff line change
Expand Up @@ -145,24 +145,24 @@ func secret() *corev1.Secret {
}
}

func managerYAML() ([]byte, error) {
func managerYAML(isEnterprise bool) ([]byte, error) {
s := json.NewYAMLSerializer(json.DefaultMetaFactory, scheme.Scheme, scheme.Scheme)
var result bytes.Buffer
if err := s.Encode(manager(), &result); err != nil {
if err := s.Encode(manager(isEnterprise), &result); err != nil {
return nil, errors.Wrap(err, "failed to marshal manager")
}

return result.Bytes(), nil
}

func ensureManager(clientset *kubernetes.Clientset) error {
func ensureManager(clientset *kubernetes.Clientset, isEnterprise bool) error {
_, err := clientset.AppsV1().StatefulSets("schemahero-system").Get("schemahero", metav1.GetOptions{})
if err != nil {
if !kuberneteserrors.IsNotFound(err) {
return errors.Wrap(err, "failed to get statefulset")
}

_, err := clientset.AppsV1().StatefulSets("schemahero-system").Create(manager())
_, err := clientset.AppsV1().StatefulSets("schemahero-system").Create(manager(isEnterprise))
if err != nil {
return errors.Wrap(err, "failed to create statefulset")
}
Expand All @@ -171,7 +171,34 @@ func ensureManager(clientset *kubernetes.Clientset) error {
return nil
}

func manager() *appsv1.StatefulSet {
func manager(isEnterprise bool) *appsv1.StatefulSet {
env := []corev1.EnvVar{
{
Name: "POD_NAMESPACE",
ValueFrom: &corev1.EnvVarSource{
FieldRef: &corev1.ObjectFieldSelector{
FieldPath: "metadata.namespace",
},
},
},
{
Name: "SECRET_NAME",
Value: "webhook-server-secret",
},
}

if isEnterprise {
env = append(env, corev1.EnvVar{
Name: "SCHEMAHERO_IMAGE_NAME",
Value: `repl{{ LocalImageName "schemahero/schemahero:0.8.0"}}`,
})

env = append(env, corev1.EnvVar{
Name: "SCHEMAHERO_IMAGE_PULLSECRET",
Value: `repl{{ LocalRegistryImagePullSecret }}`,
})
}

return &appsv1.StatefulSet{
TypeMeta: metav1.TypeMeta{
APIVersion: "apps/v1",
Expand Down Expand Up @@ -215,20 +242,7 @@ func manager() *appsv1.StatefulSet {
ImagePullPolicy: corev1.PullAlways,
Name: "manager",
Command: []string{"/manager"},
Env: []corev1.EnvVar{
{
Name: "POD_NAMESPACE",
ValueFrom: &corev1.EnvVarSource{
FieldRef: &corev1.ObjectFieldSelector{
FieldPath: "metadata.namespace",
},
},
},
{
Name: "SECRET_NAME",
Value: "webhook-server-secret",
},
},
Env: env,
Resources: corev1.ResourceRequirements{
Limits: corev1.ResourceList{
corev1.ResourceCPU: resource.MustParse("1"),
Expand Down

0 comments on commit f3e0c3e

Please sign in to comment.