itamae-plugin-resource-firewalld 0.0.5 → 0.0.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: ecfc329d9c4b178963b42cd2158ece91a45a09c7
4
- data.tar.gz: 0b1aecf2a70e5ebd83b74c57ac2731239e54ffe6
3
+ metadata.gz: 4807810bd464e363989c8de9382f9789a54b929a
4
+ data.tar.gz: 9fd487b59fa8e659f59d15e1e5dd0d01b9e149f5
5
5
  SHA512:
6
- metadata.gz: 13882c1f745cc3ed1c003e5d7f258beb15247d4f64495252d7a43f1b64ab8562c6b5c77cfa6f53f9d5374c56e309429bae658ea4de7c0d5028af398108f5ec24
7
- data.tar.gz: 1e0c4ee9bcbac634088d227dd6061303faf57ac47123c22bb1302e4bd57e44db5d890f26c7f3eb150243e9ba26292275c27bb2bcc492726a6abf6d34684950bc
6
+ metadata.gz: bb05092f5c6aab47f91bfe5a1b0664d9d2014c63c4a1fbb353d517d9f506dbd30b56f910dd81f60f7b9a8cca7129a8f74e2ec99a727bedc2566a1390f2b86135
7
+ data.tar.gz: 6035f2c23cdea29bb99359b92fb37a082ec67f3da48a883927694c991054e8eb6c2bde24ad4f6ffd8d0d78703e1fe3e2611765e2bee98787be84662e3eb4c5d1
data/.travis.yml CHANGED
@@ -1,4 +1,13 @@
1
1
  language: ruby
2
+
3
+ sudo: false
4
+ cache: bundler
5
+
6
+ branches:
7
+ only:
8
+ - master
9
+
2
10
  rvm:
3
- - 2.1.4
11
+ - 2.1
12
+ - 2.2
4
13
  script: bundle exec rake test
data/README.md CHANGED
@@ -113,7 +113,7 @@ firewalld_service 'my-service' do
113
113
 
114
114
  short # [String]
115
115
  description # [String]
116
- port # [String]
116
+ ports # [Array of String]
117
117
  protocol # [String]
118
118
  module_name # [String]
119
119
  to_ipv4 # [String]
data/examples/README.md CHANGED
@@ -17,30 +17,16 @@ $ cd ./examples/
17
17
  $ vagrant up
18
18
  $ bundle exec itamae ssh -h default --vagrant recipe.rb
19
19
  INFO : Starting Itamae...
20
- INFO : Recipe: /path/to/itamae-plugin-resource-firewalld/examples/recipe.rb
21
- INFO : service[firewalld]
22
- INFO : action: start
23
- INFO : running will change from 'false' to 'true'
24
- INFO : action: enable
25
- INFO : enabled will change from 'false' to 'true'
26
- INFO : firewalld_service[my-ssh]
27
- INFO : action: create
28
- INFO : Notifying restart to service resource 'firewalld-add-service' (delayed)
29
- INFO : service[firewalld-add-service]
30
- INFO : action: restart
31
- INFO : firewalld_zone[home]
32
- INFO : action: update
33
- INFO : services will change from '["dhcpv6-client", "ipp-client", "mdns", "samba-client", "ssh"]' to '["samba", "ssh", "vnc-server"]'
34
- INFO : ports will change from '[]' to '["1900/udp", "32469/tcp", "5353/udp"]'
35
- INFO : Notifying restart to service resource 'firewalld' (delayed)
36
- INFO : firewalld_zone[public]
37
- INFO : action: update
38
- INFO : services will change from '["dhcpv6-client", "ssh"]' to '["https", "my-ssh", "mysql", "ssh"]'
39
- INFO : Notifying restart to service resource 'firewalld' (delayed)
40
- INFO : service[firewalld-add-service]
41
- INFO : action: restart
42
- INFO : service[firewalld]
43
- INFO : action: restart
20
+ INFO : Recipe: /Users/gongo/.ghq/github.com/gongo/itamae-plugin-resource-firewalld/examples/recipe.rb
21
+ INFO : service[firewalld] running will change from 'false' to 'true'
22
+ INFO : service[firewalld] enabled will change from 'false' to 'true'
23
+ INFO : firewalld_service[my-ssh] ports will change from '[]' to '["2222/tcp"]'
24
+ INFO : Notifying restart to service resource 'firewalld-add-service' (delayed)
25
+ INFO : firewalld_zone[home] services will change from '["dhcpv6-client", "ipp-client", "mdns", "samba-client", "ssh"]' to '["samba", "ssh", "vnc-server"]'
26
+ INFO : firewalld_zone[home] ports will change from '[]' to '["1900/udp", "32469/tcp", "5353/udp"]'
27
+ INFO : Notifying restart to service resource 'firewalld' (delayed)
28
+ INFO : firewalld_zone[public] services will change from '["dhcpv6-client", "ssh"]' to '["https", "my-ssh", "mysql", "ssh"]'
29
+ INFO : Notifying restart to service resource 'firewalld' (delayed)
44
30
  ```
45
31
 
46
32
  ### Confirmation
data/examples/recipe.rb CHANGED
@@ -7,8 +7,7 @@ end
7
7
  firewalld_service 'my-ssh' do
8
8
  short 'my-ssh'
9
9
  description 'My perfect ssh!!'
10
- port '2222'
11
- protocol 'tcp'
10
+ ports %w(2222/tcp)
12
11
 
13
12
  #
14
13
  # Necessary to restart before use added service.
@@ -23,5 +23,5 @@ Gem::Specification.new do |spec|
23
23
  spec.add_development_dependency 'test-unit', '~> 3.0.1'
24
24
  spec.add_development_dependency 'mocha'
25
25
  spec.add_development_dependency 'coveralls'
26
- spec.add_dependency 'itamae', '~> 1.2.0'
26
+ spec.add_dependency 'itamae', '~> 1.2.14'
27
27
  end
@@ -2,7 +2,7 @@ module Itamae
2
2
  module Plugin
3
3
  module Resource
4
4
  module Firewalld
5
- VERSION = "0.0.5"
5
+ VERSION = "0.0.6"
6
6
  end
7
7
  end
8
8
  end
@@ -11,8 +11,7 @@ module Itamae
11
11
 
12
12
  define_attribute :short, type: String, default: ''
13
13
  define_attribute :description, type: String, default: ''
14
- define_attribute :protocol, type: String, default: ''
15
- define_attribute :port, type: String, default: ''
14
+ define_attribute :ports, type: Array, default: []
16
15
  define_attribute :module_name, type: String, default: ''
17
16
  define_attribute :to_ipv4, type: String, default: ''
18
17
  define_attribute :to_ipv6, type: String, default: ''
@@ -35,9 +34,12 @@ module Itamae
35
34
  current.description = service['description'].text
36
35
  end
37
36
 
38
- if service['port']
39
- current.protocol = service['port'].attributes['protocol']
40
- current.port = service['port'].attributes['port']
37
+ current.ports = service.collect('port') do |port|
38
+ if port.attributes['port'].nil? || port.attributes['port'].empty?
39
+ port.attributes['protocol']
40
+ else
41
+ "#{port.attributes['port']}/#{port.attributes['protocol']}"
42
+ end
41
43
  end
42
44
 
43
45
  if service['module']
@@ -50,6 +52,12 @@ module Itamae
50
52
  end
51
53
  end
52
54
 
55
+ def show_differences
56
+ current.ports = normalize_ports(current.ports)
57
+ attributes.ports = normalize_ports(attributes.ports)
58
+ super
59
+ end
60
+
53
61
  def action_create(options)
54
62
  run_specinfra(:move_file, build_xmlfile_on_remote, service_xmlfile_path)
55
63
  attributes.status = :defined
@@ -64,6 +72,16 @@ module Itamae
64
72
 
65
73
  private
66
74
 
75
+ def normalize_ports(ports)
76
+ return [] if ports.nil?
77
+ ports.map(&:to_s).sort
78
+ end
79
+
80
+ # '80/tcp' => ['tcp', 80]; 'igmp' => ['igmp']
81
+ def parse_port(port)
82
+ port.to_s.split('/', 2).reverse
83
+ end
84
+
67
85
  def build_xmlfile_on_remote
68
86
  local_path = build_xmlfile_on_local
69
87
  remote_path = ::File.join(runner.tmpdir, Time.now.to_f.to_s)
@@ -79,7 +97,7 @@ module Itamae
79
97
 
80
98
  add_short_tag
81
99
  add_description_tag
82
- add_port_tag
100
+ add_port_tags
83
101
  add_module_tag
84
102
  add_destination_tag
85
103
 
@@ -103,12 +121,16 @@ module Itamae
103
121
  description.text = attributes.description unless attributes.description.empty?
104
122
  end
105
123
 
106
- def add_port_tag
107
- return if (attributes.protocol.empty? && attributes.port.empty?)
124
+ def add_port_tags
125
+ return unless attributes.ports
108
126
 
109
- node = @service_document.add_element('port')
110
- node.add_attribute('protocol', attributes.protocol) unless attributes.protocol.empty?
111
- node.add_attribute('port', attributes.port) unless attributes.port.empty?
127
+ normalize_ports(attributes.ports).each do |port|
128
+ protocol, portnum = parse_port(port)
129
+
130
+ node = @service_document.add_element('port')
131
+ node.add_attribute('protocol', protocol)
132
+ node.add_attribute('port', portnum || '')
133
+ end
112
134
  end
113
135
 
114
136
  def add_module_tag
@@ -131,7 +153,7 @@ module Itamae
131
153
  end
132
154
 
133
155
  def current_status
134
- command = ['firewall-cmd', '--permanent', '--list-services']
156
+ command = ['firewall-cmd', '--permanent', '--get-services']
135
157
  services = run_command(command).stdout.strip.split
136
158
  services.include?(attributes.name) ? :defined : :undefined
137
159
  end
data/test/helper.rb CHANGED
@@ -6,3 +6,17 @@ require 'mocha/test_unit'
6
6
  require 'itamae'
7
7
 
8
8
  Itamae::Logger.log_device = StringIO.new
9
+
10
+ class BackendMock < ::Itamae::Backend::Local
11
+ class UnexpectedCallError < StandardError ; end
12
+
13
+ attr_reader :sent_file
14
+
15
+ def run_command(*args)
16
+ raise UnexpectedCallError.new('Should have been stubbing')
17
+ end
18
+
19
+ def send_file(src, dst)
20
+ @sent_file = src
21
+ end
22
+ end
@@ -4,20 +4,12 @@ require 'itamae/plugin/resource/firewalld_service'
4
4
  module Itamae
5
5
  module Plugin
6
6
  module Resource
7
- # Stub
8
- class FirewalldService
9
- def send_file(from, to)
10
- @local_path = from
11
- end
12
-
13
- def local_path
14
- @local_path
15
- end
16
- end
17
-
18
7
  class TestFirewalldService < Test::Unit::TestCase
19
8
  setup do
20
- @resource = FirewalldService.new(stub, 'test-service')
9
+ @backend = BackendMock.new({})
10
+ runner = stub(tmpdir: ::Dir.tmpdir, backend: @backend)
11
+ recipe = stub(runner: runner)
12
+ @resource = FirewalldService.new(recipe, 'test-service')
21
13
  end
22
14
 
23
15
  sub_test_case '#action_delete' do
@@ -28,7 +20,7 @@ module Itamae
28
20
  sub_test_case 'predefined service' do
29
21
  setup do
30
22
  @resource.expects(:run_command)
31
- .with(['firewall-cmd', '--permanent', '--list-services'])
23
+ .with(['firewall-cmd', '--permanent', '--get-services'])
32
24
  .returns(stub(stdout: 'service1 service2 test-service'))
33
25
  end
34
26
 
@@ -42,7 +34,7 @@ module Itamae
42
34
  sub_test_case 'undefined service' do
43
35
  setup do
44
36
  @resource.expects(:run_command)
45
- .with(['firewall-cmd', '--permanent', '--list-services'])
37
+ .with(['firewall-cmd', '--permanent', '--get-services'])
46
38
  .returns(stub(stdout: 'service1 service2'))
47
39
  end
48
40
 
@@ -56,25 +48,10 @@ module Itamae
56
48
  sub_test_case '#action_create' do
57
49
  setup do
58
50
  @resource.attributes.action = :create
59
- @resource.stubs(:runner).returns(stub(tmpdir: ::Dir.tmpdir))
60
- @resource.stubs(:move_file)
61
51
  @resource.stubs(:run_specinfra).with(:move_file, is_a(String), is_a(String))
62
-
63
52
  @resource.expects(:notify)
64
53
  end
65
54
 
66
- sub_test_case 'undefined service' do
67
- setup do
68
- @resource.stubs(:current_status).returns(:undefined)
69
- end
70
-
71
- test 'create service' do
72
- @resource.run
73
-
74
- assert ::File.exists?(@resource.local_path )
75
- end
76
- end
77
-
78
55
  sub_test_case 'predefined service' do
79
56
  setup do
80
57
  @resource.stubs(:current_status).returns(:defined)
@@ -86,6 +63,8 @@ module Itamae
86
63
  <short>test-service</short>
87
64
  <description>test-service description</description>
88
65
  <port protocol="tcp" port="2222"/>
66
+ <port protocol="udp" />
67
+ <port protocol="tcp" port="80-82"/>
89
68
  <module name="test-module"/>
90
69
  <destination ipv4="224.0.0.251" ipv6="ff02::fb"/>
91
70
  </service>
@@ -95,20 +74,30 @@ module Itamae
95
74
  test 'update service' do
96
75
  @resource.attributes.short = 'test-service!!'
97
76
  @resource.attributes.description = 'test-service update description'
98
- @resource.attributes.protocol = 'udp'
99
- @resource.attributes.port = '2222-2224'
77
+ @resource.attributes.ports = ['2222-2224/udp', '80/tcp', 'igmp']
100
78
  @resource.attributes.module_name = 'new-test-module'
101
79
  @resource.attributes.to_ipv4 = '172.17.0.1'
102
80
  @resource.attributes.to_ipv6 = 'ffff::fc'
103
81
  @resource.run
104
82
 
105
- root = REXML::Document.new(File.read(@resource.local_path))
83
+ assert_equal 'test-service', @resource.current.short
84
+ assert_equal 'test-service description', @resource.current.description
85
+ assert_equal ['2222/tcp', '80-82/tcp', 'udp'], @resource.current.ports
86
+ assert_equal 'test-module', @resource.current.module_name
87
+ assert_equal '224.0.0.251', @resource.current.to_ipv4
88
+ assert_equal 'ff02::fb', @resource.current.to_ipv6
89
+
90
+ root = REXML::Document.new(File.read(@backend.sent_file))
106
91
  service = root.elements['/service'].elements
107
92
 
108
93
  assert_equal @resource.attributes.short, service['short'].text
109
94
  assert_equal @resource.attributes.description, service['description'].text
110
- assert_equal @resource.attributes.protocol, service['port'].attributes['protocol']
111
- assert_equal @resource.attributes.port, service['port'].attributes['port']
95
+ assert_equal 'udp', service[1, 'port'].attributes['protocol']
96
+ assert_equal '2222-2224', service[1, 'port'].attributes['port']
97
+ assert_equal 'tcp', service[2, 'port'].attributes['protocol']
98
+ assert_equal '80', service[2, 'port'].attributes['port']
99
+ assert_equal 'igmp', service[3, 'port'].attributes['protocol']
100
+ assert_equal '', service[3, 'port'].attributes['port']
112
101
  assert_equal @resource.attributes.module_name, service['module'].attributes['name']
113
102
  assert_equal @resource.attributes.to_ipv4, service['destination'].attributes['ipv4']
114
103
  assert_equal @resource.attributes.to_ipv6, service['destination'].attributes['ipv6']
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: itamae-plugin-resource-firewalld
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.5
4
+ version: 0.0.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Wataru MIYAGUNI
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-07-13 00:00:00.000000000 Z
11
+ date: 2015-07-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -86,14 +86,14 @@ dependencies:
86
86
  requirements:
87
87
  - - "~>"
88
88
  - !ruby/object:Gem::Version
89
- version: 1.2.0
89
+ version: 1.2.14
90
90
  type: :runtime
91
91
  prerelease: false
92
92
  version_requirements: !ruby/object:Gem::Requirement
93
93
  requirements:
94
94
  - - "~>"
95
95
  - !ruby/object:Gem::Version
96
- version: 1.2.0
96
+ version: 1.2.14
97
97
  description: Itamae resource plugin to manage firewalld.
98
98
  email:
99
99
  - gonngo@gmail.com