blob: 25a0a269c3541533712a88578822c79645b79d74 [file] [log] [blame]
// Licensed to 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. Apache Software Foundation (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/go-resty/resty/v2"
"github.com/spf13/cobra"
"google.golang.org/protobuf/encoding/protojson"
commonv1 "github.com/apache/skywalking-banyandb/api/proto/banyandb/common/v1"
databasev1 "github.com/apache/skywalking-banyandb/api/proto/banyandb/database/v1"
"github.com/apache/skywalking-banyandb/pkg/version"
)
func newGroupCmd() *cobra.Command {
groupCmd := &cobra.Command{
Use: "group",
Version: version.Build(),
Short: "Group operation",
}
createCmd := &cobra.Command{
Use: "create -f [file|dir|-]",
Version: version.Build(),
Short: "Create groups from files",
RunE: func(cmd *cobra.Command, _ []string) (err error) {
return rest(func() ([]reqBody, error) { return parseNameFromYAML(cmd.InOrStdin()) },
func(request request) (*resty.Response, error) {
g := new(commonv1.Group)
err := protojson.Unmarshal(request.data, g)
if err != nil {
return nil, err
}
cr := &databasev1.GroupRegistryServiceCreateRequest{
Group: g,
}
b, err := protojson.Marshal(cr)
if err != nil {
return nil, err
}
return request.req.SetBody(b).Post(getPath("/api/v1/group/schema"))
},
func(_ int, reqBody reqBody, _ []byte) error {
fmt.Printf("group %s is created", reqBody.name)
fmt.Println()
return nil
}, enableTLS, insecure, grpcCert)
},
}
updateCmd := &cobra.Command{
Use: "update -f [file|dir|-]",
Version: version.Build(),
Short: "Update groups from files",
RunE: func(cmd *cobra.Command, _ []string) (err error) {
return rest(func() ([]reqBody, error) { return parseNameFromYAML(cmd.InOrStdin()) },
func(request request) (*resty.Response, error) {
g := new(commonv1.Group)
err := protojson.Unmarshal(request.data, g)
if err != nil {
return nil, err
}
cr := &databasev1.GroupRegistryServiceUpdateRequest{
Group: g,
}
b, err := protojson.Marshal(cr)
if err != nil {
return nil, err
}
return request.req.SetBody(b).SetPathParam("group", request.name).Put(getPath("/api/v1/group/schema/{group}"))
},
func(_ int, reqBody reqBody, _ []byte) error {
fmt.Printf("group %s is updated", reqBody.name)
fmt.Println()
return nil
}, enableTLS, insecure, grpcCert)
},
}
bindFileFlag(createCmd, updateCmd)
getCmd := &cobra.Command{
Use: "get [-g group]",
Version: version.Build(),
Short: "Get a group",
RunE: func(_ *cobra.Command, _ []string) (err error) {
return rest(parseFromFlags, func(request request) (*resty.Response, error) {
return request.req.SetPathParam("group", request.group).Get(getPath("/api/v1/group/schema/{group}"))
}, yamlPrinter, enableTLS, insecure, grpcCert)
},
}
deleteCmd := &cobra.Command{
Use: "delete [-g group]",
Version: version.Build(),
Short: "Delete a group",
RunE: func(_ *cobra.Command, _ []string) (err error) {
return rest(parseFromFlags, func(request request) (*resty.Response, error) {
return request.req.SetPathParam("group", request.group).Delete(getPath("/api/v1/group/schema/{group}"))
},
func(_ int, reqBody reqBody, _ []byte) error {
fmt.Printf("group %s is deleted", reqBody.group)
fmt.Println()
return nil
}, enableTLS, insecure, grpcCert)
},
}
listCmd := &cobra.Command{
Use: "list",
Version: version.Build(),
Short: "List all groups",
RunE: func(_ *cobra.Command, _ []string) (err error) {
return rest(nil, func(request request) (*resty.Response, error) {
return request.req.Get(getPath("/api/v1/group/schema/lists"))
}, yamlPrinter, enableTLS, insecure, grpcCert)
},
}
bindTLSRelatedFlag(createCmd, updateCmd, listCmd, getCmd, deleteCmd)
groupCmd.AddCommand(createCmd, updateCmd, listCmd, getCmd, deleteCmd)
return groupCmd
}