internal/cmd/integrations/create.go (135 lines of code) (raw):
// Copyright 2021 Google LLC
//
// 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 integrations
import (
"encoding/json"
"fmt"
"internal/apiclient"
"internal/client/integrations"
"internal/clilog"
"internal/cmd/utils"
"os"
"strings"
"github.com/spf13/cobra"
"github.com/spf13/pflag"
)
// CreateCmd to list Integrations
var CreateCmd = &cobra.Command{
Use: "create",
Short: "Create an integration flow with a draft version",
Long: "Create an integration flow with a draft version",
Args: func(cmd *cobra.Command, args []string) (err error) {
cmdProject := cmd.Flag("proj")
cmdRegion := cmd.Flag("reg")
basic := cmd.Flag("basic").Value.String()
configVarsJson := utils.GetStringParam(cmd.Flag("config-vars-json"))
configVarsFile := utils.GetStringParam(cmd.Flag("config-vars"))
if basic != "" && publish {
return fmt.Errorf("cannot combine basic and publish flags")
}
if configVarsFile != "" && configVarsJson != "" {
return fmt.Errorf("cannot use config-vars and config-vars-json flags together")
}
if !publish && (configVarsFile != "" || configVarsJson != "") {
return fmt.Errorf("cannot use config-vars and config-vars-json flags when publish is false")
}
if err = apiclient.SetRegion(utils.GetStringParam(cmdRegion)); err != nil {
return err
}
cmd.Flags().VisitAll(func(f *pflag.Flag) {
clilog.Debug.Printf("%s: %s\n", f.Name, f.Value)
})
return apiclient.SetProjectID(utils.GetStringParam(cmdProject))
},
RunE: func(cmd *cobra.Command, args []string) (err error) {
cmd.SilenceUsage = true
var overridesContent, contents []byte
name := utils.GetStringParam(cmd.Flag("name"))
userLabel := utils.GetStringParam(cmd.Flag("user-label"))
snapshot := utils.GetStringParam(cmd.Flag("snapshot"))
configVarsJson := utils.GetStringParam(cmd.Flag("config-vars-json"))
configVarsFile := utils.GetStringParam(cmd.Flag("config-vars"))
basic := utils.GetBasicInfo(cmd, "basic")
if configVarsFile != "" {
if _, err := os.Stat(configVarsFile); os.IsNotExist(err) {
return err
}
contents, err = os.ReadFile(configVarsFile)
if err != nil {
return err
}
}
if configVarsJson != "" {
contents = []byte(configVarsJson)
}
if _, err := os.Stat(integrationFile); os.IsNotExist(err) {
return err
}
content, err := os.ReadFile(integrationFile)
if err != nil {
return err
}
if _, err := os.Stat(integrationFile); os.IsNotExist(err) {
return err
}
if overridesFile != "" {
overridesContent, err = os.ReadFile(overridesFile)
if err != nil {
return err
}
}
if publish {
apiclient.DisableCmdPrintHttpResponse()
}
respBody, err := integrations.CreateVersion(name, content, overridesContent, snapshot,
userLabel, grantPermission, basic)
if err != nil {
return err
}
if publish {
apiclient.EnableCmdPrintHttpResponse()
var integrationMap map[string]interface{}
err = json.Unmarshal(respBody, &integrationMap)
if err != nil {
return err
}
version := integrationMap["name"].(string)[strings.LastIndex(integrationMap["name"].(string), "/")+1:]
if version != "" {
_, err = integrations.Publish(name, version, contents)
} else {
return fmt.Errorf("unable to extract version id from integration")
}
}
return err
},
Example: `Create a new Inegration Version with a user label: ` + GetExample(0) + `
Create a new Inegration Version with overrides: ` + GetExample(1) + `
Create a new Inegration Version and publish it: ` + GetExample(2) + `,
Create a new Inegration Version and return a basic response: ` + GetExample(13),
}
var (
integrationFile, overridesFile string
grantPermission, publish bool
)
func init() {
var name, userLabel, snapshot, configVars, configVarsJson, basic string
CreateCmd.Flags().StringVarP(&name, "name", "n",
"", "Integration flow name")
CreateCmd.Flags().StringVarP(&integrationFile, "file", "f",
"", "Integration flow JSON file path")
CreateCmd.Flags().StringVarP(&overridesFile, "overrides", "o",
"", "Integration flow overrides file path")
CreateCmd.Flags().StringVarP(&snapshot, "snapshot", "s",
"", "Integration version snapshot number")
CreateCmd.Flags().StringVarP(&userLabel, "userlabel", "u",
"", "Integration version userlabel")
CreateCmd.Flags().BoolVarP(&grantPermission, "grant-permission", "g",
false, "Grant the service account permission for integration triggers; default is false")
CreateCmd.Flags().BoolVarP(&publish, "publish", "",
false, "Publish the integration after successful creation; default is false")
CreateCmd.Flags().StringVarP(&basic, "basic", "",
"", "Returns version and snapshot only in the response; default is false")
CreateCmd.Flags().StringVarP(&configVars, "config-vars", "",
"", "Path to file containing config variables")
CreateCmd.Flags().StringVarP(&configVarsJson, "config-vars-json", "",
"", "JSON string containing the config variables")
_ = CreateCmd.MarkFlagRequired("name")
_ = CreateCmd.MarkFlagRequired("file")
}