itamae-plugin-resource-firewalld 0.0.5 → 0.0.6

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
  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