Use Kubernetes Client instead of Controller APIs from CLI (#2605)
Use the Kubernetes and Fission Client from CLI instead of Controller API. This removes port-forwarding for the controller across Fission CLI mostly. * Use configurable client in CLI * Move resource namespace under cmd client * use server to get fission version * get archive with URL Signed-off-by: Sanket Sudake <sanketsudake@gmail.com> Co-authored-by: Sanket Sudake <sanketsudake@gmail.com>
This commit is contained in:
co-authored by
Sanket Sudake
parent
261bf24974
commit
b71a36dc1c
@@ -17,17 +17,17 @@ limitations under the License.
|
||||
package _package
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
|
||||
"github.com/pkg/errors"
|
||||
kerrors "k8s.io/apimachinery/pkg/api/errors"
|
||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||
|
||||
fv1 "github.com/fission/fission/pkg/apis/core/v1"
|
||||
"github.com/fission/fission/pkg/controller/client"
|
||||
"github.com/fission/fission/pkg/fission-cli/cliwrapper/cli"
|
||||
"github.com/fission/fission/pkg/fission-cli/cmd"
|
||||
flagkey "github.com/fission/fission/pkg/fission-cli/flag/key"
|
||||
"github.com/fission/fission/pkg/fission-cli/util"
|
||||
)
|
||||
|
||||
type DeleteSubCommand struct {
|
||||
@@ -52,7 +52,7 @@ func (opts *DeleteSubCommand) do(input cli.Input) error {
|
||||
|
||||
func (opts *DeleteSubCommand) complete(input cli.Input) (err error) {
|
||||
opts.name = input.String(flagkey.PkgName)
|
||||
_, opts.namespace, err = util.GetResourceNamespace(input, flagkey.NamespacePackage)
|
||||
_, opts.namespace, err = opts.GetResourceNamespace(input, flagkey.NamespacePackage)
|
||||
if err != nil {
|
||||
return fv1.AggregateValidationErrors("Environment", err)
|
||||
}
|
||||
@@ -69,18 +69,15 @@ func (opts *DeleteSubCommand) complete(input cli.Input) (err error) {
|
||||
|
||||
func (opts *DeleteSubCommand) run(input cli.Input) error {
|
||||
if len(opts.name) != 0 {
|
||||
_, err := opts.Client().V1().Package().Get(&metav1.ObjectMeta{
|
||||
Namespace: opts.namespace,
|
||||
Name: opts.name,
|
||||
})
|
||||
_, err := opts.Client().FissionClientSet.CoreV1().Packages(opts.namespace).Get(input.Context(), opts.name, metav1.GetOptions{})
|
||||
if err != nil {
|
||||
if input.Bool(flagkey.IgnoreNotFound) && util.IsNotFound(err) {
|
||||
if input.Bool(flagkey.IgnoreNotFound) && kerrors.IsNotFound(err) {
|
||||
return nil
|
||||
}
|
||||
return errors.Wrap(err, "find package")
|
||||
}
|
||||
|
||||
fnList, err := GetFunctionsByPackage(opts.Client(), opts.name, opts.namespace)
|
||||
fnList, err := GetFunctionsByPackage(input.Context(), opts.Client(), opts.name, opts.namespace)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -88,7 +85,7 @@ func (opts *DeleteSubCommand) run(input cli.Input) error {
|
||||
if !opts.force && len(fnList) > 0 {
|
||||
return errors.New("Package is used by at least one function, use -f to force delete")
|
||||
}
|
||||
err = deletePackage(opts.Client(), opts.name, opts.namespace)
|
||||
err = deletePackage(input.Context(), opts.Client(), opts.name, opts.namespace)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -97,7 +94,7 @@ func (opts *DeleteSubCommand) run(input cli.Input) error {
|
||||
|
||||
// TODO improve list speed when --orphan
|
||||
if opts.deleteOrphans {
|
||||
err := deleteOrphanPkgs(opts.Client(), opts.namespace)
|
||||
err := deleteOrphanPkgs(input.Context(), opts.Client(), opts.namespace)
|
||||
if err != nil {
|
||||
return errors.Wrap(err, "deleting orphan packages")
|
||||
}
|
||||
@@ -107,20 +104,20 @@ func (opts *DeleteSubCommand) run(input cli.Input) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func deleteOrphanPkgs(client client.Interface, pkgNamespace string) error {
|
||||
pkgList, err := client.V1().Package().List(pkgNamespace)
|
||||
func deleteOrphanPkgs(ctx context.Context, client cmd.Client, pkgNamespace string) error {
|
||||
pkgList, err := client.FissionClientSet.CoreV1().Packages(pkgNamespace).List(ctx, metav1.ListOptions{})
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// range through all packages and find out the ones not referenced by any function
|
||||
for _, pkg := range pkgList {
|
||||
fnList, err := GetFunctionsByPackage(client, pkg.ObjectMeta.Name, pkgNamespace)
|
||||
for _, pkg := range pkgList.Items {
|
||||
fnList, err := GetFunctionsByPackage(ctx, client, pkg.ObjectMeta.Name, pkgNamespace)
|
||||
if err != nil {
|
||||
return errors.Wrap(err, fmt.Sprintf("get functions sharing package %s", pkg.ObjectMeta.Name))
|
||||
}
|
||||
if len(fnList) == 0 {
|
||||
err = deletePackage(client, pkg.ObjectMeta.Name, pkgNamespace)
|
||||
err = deletePackage(ctx, client, pkg.ObjectMeta.Name, pkgNamespace)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -129,9 +126,6 @@ func deleteOrphanPkgs(client client.Interface, pkgNamespace string) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func deletePackage(client client.Interface, pkgName string, pkgNamespace string) error {
|
||||
return client.V1().Package().Delete(&metav1.ObjectMeta{
|
||||
Namespace: pkgNamespace,
|
||||
Name: pkgName,
|
||||
})
|
||||
func deletePackage(ctx context.Context, client cmd.Client, pkgName string, pkgNamespace string) error {
|
||||
return client.FissionClientSet.CoreV1().Packages(pkgNamespace).Delete(ctx, pkgName, metav1.DeleteOptions{})
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user