未验证 提交 9345b843 编写于 作者: Z Zhao Xiaojie 提交者: GitHub

Merge pull request #7 from LinuxSuRen/search-plugin

Add search sub-cmd for plugin
...@@ -151,7 +151,7 @@ var pluginCmd = &cobra.Command{ ...@@ -151,7 +151,7 @@ var pluginCmd = &cobra.Command{
} }
if plugins, err := jclient.GetPlugins(); err == nil { if plugins, err := jclient.GetPlugins(); err == nil {
filteredPlugins := make([]client.Plugin, 0) filteredPlugins := make([]client.InstalledPlugin, 0)
for _, plugin := range plugins.Plugins { for _, plugin := range plugins.Plugins {
if filter { if filter {
if hasUpdate && !plugin.HasUpdate { if hasUpdate && !plugin.HasUpdate {
...@@ -206,7 +206,7 @@ var pluginCmd = &cobra.Command{ ...@@ -206,7 +206,7 @@ var pluginCmd = &cobra.Command{
func (o *PluginOptions) Output(obj interface{}) (data []byte, err error) { func (o *PluginOptions) Output(obj interface{}) (data []byte, err error) {
if data, err = o.OutputOption.Output(obj); err != nil { if data, err = o.OutputOption.Output(obj); err != nil {
pluginList := obj.([]client.Plugin) pluginList := obj.([]client.InstalledPlugin)
table := util.CreateTable(os.Stdout) table := util.CreateTable(os.Stdout)
table.AddRow("number", "name", "version", "update") table.AddRow("number", "name", "version", "update")
for i, plugin := range pluginList { for i, plugin := range pluginList {
......
package cmd
import (
"fmt"
"log"
"strings"
"github.com/linuxsuren/jenkins-cli/client"
"github.com/spf13/cobra"
)
type PluginSearchOption struct {
OutputOption
}
var pluginSearchOption PluginSearchOption
func init() {
pluginCmd.AddCommand(pluginSearchCmd)
pluginSearchCmd.PersistentFlags().StringVarP(&queueOption.Format, "output", "o", "json", "Format the output")
}
var pluginSearchCmd = &cobra.Command{
Use: "search <keyword>",
Short: "Print the plugins of your Jenkins",
Long: `Print the plugins of your Jenkins`,
Run: func(cmd *cobra.Command, args []string) {
if len(args) == 0 {
cmd.Help()
return
}
keyword := args[0]
jenkins := getCurrentJenkins()
jclient := &client.PluginManager{}
jclient.URL = jenkins.URL
jclient.UserName = jenkins.UserName
jclient.Token = jenkins.Token
jclient.Proxy = jenkins.Proxy
jclient.ProxyAuth = jenkins.ProxyAuth
if plugins, err := jclient.GetAvailablePlugins(); err == nil {
result := searchPlugins(plugins, keyword)
var data []byte
if data, err = Format(result, queueOption.Format); err == nil {
fmt.Printf("%s\n", string(data))
} else {
log.Fatal(err)
}
} else {
log.Fatal(err)
}
},
}
func searchPlugins(plugins *client.AvailablePluginList, keyword string) []client.AvailablePlugin {
result := make([]client.AvailablePlugin, 0)
for _, plugin := range plugins.Data {
if strings.Contains(plugin.Name, keyword) {
result = append(result, plugin)
}
}
return result
}
...@@ -13,27 +13,48 @@ type PluginManager struct { ...@@ -13,27 +13,48 @@ type PluginManager struct {
JenkinsCore JenkinsCore
} }
type Plugin struct {
Active bool
Enabled bool
Bundled bool
Downgradable bool
Deleted bool
}
// PluginList represent a list of plugins // PluginList represent a list of plugins
type PluginList struct { type InstalledPluginList struct {
Plugins []Plugin Plugins []InstalledPlugin
} }
// Plugin represent the plugin from Jenkins type AvailablePluginList struct {
type Plugin struct { Data []AvailablePlugin
Active bool Status string
}
type AvailablePlugin struct {
Plugin
// for the available list
Name string
Installed bool
Website string
Title string
}
// InstalledPlugin represent the installed plugin from Jenkins
type InstalledPlugin struct {
Plugin
Enable bool
ShortName string ShortName string
LongName string LongName string
Version string Version string
URL string URL string
HasUpdate bool HasUpdate bool
Enable bool
Downgradable bool
Pinned bool Pinned bool
RequiredCoreVesion string RequiredCoreVesion string
MinimumJavaVersion string MinimumJavaVersion string
SupportDynamicLoad string SupportDynamicLoad string
Deleted bool
Bundled bool
BackVersion string BackVersion string
} }
...@@ -59,7 +80,40 @@ func (p *PluginManager) CheckUpdate(handle func(*http.Response)) { ...@@ -59,7 +80,40 @@ func (p *PluginManager) CheckUpdate(handle func(*http.Response)) {
} }
} }
func (p *PluginManager) GetPlugins() (pluginList *PluginList, err error) { func (p *PluginManager) GetAvailablePlugins() (pluginList *AvailablePluginList, err error) {
api := fmt.Sprintf("%s/pluginManager/plugins", p.URL)
var (
req *http.Request
response *http.Response
)
req, err = http.NewRequest("GET", api, nil)
if err == nil {
p.AuthHandle(req)
} else {
return
}
client := p.GetClient()
if response, err = client.Do(req); err == nil {
code := response.StatusCode
var data []byte
data, err = ioutil.ReadAll(response.Body)
if code == 200 {
if err == nil {
pluginList = &AvailablePluginList{}
err = json.Unmarshal(data, pluginList)
}
} else {
log.Fatal(string(data))
}
} else {
log.Fatal(err)
}
return
}
func (p *PluginManager) GetPlugins() (pluginList *InstalledPluginList, err error) {
api := fmt.Sprintf("%s/pluginManager/api/json?pretty=true&depth=1", p.URL) api := fmt.Sprintf("%s/pluginManager/api/json?pretty=true&depth=1", p.URL)
var ( var (
req *http.Request req *http.Request
...@@ -80,7 +134,7 @@ func (p *PluginManager) GetPlugins() (pluginList *PluginList, err error) { ...@@ -80,7 +134,7 @@ func (p *PluginManager) GetPlugins() (pluginList *PluginList, err error) {
data, err = ioutil.ReadAll(response.Body) data, err = ioutil.ReadAll(response.Body)
if code == 200 { if code == 200 {
if err == nil { if err == nil {
pluginList = &PluginList{} pluginList = &InstalledPluginList{}
err = json.Unmarshal(data, pluginList) err = json.Unmarshal(data, pluginList)
} }
} else { } else {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册