Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion docs/user_docs/cli/kbcli_cluster_create_elasticsearch.md
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ kbcli cluster create elasticsearch NAME [flags]
--node-labels stringToString Node label selector (default [])
-o, --output format Prints the output in the specified format. Allowed values: JSON and YAML (default yaml)
--pod-anti-affinity string Pod anti-affinity type, one of: (Preferred, Required) (default "Preferred")
--rbac-enabled Specify whether rbac resources will be created by client, otherwise KubeBlocks server will try to create rbac resources. (default true)
--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 single-node mode, the replicas is 1, for multi-node mode, the default replicas is 3. Value range [1, 5]. (default 1)
--storage float Storage size, the unit is Gi. Value range [1, 10000]. (default 20)
--tenancy string Tenancy options, one of: (SharedNode, DedicatedNode) (default "SharedNode")
Expand Down
1 change: 0 additions & 1 deletion docs/user_docs/cli/kbcli_cluster_delete.md
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,6 @@ kbcli cluster delete NAME [flags]
--grace-period int Period of time in seconds given to the resource to terminate gracefully. Ignored if negative. Set to 1 for immediate shutdown. Can only be set to 0 when --force is true (force deletion). (default -1)
-h, --help help for delete
--now If true, resources are signaled for immediate shutdown (same as --grace-period=1).
--rbac-enabled Specify whether rbac resources will be deleted by kbcli
-l, --selector string Selector (label query) to filter on, supports '=', '==', and '!='.(e.g. -l key1=value1,key2=value2). Matching objects must satisfy all of the specified label constraints.
```

Expand Down
8 changes: 2 additions & 6 deletions pkg/cmd/cluster/create_util.go
Original file line number Diff line number Diff line change
Expand Up @@ -38,11 +38,7 @@ import (
)

var (
resetEngineFlagValues = map[string]map[string]string{
"elasticsearch": {
"rbac-enabled": "true",
},
}
resetEngineFlagValues = map[string]map[string]string{}
)

// addCreateFlags adds the flags for creating a cluster, these flags are built by the cluster schema.
Expand All @@ -61,7 +57,7 @@ func addCreateFlags(cmd *cobra.Command, f cmdutil.Factory, c *cluster.ChartInfo,
return err
}

// reset engine related flags default value, such as rbac-enabled for elasticsearch should be true by default
// reset engine related flags default value
resetEngineDefaultFlagsValue(cmd.Flags(), engine)
return nil
}
Expand Down
81 changes: 1 addition & 80 deletions pkg/cmd/cluster/delete.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,18 +20,12 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
package cluster

import (
"context"
"fmt"

"github.com/spf13/cobra"
apierrors "k8s.io/apimachinery/pkg/api/errors"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
"k8s.io/apimachinery/pkg/runtime"
"k8s.io/apimachinery/pkg/util/errors"
"k8s.io/cli-runtime/pkg/genericiooptions"
"k8s.io/client-go/kubernetes"
"k8s.io/klog/v2"
cmdutil "k8s.io/kubectl/pkg/cmd/util"
"k8s.io/kubectl/pkg/util/templates"

Expand All @@ -49,8 +43,6 @@ var (
# delete a cluster by label selector
kbcli cluster delete --selector clusterdefinition.kubeblocks.io/name=apecloud-mysql
`)

rbacEnabled = false
)

func NewDeleteCmd(f cmdutil.Factory, streams genericiooptions.IOStreams) *cobra.Command {
Expand All @@ -68,7 +60,6 @@ func NewDeleteCmd(f cmdutil.Factory, streams genericiooptions.IOStreams) *cobra.
},
}
o.AddFlags(cmd)
cmd.Flags().BoolVar(&rbacEnabled, "rbac-enabled", false, "Specify whether rbac resources will be deleted by kbcli")
return cmd
}

Expand Down Expand Up @@ -100,81 +91,11 @@ func clusterPostDeleteHook(o *action.DeleteOptions, object runtime.Object) error
return nil
}

c, err := getClusterFromObject(object)
if err != nil {
return err
}

client, err := o.Factory.KubernetesClientSet()
if err != nil {
return err
}
// currently no hook is defined

if err = deleteDependencies(client, c.Namespace, c.Name); err != nil {
return err
}
return nil
}

func deleteDependencies(client kubernetes.Interface, ns string, name string) error {
if !rbacEnabled {
return nil
}

klog.V(1).Infof("delete dependencies for cluster %s", name)
var (
saName = saNamePrefix + name
roleName = roleNamePrefix + name
roleBindingName = roleBindingNamePrefix + name
clusterRoleName = clusterRolePrefix + name
clusterRoleBindingName = clusterRoleBindingPrefix + name
allErr []error
)

// now, delete the dependencies, for postgresql, we delete sa, role and rolebinding
ctx := context.TODO()
gracePeriod := int64(0)
deleteOptions := metav1.DeleteOptions{GracePeriodSeconds: &gracePeriod}
checkErr := func(err error) bool {
if err != nil && !apierrors.IsNotFound(err) {
return true
}
return false
}

// delete cluster role binding
klog.V(1).Infof("delete cluster role binding %s", clusterRoleBindingName)
if err := client.RbacV1().ClusterRoleBindings().Delete(ctx, clusterRoleBindingName, deleteOptions); checkErr(err) {
allErr = append(allErr, err)
}

// delete cluster role
klog.V(1).Infof("delete cluster role %s", clusterRoleName)
if err := client.RbacV1().ClusterRoles().Delete(ctx, clusterRoleName, deleteOptions); checkErr(err) {
allErr = append(allErr, err)
}

// delete role binding
klog.V(1).Infof("delete role binding %s", roleBindingName)
if err := client.RbacV1().RoleBindings(ns).Delete(ctx, roleBindingName, deleteOptions); checkErr(err) {
allErr = append(allErr, err)
}

// delete role
klog.V(1).Infof("delete role %s", roleName)
if err := client.RbacV1().Roles(ns).Delete(ctx, roleName, deleteOptions); checkErr(err) {
allErr = append(allErr, err)
}

// delete service account
klog.V(1).Infof("delete service account %s", saName)
if err := client.CoreV1().ServiceAccounts(ns).Delete(ctx, saName, deleteOptions); checkErr(err) {
allErr = append(allErr, err)
}

return errors.NewAggregate(allErr)
}

func getClusterFromObject(object runtime.Object) (*appsv1alpha1.Cluster, error) {
if object.GetObjectKind().GroupVersionKind().Kind != appsv1alpha1.ClusterKind {
return nil, fmt.Errorf("object %s is not of kind %s", object.GetObjectKind().GroupVersionKind().Kind, appsv1alpha1.ClusterKind)
Expand Down