blob: 000544ea27b691b304c59f6c96930b7bfd9e604e [file]
//
// Licensed to the Apache Software Foundation (ASF) under one or more
// contributor license agreements. See the NOTICE file distributed with
// this work for additional information regarding copyright ownership.
// The ASF licenses this file to You 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 cmd
import (
"fmt"
"github.com/apache/dubbo-kubernetes/cli/pkg/cli"
"github.com/apache/dubbo-kubernetes/cli/pkg/util"
"github.com/apache/dubbo-kubernetes/operator/cmd/cluster"
"github.com/spf13/cobra"
)
type repoArgs struct{}
func addRepoFlags(cmd *cobra.Command, rArgs *repoArgs) {}
func RepoCmd(_ cli.Context, cmd *cobra.Command, clientFactory ClientFactory) *cobra.Command {
rootArgs := &cluster.RootArgs{}
rArgs := &repoArgs{}
ad := addCmd(cmd, clientFactory)
li := listCmd(cmd, clientFactory)
re := removeCmd(cmd, clientFactory)
rc := &cobra.Command{
Use: "repo",
Short: "Manage exist Dubbo sdk module libraries",
Long: "The repo command Manage existing Dubbo SDK module libraries",
Example: ` # Add a new template library.
dubboctl repo add [<name>] [<url>]
# View the list of template library.
dubboctl repo list
# Remove an existing template library.
dubboctl repo remove [<name>]
`,
}
cluster.AddFlags(rc, rootArgs)
addRepoFlags(rc, rArgs)
rc.AddCommand(ad)
rc.AddCommand(li)
rc.AddCommand(re)
return rc
}
func addCmd(cmd *cobra.Command, clientFactory ClientFactory) *cobra.Command {
ac := &cobra.Command{
Use: "add [<name>] [<url>]",
Short: "Add a new template library.",
Long: "The add subcommand is used to add a new template library.",
RunE: func(cmd *cobra.Command, args []string) error {
return runAdd(cmd, args, clientFactory)
},
}
return ac
}
func runAdd(cmd *cobra.Command, args []string, clientFactory ClientFactory) (err error) {
// Adding a repository requires there be a config path structure on disk
if err = util.GetCreatePath(); err != nil {
return
}
// Create a client instance which utilizes the given repositories path.
// Note that this MAY not be in the config structure if the environment
// variable to override said path was provided explicitly.
// be created in XDG_CONFIG_HOME/dubbo even if the repo path environment
// was set to some other location on disk.
client, done := clientFactory()
defer done()
// Preconditions
// If not confirming/prompting, assert the args were both provided.
if len(args) != 2 {
return fmt.Errorf("usage: dubboctl repo add [<name>] [<url>]")
}
// Extract Params
// Populate a struct with the arguments (if provided).
p := struct {
name string
url string
}{}
if len(args) > 0 {
p.name = args[0]
}
if len(args) > 1 {
p.url = args[1]
}
var n string
if n, err = client.Repositories().Add(p.name, p.url); err != nil {
return
}
fmt.Printf("%s Repositories added.\n", n)
return
}
func listCmd(cmd *cobra.Command, clientFactory ClientFactory) *cobra.Command {
lc := &cobra.Command{
Use: "list",
Short: "View the list of template library.",
Long: "The list subcommand is used to view the repositories that have been added.",
Aliases: []string{"ls"},
RunE: func(cmd *cobra.Command, args []string) error {
return runList(cmd, args, clientFactory)
},
}
return lc
}
func runList(cmd *cobra.Command, args []string, clientFactory ClientFactory) (err error) {
client, done := clientFactory()
defer done()
list, err := client.Repositories().All()
if err != nil {
return
}
for _, l := range list {
fmt.Println(l.Name + "\t" + l.URL())
}
return
}
func removeCmd(cmd *cobra.Command, clientFactory ClientFactory) *cobra.Command {
rc := &cobra.Command{
Use: "remove [<name>]",
Short: "Remove an existing template library.",
Long: "The delete subcommand is used to delete a template from an existing repository.",
Aliases: []string{"delete"},
RunE: func(cmd *cobra.Command, args []string) error {
return runRemove(cmd, args, clientFactory)
},
}
return rc
}
func runRemove(cmd *cobra.Command, args []string, clientFactory ClientFactory) (err error) {
client, done := clientFactory()
defer done()
p := struct {
name string
sure bool
}{}
if len(args) > 0 {
p.name = args[0]
}
p.sure = true
if err = client.Repositories().Remove(p.name); err != nil {
return
}
fmt.Printf("%s Repositories removed.\n", p.name)
return
}