forked from operator-framework/operator-sdk
-
Notifications
You must be signed in to change notification settings - Fork 0
/
olm_catalog.go
95 lines (80 loc) · 3.09 KB
/
olm_catalog.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
// Copyright 2018 The Operator-SDK Authors
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package generate
import (
"errors"
"fmt"
"io/ioutil"
"os"
cmdError "github.com/operator-framework/operator-sdk/commands/operator-sdk/error"
"github.com/operator-framework/operator-sdk/pkg/generator"
yaml "gopkg.in/yaml.v2"
"github.com/spf13/cobra"
)
const (
configYaml = "./config/config.yaml"
)
var (
image string
version string
)
func NewGenerateOlmCatalogCmd() *cobra.Command {
olmCatalogCmd := &cobra.Command{
Use: "olm-catalog",
Short: "Generates OLM Catalog manifests",
Long: `olm-catalog generator generates the following OLM Catalog manifests needed to create a catalog entry in OLM:
- Cluster Service Version: deploy/olm-catalog/csv.yaml
- Package: deploy/olm-catalog/package.yaml
- Custom Resource Definition: deploy/olm-catalog/crd.yaml
The following flags are required:
--image: The container image name to set in the CSV to deploy the operator
--version: The version of the current CSV
For example:
$ operator-sdk generate olm-catalog --image=quay.io/example/operator:v0.0.1 --version=0.0.1
`,
Run: olmCatalogFunc,
}
olmCatalogCmd.Flags().StringVar(&image, "image", "", "The container image name to set in the CSV to deploy the operator e.g: quay.io/example/operator:v0.0.1")
olmCatalogCmd.MarkFlagRequired("image")
olmCatalogCmd.Flags().StringVar(&version, "version", "", "The version of the current CSV e.g: 0.0.1")
olmCatalogCmd.MarkFlagRequired("version")
return olmCatalogCmd
}
func olmCatalogFunc(cmd *cobra.Command, args []string) {
if len(args) != 0 {
cmdError.ExitWithError(cmdError.ExitBadArgs, errors.New("olm-catalog command doesn't accept any arguments."))
}
verifyFlags()
fmt.Fprintln(os.Stdout, "Generating OLM catalog manifests")
c := &generator.Config{}
fp, err := ioutil.ReadFile(configYaml)
if err != nil {
cmdError.ExitWithError(cmdError.ExitError, fmt.Errorf("failed to read config file %v: (%v)", configYaml, err))
}
if err = yaml.Unmarshal(fp, c); err != nil {
cmdError.ExitWithError(cmdError.ExitError, fmt.Errorf("failed to unmarshal config file %v: (%v)", configYaml, err))
}
// Generate OLM catalog manifests
if err = generator.RenderOlmCatalog(c, image, version); err != nil {
cmdError.ExitWithError(cmdError.ExitError, fmt.Errorf("failed to generate deploy/olm-catalog: (%v)", err))
}
}
func verifyFlags() {
if len(image) == 0 {
cmdError.ExitWithError(cmdError.ExitBadArgs, errors.New("--image must not have empty value"))
}
if len(version) == 0 {
cmdError.ExitWithError(cmdError.ExitBadArgs, errors.New("--version must not have empty value"))
}
}