iptables-web 0.3.4 → 0.3.5.pre

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