kanrisuru 0.14.0 → 0.15.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 29120990eb0245c731d92af7b9905b1357309e157938274f87032ead18230c42
4
- data.tar.gz: 03a75d2d70f1aa5f72f1c9d2039e9f4002d06ca13eb0ad8b67d7e60e41a9a2e4
3
+ metadata.gz: e77a2eee0eb08495f947f9dc3b130a7c47cd713ab2f970dcc8fd17b7b52cd8b3
4
+ data.tar.gz: 76d3ec684fe307aafce2f3be2c594f47a38c50f2b0bb394998c1c83c06d8a47b
5
5
  SHA512:
6
- metadata.gz: f3f0a9244cf44b5d722662b56afefa823f305e3f86eda08224369bd70fce5f88cdf84fad7dd9222a60d143a7b3bcc61f27ef57a9e54076b551655223d9e94a15
7
- data.tar.gz: 4cfa00635d6daeeb0d4bbaa97c5a7c09ccd001b9dc53072d55ddd025086209701dbd3c3739650eb501cf22f94c3aaf471f877016cc6870add3c2b4a075c58dc2
6
+ metadata.gz: cdd8b0d400e2557525fca889bbd3ef8b8eef67774f0143ea925fa9c5ac091acabe2986de25d0f69a7005185425cf94edcd873b19cacbe56aa823c9c64fa607b3
7
+ data.tar.gz: c1d802b26491e276ffbcdc3e3dd4e4272c9b48ab63a5e6b7283fb5e5f7b706ce64d5216728946aa3783f88396a0ec9a0582c045571cd78de050f42496479a392
data/CHANGELOG.md CHANGED
@@ -1,3 +1,10 @@
1
+ ## Kanrisuru 0.15.0 (December 13, 2021) ##
2
+ * Add opts for `ip` command.
3
+ * Refactor `ip` object commands into smaller methods. Refactor `version` for consistent use and stub ability in funcitonal test cases.
4
+ * Add functional test cases for `ip` command.
5
+ * Add `append_flag_no` to `Kanrisuru::Command` class. Adds no to value for `falsey` statements. The `no` flag is commonly appended to indicate a deactived state for many arguments passed to programs on the command line.
6
+ * Fix test case `transfer` by appending the osname to the filename to avoid parallel overwrite.
7
+
1
8
  ## Kanrisuru 0.14.0 (December 08, 2021) ##
2
9
  * Add additional unit test cases for `util` methods.
3
10
  * Refactor the `core` module commands into smaller files, with each command split up. Also refactor parsing code into separate `Parser` class.
data/README.md CHANGED
@@ -7,12 +7,12 @@
7
7
  <img src="https://img.shields.io/gem/v/kanrisuru?style=flat-square" alt="Latest version" />
8
8
  </a>
9
9
  <a href="https://github.com/avamia/kanrisuru/blob/main/LICENSE.txt">
10
- <img src="https://img.shields.io/github/license/avamia/kanrisuru" alt="Latest version" />
10
+ <img src="https://img.shields.io/github/license/avamia/kanrisuru?style=flat-square" alt="Latest version" />
11
11
  </a>
12
- <img src="https://img.shields.io/github/repo-size/avamia/kanrisuru" alt="GitHub repo size" />
13
- <img src="https://img.shields.io/codecov/c/gh/avamia/kanrisuru?token=2Q1BE106B2" alt="Codecov" />
14
- <img src="https://img.shields.io/codacy/grade/9e839eb160bc445ea4e81b64cef22b27" alt="Codacy grade" />
15
- <img src="https://img.shields.io/codeclimate/maintainability/avamia/kanrisuru" alt="Code Climate maintainability" />
12
+ <img src="https://img.shields.io/github/repo-size/avamia/kanrisuru?style=flat-square" alt="GitHub repo size" />
13
+ <img src="https://img.shields.io/codecov/c/gh/avamia/kanrisuru?token=2Q1BE106B2&style=flat-square" alt="Codecov" />
14
+ <img src="https://img.shields.io/codacy/grade/9e839eb160bc445ea4e81b64cef22b27?style=flat-square" alt="Codacy grade" />
15
+ <img src="https://img.shields.io/codeclimate/maintainability/avamia/kanrisuru?style=flat-square" alt="Code Climate maintainability" />
16
16
  </p>
17
17
 
18
18
  # Kanrisuru
@@ -103,6 +103,16 @@ module Kanrisuru
103
103
  @raw_command = Kanrisuru::Util.present?(boolean) ? "#{@raw_command} #{arg}" : @raw_command
104
104
  end
105
105
 
106
+ def append_flag_no(arg, boolean = 'true')
107
+ return if boolean.nil?
108
+
109
+ if boolean
110
+ append_flag(arg, true)
111
+ else
112
+ append_flag("no#{arg}", true)
113
+ end
114
+ end
115
+
106
116
  def append_valid_exit_code(code)
107
117
  @valid_exit_codes << code if code.instance_of?(Integer)
108
118
  @valid_exit_codes.concat(code) if code.instance_of?(Array)
@@ -16,7 +16,7 @@ module Kanrisuru
16
16
 
17
17
  def parse_apt_sources(string)
18
18
  url, dist, architecture, = string.split
19
- Source.new(url, dist, architecture)
19
+ Kanrisuru::Core::Apt::Source.new(url, dist, architecture)
20
20
  end
21
21
 
22
22
  def parse_apt_line(line)
@@ -4,58 +4,16 @@ module Kanrisuru
4
4
  module Core
5
5
  module IP
6
6
  def ip_address(action, opts)
7
- command = nil
8
-
9
7
  case action
10
8
  when 'show', 'list'
11
- version = ip_version
12
-
13
- command = Kanrisuru::Command.new('ip')
14
- command.append_flag('-json') if version >= IPROUTE2_JSON_VERSION
15
- command.append_flag('-s', opts[:stats])
16
- command.append_arg('-family', opts[:family])
17
- command << 'address show'
18
-
19
- command.append_arg('dev', opts[:dev])
20
- command.append_arg('scope', opts[:scope])
21
- command.append_arg('to', opts[:prefix])
22
- command.append_arg('label', opts[:label])
23
-
24
- command.append_flag('dynamic', opts[:dynamic])
25
- command.append_flag('permanent', opts[:permanent])
26
- command.append_flag('tenative', opts[:tenative])
27
- command.append_flag('deprecated', opts[:deprecated])
28
- command.append_flag('primary', opts[:primary])
29
- command.append_flag('secondary', opts[:secondary])
30
- command.append_flag('up', opts[:up])
9
+ version = ip_version.to_i
10
+ command = ip_address_show(opts, version)
31
11
  when 'add'
32
- command = Kanrisuru::Command.new('ip address add')
33
- command << opts[:address]
34
-
35
- command.append_arg('dev', opts[:dev])
36
- command.append_arg('label', opts[:label])
37
- command.append_arg('scope', opts[:scope])
12
+ command = ip_address_add(opts)
38
13
  when 'del', 'delete'
39
- command = Kanrisuru::Command.new('ip address del')
40
- command << opts[:address]
41
-
42
- command.append_arg('dev', opts[:dev])
43
- command.append_arg('label', opts[:label])
44
- command.append_arg('scope', opts[:scope])
14
+ command = ip_address_delete(opts)
45
15
  when 'flush'
46
- command = Kanrisuru::Command.new('ip address flush')
47
-
48
- command.append_arg('dev', opts[:dev])
49
- command.append_arg('scope', opts[:scope])
50
- command.append_arg('to', opts[:prefix])
51
- command.append_arg('label', opts[:label])
52
-
53
- command.append_flag('dynamic', opts[:dynamic])
54
- command.append_flag('permanent', opts[:permanent])
55
- command.append_flag('tenative', opts[:tenative])
56
- command.append_flag('deprecated', opts[:deprecated])
57
- command.append_flag('primary', opts[:primary])
58
- command.append_flag('secondary', opts[:secondary])
16
+ command = ip_address_flush(opts)
59
17
  end
60
18
 
61
19
  execute_shell(command)
@@ -64,6 +22,65 @@ module Kanrisuru
64
22
  Parser::Address.parse(cmd, action, version)
65
23
  end
66
24
  end
25
+
26
+ def ip_address_show(opts, version)
27
+ command = Kanrisuru::Command.new('ip')
28
+ command.append_flag('-json') if version >= IPROUTE2_JSON_VERSION
29
+ command.append_flag('-s', opts[:stats])
30
+ command.append_arg('-family', opts[:family])
31
+ command << 'address show'
32
+
33
+ command.append_arg('dev', opts[:dev])
34
+ command.append_arg('scope', opts[:scope])
35
+ command.append_arg('to', opts[:prefix])
36
+ command.append_arg('label', opts[:label])
37
+
38
+ command.append_flag('dynamic', opts[:dynamic])
39
+ command.append_flag('permanent', opts[:permanent])
40
+ command.append_flag('tenative', opts[:tenative])
41
+ command.append_flag('deprecated', opts[:deprecated])
42
+ command.append_flag('primary', opts[:primary])
43
+ command.append_flag('secondary', opts[:secondary])
44
+ command.append_flag('up', opts[:up])
45
+ command
46
+ end
47
+
48
+ def ip_address_add(opts)
49
+ command = Kanrisuru::Command.new('ip address add')
50
+ command << opts[:address]
51
+
52
+ command.append_arg('dev', opts[:dev])
53
+ command.append_arg('label', opts[:label])
54
+ command.append_arg('scope', opts[:scope])
55
+ command
56
+ end
57
+
58
+ def ip_address_delete(opts)
59
+ command = Kanrisuru::Command.new('ip address del')
60
+ command << opts[:address]
61
+
62
+ command.append_arg('dev', opts[:dev])
63
+ command.append_arg('label', opts[:label])
64
+ command.append_arg('scope', opts[:scope])
65
+ command
66
+ end
67
+
68
+ def ip_address_flush(opts)
69
+ command = Kanrisuru::Command.new('ip address flush')
70
+
71
+ command.append_arg('dev', opts[:dev])
72
+ command.append_arg('scope', opts[:scope])
73
+ command.append_arg('to', opts[:prefix])
74
+ command.append_arg('label', opts[:label])
75
+
76
+ command.append_flag('dynamic', opts[:dynamic])
77
+ command.append_flag('permanent', opts[:permanent])
78
+ command.append_flag('tenative', opts[:tenative])
79
+ command.append_flag('deprecated', opts[:deprecated])
80
+ command.append_flag('primary', opts[:primary])
81
+ command.append_flag('secondary', opts[:secondary])
82
+ command
83
+ end
67
84
  end
68
85
  end
69
86
  end
@@ -4,27 +4,16 @@ module Kanrisuru
4
4
  module Core
5
5
  module IP
6
6
  def ip_address_label(action, opts)
7
- command = nil
8
-
9
7
  case action
10
8
  when 'show', 'list'
11
- version = ip_version
12
-
13
- command = Kanrisuru::Command.new('ip')
14
- command.append_flag('-json') if version >= IPROUTE2_JSON_VERSION
15
- command << 'addrlabel list'
9
+ version = ip_version.to_i
10
+ command = ip_address_label_show(opts, version)
16
11
  when 'flush'
17
- command = Kanrisuru::Command.new('ip addrlabel flush')
12
+ command = ip_address_label_flush(opts)
18
13
  when 'add'
19
- command = Kanrisuru::Command.new('ip addrlabel add')
20
- command.append_arg('prefix', opts[:prefix])
21
- command.append_arg('dev', opts[:dev])
22
- command.append_arg('label', opts[:label])
14
+ command = ip_address_label_add(opts)
23
15
  when 'del'
24
- command = Kanrisuru::Command.new('ip addrlabel del')
25
- command.append_arg('prefix', opts[:prefix])
26
- command.append_arg('dev', opts[:dev])
27
- command.append_arg('label', opts[:label])
16
+ command = ip_address_label_delete(opts)
28
17
  end
29
18
 
30
19
  execute_shell(command)
@@ -33,6 +22,33 @@ module Kanrisuru
33
22
  Parser::AddressLabel.parse(cmd, action, version)
34
23
  end
35
24
  end
25
+
26
+ def ip_address_label_delete(opts)
27
+ command = Kanrisuru::Command.new('ip addrlabel del')
28
+ command.append_arg('prefix', opts[:prefix])
29
+ command.append_arg('dev', opts[:dev])
30
+ command.append_arg('label', opts[:label])
31
+ command
32
+ end
33
+
34
+ def ip_address_label_add(opts)
35
+ command = Kanrisuru::Command.new('ip addrlabel add')
36
+ command.append_arg('prefix', opts[:prefix])
37
+ command.append_arg('dev', opts[:dev])
38
+ command.append_arg('label', opts[:label])
39
+ command
40
+ end
41
+
42
+ def ip_address_label_flush(_opts)
43
+ Kanrisuru::Command.new('ip addrlabel flush')
44
+ end
45
+
46
+ def ip_address_label_show(_opts, version)
47
+ command = Kanrisuru::Command.new('ip')
48
+ command.append_flag('-json') if version >= IPROUTE2_JSON_VERSION
49
+ command << 'addrlabel list'
50
+ command
51
+ end
36
52
  end
37
53
  end
38
54
  end
@@ -4,63 +4,16 @@ module Kanrisuru
4
4
  module Core
5
5
  module IP
6
6
  def ip_link(action, opts)
7
- command = nil
8
-
9
7
  case action
10
8
  when 'show', 'list'
11
- version = ip_version
12
-
13
- command = Kanrisuru::Command.new('ip')
14
- command.append_flag('-json') if version >= IPROUTE2_JSON_VERSION
15
- command.append_flag('-s', opts[:stats])
16
- command.append_arg('-family', opts[:family])
17
- command << 'link show'
18
-
19
- command.append_arg('dev', opts[:dev])
20
- command.append_arg('group', opts[:group])
21
- command.append_arg('master', opts[:master])
22
- command.append_arg('type', opts[:type])
23
- command.append_arg('vrf', opts[:vrf])
24
-
25
- command.append_flag('up', opts[:up])
9
+ version = ip_version.to_i
10
+ command = ip_link_show(opts, version)
11
+ when 'add', 'a'
12
+ command = ip_link_add(opts)
13
+ when 'delete', 'del'
14
+ command = ip_link_delete(opts)
26
15
  when 'set'
27
- command = Kanrisuru::Command.new('ip link set')
28
-
29
- raise ArgumentError, 'no device defined' unless opts[:dev]
30
-
31
- command.append_arg('dev', opts[:dev])
32
-
33
- case opts[:direction]
34
- when 'up'
35
- command.append_flag('up')
36
- when 'down'
37
- command.append_flag('down')
38
- end
39
-
40
- command.append_arg('arp', opts[:arp])
41
- command.append_arg('multicast', opts[:multicast])
42
- command.append_arg('dynamic', opts[:dynamic])
43
- command.append_arg('name', opts[:name])
44
- command.append_arg('txqueuelen', opts[:txqueuelen])
45
- command.append_arg('txqlen', opts[:txqlen])
46
- command.append_arg('mtu', opts[:mtu])
47
- command.append_arg('address', opts[:address])
48
- command.append_arg('broadcast', opts[:broadcast])
49
- command.append_arg('brd', opts[:brd])
50
- command.append_arg('peer', opts[:peer])
51
- command.append_arg('netns', opts[:netns])
52
-
53
- if Kanrisuru::Util.present?(opts[:vf])
54
- command.append_arg('vf', opts[:vf])
55
- command.append_arg('mac', opts[:mac])
56
-
57
- if Kanrisuru::Util.present?(opts[:vlan])
58
- command.append_arg('vlan', opts[:vlan])
59
- command.append_arg('qos', opts[:qos])
60
- end
61
-
62
- command.append_arg('rate', opts[:rate])
63
- end
16
+ command = ip_link_set(opts)
64
17
  end
65
18
 
66
19
  execute_shell(command)
@@ -69,6 +22,95 @@ module Kanrisuru
69
22
  Parser::Link.parse(cmd, action, version)
70
23
  end
71
24
  end
25
+
26
+ def ip_link_show(opts, version)
27
+ command = Kanrisuru::Command.new('ip')
28
+ command.append_flag('-json') if version >= IPROUTE2_JSON_VERSION
29
+ command.append_flag('-s', opts[:stats])
30
+ command.append_arg('-family', opts[:family])
31
+ command << 'link show'
32
+
33
+ command.append_arg('dev', opts[:dev])
34
+ command.append_arg('group', opts[:group])
35
+ command.append_arg('master', opts[:master])
36
+ command.append_arg('type', opts[:type])
37
+ command.append_arg('vrf', opts[:vrf])
38
+
39
+ command.append_flag('up', opts[:up])
40
+ command
41
+ end
42
+
43
+ def ip_link_add(opts)
44
+ command = Kanrisuru::Command.new('ip link add')
45
+
46
+ command.append_arg('dev', opts[:dev])
47
+ command.append_arg('name', opts[:name])
48
+ command.append_arg('mtu', opts[:mtu])
49
+ command.append_arg('index', opts[:index])
50
+
51
+ command.append_arg('numtxqueues', opts[:numtxqueues])
52
+ command.append_arg('numrxqueues', opts[:numrxqueues])
53
+ command.append_arg('gso_max_size', opts[:gso_max_size])
54
+ command.append_arg('gso_max_segs', opts[:gso_max_segs])
55
+
56
+ if Kanrisuru::Util.present?(opts[:type])
57
+ raise ArgumentError, 'invalid link type' unless IP_LINK_TYPES.include?(opts[:type])
58
+
59
+ command.append_arg('type', opts[:type])
60
+
61
+ ip_link_type_opts(command, opts) if Kanrisuru::Util.present?(opts[:type_opts])
62
+ end
63
+
64
+ command
65
+ end
66
+
67
+ def ip_link_delete(opts)
68
+ command = Kanrisuru::Command.new('ip link delete')
69
+ command.append_arg('dev', opts[:dev])
70
+ command.append_arg('group', opts[:group])
71
+ command.append_arg('type', opts[:type])
72
+ command
73
+ end
74
+
75
+ def ip_link_set(opts)
76
+ command = Kanrisuru::Command.new('ip link set')
77
+ raise ArgumentError, 'no device defined' unless opts[:dev]
78
+
79
+ command.append_arg('dev', opts[:dev])
80
+ command.append_arg('group', opts[:group])
81
+
82
+ case opts[:direction]
83
+ when 'up'
84
+ command.append_flag('up')
85
+ when 'down'
86
+ command.append_flag('down')
87
+ end
88
+
89
+ ip_link_common_opts(command, opts)
90
+
91
+ ip_link_vf_opts(command, opts) if Kanrisuru::Util.present?(opts[:vf])
92
+
93
+ ip_link_xdp_opts(command, opts) if Kanrisuru::Util.present?(opts[:xdp])
94
+
95
+ if opts[:master] == false
96
+ command.append_flag('nomaster')
97
+ else
98
+ command.append_arg('master', opts[:master])
99
+ end
100
+
101
+ command.append_arg('addrgenmode', opts[:addrgenmode])
102
+ command.append_flag('link-netnsid', opts[:link_netnsid])
103
+
104
+ if Kanrisuru::Util.present?(opts[:type])
105
+ raise ArgumentError, 'invalid link type' unless IP_LINK_TYPES.include?(opts[:type])
106
+
107
+ command.append_arg('type', opts[:type])
108
+
109
+ ip_link_type_opts(command, opts) if Kanrisuru::Util.present?(opts[:type_opts])
110
+ end
111
+
112
+ command
113
+ end
72
114
  end
73
115
  end
74
116
  end
@@ -0,0 +1,61 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Kanrisuru
4
+ module Core
5
+ module IP
6
+ def ip_link_common_opts(command, opts)
7
+ command.append_arg('arp', opts[:arp])
8
+ command.append_arg('multicast', opts[:multicast])
9
+ command.append_arg('allmulticast', opts[:allmulticast])
10
+ command.append_arg('promisc', opts[:promisc])
11
+ command.append_arg('protodown', opts[:protodown])
12
+ command.append_arg('protodown_reason', opts[:protodown_reason])
13
+ command.append_arg('dynamic', opts[:dynamic])
14
+ command.append_arg('name', opts[:name])
15
+ command.append_arg('txqueuelen', opts[:txqueuelen])
16
+ command.append_arg('txqlen', opts[:txqlen])
17
+ command.append_arg('mtu', opts[:mtu])
18
+ command.append_arg('address', opts[:address])
19
+ command.append_arg('broadcast', opts[:broadcast])
20
+ command.append_arg('brd', opts[:brd])
21
+ command.append_arg('peer', opts[:peer])
22
+ command.append_arg('netns', opts[:netns])
23
+ command.append_arg('alias', opts[:alias])
24
+ end
25
+
26
+ def ip_link_xdp_opts(command, opts)
27
+ command.append_arg('xdp', opts[:xdp])
28
+
29
+ case opts[:xdp]
30
+ when 'object'
31
+ command << opts[:object]
32
+ command.append_arg('section', opts[:section])
33
+ command.append_flag('verbose', opts[:verbose])
34
+ when 'pinned'
35
+ command << opts[:pinned]
36
+ end
37
+ end
38
+
39
+ def ip_link_vf_opts(command, opts)
40
+ command.append_arg('vf', opts[:vf])
41
+ command.append_arg('mac', opts[:mac])
42
+
43
+ if Kanrisuru::Util.present?(opts[:vlan])
44
+ command.append_arg('vlan', opts[:vlan])
45
+ command.append_arg('qos', opts[:qos])
46
+ end
47
+
48
+ command.append_arg('proto', opts[:proto])
49
+ command.append_arg('rate', opts[:rate])
50
+ command.append_arg('max_tx_rate', opts[:max_tx_rate])
51
+ command.append_arg('min_tx_rate', opts[:min_tx_rate])
52
+ command.append_arg('spoofchk', opts[:spoofchk])
53
+ command.append_arg('query_rss', opts[:query_rss])
54
+ command.append_arg('state', opts[:state])
55
+ command.append_arg('trust', opts[:trust])
56
+ command.append_arg('node_guid', opts[:node_guid])
57
+ command.append_arg('port_guid', opts[:port_guid])
58
+ end
59
+ end
60
+ end
61
+ end