iptables-web 0.3.4 → 0.3.5.pre

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: 8aa2e7a4f2081bada1a78a10c439b96d1066b541
4
- data.tar.gz: c3dfc7a32f40944ec85d7867b39fd75d1efcf83c
3
+ metadata.gz: c88d608bca3ca5b66af10b416635051baf9c0cb6
4
+ data.tar.gz: f56fe75a5012aec57a0a83a381e27f3cd5671337
5
5
  SHA512:
6
- metadata.gz: 5af17b475ed4b4a694fe4b6f1907ee1e82b6f6297fa4c84eadca6483f6c03394bcc22940e87bda112b36df56bdbd6b666c8211b97ab323fff392a75576c2d878
7
- data.tar.gz: 7f733c157ec31d56ab9690e5dc44c7870050749ccf8db616afeb6100a4c54f887e88c535423d93e8efcb683b33ba2c1c53d4c420282d57e4c1ae1e310b517eea
6
+ metadata.gz: 85e0aa40dcbbb129c2f1366eef8f10ea849fd71e0e15c3f3cea5ca36147327156ca45c2b398c871af8c2440185b469fe26d860d23f8defa227e63733b59847d6
7
+ data.tar.gz: 887dfd58ba7554dd67e5225e1c11b9c7a41fe80bf4619ae6ad17a38b2804515d4a0706d42e9f29f182202c914c76d8cacc0e10b40dbcf3f55421e5cbb7ec534b
@@ -22,6 +22,10 @@ module IptablesWeb
22
22
  IptablesWeb.log_path = log_path
23
23
  end
24
24
 
25
+ global_option('--log_level LEVEL', 'Log level') do |log_level|
26
+ IptablesWeb.log_level = log_level
27
+ end
28
+
25
29
  global_option('--host URL', 'Server base url') do |server_base_url|
26
30
  IptablesWeb.api_base_url = server_base_url
27
31
  end
@@ -10,25 +10,34 @@ module IptablesWeb
10
10
  c.option '--config STRING', String, 'Path to config file'
11
11
  c.option '--print', 'Show rules without restoring'
12
12
  c.option '--force', 'Set rules omit checksum check'
13
+ c.option '--dry-run', 'Skip handshake'
13
14
  c.action do |_, options|
14
15
  begin
15
16
  IptablesWeb.configuration.load(options.config) if options.config
16
17
  logged_say "Use iptables server #{IptablesWeb.api_base_url}"
17
18
  IptablesWeb.pid_file do
18
- IptablesWeb::Model::Node.handshake do
19
+ IptablesWeb::Model::Node.handshake(options.dry_run || options.print) do
19
20
  rules = IptablesWeb::Model::AccessRule.all
20
21
  iptables = IptablesWeb::Iptables.new
21
- last_checksum = rules.response.headers[:etag].first
22
+ request_etag = rules.response.headers[:etag].first
22
23
  if options.print
23
- logged_say 'Nothing changed.' if IptablesWeb.checksum?(last_checksum)
24
+ logged_say 'Run client in print mode'
25
+ logged_say 'Nothing changed.' if IptablesWeb.checksum?(request_etag)
26
+ logged_say "Previous checksum #{IptablesWeb.checksum}"
27
+ logged_say "Current checksum #{IptablesWeb.make_checksum(request_etag)}"
24
28
  say iptables.render(rules)
25
29
  else
26
- if IptablesWeb.checksum?(rules.response.headers[:etag].first) && !options.force
30
+ logged_say 'Run client in DRY-RUN mode' if options.dry_run
31
+ logged_say("Etag value: #{request_etag.inspect}", ::Logger::DEBUG)
32
+ if IptablesWeb.checksum?(request_etag) && !options.force
27
33
  logged_say 'Skip iptables update. Nothing changed.'
28
34
  else
29
35
  logged_say '*** Iptables updated! ***'
30
- iptables.restore(rules)
31
- IptablesWeb.checksum = last_checksum
36
+ logger_log(iptables.render(rules), ::Logger::DEBUG)
37
+ unless options.dry_run
38
+ iptables.restore(rules)
39
+ IptablesWeb.checksum = request_etag
40
+ end
32
41
  end
33
42
  end
34
43
  end
@@ -1,11 +1,25 @@
1
1
  module IptablesWeb
2
2
  class Cli
3
3
  class LoggedOutput < ::HighLine
4
+
5
+ LOG_LEVEL_MAP = {
6
+ 'debug' => ::Logger::DEBUG,
7
+ 'info' => ::Logger::INFO,
8
+ 'warn' => ::Logger::WARN,
9
+ 'error' => ::Logger::ERROR,
10
+ 'fatal' => ::Logger::FATAL,
11
+ 'unknown' => ::Logger::UNKNOWN,
12
+ }
13
+
4
14
  def logger
5
15
  @logger ||= begin
6
16
  logfile = IptablesWeb::log_path
17
+ log_level = IptablesWeb::log_level
18
+ log_level = LOG_LEVEL_MAP[log_level] if LOG_LEVEL_MAP[log_level]
19
+ log_level = log_level.to_i
7
20
  say("Open log file #{logfile}")
8
21
  logger =::Logger.new(logfile)
22
+ logger.level = log_level.to_i
9
23
  logger.formatter = ::Logger::Formatter.new
10
24
  logger
11
25
  end
@@ -15,8 +29,12 @@ module IptablesWeb
15
29
  @logger = nil
16
30
  end
17
31
 
18
- def logged_say(message, log_level = Logger::INFO)
32
+ def logger_log(message, log_level = Logger::INFO)
19
33
  logger.log(log_level, message) if logger
34
+ end
35
+
36
+ def logged_say(message, log_level = Logger::INFO)
37
+ logger_log(message, log_level)
20
38
  say(message)
21
39
  end
22
40
  end
@@ -97,21 +97,34 @@ module IptablesWeb
97
97
  $terminal.reset if $terminal.present? && $terminal.is_a?(Cli::LoggedOutput)
98
98
  end
99
99
 
100
- #
100
+ def log_level=(level)
101
+ @log_level = level
102
+ $terminal.reset if $terminal.present? && $terminal.is_a?(Cli::LoggedOutput)
103
+ end
104
+
105
+ def log_level
106
+ @log_level || ::Logger::INFO
107
+ end
108
+
101
109
  def checksum_path
102
110
  path(@checksum_path || 'checksum')
103
111
  end
104
112
 
113
+ def checksum
114
+ File.read(checksum_path) if File.exists?(checksum_path)
115
+ end
116
+
105
117
  def checksum_path=(pid_path)
106
118
  @checksum_path = pid_path
107
119
  end
108
120
 
109
- def checksum?(checksum)
110
- File.exists?(checksum_path) && File.read(checksum_path) == make_checksum(checksum)
121
+
122
+ def checksum?(etag)
123
+ checksum == make_checksum(etag)
111
124
  end
112
125
 
113
- def checksum=(checksum)
114
- File.write(checksum_path, make_checksum(checksum))
126
+ def checksum=(etag)
127
+ File.write(checksum_path, make_checksum(etag))
115
128
  end
116
129
 
117
130
  def make_checksum(check_sum)
@@ -4,7 +4,7 @@ module IptablesWeb
4
4
  self.element_name = 'node'
5
5
  self.include_root_in_json = true
6
6
 
7
- def self.handshake(&block)
7
+ def self.handshake(dry_run = false, &block)
8
8
  node = find('current')
9
9
  if node
10
10
  begin
@@ -16,15 +16,17 @@ module IptablesWeb
16
16
  node.report << 'Backtrace: ' + e.backtrace.join("\n")
17
17
  raise e
18
18
  ensure
19
+ return if dry_run
20
+ puts ''
19
21
  # save node after updating
20
22
  node.ips = []
21
23
  ::System.get_ifaddrs.each do |interface, config|
22
24
  next if interface.to_s.include?('lo')
23
25
  node.ips.push({
24
- interface: interface,
25
- ip: config[:inet_addr],
26
- netmask: config[:netmask]
27
- })
26
+ interface: interface,
27
+ ip: config[:inet_addr],
28
+ netmask: config[:netmask]
29
+ })
28
30
  end
29
31
  node.ips.uniq! { |ip| ip[:ip] }
30
32
  node.hostname = `hostname -f`
@@ -1,3 +1,3 @@
1
1
  module IptablesWeb
2
- VERSION = '0.3.4'
2
+ VERSION = '0.3.5.pre'
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: iptables-web
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.4
4
+ version: 0.3.5.pre
5
5
  platform: ruby
6
6
  authors:
7
7
  - NikolayMurga
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-12-11 00:00:00.000000000 Z
11
+ date: 2016-01-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: system-getifaddrs
@@ -173,9 +173,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
173
173
  version: '0'
174
174
  required_rubygems_version: !ruby/object:Gem::Requirement
175
175
  requirements:
176
- - - ">="
176
+ - - ">"
177
177
  - !ruby/object:Gem::Version
178
- version: '0'
178
+ version: 1.3.1
179
179
  requirements: []
180
180
  rubyforge_project:
181
181
  rubygems_version: 2.4.7