cubefs

Форк
0
/
acl.go 
153 строки · 3.8 Кб
1
package cmd
2

3
import (
4
	"github.com/cubefs/cubefs/proto"
5
	"github.com/cubefs/cubefs/sdk/master"
6
	"github.com/cubefs/cubefs/util"
7
	"github.com/spf13/cobra"
8
)
9

10
const (
11
	cmdAclUse        = "acl [COMMAND]"
12
	cmdAclShort      = "Manage cluster volumes acl black list"
13
	cmdAclAddShort   = "add volume ip"
14
	cmdAclDelShort   = "del volume ip"
15
	cmdAclListShort  = "list volume ip list"
16
	cmdAclCheckShort = "check volume ip"
17

18
	// acl op
19
	CliAclAdd       = "add"
20
	cliAclListShort = "list"
21
	CliAclDel       = "del"
22
	CliAclCheck     = "check"
23
)
24

25
func newAclCmd(client *master.MasterClient) *cobra.Command {
26
	cmd := &cobra.Command{
27
		Use:     cmdAclUse,
28
		Short:   cmdAclShort,
29
		Args:    cobra.MinimumNArgs(0),
30
		Aliases: []string{"acl"},
31
	}
32
	cmd.AddCommand(
33
		newAclAddCmd(client),
34
		newAclDelCmd(client),
35
		newAclListCmd(client),
36
		newAclCheckCmd(client),
37
	)
38
	return cmd
39
}
40

41
func newAclAddCmd(client *master.MasterClient) *cobra.Command {
42
	var optKeyword string
43
	cmd := &cobra.Command{
44
		Use:     CliAclAdd,
45
		Short:   cmdAclAddShort,
46
		Aliases: []string{"add"},
47
		Run: func(cmd *cobra.Command, args []string) {
48
			if len(args) <= 1 {
49
				stdout("example:cfs-cli acl aclAdd volName 192.168.0.1\n")
50
				return
51
			}
52
			var err error
53
			defer func() {
54
				errout(err)
55
			}()
56
			var aclInfo *proto.AclRsp
57
			if aclInfo, err = client.UserAPI().AclOperation(args[0], args[1], util.AclAddIP); err != nil || !aclInfo.OK {
58
				return
59
			}
60
			stdout("success!\n")
61
		},
62
	}
63
	cmd.Flags().StringVar(&optKeyword, "keyword", "", "Specify keyword of volume name to filter")
64
	return cmd
65
}
66

67
func newAclListCmd(client *master.MasterClient) *cobra.Command {
68
	var optKeyword string
69
	cmd := &cobra.Command{
70
		Use:     cliAclListShort,
71
		Short:   cmdAclListShort,
72
		Aliases: []string{"list"},
73
		Run: func(cmd *cobra.Command, args []string) {
74
			if len(args) == 0 {
75
				stdout("need volume name\n")
76
				return
77
			}
78
			volumeName := args[0]
79
			var err error
80
			defer func() {
81
				errout(err)
82
			}()
83
			var aclInfo *proto.AclRsp
84
			if aclInfo, err = client.UserAPI().AclOperation(volumeName, "", util.AclListIP); err != nil || !aclInfo.OK {
85
				stdout("AclOperation return \n")
86
				return
87
			}
88
			stdout("%v\n", volumeAclTableHeader)
89
			for _, info := range aclInfo.List {
90
				stdout("%v\n", formatAclInfoTableRow(info))
91
			}
92
		},
93
	}
94
	cmd.Flags().StringVar(&optKeyword, "keyword", "", "Specify keyword of volume name to filter")
95
	return cmd
96
}
97

98
func newAclDelCmd(client *master.MasterClient) *cobra.Command {
99
	var optKeyword string
100
	cmd := &cobra.Command{
101
		Use:     CliAclDel,
102
		Short:   cmdAclDelShort,
103
		Aliases: []string{"del"},
104
		Run: func(cmd *cobra.Command, args []string) {
105
			if len(args) <= 1 {
106
				stdout("USAGE:./cfs-cli acl aclDel volName ipAddr\n")
107
				return
108
			}
109

110
			var err error
111
			defer func() {
112
				errout(err)
113
			}()
114
			var aclInfo *proto.AclRsp
115
			if aclInfo, err = client.UserAPI().AclOperation(args[0], args[1], util.AclDelIP); err != nil || !aclInfo.OK {
116
				return
117
			}
118
			stdout("success!\n")
119
		},
120
	}
121
	cmd.Flags().StringVar(&optKeyword, "keyword", "", "Specify keyword of volume name to filter")
122
	return cmd
123
}
124

125
func newAclCheckCmd(client *master.MasterClient) *cobra.Command {
126
	var optKeyword string
127
	cmd := &cobra.Command{
128
		Use:     CliAclCheck,
129
		Short:   cmdAclCheckShort,
130
		Aliases: []string{"check"},
131
		Run: func(cmd *cobra.Command, args []string) {
132
			if len(args) <= 1 {
133
				stdout("USAGE:./cfs-cli acl aclCheck volName ipAddr\n")
134
				return
135
			}
136

137
			var err error
138
			defer func() {
139
				errout(err)
140
			}()
141
			var aclInfo *proto.AclRsp
142
			if aclInfo, err = client.UserAPI().AclOperation(args[0], args[1], util.AclCheckIP); err != nil || !aclInfo.OK {
143
				return
144
			}
145
			stdout("%v\n", volumeAclTableHeader)
146
			for _, info := range aclInfo.List {
147
				stdout("%v\n", formatAclInfoTableRow(info))
148
			}
149
		},
150
	}
151
	cmd.Flags().StringVar(&optKeyword, "keyword", "", "Specify keyword of volume name to filter")
152
	return cmd
153
}
154

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.