未验证 提交 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{
}
if plugins, err := jclient.GetPlugins(); err == nil {
filteredPlugins := make([]client.Plugin, 0)
filteredPlugins := make([]client.InstalledPlugin, 0)
for _, plugin := range plugins.Plugins {
if filter {
if hasUpdate && !plugin.HasUpdate {
......@@ -206,7 +206,7 @@ var pluginCmd = &cobra.Command{
func (o *PluginOptions) Output(obj interface{}) (data []byte, err error) {
if data, err = o.OutputOption.Output(obj); err != nil {
pluginList := obj.([]client.Plugin)
pluginList := obj.([]client.InstalledPlugin)
table := util.CreateTable(os.Stdout)
table.AddRow("number", "name", "version", "update")
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 {
JenkinsCore
}
type Plugin struct {
Active bool
Enabled bool
Bundled bool
Downgradable bool
Deleted bool
}
// PluginList represent a list of plugins
type PluginList struct {
Plugins []Plugin
type InstalledPluginList struct {
Plugins []InstalledPlugin
}
// Plugin represent the plugin from Jenkins
type Plugin struct {
Active bool
type AvailablePluginList struct {
Data []AvailablePlugin
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
LongName string
Version string
URL string
HasUpdate bool
Enable bool
Downgradable bool
Pinned bool
RequiredCoreVesion string
MinimumJavaVersion string
SupportDynamicLoad string
Deleted bool
Bundled bool
BackVersion string
}
......@@ -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)
var (
req *http.Request
......@@ -80,7 +134,7 @@ func (p *PluginManager) GetPlugins() (pluginList *PluginList, err error) {
data, err = ioutil.ReadAll(response.Body)
if code == 200 {
if err == nil {
pluginList = &PluginList{}
pluginList = &InstalledPluginList{}
err = json.Unmarshal(data, pluginList)
}
} else {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册