smart_proxy_dynflow_core 0.0.7 → 0.1.0

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: 5742c7365ff184933fcacedca67dec98085b1b41
4
- data.tar.gz: 31049cda89e6ccb7e4d467f3566b44fe9614bb57
3
+ metadata.gz: b0d120d38258eec260af438b2eadf540a2015236
4
+ data.tar.gz: a2d72f30ab1d4e7e31249f9273d5b630b4277966
5
5
  SHA512:
6
- metadata.gz: 15c260cd39034346bde7e66240d61210607406b41b3609ec41db1d3f76f16854f58a0ca773f112c5cd6f02c13292551b2f94a64d691f50de6f5eee9aec8505ee
7
- data.tar.gz: 4d119c22a2e8a1e888a732d4f0456195733aafdb734ae0df592711146c07ae24c32514bdeb1e41e06a7bff551074d91ac5df62b1c8c81d78c7ba58073a297ea8
6
+ metadata.gz: 67325b2dbb85f4c7a6cefcd61fc4e6b39ff529ae6478da19e32b583f347435f6cba301f9606ea6d7699557d218ac8e37701fee8009b4ec1dc9e8f24b70783183
7
+ data.tar.gz: f1ff5e54f435e69080a61c28727ec77ae68506e902bc8a3df36e170f6e827a8eb42c95093267b4d3a4a7175e8bdd813dcce454e7123e7411aba8b62e84de8803
data/Gemfile CHANGED
@@ -3,11 +3,13 @@ source 'https://rubygems.org'
3
3
  gemspec :name => 'smart_proxy_dynflow_core'
4
4
 
5
5
  group :development do
6
- gem 'smart_proxy', :git => "https://github.com/theforeman/smart-proxy", :branch => "develop"
7
6
  gem 'pry'
8
7
  end
9
8
 
10
- gem 'smart_proxy_dynflow', :path => '.'
9
+ group :test do
10
+ gem 'smart_proxy_dynflow', :path => '.'
11
+ gem 'smart_proxy', :git => "https://github.com/theforeman/smart-proxy", :branch => "develop"
12
+ end
11
13
 
12
14
  # load local gemfile
13
15
  local_gemfile = File.join(File.dirname(__FILE__), 'Gemfile.local.rb')
@@ -0,0 +1,2 @@
1
+ gem 'pry'
2
+ gem 'smart_proxy_remote_execution_ssh_core', :path => '../smart_proxy_remote_execution_ssh'
@@ -16,3 +16,5 @@
16
16
  # :ssl_ca_file: ssl/ca.pem
17
17
  # :ssl_private_key: ssl/localhost.pem
18
18
  # :ssl_certificate: ssl/certs/localhost.pem
19
+
20
+ # :log_file: /var/log/foreman-proxy/smart_proxy_dynflow_core.log
@@ -0,0 +1,95 @@
1
+ #!/bin/bash
2
+ #
3
+ # Init script for foreman smart proxy dynflow core service
4
+ #
5
+ # chkconfig: - 85 15
6
+ # description: Init script for foreman proxy dynflow core service
7
+
8
+ # Source function library.
9
+ . /etc/rc.d/init.d/functions
10
+
11
+ prog=smart_proxy_dynflow_core
12
+ RETVAL=0
13
+ SMART_PROXY_DYNFLOW_SCL_ROOT=/opt/theforeman/tfm/root
14
+ SMART_PROXY_DYNFLOW_CORE_PID=${SMART_PROXY_DYNFLOW_SCL_ROOT}/var/run/$prog/$prog.pid
15
+ SMART_PROXY_DYNFLOW_CORE_USER=${SMART_PROXY_DYNFLOW_CORE_USER:-foreman-proxy}
16
+
17
+ . /opt/theforeman/tfm/service-environment
18
+ . scl_source enable $TFM_SCLS_ENABLED
19
+
20
+ start() {
21
+ echo -n $"Starting $prog: "
22
+ daemon --user ${SMART_PROXY_DYNFLOW_CORE_USER} ${SMART_PROXY_DYNFLOW_SCL_ROOT}/usr/bin/smart_proxy_dynflow_core > /dev/null
23
+ RETVAL=$?
24
+ if [ $RETVAL = 0 ]
25
+ then
26
+ echo_success
27
+ else
28
+ echo_failure
29
+ fi
30
+
31
+ echo
32
+ return $RETVAL
33
+ }
34
+
35
+ stop() {
36
+ echo -n $"Stopping $prog: "
37
+ if [ -f ${SMART_PROXY_DYNFLOW_CORE_PID} ]; then
38
+ killproc -p ${SMART_PROXY_DYNFLOW_CORE_PID}
39
+ RETVAL=$?
40
+ else
41
+ echo -n $"$prog was not running.";
42
+ failure $"$prog was not running.";
43
+ echo
44
+ return 1
45
+ fi
46
+ echo
47
+ [ $RETVAL -eq 0 ] && rm -f ${SMART_PROXY_DYNFLOW_CORE_PID}
48
+ return $RETVAL
49
+ }
50
+
51
+ logrotate() {
52
+ echo -n $"Rotating logs for $prog: "
53
+ if [ -f ${SMART_PROXY_DYNFLOW_CORE_PID} ]; then
54
+ killproc -p ${SMART_PROXY_DYNFLOW_CORE_PID} $prog -USR1
55
+ RETVAL=$?
56
+ echo
57
+ else
58
+ echo -n $"$prog was not running.";
59
+ failure $"$prog was not running.";
60
+ echo
61
+ return 1
62
+ fi
63
+ return $RETVAL
64
+ }
65
+
66
+ # See how we were called.
67
+ case "$1" in
68
+ start)
69
+ start
70
+ ;;
71
+ stop)
72
+ stop
73
+ ;;
74
+ status)
75
+ echo -n "$prog"
76
+ status -p $SMART_PROXY_DYNFLOW_CORE_PID
77
+ RETVAL=$?
78
+ ;;
79
+ restart)
80
+ stop
81
+ start
82
+ ;;
83
+ condrestart)
84
+ stop
85
+ [ $? -eq 0 ] && start
86
+ ;;
87
+ logrotate)
88
+ logrotate
89
+ ;;
90
+ *)
91
+ echo $"Usage: $prog {start|stop|restart|condrestart|logrotate}"
92
+ exit 1
93
+ esac
94
+
95
+ exit $RETVAL
@@ -0,0 +1,14 @@
1
+ [Unit]
2
+ Description=Foreman smart proxy dynflow core service
3
+ Documentation=https://github.com/theforeman/smart_proxy_dynflow
4
+ After=network.target remote-fs.target nss-lookup.target
5
+
6
+ [Service]
7
+ Type=simple
8
+ User=foreman-proxy
9
+ PIDFile=/opt/theforeman/tfm/root/var/run/smart_proxy_dynflow_core/smart_proxy_dynflow_core.pid
10
+ EnvironmentFile=/opt/theforeman/tfm/service-environment
11
+ ExecStart=/usr/bin/scl enable $TFM_SCLS_ENABLED -- /opt/theforeman/tfm/root/usr/bin/smart_proxy_dynflow_core
12
+
13
+ [Install]
14
+ WantedBy=multi-user.target
@@ -1,3 +1,4 @@
1
+ require 'smart_proxy_dynflow_core/log'
1
2
  require 'smart_proxy_dynflow_core/settings'
2
3
  require 'smart_proxy_dynflow_core/core'
3
4
  require 'smart_proxy_dynflow_core/helpers'
@@ -7,6 +7,7 @@ module SmartProxyDynflowCore
7
7
  helpers Helpers
8
8
 
9
9
  before do
10
+ logger = Log.instance
10
11
  authorize_with_ssl_client
11
12
  content_type :json
12
13
  end
@@ -18,8 +18,7 @@ module SmartProxyDynflowCore
18
18
 
19
19
  db_file = Settings.instance.database
20
20
  if db_file.nil? || db_file.empty?
21
- # TODO: Use some kind of logger
22
- STDERR.puts "Could not open DB for dynflow at '#{db_file}', will keep data in memory. Restart will drop all dynflow data."
21
+ Log.instance.warn "Could not open DB for dynflow at '#{db_file}', will keep data in memory. Restart will drop all dynflow data."
23
22
  else
24
23
  db_conn_string += "/#{db_file}"
25
24
  end
@@ -41,7 +40,11 @@ module SmartProxyDynflowCore
41
40
  end
42
41
 
43
42
  def logger_adapter
44
- ::Dynflow::LoggerAdapters::Simple.new $stderr, 0
43
+ if Settings.instance.standalone
44
+ Log::ProxyAdapter.new(Log.instance, Log.instance.level)
45
+ else
46
+ Log::ProxyAdapter.new(Proxy::LogBuffer::Decorator.instance, Log.instance.level)
47
+ end
45
48
  end
46
49
 
47
50
  class << self
@@ -8,14 +8,11 @@ module SmartProxyDynflowCore
8
8
  if %w(yes on 1).include? request.env['HTTPS'].to_s
9
9
  if request.env['SSL_CLIENT_CERT'].to_s.empty?
10
10
  status 403
11
- # TODO: Use a logger
12
- STDERR.puts "No client SSL certificate supplied"
11
+ Log.instance.error "No client SSL certificate supplied"
13
12
  halt MultiJson.dump(:error => "No client SSL certificate supplied")
14
13
  end
15
14
  else
16
- # TODO: Use a logger
17
- # logger.debug('require_ssl_client_verification: skipping, non-HTTPS request')
18
- puts 'require_ssl_client_verification: skipping, non-HTTPS request'
15
+ Log.instance.debug 'require_ssl_client_verification: skipping, non-HTTPS request'
19
16
  end
20
17
  end
21
18
 
@@ -27,6 +27,7 @@ module SmartProxyDynflowCore
27
27
  possible_config_dirs.select { |config_dir| File.directory? config_dir }.each do |config_dir|
28
28
  break if load_config_dir(config_dir) && one_config
29
29
  end
30
+ Settings.loaded!
30
31
  end
31
32
 
32
33
  def self.route_mapping(rack_builder)
@@ -43,12 +44,10 @@ module SmartProxyDynflowCore
43
44
 
44
45
  def rack_settings
45
46
  settings = if https_enabled?
46
- # TODO: Use a logger
47
- puts "Using HTTPS"
47
+ Log.instance.debug "Using HTTPS"
48
48
  https_app
49
49
  else
50
- # TODO: Use a logger
51
- puts "Using HTTP"
50
+ Log.instance.debug "Using HTTP"
52
51
  {}
53
52
  end
54
53
  settings.merge(base_settings)
@@ -65,7 +64,9 @@ module SmartProxyDynflowCore
65
64
  :app => app,
66
65
  :Host => Settings.instance.listen,
67
66
  :Port => Settings.instance.port,
68
- :daemonize => false
67
+ :daemonize => false,
68
+ :AccessLog => [[Log.log_file, WEBrick::AccessLog::COMMON_LOG_FORMAT]],
69
+ :Logger => Log.instance
69
70
  }
70
71
  end
71
72
 
@@ -94,26 +95,21 @@ module SmartProxyDynflowCore
94
95
  def ssl_private_key
95
96
  OpenSSL::PKey::RSA.new(File.read(Settings.instance.ssl_private_key))
96
97
  rescue Exception => e
97
- # TODO: Use a logger
98
- STDERR.puts "Unable to load private SSL key. Are the values correct in settings.yml and do permissions allow reading?: #{e}"
99
- # logger.error "Unable to load private SSL key. Are the values correct in settings.yml and do permissions allow reading?: #{e}"
98
+ Log.instance.fatal "Unable to load private SSL key. Are the values correct in settings.yml and do permissions allow reading?: #{e}"
100
99
  raise e
101
100
  end
102
101
 
103
102
  def ssl_certificate
104
103
  OpenSSL::X509::Certificate.new(File.read(Settings.instance.ssl_certificate))
105
104
  rescue Exception => e
106
- # TODO: Use a logger
107
- STDERR.puts "Unable to load SSL certificate. Are the values correct in settings.yml and do permissions allow reading?: #{e}"
108
- # logger.error "Unable to load SSL certificate. Are the values correct in settings.yml and do permissions allow reading?: #{e}"
105
+ Log.instance.fatal "Unable to load SSL certificate. Are the values correct in settings.yml and do permissions allow reading?: #{e}"
109
106
  raise e
110
107
  end
111
108
 
112
109
  def load_config_dir(dir)
113
110
  settings_yml = File.join(dir, 'settings.yml')
114
111
  if File.exist? settings_yml
115
- # TODO: Use a logger
116
- puts "Loading settings from #{dir}"
112
+ Log.instance.debug "Loading settings from #{dir}"
117
113
  Settings.load_global_settings settings_yml
118
114
  Dir[File.join(dir, 'settings.d', '*.yml')].each { |path| Settings.load_plugin_settings(path) }
119
115
  true
@@ -0,0 +1,54 @@
1
+ require 'logger'
2
+ require 'dynflow'
3
+
4
+ module SmartProxyDynflowCore
5
+ class Log < ::Logger
6
+
7
+ alias_method :write, :debug
8
+
9
+ class << self
10
+ def instance
11
+ if @logger.nil?
12
+ @logger = Logger.new log_file
13
+ @logger.level = log_level
14
+ end
15
+ @logger
16
+ end
17
+
18
+ def instance=(logger)
19
+ @logger = logger
20
+ end
21
+
22
+ def reload!
23
+ @logger = nil
24
+ instance
25
+ end
26
+
27
+ def log_level
28
+ if Settings.instance.loaded && Settings.instance.log_level
29
+ ::Logger.const_get(Settings.instance.log_level.upcase)
30
+ else
31
+ Logger::WARN
32
+ end
33
+ end
34
+
35
+ def log_file
36
+ if Settings.instance.loaded && Settings.instance.log_file
37
+ Settings.instance.log_file
38
+ else
39
+ $stdout
40
+ end
41
+ end
42
+ end
43
+
44
+ class ProxyAdapter < ::Dynflow::LoggerAdapters::Simple
45
+ def initialize(logger, level = Logger::DEBUG, formatters = [::Dynflow::LoggerAdapters::Formatters::Exception])
46
+ @logger = logger
47
+ @logger.level = level
48
+ @logger.formatter = method(:formatter).to_proc
49
+ @action_logger = apply_formatters ProgNameWrapper.new(@logger, ' action'), formatters
50
+ @dynflow_logger = apply_formatters ProgNameWrapper.new(@logger, 'dynflow'), formatters
51
+ end
52
+ end
53
+ end
54
+ end
@@ -15,9 +15,16 @@ module SmartProxyDynflowCore
15
15
  :ssl_private_key => nil,
16
16
  :ssl_certificate => nil,
17
17
  :standalone => false,
18
- :plugins => {}
18
+ :log_file => '/var/log/foreman-proxy/smart_proxy_dynflow_core.log',
19
+ :log_level => :ERROR,
20
+ :plugins => {},
21
+ :loaded => false
19
22
  }
20
23
 
24
+ PROXY_SETTINGS = [:ssl_certificate, :ssl_ca_file, :ssl_private_key, :foreman_url,
25
+ :log_file, :log_level]
26
+ PLUGIN_SETTINGS = [:database, :core_url, :console_auth]
27
+
21
28
  def initialize(settings = {})
22
29
  super(DEFAULT_SETTINGS.merge(settings))
23
30
  end
@@ -34,15 +41,22 @@ module SmartProxyDynflowCore
34
41
  end
35
42
  end
36
43
 
44
+ def self.loaded!
45
+ Settings.instance.loaded = true
46
+ Log.instance.info 'Settings loaded, reloading logger'
47
+ Log.reload!
48
+ end
49
+
37
50
  def self.load_from_proxy(plugin)
38
- [:ssl_certificate, :ssl_ca_file, :ssl_private_key, :foreman_url].each do |key|
51
+ PROXY_SETTINGS.each do |key|
39
52
  SETTINGS[key] = Proxy::SETTINGS[key]
40
53
  end
41
54
  SETTINGS.callback_url = SETTINGS.foreman_url
42
- [:database, :core_url, :console_auth].each do |key|
55
+ PLUGIN_SETTINGS.each do |key|
43
56
  SETTINGS[key] = plugin.settings[key]
44
57
  end
45
58
  SETTINGS.plugins.values.each { |plugin| plugin.load_settings_from_proxy }
59
+ Settings.loaded!
46
60
  end
47
61
 
48
62
  def self.load_plugin_settings(path)
@@ -1,3 +1,3 @@
1
1
  module SmartProxyDynflowCore
2
- VERSION = '0.0.7'
2
+ VERSION = '0.1.0'
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: smart_proxy_dynflow_core
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.7
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ivan Nečas
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-05-18 00:00:00.000000000 Z
11
+ date: 2016-06-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -192,7 +192,8 @@ dependencies:
192
192
  - - ">="
193
193
  - !ruby/object:Gem::Version
194
194
  version: '0'
195
- description: " Use the Dynflow inside Foreman smart proxy\n"
195
+ description: |2
196
+ Use the Dynflow inside Foreman smart proxy
196
197
  email:
197
198
  - inecas@redhat.com
198
199
  executables: []
@@ -202,8 +203,11 @@ files:
202
203
  - Gemfile
203
204
  - LICENSE
204
205
  - bin/smart_proxy_dynflow_core
206
+ - bundler.d/Gemfile.local.rb
205
207
  - bundler.d/dynflow.rb
206
208
  - config/settings.yml.example
209
+ - deploy/smart_proxy_dynflow_core.init
210
+ - deploy/smart_proxy_dynflow_core.service
207
211
  - lib/smart_proxy_dynflow_core.rb
208
212
  - lib/smart_proxy_dynflow_core/api.rb
209
213
  - lib/smart_proxy_dynflow_core/bundler_helper.rb
@@ -211,6 +215,7 @@ files:
211
215
  - lib/smart_proxy_dynflow_core/core.rb
212
216
  - lib/smart_proxy_dynflow_core/helpers.rb
213
217
  - lib/smart_proxy_dynflow_core/launcher.rb
218
+ - lib/smart_proxy_dynflow_core/log.rb
214
219
  - lib/smart_proxy_dynflow_core/settings.rb
215
220
  - lib/smart_proxy_dynflow_core/testing.rb
216
221
  - lib/smart_proxy_dynflow_core/version.rb
@@ -234,9 +239,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
234
239
  version: '0'
235
240
  requirements: []
236
241
  rubyforge_project:
237
- rubygems_version: 2.4.8
242
+ rubygems_version: 2.4.5
238
243
  signing_key:
239
244
  specification_version: 4
240
245
  summary: Dynflow runtime for Foreman smart proxy
241
246
  test_files: []
242
- has_rdoc: