Skip to content

Commit

Permalink
chore: enhance kbcli backuprepo cmds (apecloud#5803)
Browse files Browse the repository at this point in the history
  • Loading branch information
zjx20 authored Nov 8, 2023
1 parent 7ae1cda commit b895f1d
Show file tree
Hide file tree
Showing 17 changed files with 1,043 additions and 62 deletions.
23 changes: 1 addition & 22 deletions controllers/dataprotection/backuprepo_controller.go
Original file line number Diff line number Diff line change
Expand Up @@ -848,27 +848,6 @@ func (r *BackupRepoReconciler) collectPreCheckFailureMessage(reconCtx *reconcile
return -1
})

prependSpaces := func(content string, spaces int) string {
prefix := ""
for i := 0; i < spaces; i++ {
prefix += " "
}
r := bytes.NewBufferString(content)
w := bytes.NewBuffer(nil)
w.Grow(r.Len())
for {
line, err := r.ReadString('\n')
if len(line) > 0 {
w.WriteString(prefix)
w.WriteString(line)
}
if err != nil {
break
}
}
return w.String()
}

var message string

// collect failure logs from the pod
Expand All @@ -880,7 +859,7 @@ func (r *BackupRepoReconciler) collectPreCheckFailureMessage(reconCtx *reconcile
if failureLogs == "" {
message += "No logs are available.\n\n"
} else {
message += fmt.Sprintf("Logs from the pre-check job:\n%s\n", prependSpaces(failureLogs, 2))
message += fmt.Sprintf("Logs from the pre-check job:\n%s\n", utils.PrependSpaces(failureLogs, 2))
}

collectEvents := func(object client.Object) error {
Expand Down
1 change: 1 addition & 0 deletions docs/user_docs/cli/cli.md
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ BackupRepo command.
* [kbcli backuprepo create](kbcli_backuprepo_create.md) - Create a backup repo
* [kbcli backuprepo describe](kbcli_backuprepo_describe.md) - Describe a backup repository.
* [kbcli backuprepo list](kbcli_backuprepo_list.md) - List Backup Repositories.
* [kbcli backuprepo update](kbcli_backuprepo_update.md) - Update a backup repository.


## [bench](kbcli_bench.md)
Expand Down
1 change: 1 addition & 0 deletions docs/user_docs/cli/kbcli_backuprepo.md
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@ BackupRepo command.
* [kbcli backuprepo create](kbcli_backuprepo_create.md) - Create a backup repo
* [kbcli backuprepo describe](kbcli_backuprepo_describe.md) - Describe a backup repository.
* [kbcli backuprepo list](kbcli_backuprepo_list.md) - List Backup Repositories.
* [kbcli backuprepo update](kbcli_backuprepo_update.md) - Update a backup repository.

#### Go Back to [CLI Overview](cli.md) Homepage.

60 changes: 60 additions & 0 deletions docs/user_docs/cli/kbcli_backuprepo_update.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
---
title: kbcli backuprepo update
---

Update a backup repository.

```
kbcli backuprepo update BACKUP_REPO_NAME [flags]
```

### Examples

```
# Update the credential of a S3-based backuprepo
kbcli backuprepo update my-backuprepo --access-key-id=<NEW ACCESS KEY> --secret-access-key=<NEW SECRET KEY>
# Set the backuprepo as default
kbcli backuprepo update my-backuprepo --default
# Unset the default backuprepo
kbcli backuprepo update my-backuprepo --default=false
```

### Options

```
--default Specify whether to set the created backup repo as default
-h, --help help for update
```

### Options inherited from parent commands

```
--as string Username to impersonate for the operation. User could be a regular user or a service account in a namespace.
--as-group stringArray Group to impersonate for the operation, this flag can be repeated to specify multiple groups.
--as-uid string UID to impersonate for the operation.
--cache-dir string Default cache directory (default "$HOME/.kube/cache")
--certificate-authority string Path to a cert file for the certificate authority
--client-certificate string Path to a client certificate file for TLS
--client-key string Path to a client key file for TLS
--cluster string The name of the kubeconfig cluster to use
--context string The name of the kubeconfig context to use
--disable-compression If true, opt-out of response compression for all requests to the server
--insecure-skip-tls-verify If true, the server's certificate will not be checked for validity. This will make your HTTPS connections insecure
--kubeconfig string Path to the kubeconfig file to use for CLI requests.
--match-server-version Require server version to match client version
-n, --namespace string If present, the namespace scope for this CLI request
--request-timeout string The length of time to wait before giving up on a single server request. Non-zero values should contain a corresponding time unit (e.g. 1s, 2m, 3h). A value of zero means don't timeout requests. (default "0")
-s, --server string The address and port of the Kubernetes API server
--tls-server-name string Server name to use for server certificate validation. If it is not provided, the hostname used to contact the server is used
--token string Bearer token for authentication to the API server
--user string The name of the kubeconfig user to use
```

### SEE ALSO

* [kbcli backuprepo](kbcli_backuprepo.md) - BackupRepo command.

#### Go Back to [CLI Overview](cli.md) Homepage.

72 changes: 72 additions & 0 deletions docs/user_docs/cli/kbcli_cluster_create_xinference.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
---
title: kbcli cluster create xinference
---

Create a xinference cluster.

```
kbcli cluster create xinference NAME [flags]
```

### Examples

```
# Create a cluster with the default values
kbcli cluster create xinference
# Create a cluster with the specified cpu, memory and storage
kbcli cluster create xinference --cpu 1 --memory 2 --storage 10
```

### Options

```
--availability-policy string The availability policy of cluster. Legal values [none, node, zone]. (default "node")
--cpu float CPU cores. Value range [0.5, 64]. (default 2)
--cpu-mode Set to true if no GPU is available
--gpu float GPU cores. Value range [0, 64]. (default 1)
-h, --help help for xinference
--host-network-accessible Specify whether the cluster can be accessed from within the VPC.
--memory float Memory, the unit is Gi. Value range [0.5, 1000]. (default 6)
--monitoring-interval int The monitoring interval of cluster, 0 is disabled, the unit is second. Value range [0, 60].
--publicly-accessible Specify whether the cluster can be accessed from the public internet.
--rbac-enabled Specify whether rbac resources will be created by client, otherwise KubeBlocks server will try to create rbac resources.
--replicas int The number of replicas, for standalone mode, the replicas is 1, for replication mode, the default replicas is 2. Value range [1, 5]. (default 1)
--tenancy string The tenancy of cluster. Legal values [SharedNode, DedicatedNode]. (default "SharedNode")
--termination-policy string The termination policy of cluster. Legal values [DoNotTerminate, Halt, Delete, WipeOut]. (default "Delete")
--version string Cluster version.
```

### Options inherited from parent commands

```
--as string Username to impersonate for the operation. User could be a regular user or a service account in a namespace.
--as-group stringArray Group to impersonate for the operation, this flag can be repeated to specify multiple groups.
--as-uid string UID to impersonate for the operation.
--cache-dir string Default cache directory (default "$HOME/.kube/cache")
--certificate-authority string Path to a cert file for the certificate authority
--client-certificate string Path to a client certificate file for TLS
--client-key string Path to a client key file for TLS
--cluster string The name of the kubeconfig cluster to use
--context string The name of the kubeconfig context to use
--disable-compression If true, opt-out of response compression for all requests to the server
--dry-run string[="unchanged"] Must be "client", or "server". If with client strategy, only print the object that would be sent, and no data is actually sent. If with server strategy, submit the server-side request, but no data is persistent. (default "none")
--edit Edit the API resource before creating
--insecure-skip-tls-verify If true, the server's certificate will not be checked for validity. This will make your HTTPS connections insecure
--kubeconfig string Path to the kubeconfig file to use for CLI requests.
--match-server-version Require server version to match client version
-n, --namespace string If present, the namespace scope for this CLI request
-o, --output format Prints the output in the specified format. Allowed values: JSON and YAML (default yaml)
--request-timeout string The length of time to wait before giving up on a single server request. Non-zero values should contain a corresponding time unit (e.g. 1s, 2m, 3h). A value of zero means don't timeout requests. (default "0")
-s, --server string The address and port of the Kubernetes API server
--tls-server-name string Server name to use for server certificate validation. If it is not provided, the hostname used to contact the server is used
--token string Bearer token for authentication to the API server
--user string The name of the kubeconfig user to use
```

### SEE ALSO

* [kbcli cluster create](kbcli_cluster_create.md) - Create a cluster.

#### Go Back to [CLI Overview](cli.md) Homepage.

49 changes: 49 additions & 0 deletions docs/user_docs/cli/kbcli_login.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
---
title: kbcli login
---

Authenticate with the KubeBlocks Cloud

```
kbcli login [flags]
```

### Options

```
-c, --context string Context name.
-h, --help help for login
--no-browser Do not open the browser for authentication.
-o, --org string Organization name.
-r, --region string Specify the region [jp] to log in. (default "jp")
```

### Options inherited from parent commands

```
--as string Username to impersonate for the operation. User could be a regular user or a service account in a namespace.
--as-group stringArray Group to impersonate for the operation, this flag can be repeated to specify multiple groups.
--as-uid string UID to impersonate for the operation.
--cache-dir string Default cache directory (default "$HOME/.kube/cache")
--certificate-authority string Path to a cert file for the certificate authority
--client-certificate string Path to a client certificate file for TLS
--client-key string Path to a client key file for TLS
--cluster string The name of the kubeconfig cluster to use
--disable-compression If true, opt-out of response compression for all requests to the server
--insecure-skip-tls-verify If true, the server's certificate will not be checked for validity. This will make your HTTPS connections insecure
--kubeconfig string Path to the kubeconfig file to use for CLI requests.
--match-server-version Require server version to match client version
-n, --namespace string If present, the namespace scope for this CLI request
--request-timeout string The length of time to wait before giving up on a single server request. Non-zero values should contain a corresponding time unit (e.g. 1s, 2m, 3h). A value of zero means don't timeout requests. (default "0")
-s, --server string The address and port of the Kubernetes API server
--tls-server-name string Server name to use for server certificate validation. If it is not provided, the hostname used to contact the server is used
--token string Bearer token for authentication to the API server
--user string The name of the kubeconfig user to use
```

### SEE ALSO



#### Go Back to [CLI Overview](cli.md) Homepage.

47 changes: 47 additions & 0 deletions docs/user_docs/cli/kbcli_logout.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
---
title: kbcli logout
---

Log out of the KubeBlocks Cloud

```
kbcli logout [flags]
```

### Options

```
-h, --help help for logout
-r, --region string Specify the region [jp] to log in. (default "jp")
```

### Options inherited from parent commands

```
--as string Username to impersonate for the operation. User could be a regular user or a service account in a namespace.
--as-group stringArray Group to impersonate for the operation, this flag can be repeated to specify multiple groups.
--as-uid string UID to impersonate for the operation.
--cache-dir string Default cache directory (default "$HOME/.kube/cache")
--certificate-authority string Path to a cert file for the certificate authority
--client-certificate string Path to a client certificate file for TLS
--client-key string Path to a client key file for TLS
--cluster string The name of the kubeconfig cluster to use
--context string The name of the kubeconfig context to use
--disable-compression If true, opt-out of response compression for all requests to the server
--insecure-skip-tls-verify If true, the server's certificate will not be checked for validity. This will make your HTTPS connections insecure
--kubeconfig string Path to the kubeconfig file to use for CLI requests.
--match-server-version Require server version to match client version
-n, --namespace string If present, the namespace scope for this CLI request
--request-timeout string The length of time to wait before giving up on a single server request. Non-zero values should contain a corresponding time unit (e.g. 1s, 2m, 3h). A value of zero means don't timeout requests. (default "0")
-s, --server string The address and port of the Kubernetes API server
--tls-server-name string Server name to use for server certificate validation. If it is not provided, the hostname used to contact the server is used
--token string Bearer token for authentication to the API server
--user string The name of the kubeconfig user to use
```

### SEE ALSO



#### Go Back to [CLI Overview](cli.md) Homepage.

4 changes: 2 additions & 2 deletions pkg/cli/cmd/backuprepo/backuprepo.go
Original file line number Diff line number Diff line change
Expand Up @@ -32,9 +32,9 @@ func NewBackupRepoCmd(f cmdutil.Factory, streams genericiooptions.IOStreams) *co
}
cmd.AddCommand(
newCreateCommand(nil, f, streams),
// newUpdateCommand(f, streams), // TODO:
newUpdateCommand(nil, f, streams),
newListCommand(f, streams),
newDescribeCmd(f, streams), // TODO:
newDescribeCommand(f, streams),
)
return cmd
}
58 changes: 58 additions & 0 deletions pkg/cli/cmd/backuprepo/common.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
/*
Copyright (C) 2022-2023 ApeCloud Co., Ltd
This file is part of KubeBlocks project
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/

package backuprepo

import (
"encoding/json"

jsonpatch "github.com/evanphx/json-patch"
"github.com/spf13/pflag"
"k8s.io/apimachinery/pkg/runtime"
)

const (
trueVal = "true"

associatedBackupRepoKey = "dataprotection.kubeblocks.io/backup-repo-name"
)

func flagsToValues(fs *pflag.FlagSet, explicit bool) map[string]string {
values := make(map[string]string)
fs.VisitAll(func(f *pflag.Flag) {
if f.Name == "help" || (explicit && !f.Changed) {
return
}
val, _ := fs.GetString(f.Name)
values[f.Name] = val
})
return values
}

func createPatchData(oldObj, newObj runtime.Object) ([]byte, error) {
oldData, err := json.Marshal(oldObj)
if err != nil {
return nil, err
}
newData, err := json.Marshal(newObj)
if err != nil {
return nil, err
}
return jsonpatch.CreateMergePatch(oldData, newData)
}
Loading

0 comments on commit b895f1d

Please sign in to comment.