add remove cap center cli and api (#237)

* add remove cap center cli

* add delete cap center api

* doc: capability center delete api

* test: capability center delete e2e
This commit is contained in:
boris
2020-09-03 14:52:09 +08:00
committed by GitHub
parent 42203ac34e
commit dc417f53d2
6 changed files with 86 additions and 0 deletions
@@ -478,6 +478,15 @@ sample request
```json
{"Name":"c1","Address":"https://github.com/wonderflow/catalog/tree/repos/repos"}
```
### DELETE /capability-centers/:capabilityCenterName/ (Capability Center delete)
- example
sample response
```json
{
"code": 200,
"data": "mycenter capability center removed successfully"
}
```
### PUT /capability-centers/:capabilityCenterName/capabilities/ (Capability Center sync)
+8
View File
@@ -65,5 +65,13 @@ var _ = ginkgo.Describe("Capability", func() {
gomega.Expect(output).To(gomega.ContainSubstring(capabilityBasic.Name))
gomega.Expect(output).To(gomega.ContainSubstring("installed"))
})
ginkgo.It("delete a capability center", func() {
cli := fmt.Sprintf("vela cap center remove %s", capabilityCenterBasic.Name)
output, err := e2e.Exec(cli)
gomega.Expect(err).NotTo(gomega.HaveOccurred())
expectedOutput := fmt.Sprintf("%s capability center removed successfully", capabilityCenterBasic.Name)
gomega.Expect(output).To(gomega.ContainSubstring(expectedOutput))
})
})
})
+29
View File
@@ -47,6 +47,7 @@ func NewCenterCommand(c types.Args, ioStream cmdutil.IOStreams) *cobra.Command {
NewCapCenterConfigCommand(ioStream),
NewCapCenterSyncCommand(ioStream),
NewCapCenterListCommand(ioStream),
NewCapCenterRemoveCommand(ioStream),
)
return cmd
}
@@ -215,6 +216,22 @@ func NewCapCenterListCommand(ioStreams cmdutil.IOStreams) *cobra.Command {
return cmd
}
func NewCapCenterRemoveCommand(ioStreams cmdutil.IOStreams) *cobra.Command {
cmd := &cobra.Command{
Use: "remove <centerName>",
Short: "Remove specified capability center",
Long: "Remove specified capability center",
Example: "vela cap center remove mycenter",
RunE: func(cmd *cobra.Command, args []string) error {
return RemoveCapCenter(args, ioStreams)
},
Annotations: map[string]string{
types.TagCommandType: types.TypeOthers,
},
}
return cmd
}
func ListCapCenters(args []string, ioStreams cmdutil.IOStreams) error {
table := uitable.New()
table.AddRow("NAME", "ADDRESS")
@@ -228,3 +245,15 @@ func ListCapCenters(args []string, ioStreams cmdutil.IOStreams) error {
ioStreams.Info(table.String())
return nil
}
func RemoveCapCenter(args []string, ioStreams cmdutil.IOStreams) error {
if len(args) < 1 {
return errors.New("you must specify <name> for capability center you want to remove")
}
centerName := args[0]
msg, err := oam.RemoveCapabilityCenter(centerName)
if err == nil {
ioStreams.Info(msg)
}
return err
}
+33
View File
@@ -314,6 +314,39 @@ func ListCenterCapabilities(repoDir string) ([]types.Capability, error) {
return templates, nil
}
func RemoveCapabilityCenter(centerName string) (string, error) {
var message string
var err error
dir, _ := system.GetCapCenterDir()
repoDir := filepath.Join(dir, centerName)
// 1.remove capability center dir
if _, err := os.Stat(repoDir); err != nil {
if os.IsNotExist(err) {
err = fmt.Errorf("%s capability center has not successfully synced", centerName)
return message, err
}
}
if err = os.RemoveAll(repoDir); err != nil {
return message, err
}
// 2.remove center from capability center config
repos, err := plugins.LoadRepos()
if err != nil {
return message, err
}
for idx, r := range repos {
if r.Name == centerName {
repos = append(repos[:idx], repos[idx+1:]...)
break
}
}
if err = plugins.StoreRepos(repos); err != nil {
return message, err
}
message = fmt.Sprintf("%s capability center removed successfully", centerName)
return message, err
}
func GatherWorkloads(templates []types.Capability) []types.Capability {
workloads, err := plugins.LoadInstalledCapabilityWithType(types.TypeWorkload)
if err != nil {
+6
View File
@@ -54,6 +54,12 @@ func AddCapabilityIntoCluster(c *gin.Context) {
util.AssembleResponse(c, msg, nil)
}
func DeleteCapabilityCenter(c *gin.Context) {
capabilityCenterName := c.Param("capabilityCenterName")
msg, err := oam.RemoveCapabilityCenter(capabilityCenterName)
util.AssembleResponse(c, msg, err)
}
func RemoveCapabilityFromCluster(c *gin.Context) {
capabilityCenterName := c.Param("capabilityName")
kubeClient := c.MustGet("KubeClient")
+1
View File
@@ -93,6 +93,7 @@ func setupRoute(kubeClient client.Client) http.Handler {
{
capCenters.PUT("/", handler.AddCapabilityCenter)
capCenters.GET("/", handler.ListCapabilityCenters)
capCenters.DELETE("/:capabilityCenterName", handler.DeleteCapabilityCenter)
caps := capCenters.Group("/:capabilityCenterName" + util.CapabilityPath)
{