diff --git a/.gitignore b/.gitignore
index e7997a6cd..880d45482 100644
--- a/.gitignore
+++ b/.gitignore
@@ -49,6 +49,9 @@ vendor/bower_components
/frontend/node_modules/
/frontend/typings/
+# MAC system files
+.DS_Store
+.idea/
#emacs backup exclude during commit (clean files)
diff --git a/.rubocop.yml b/.rubocop.yml
index a71be35db..ba349d6a8 100644
--- a/.rubocop.yml
+++ b/.rubocop.yml
@@ -99,7 +99,7 @@ Style/ConstantName:
Style/DefWithParentheses:
Enabled: false
-Style/DeprecatedHashMethods:
+Style/PreferredHashMethods:
Enabled: false
Style/Documentation:
@@ -219,7 +219,7 @@ Style/LeadingCommentSpace:
Style/LineEndConcatenation:
Enabled: false
-Style/MethodCallParentheses:
+Style/MethodCallWithoutArgsParentheses:
Enabled: false
Style/MethodDefParentheses:
diff --git a/.travis.yml b/.travis.yml
index e3df86b49..d3c4250ac 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -23,3 +23,6 @@ before_script:
script:
- bundle exec rspec
+
+notifications:
+ slack: skyarch:RrGXgQVUmTe0r565gbHYMnmQ
diff --git a/Gemfile b/Gemfile
index 1b96f4638..bbb962ea1 100644
--- a/Gemfile
+++ b/Gemfile
@@ -48,7 +48,8 @@ gem "font-awesome-rails"
gem 'aws-sdk-v1'
gem 'aws-sdk', '~> 2'
-gem 'ridley', '~> 4.2.0'
+gem 'awspec', require: false
+gem 'ridley', '~> 5'
gem "net-ssh"
gem "net-scp"
gem "net-http-persistent", '~> 2.9.4'
@@ -63,6 +64,7 @@ gem "sidekiq-cron", "~> 0.4.0" # for Scheduled Job
gem 'foreman', require: false
gem "introjs-rails"
+gem 'turnout' # for maintenance mode
# Temporarily set ruby_dep version to 1.3.1 because it requires ruby 2.2.5 that is not yet available on amazon linux
gem "ruby_dep", "~> 1.3.1"
@@ -84,7 +86,10 @@ group :development, :test do
# test
gem "rspec-rails"
- gem "factory_girl_rails"
+
+ # Test seems to be failing because of this issue:
+ # https://github.com/thoughtbot/factory_girl/issues/981
+ gem "factory_girl_rails", "~> 4.7.0"
gem "database_cleaner"
gem 'guard-rspec'
gem 'coveralls', require: false
@@ -130,8 +135,8 @@ gem 'rqrcode'
gem 'sky_zabbix', '~> 2.2.0'
-gem 'nokogiri', '>= 1.6.8'
+gem 'nokogiri', '>= 1.7.1'
gem 'rails-html-sanitizer', '~> 1.0.3'
-gem 'rubyzip'
+gem 'rubyzip', '>= 1.2.1'
diff --git a/Gemfile.lock b/Gemfile.lock
index 1ffe8a1bb..522649e3a 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -30,7 +30,7 @@ GEM
activemodel (= 4.2.7.1)
activesupport (= 4.2.7.1)
arel (~> 6.0)
- activerecord-import (0.16.2)
+ activerecord-import (0.19.0)
activerecord (>= 3.2)
activesupport (4.2.7.1)
i18n (~> 0.7)
@@ -38,26 +38,38 @@ GEM
minitest (~> 5.1)
thread_safe (~> 0.3, >= 0.3.4)
tzinfo (~> 1.1)
- addressable (2.5.0)
+ addressable (2.5.1)
public_suffix (~> 2.0, >= 2.0.2)
- arel (6.0.3)
+ arel (6.0.4)
ast (2.3.0)
- autodoc (0.6.0)
+ autodoc (0.6.1)
actionpack
activesupport (>= 3.0.0)
rspec
- awesome_print (1.7.0)
- aws-sdk (2.6.35)
- aws-sdk-resources (= 2.6.35)
- aws-sdk-core (2.6.35)
+ awesome_print (1.8.0)
+ aws-sdk (2.9.44)
+ aws-sdk-resources (= 2.9.44)
+ aws-sdk-core (2.9.44)
aws-sigv4 (~> 1.0)
jmespath (~> 1.0)
- aws-sdk-resources (2.6.35)
- aws-sdk-core (= 2.6.35)
- aws-sdk-v1 (1.66.0)
+ aws-sdk-resources (2.9.44)
+ aws-sdk-core (= 2.9.44)
+ aws-sdk-v1 (1.67.0)
json (~> 1.4)
- nokogiri (>= 1.4.4)
+ nokogiri (~> 1)
aws-sigv4 (1.0.0)
+ aws_config (0.1.0)
+ awsecrets (1.11.0)
+ aws-sdk (~> 2)
+ aws_config (~> 0.1.0)
+ awspec (0.81.1)
+ activesupport (~> 4.0)
+ aws-sdk (>= 2.2, < 2.10)
+ awsecrets (~> 1.11)
+ rspec (~> 3.0)
+ rspec-its
+ term-ansicolor
+ thor
bcrypt (3.1.11)
better_errors (2.1.1)
coderay (>= 1.0.0)
@@ -65,20 +77,20 @@ GEM
rack (>= 0.9.0)
binding_of_caller (0.7.2)
debug_inspector (>= 0.0.1)
- browserify-rails (3.4.0)
+ browserify-rails (4.2.0)
addressable (>= 2.4.0)
- railties (>= 4.0.0, < 5.1)
- sprockets (>= 3.5.2)
- buff-config (1.0.1)
- buff-extensions (~> 1.0)
- varia_model (~> 0.4)
- buff-extensions (1.0.0)
+ railties (>= 4.0.0, < 5.2)
+ sprockets (>= 3.6.0)
+ buff-config (2.0.0)
+ buff-extensions (~> 2.0)
+ varia_model (~> 0.6)
+ buff-extensions (2.0.0)
buff-ignore (1.2.0)
- buff-ruby_engine (0.1.0)
- buff-shell_out (0.2.0)
- buff-ruby_engine (~> 0.1.0)
- builder (3.2.2)
- bullet (5.4.2)
+ buff-ruby_engine (1.0.0)
+ buff-shell_out (1.1.0)
+ buff-ruby_engine (~> 1.0)
+ builder (3.2.3)
+ bullet (5.5.1)
activesupport (>= 3.0.0)
uniform_notifier (~> 1.10.0)
celluloid (0.16.0)
@@ -86,25 +98,25 @@ GEM
celluloid-io (0.16.2)
celluloid (>= 0.16.0)
nio4r (>= 1.1.0)
- chef (12.16.42)
+ chef (12.21.1)
addressable
bundler (>= 1.10)
- chef-config (= 12.16.42)
- chef-zero (>= 4.8)
+ chef-config (= 12.21.1)
+ chef-zero (>= 4.8, < 13)
diff-lcs (~> 1.2, >= 1.2.4)
erubis (~> 2.7)
ffi-yajl (~> 2.2)
highline (~> 1.6, >= 1.6.9)
iniparse (~> 1.4)
- mixlib-archive (>= 0.2.0)
+ mixlib-archive (~> 0.4)
mixlib-authentication (~> 1.4)
mixlib-cli (~> 1.7)
mixlib-log (~> 1.3)
mixlib-shellout (~> 2.0)
net-sftp (~> 2.1, >= 2.1.2)
- net-ssh (>= 2.9, < 4.0)
- net-ssh-multi (~> 1.1)
- ohai (>= 8.6.0.alpha.1, < 9)
+ net-ssh (>= 2.9, < 5.0)
+ net-ssh-multi (~> 1.2, >= 1.2.1)
+ ohai (>= 8.6.0.alpha.1, < 13)
plist (~> 3.2)
proxifier (~> 1.0)
rspec-core (~> 3.5)
@@ -115,7 +127,7 @@ GEM
specinfra (~> 2.10)
syslog-logger (~> 1.6)
uuidtools (~> 2.1.5)
- chef-config (12.16.42)
+ chef-config (12.21.1)
addressable
fuzzyurl
mixlib-config (~> 2.0)
@@ -128,23 +140,23 @@ GEM
uuidtools (~> 2.1)
chunky_png (1.3.8)
coderay (1.1.1)
- coffee-rails (4.2.1)
+ coffee-rails (4.2.2)
coffee-script (>= 2.2.0)
- railties (>= 4.0.0, < 5.2.x)
+ railties (>= 4.0.0)
coffee-script (2.4.1)
coffee-script-source
execjs
- coffee-script-source (1.11.1)
- concurrent-ruby (1.0.2)
+ coffee-script-source (1.12.2)
+ concurrent-ruby (1.0.5)
connection_pool (2.2.1)
- coveralls (0.8.17)
+ coveralls (0.8.21)
json (>= 1.8, < 3)
- simplecov (~> 0.12.0)
+ simplecov (~> 0.14.1)
term-ansicolor (~> 1.3)
- thor (~> 0.19.1)
+ thor (~> 0.19.4)
tins (~> 1.6)
- database_cleaner (1.5.3)
- debug_inspector (0.0.2)
+ database_cleaner (1.6.1)
+ debug_inspector (0.0.3)
devise (3.5.10)
bcrypt (~> 3.0)
orm_adapter (~> 0.1)
@@ -152,34 +164,36 @@ GEM
responders
thread_safe (~> 0.1)
warden (~> 1.2.3)
- devise-i18n (1.1.1)
- diff-lcs (1.2.5)
+ devise-i18n (1.1.2)
+ diff-lcs (1.3)
docile (1.1.5)
erubis (2.7.0)
+ et-orbi (1.0.4)
+ tzinfo
execjs (2.7.0)
factory_girl (4.7.0)
activesupport (>= 3.0.0)
factory_girl_rails (4.7.0)
factory_girl (~> 4.7.0)
railties (>= 3.0.0)
- faraday (0.9.2)
+ faraday (0.12.1)
multipart-post (>= 1.2, < 3)
- ffi (1.9.14)
+ ffi (1.9.18)
ffi-yajl (2.3.0)
libyajl2 (~> 1.2)
- font-awesome-rails (4.7.0.0)
- railties (>= 3.2, < 5.1)
- foreman (0.82.0)
+ font-awesome-rails (4.7.0.2)
+ railties (>= 3.2, < 5.2)
+ foreman (0.84.0)
thor (~> 0.19.1)
formatador (0.2.5)
fuzzyurl (0.9.0)
git-version-bump (0.15.1)
- github-markup (1.4.0)
- globalid (0.3.7)
- activesupport (>= 4.1.0)
+ github-markup (1.6.0)
+ globalid (0.4.0)
+ activesupport (>= 4.2.0)
gssapi (1.2.0)
ffi (>= 1.0.1)
- guard (2.14.0)
+ guard (2.14.1)
formatador (>= 0.2.4)
listen (>= 2.7, < 4.0)
lumberjack (~> 1.0)
@@ -195,32 +209,41 @@ GEM
rspec (>= 2.99.0, < 4.0)
gyoku (1.3.1)
builder (>= 2.1.2)
- hashie (2.1.2)
+ hashie (3.5.5)
highline (1.7.8)
hiredis (0.6.1)
- hitimes (1.2.4)
+ hitimes (1.2.5)
httpclient (2.8.3)
i18n (0.7.0)
- i18n-js (2.1.2)
- i18n
- iniparse (1.4.2)
+ i18n-js (3.0.0)
+ i18n (~> 0.6, >= 0.6.6)
+ iniparse (1.4.3)
introjs-rails (1.0.0)
sass-rails (>= 3.2)
thor (~> 0.14)
ipaddress (0.8.3)
- jbuilder (2.6.1)
- activesupport (>= 3.0.0, < 5.1)
- multi_json (~> 1.2)
+ jbuilder (2.7.0)
+ activesupport (>= 4.2.0)
+ multi_json (>= 1.2)
jmespath (1.3.1)
- json (1.8.3)
- kaminari (0.17.0)
- actionpack (>= 3.0.0)
- activesupport (>= 3.0.0)
- kgio (2.10.0)
- knife-windows (1.7.1)
+ json (1.8.6)
+ kaminari (1.0.1)
+ activesupport (>= 4.1.0)
+ kaminari-actionview (= 1.0.1)
+ kaminari-activerecord (= 1.0.1)
+ kaminari-core (= 1.0.1)
+ kaminari-actionview (1.0.1)
+ actionview
+ kaminari-core (= 1.0.1)
+ kaminari-activerecord (1.0.1)
+ activerecord
+ kaminari-core (= 1.0.1)
+ kaminari-core (1.0.1)
+ kgio (2.11.0)
+ knife-windows (1.9.0)
winrm (~> 2.1)
winrm-elevated (~> 1.0)
- libv8 (3.16.14.17)
+ libv8 (3.16.14.19)
libyajl2 (1.2.0)
listen (3.1.5)
rb-fsevent (~> 0.9, >= 0.9.4)
@@ -232,16 +255,16 @@ GEM
multi_json (>= 1.3.6)
loofah (2.0.3)
nokogiri (>= 1.5.9)
- lumberjack (1.0.10)
- mail (2.6.4)
+ lumberjack (1.0.12)
+ mail (2.6.6)
mime-types (>= 1.16, < 4)
method_source (0.8.2)
mime-types (3.1)
mime-types-data (~> 3.2015)
mime-types-data (3.2016.0521)
- mini_portile2 (2.1.0)
- minitest (5.10.1)
- mixlib-archive (0.2.0)
+ mini_portile2 (2.2.0)
+ minitest (5.10.2)
+ mixlib-archive (0.4.1)
mixlib-log
mixlib-authentication (1.4.1)
mixlib-log
@@ -260,22 +283,22 @@ GEM
net-ssh (>= 2.6.5)
net-sftp (2.1.2)
net-ssh (>= 2.6.5)
- net-ssh (3.2.0)
- net-ssh-gateway (1.2.0)
- net-ssh (>= 2.6.5)
+ net-ssh (4.1.0)
+ net-ssh-gateway (2.0.0)
+ net-ssh (>= 4.0.0)
net-ssh-multi (1.2.1)
net-ssh (>= 2.6.5)
net-ssh-gateway (>= 1.2.0)
net-telnet (0.1.1)
- nio4r (1.2.1)
- nokogiri (1.6.8.1)
- mini_portile2 (~> 2.1.0)
+ nio4r (2.1.0)
+ nokogiri (1.8.0)
+ mini_portile2 (~> 2.2.0)
nori (2.6.0)
notiffany (0.1.1)
nenv (~> 0.1)
shellany (~> 0.0)
- ohai (8.22.1)
- chef-config (>= 12.5.0.alpha.1, < 13)
+ ohai (8.24.0)
+ chef-config (>= 12.5.0.alpha.1, < 14)
ffi (~> 1.9)
ffi-yajl (~> 2.2)
ipaddress
@@ -287,27 +310,30 @@ GEM
systemu (~> 2.6.4)
wmi-lite (~> 1.0)
orm_adapter (0.5.0)
- parser (2.3.3.1)
+ parallel (1.11.2)
+ parser (2.4.0.0)
ast (~> 2.2)
- plist (3.2.0)
+ plist (3.3.0)
powerpack (0.1.1)
proxifier (1.0.3)
pry (0.10.4)
coderay (~> 1.1.0)
method_source (~> 0.8.1)
slop (~> 3.4)
- pry-doc (0.9.0)
+ pry-doc (0.10.0)
pry (~> 0.9)
- yard (~> 0.8)
- pry-rails (0.3.4)
- pry (>= 0.9.10)
+ yard (~> 0.9)
+ pry-rails (0.3.6)
+ pry (>= 0.10.4)
pry-remote (0.1.8)
pry (~> 0.9)
slop (~> 3.0)
- public_suffix (2.0.4)
+ public_suffix (2.0.5)
pundit (1.1.0)
activesupport (>= 3.0.0)
- rack (1.6.5)
+ rack (1.6.8)
+ rack-accept (0.4.5)
+ rack (>= 0.4)
rack-contrib (1.4.0)
git-version-bump (~> 0.15)
rack (~> 1.4)
@@ -315,7 +341,7 @@ GEM
rack
rack-test (0.6.3)
rack (>= 1.0)
- railroady (1.5.2)
+ railroady (1.5.3)
rails (4.2.7.1)
actionmailer (= 4.2.7.1)
actionpack (= 4.2.7.1)
@@ -329,9 +355,9 @@ GEM
sprockets-rails
rails-deprecated_sanitizer (1.0.3)
activesupport (>= 4.2.0.alpha)
- rails-dom-testing (1.0.7)
+ rails-dom-testing (1.0.8)
activesupport (>= 4.2.0.beta, < 5.0)
- nokogiri (~> 1.6.0)
+ nokogiri (~> 1.6)
rails-deprecated_sanitizer (>= 1.0.1)
rails-html-sanitizer (1.0.3)
loofah (~> 2.0)
@@ -343,86 +369,90 @@ GEM
activesupport (= 4.2.7.1)
rake (>= 0.8.7)
thor (>= 0.18.1, < 2.0)
- rainbow (2.1.0)
- raindrops (0.17.0)
+ rainbow (2.2.2)
+ rake
+ raindrops (0.18.0)
rake (12.0.0)
rb-fsevent (0.9.8)
- rb-inotify (0.9.7)
- ffi (>= 0.5.0)
+ rb-inotify (0.9.10)
+ ffi (>= 0.5.0, < 2)
rdoc (4.3.0)
- redcarpet (3.3.4)
- redis (3.3.2)
+ redcarpet (3.4.0)
+ redis (3.3.3)
redis-actionpack (5.0.1)
actionpack (>= 4.0, < 6)
redis-rack (>= 1, < 3)
redis-store (>= 1.1.0, < 1.4.0)
- redis-activesupport (5.0.1)
+ redis-activesupport (5.0.2)
activesupport (>= 3, < 6)
- redis-store (~> 1.2.0)
- redis-namespace (1.5.2)
+ redis-store (~> 1.3.0)
+ redis-namespace (1.5.3)
redis (~> 3.0, >= 3.0.4)
- redis-rack (1.6.0)
- rack (~> 1.5)
- redis-store (~> 1.2.0)
- redis-rails (5.0.1)
- redis-actionpack (~> 5.0.0)
- redis-activesupport (~> 5.0.0)
- redis-store (~> 1.2.0)
- redis-store (1.2.0)
+ redis-rack (2.0.2)
+ rack (>= 1.5, < 3)
+ redis-store (>= 1.2, < 1.4)
+ redis-rails (5.0.2)
+ redis-actionpack (>= 5.0, < 6)
+ redis-activesupport (>= 5.0, < 6)
+ redis-store (>= 1.2, < 2)
+ redis-store (1.3.0)
redis (>= 2.2)
ref (2.0.0)
- responders (2.3.0)
- railties (>= 4.2.0, < 5.1)
+ responders (2.4.0)
+ actionpack (>= 4.2.0, < 5.3)
+ railties (>= 4.2.0, < 5.3)
retryable (2.0.4)
- ridley (4.2.0)
+ ridley (5.1.1)
addressable
- buff-config (~> 1.0)
- buff-extensions (~> 1.0)
- buff-ignore (~> 1.1)
- buff-shell_out (~> 0.1)
+ buff-config (~> 2.0)
+ buff-extensions (~> 2.0)
+ buff-ignore (~> 1.2)
+ buff-shell_out (~> 1.0)
celluloid (~> 0.16.0)
celluloid-io (~> 0.16.1)
+ chef-config (>= 12.5.0)
erubis
- faraday (~> 0.9.0)
- hashie (>= 2.0.2, < 3.0.0)
+ faraday (~> 0.9)
+ hashie (>= 2.0.2, < 4.0.0)
+ httpclient (~> 2.7)
json (>= 1.7.7)
mixlib-authentication (>= 1.3.0)
- net-http-persistent (>= 2.8)
retryable (~> 2.0)
- semverse (~> 1.1)
- varia_model (~> 0.4)
+ semverse (~> 2.0)
+ varia_model (~> 0.6)
rotp (3.3.0)
rqrcode (0.10.1)
chunky_png (~> 1.0)
- rspec (3.5.0)
- rspec-core (~> 3.5.0)
- rspec-expectations (~> 3.5.0)
- rspec-mocks (~> 3.5.0)
- rspec-core (3.5.4)
- rspec-support (~> 3.5.0)
- rspec-expectations (3.5.0)
+ rspec (3.6.0)
+ rspec-core (~> 3.6.0)
+ rspec-expectations (~> 3.6.0)
+ rspec-mocks (~> 3.6.0)
+ rspec-core (3.6.0)
+ rspec-support (~> 3.6.0)
+ rspec-expectations (3.6.0)
diff-lcs (>= 1.2.0, < 2.0)
- rspec-support (~> 3.5.0)
+ rspec-support (~> 3.6.0)
rspec-its (1.2.0)
rspec-core (>= 3.0.0)
rspec-expectations (>= 3.0.0)
- rspec-mocks (3.5.0)
+ rspec-mocks (3.6.0)
diff-lcs (>= 1.2.0, < 2.0)
- rspec-support (~> 3.5.0)
- rspec-rails (3.5.2)
+ rspec-support (~> 3.6.0)
+ rspec-rails (3.6.0)
actionpack (>= 3.0)
activesupport (>= 3.0)
railties (>= 3.0)
- rspec-core (~> 3.5.0)
- rspec-expectations (~> 3.5.0)
- rspec-mocks (~> 3.5.0)
- rspec-support (~> 3.5.0)
- rspec-support (3.5.0)
+ rspec-core (~> 3.6.0)
+ rspec-expectations (~> 3.6.0)
+ rspec-mocks (~> 3.6.0)
+ rspec-support (~> 3.6.0)
+ rspec-support (3.6.0)
rspec_junit_formatter (0.2.3)
builder (< 4)
rspec-core (>= 2, < 4, != 2.12.0)
- rubocop (0.46.0)
- parser (>= 2.3.1.1, < 3.0)
+ rubocop (0.49.1)
+ parallel (~> 1.10)
+ parser (>= 2.3.3.1, < 3.0)
powerpack (~> 0.1)
rainbow (>= 1.99.1, < 3.0)
ruby-progressbar (~> 1.7)
@@ -430,11 +460,11 @@ GEM
ruby-prof (0.16.2)
ruby-progressbar (1.8.1)
ruby_dep (1.3.1)
- rubyntlm (0.6.1)
- rubyzip (1.2.0)
- rufus-scheduler (3.3.1)
- tzinfo
- sass (3.4.22)
+ rubyntlm (0.6.2)
+ rubyzip (1.2.1)
+ rufus-scheduler (3.4.2)
+ et-orbi (~> 1.0)
+ sass (3.4.24)
sass-rails (5.0.6)
railties (>= 4.0.0, < 6)
sass (~> 3.1)
@@ -444,75 +474,80 @@ GEM
sdoc (0.4.2)
json (~> 1.7, >= 1.7.7)
rdoc (~> 4.0)
- semverse (1.2.1)
- serverspec (2.37.2)
+ semverse (2.0.0)
+ serverspec (2.39.1)
multi_json
rspec (~> 3.0)
rspec-its
- specinfra (~> 2.53)
+ specinfra (~> 2.68)
sfl (2.3)
shellany (0.0.1)
- sidekiq (4.2.7)
+ sidekiq (5.0.3)
concurrent-ruby (~> 1.0)
connection_pool (~> 2.2, >= 2.2.0)
rack-protection (>= 1.5.0)
- redis (~> 3.2, >= 3.2.1)
+ redis (~> 3.3, >= 3.3.3)
sidekiq-cron (0.4.5)
redis-namespace (>= 1.5.2)
rufus-scheduler (>= 2.0.24)
sidekiq (>= 4.2.1)
- simplecov (0.12.0)
+ simplecov (0.14.1)
docile (~> 1.1.0)
json (>= 1.8, < 3)
simplecov-html (~> 0.10.0)
- simplecov-html (0.10.0)
- sinatra (1.4.7)
+ simplecov-html (0.10.1)
+ sinatra (1.4.8)
rack (~> 1.5)
rack-protection (~> 1.4)
tilt (>= 1.3, < 3)
sky_zabbix (2.2.0.1.2)
slop (3.6.0)
- specinfra (2.66.2)
+ specinfra (2.68.0)
net-scp
- net-ssh (>= 2.7, < 4.0)
+ net-ssh (>= 2.7, < 5.0)
net-telnet
sfl
- spring (2.0.0)
+ spring (2.0.2)
activesupport (>= 4.2)
spring-commands-rspec (1.0.4)
spring (>= 0.9.1)
spring-commands-sidekiq (1.0.0)
spring (>= 0.9.1)
sprint (1.1.0)
- sprockets (3.7.0)
+ sprockets (3.7.1)
concurrent-ruby (~> 1.0)
rack (> 1, < 3)
sprockets-rails (3.2.0)
actionpack (>= 4.0)
activesupport (>= 4.0)
sprockets (>= 3.0.0)
- sqlite3 (1.3.12)
+ sqlite3 (1.3.13)
syslog-logger (1.6.8)
systemu (2.6.5)
tapp (1.5.0)
thor
- term-ansicolor (1.4.0)
+ term-ansicolor (1.6.0)
tins (~> 1.0)
- therubyracer (0.12.2)
- libv8 (~> 3.16.14.0)
+ therubyracer (0.12.3)
+ libv8 (~> 3.16.14.15)
ref
thor (0.19.4)
- thread_safe (0.3.5)
- tilt (2.0.5)
+ thread_safe (0.3.6)
+ tilt (2.0.7)
timers (4.0.4)
hitimes
- tins (1.13.0)
- tzinfo (1.2.2)
+ tins (1.14.0)
+ turnout (2.4.0)
+ i18n (~> 0.7)
+ rack (>= 1.3, < 3)
+ rack-accept (~> 0.4)
+ tilt (>= 1.4, < 3)
+ tzinfo (1.2.3)
thread_safe (~> 0.1)
- uglifier (3.0.4)
+ uglifier (3.2.0)
execjs (>= 0.3.0, < 3)
- unicode-display_width (1.1.1)
- unicorn (5.2.0)
+ unicode-display_width (1.3.0)
+ unicorn (5.3.0)
kgio (~> 2.6)
raindrops (~> 0.7)
unicorn-rails (2.2.1)
@@ -520,12 +555,12 @@ GEM
unicorn
uniform_notifier (1.10.0)
uuidtools (2.1.5)
- varia_model (0.5.0)
- buff-extensions (~> 1.0)
+ varia_model (0.6.0)
+ buff-extensions (~> 2.0)
hashie (>= 2.0.2, < 4.0.0)
- warden (1.2.6)
+ warden (1.2.7)
rack (>= 1.0)
- winrm (2.1.0)
+ winrm (2.2.3)
builder (>= 2.1.2)
erubis (~> 2.7)
gssapi (~> 1.2)
@@ -543,7 +578,7 @@ GEM
rubyzip (~> 1.1)
winrm (~> 2.0)
wmi-lite (1.0.0)
- yard (0.9.5)
+ yard (0.9.9)
PLATFORMS
ruby
@@ -554,6 +589,7 @@ DEPENDENCIES
awesome_print
aws-sdk (~> 2)
aws-sdk-v1
+ awspec
better_errors
binding_of_caller
browserify-rails
@@ -564,7 +600,7 @@ DEPENDENCIES
database_cleaner
devise (~> 3.5.3)
devise-i18n
- factory_girl_rails
+ factory_girl_rails (~> 4.7.0)
font-awesome-rails
foreman
github-markup
@@ -584,7 +620,7 @@ DEPENDENCIES
net-http-persistent (~> 2.9.4)
net-scp
net-ssh
- nokogiri (>= 1.6.8)
+ nokogiri (>= 1.7.1)
pry
pry-doc
pry-rails
@@ -599,14 +635,14 @@ DEPENDENCIES
redis
redis-rails
redis-store
- ridley (~> 4.2.0)
+ ridley (~> 5)
rotp
rqrcode
rspec-rails
rubocop
ruby-prof
ruby_dep (~> 1.3.1)
- rubyzip
+ rubyzip (>= 1.2.1)
sass-rails
sdoc
serverspec
@@ -623,9 +659,10 @@ DEPENDENCIES
sqlite3
tapp
therubyracer
+ turnout
uglifier
unicorn-rails
yard
BUNDLED WITH
- 1.13.6
+ 1.14.6
diff --git a/app/assets/javascripts/app_settings.js b/app/assets/javascripts/app_settings.js
index 60e3462d1..96d3983fa 100644
--- a/app/assets/javascripts/app_settings.js
+++ b/app/assets/javascripts/app_settings.js
@@ -19,13 +19,16 @@
data: {
key_select: null,
creating: false,
+ optional: false,
params: {
log_directory: null,
access_key: null,
secret_access_key: null,
aws_region: null,
keypair_name: null,
- keypair_value: null
+ keypair_value: null,
+ subnet_id: null,
+ vpc_id: null
},
},
methods: {
@@ -45,7 +48,6 @@
vm.keypair_name = file.name.replace(/\.\w+$/, '');
- console.log(vm);
},
removeFile: function (e) {
e.preventDefault();
@@ -181,18 +183,29 @@
var endpoint_base = '/app_settings';
var inputs_selector = '#app-settings-form input[type=text],input[type=password],select,textarea';
+ var required_inputs = '#app-settings-form input[required],select[required],textarea[required]';
// -------------------------------- ajax methods
- var create = function (settings) {
-
+ var create = function (params) {
+ var settings = remove_empty_optional_params(params);
return $.ajax({
url: endpoint_base,
type: 'POST',
data: {
settings: JSON.stringify(settings)
},
- }).fail(modal.AlertForAjaxStdError());
+ }).fail(function (xhr) {
+ var res = xhr.responseJSON;
+ var kind = res.error.kind;
+ if (kind.endsWith('VpcIDNotFound')) {
+ modal.AlertHTML(kind, t('app_settings.msg.vpc_id_not_found', {id: _.escape(settings.vpc_id)}), 'danger');
+ } else if (kind.endsWith('SubnetIDNotFound')) {
+ modal.AlertHTML(kind, t('app_settings.msg.subnet_id_not_found', {id: _.escape(settings.subnet_id)}), 'danger');
+ } else {
+ modal.AlertForAjaxStdError()(xhr);
+ }
+ });
};
var chef_create = function () {
@@ -211,25 +224,15 @@
// -------------------------------- utility methods
- var is_fill_input = function() {
- var set = get_settings();
- for (var i in set) {
- if (set[i] === '') {
- return false;
- }
- }
- return true;
- };
-
- // inputが全部埋まっていれば btn をenableにする。
- // 全部埋まっていなければdisableにする
- var switch_btn_enable = function (btn) {
- if (is_fill_input()) {
- btn.removeAttr('disabled');
- } else {
- btn.attr('disabled', 'disabled');
- }
+ var remove_empty_optional_params = function (obj) {
+ var optional_keys = ['vpc_id', 'subnet_id'];
+ optional_keys.forEach(function (key) {
+ if (obj[key] === '' || obj[key] === null || obj[key] === undefined) {
+ delete obj[key];
+ }
+ });
+ return obj;
};
@@ -279,5 +282,4 @@
};
-
})();
diff --git a/app/assets/javascripts/databases.js b/app/assets/javascripts/databases.js
new file mode 100644
index 000000000..641dc2c13
--- /dev/null
+++ b/app/assets/javascripts/databases.js
@@ -0,0 +1,31 @@
+//
+// Copyright (c) 2013-2016 SKYARCH NETWORKS INC.
+//
+// This software is released under the MIT License.
+//
+// http://opensource.org/licenses/mit-license.php
+//
+
+(function () {
+ 'use strict';
+
+ Vue.component('div-loader', Loader);
+ var modal = require('modal');
+
+ var vm = new Vue({
+ el: '#db-manage',
+ data: function () {
+ return {
+ loading_export: false,
+ loading_import: false,
+ };
+ },
+ computed: {
+ loading: function () { return this.loading_import || this.loading_export; },
+ },
+ methods: {
+ },
+ ready: function () {
+ },
+ });
+})();
diff --git a/app/assets/javascripts/infrastructures.js b/app/assets/javascripts/infrastructures.js
index b10c3b27a..5642b3fac 100644
--- a/app/assets/javascripts/infrastructures.js
+++ b/app/assets/javascripts/infrastructures.js
@@ -46,7 +46,7 @@
Vue.component('ec2-tabpane', require('infrastructures/ec2-tabpane.js'));
Vue.component('edit-runlist-tabpane', require('infrastructures/edit-runlist-tabpane.js'));
Vue.component('edit-attr-tabpane', require('infrastructures/edit-attr-tabpane.js'));
- Vue.component('serverspec-results-tabpane', require('infrastructures/serverspec-results-tabpane.js'));
+ Vue.component('servertest-results-tabpane', require('infrastructures/servertest-results-tabpane.js'));
Vue.component('serverspec-tabpane', require('infrastructures/serverspec-tabpane.js'));
Vue.component('operation-sched-tabpane', require('infrastructures/operation-sched-tabpane.js'));
Vue.component('demo-grid', require('demo-grid.js'));
diff --git a/app/assets/javascripts/infrastructures/add-modify-tabpane.js b/app/assets/javascripts/infrastructures/add-modify-tabpane.js
index 0cc4d0e24..34b9198d3 100644
--- a/app/assets/javascripts/infrastructures/add-modify-tabpane.js
+++ b/app/assets/javascripts/infrastructures/add-modify-tabpane.js
@@ -39,4 +39,9 @@ module.exports = Vue.extend({
computed: {
jsonParseErr: function () { return jsonParseErr(this.result.value); },
},
+ filters:{
+ created_at: function (date) {
+ return moment(date).format('YYYY/MM/D H:mm');
+ },
+ },
});
diff --git a/app/assets/javascripts/infrastructures/ec2-tabpane.js b/app/assets/javascripts/infrastructures/ec2-tabpane.js
index 550b97492..4180c17fa 100644
--- a/app/assets/javascripts/infrastructures/ec2-tabpane.js
+++ b/app/assets/javascripts/infrastructures/ec2-tabpane.js
@@ -3,6 +3,7 @@ var Dish = require('models/dish').default;
var EC2Instance = require('models/ec2_instance').default;
var Snapshot = require('models/snapshot').default;
var queryString = require('query-string').parse(location.search);
+var ansi_up = require('ansi_up');
var helpers = require('infrastructures/helper.js');
var toLocaleString = helpers.toLocaleString;
@@ -63,6 +64,7 @@ module.exports = Vue.extend({
change_status: t('ec2_instances.change_status'),
attach_vol: t('ec2_instances.attach'),
changing_status: t('ec2_instances.changing_status'),
+ is_yum_update: false,
};},
methods: {
@@ -185,7 +187,11 @@ module.exports = Vue.extend({
// cook end
self.chef_console_text = '';
self.inprogress = false;
- self._show_ec2();
+ if (self.is_yum_update) {
+ self._prompt_yum_log();
+ }else {
+ self._show_ec2();
+ }
}).progress(function (state, msg) {
if (state !== 'update') {return;}
@@ -205,6 +211,7 @@ module.exports = Vue.extend({
yum_update: function (security, exec) {
var self = this;
+ self.is_yum_update = true;
var infra = new Infrastructure(this.infra_id);
var ec2 = new EC2Instance(infra, self.physical_id);
@@ -218,17 +225,26 @@ module.exports = Vue.extend({
).progress(function (state, msg) {
// cook start success
if(state !== 'start'){return;}
-
- alert_success(function () {
self.inprogress = true;
Vue.nextTick(function () {
self.watch_cook(dfd);
});
- })(msg);
});
});
},
+ _prompt_yum_log: function() {
+ var self = this;
+ self.is_yum_update = false;
+
+ modal.ConfirmHTML(t('infrastructures.infrastructure'), t('nodes.msg.yum_update_success', {physical_id: self.physical_id}), 'success').done(function () {
+ self.$parent.tabpaneID = 'infra_logs';
+ self._loading();
+ }).fail(function () {
+ self._show_ec2();
+ });
+ },
+
edit_runlist: function () {
this.$parent.tabpaneID = 'edit_runlist';
this._loading();
@@ -237,7 +253,7 @@ module.exports = Vue.extend({
this.$parent.tabpaneID = 'edit_attr';
this._loading();
},
- select_serverspec: function () {
+ select_servertest: function () {
this.$parent.tabpaneID = 'serverspec';
this._loading();
},
@@ -270,6 +286,7 @@ module.exports = Vue.extend({
is_first: function (idx) { return (idx === 0); },
runlist_type: function (run) { return run.replace(/\[.+\]$/, ""); },
runlist_name: function (run) { return run.replace(/^.+\[(.+)\]$/, "$1"); },
+ ansi_up: function(log) { return ansi_up.ansi_to_html(log); },
_loading: function () { this.$parent.loading = true; },
@@ -597,20 +614,20 @@ module.exports = Vue.extend({
}
return 'btn-default';
},
- has_rules: function() {
+ has_selected: function() {
return has_selected(this.rules_summary);
},
cook_status_class: function () { return this._label_class(this.cook_status); },
- serverspec_status_class: function () { return this._label_class(this.serverspec_status); },
+ servertest_status_class: function () { return this._label_class(this.servertest_status); },
update_status_class: function () { return this._label_class(this.update_status); },
cook_status: function () { return this.capitalize(this.ec2.info.cook_status.value); },
- serverspec_status: function () { return this.capitalize(this.ec2.info.serverspec_status.value); },
+ servertest_status: function () { return this.capitalize(this.ec2.info.servertest_status.value); },
update_status: function () { return this.capitalize(this.ec2.info.update_status.value); },
cook_time: function () { return this.cook_status === 'UnExecuted' ? '' : toLocaleString(this.ec2.info.cook_status.updated_at);},
- serverspec_time: function () { return this.serverspec_status === 'UnExecuted' ? '' : toLocaleString(this.ec2.info.serverspec_status.updated_at);},
+ serverspec_time: function () { return this.servertest_status === 'UnExecuted' ? '' : toLocaleString(this.ec2.info.servertest_status.updated_at);},
update_time: function () { return this.update_status === 'UnExecuted' ? '' : toLocaleString(this.ec2.info.update_status.updated_at);},
runlist_empty: function () { return _.isEmpty(this.ec2.runlist); },
diff --git a/app/assets/javascripts/infrastructures/edit-monitoring-tabpane.js b/app/assets/javascripts/infrastructures/edit-monitoring-tabpane.js
index 1dc72cad6..0d3aec22c 100644
--- a/app/assets/javascripts/infrastructures/edit-monitoring-tabpane.js
+++ b/app/assets/javascripts/infrastructures/edit-monitoring-tabpane.js
@@ -159,20 +159,24 @@ module.exports = Vue.extend({
self.postgresql_rds_host = null;
self.$parent.loading = false;
+
+ // Call Show only if monitoring edit call is successfull
+ self.monitoring.show().done(function (data) {
+ self.before_register = data.before_register;
+ self.linked_resources = data.linked_resources;
+ self.$parent.loading = false;
+ self.temp_loading = false;
+ }).fail(alert_and_show_infra(this.infra_id));
+
+
}).fail(function (xhr) {
if (xhr.status === 400) { // before register zabbix
self.$parent.show_monitoring();
} else {
- alert_and_show_infra(this.infra_id)(xhr.responseText);
+ alert_and_show_infra(self.infra_id)(xhr.responseText);
}
});
- this.monitoring.show().done(function (data) {
- self.before_register = data.before_register;
- self.linked_resources = data.linked_resources;
- self.$parent.loading = false;
- self.temp_loading = false;
- }).fail(alert_and_show_infra(this.infra_id));
},
filters: {
diff --git a/app/assets/javascripts/infrastructures/edit-runlist-tabpane.js b/app/assets/javascripts/infrastructures/edit-runlist-tabpane.js
index c01e828ca..afacbd543 100644
--- a/app/assets/javascripts/infrastructures/edit-runlist-tabpane.js
+++ b/app/assets/javascripts/infrastructures/edit-runlist-tabpane.js
@@ -30,7 +30,9 @@ module.exports = Vue.extend({
methods: {
get_recipes: function () {
var self = this;
- if (self.recipes[self.selected_cookbook]) { return; }
+
+ if (self.recipes[self.selected_cookbook]) { return; } // Avoid repeated call
+ if (self.selected_cookbook === null) { return; } // ignore no selected cookbook
self.ec2.recipes(self.selected_cookbook).done(function (data) {
Vue.set(self.recipes, self.selected_cookbook, data);
diff --git a/app/assets/javascripts/infrastructures/infra-logs-tabpane.js b/app/assets/javascripts/infrastructures/infra-logs-tabpane.js
index dce6e496e..c6da25158 100644
--- a/app/assets/javascripts/infrastructures/infra-logs-tabpane.js
+++ b/app/assets/javascripts/infrastructures/infra-logs-tabpane.js
@@ -3,6 +3,8 @@ var Infrastructure = require('models/infrastructure').default;
var helpers = require('infrastructures/helper.js');
var toLocaleString = helpers.toLocaleString;
var alert_and_show_infra = helpers.alert_and_show_infra;
+var ansi_up = require('ansi_up');
+
module.exports = Vue.extend({
template: '#infra-logs-tabpane-template',
@@ -27,6 +29,7 @@ module.exports = Vue.extend({
status_class: function (status) { return status ? 'label-success' : 'label-danger'; },
status_text: function (status) { return status ? 'SUCCESS' : 'FAILED'; },
toLocaleString: toLocaleString,
+ ansi_up: function(log) { return ansi_up.ansi_to_html(log); }
},
created: function () {
diff --git a/app/assets/javascripts/infrastructures/serverspec-results-tabpane.js b/app/assets/javascripts/infrastructures/servertest-results-tabpane.js
similarity index 82%
rename from app/assets/javascripts/infrastructures/serverspec-results-tabpane.js
rename to app/assets/javascripts/infrastructures/servertest-results-tabpane.js
index 95d0acead..7637ed206 100644
--- a/app/assets/javascripts/infrastructures/serverspec-results-tabpane.js
+++ b/app/assets/javascripts/infrastructures/servertest-results-tabpane.js
@@ -8,7 +8,7 @@ var helpers = require('infrastructures/helper.js');
var alert_danger = helpers.alert_danger;
module.exports = Vue.extend({
- template: '#serverspec-results-tabpane-template',
+ template: '#servertest-results-tabpane-template',
replace: true,
props: {
@@ -32,7 +32,7 @@ module.exports = Vue.extend({
return {
sortKey: '',
sortOrders: sortOrders,
- index: 'serverspec_results',
+ index: 'servertest_results',
lang: null,
pages: 10,
pageNumber: 0,
@@ -81,27 +81,27 @@ module.exports = Vue.extend({
created: function () {
self = this;
var self = this;
- self.columns = ['serverspec', 'resource', 'message', 'status', 'created_at'];
+ self.columns = ['servertest', 'resource', 'message', 'status', 'created_at', 'category'];
var temp_id = null;
var serverspecs = [];
- self.ec2.results_serverspec().done(function (data) {
+ self.ec2.results_servertest().done(function (data) {
self.data = data.map(function (item) {
+ console.log(item)
var last_log = (item.created_at ? new Date(item.created_at) : '');
return {
- serverspec: item.serverspecs,
+ servertest: item.servertests,
resource: item.resource.physical_id,
message: [item.id,
item.resource.physical_id,
item.message,
- item.serverspec_result_details],
+ item.servertest_result_details],
status: item.status,
- created_at: last_log.toLocaleString()
+ created_at: last_log.toLocaleString(),
+ category: item.servertests,
};
});
self.$parent.loading = false;
- $("#loading_results").hide();
- var empty = t('serverspecs.msg.empty-results');
- if(self.data.length === 0){ $('#empty_results').show().html(empty);}
+ if(self.data.length === 0){ self.is_empty = true; }
}).fail(alert_danger(self.show_ec2));
},
});
diff --git a/app/assets/javascripts/modules/listen.js b/app/assets/javascripts/modules/listen.js
index 8ef321fc1..54d7ecb5a 100644
--- a/app/assets/javascripts/modules/listen.js
+++ b/app/assets/javascripts/modules/listen.js
@@ -5,151 +5,151 @@
//
// http://opensource.org/licenses/mit-license.php
//
+(function () {
+ 'use_strict';
-module.exports = function (value, key, index, lang) {
- switch (index) {
- case 'infrastructures':
- return render_infrastructures(value, key, lang);
- case 'projects':
- return render_projects(value, key, lang);
- case 'clients':
- return render_clients(value, key, lang);
- case 'serverspecs':
- return render_serverspecs(value, key, lang);
- case 'dishes':
- return render_dish(value, key, lang);
- case 'cf_templates':
- return render_cf_templates(value, key, lang);
- case 'user_admin':
- return render_user_admin(value, key, lang);
- case 'serverspec_results':
- return render_serverspecs_results(value, key, lang);
- default:
- return value;
- }
-};
-
+ module.exports = function (value, key, index, lang) {
-function render_infrastructures(value, key, lang){
- if (key === 'status') {
- switch (value) {
- case 'CREATE_COMPLETE':
- return ""+value+"";
- case 'DELETE_IN_PROGRESS':
- return ""+value+"";
- case 'CREATE_IN_PROGRESS':
- return ""+value+"";
+ switch (index) {
+ case 'infrastructures':
+ return render_infrastructures(value, key, lang);
+ case 'projects':
+ return render_projects(value, key, lang);
+ case 'clients':
+ return render_clients(value, key, lang);
+ case 'serverspecs':
+ return render_serverspecs(value, key, lang);
+ case 'dishes':
+ return render_dish(value, key, lang);
+ case 'cf_templates':
+ return render_cf_templates(value, key, lang);
+ case 'user_admin':
+ return render_user_admin(value, key, lang);
+ case 'servertest_results':
+ return render_servertests_results(value, key, lang);
default:
- return " NO_STACK_INFO ";
+ return value;
}
- }else if (key === 'stack_name') {
- return '';
- }else{
- return value;
- }
-}
+ };
-function render_clients(value, key, lang){
- if (key === 'code') {
- return value[0]+" "+value[1] +" "+ t ('clients.projects')+"";
- }else{
- return value;
- }
-}
-function render_projects(value, key, lang){
- if (key === 'code') {
- return value[0]+" "+value[1] +" "+ t ('projects.infras')+"";
- }else{
- return value;
+ function render_infrastructures(value, key, lang){
+ if (key === 'status') {
+ switch (value) {
+ case 'CREATE_COMPLETE':
+ return ""+value+"";
+ case 'DELETE_IN_PROGRESS':
+ return ""+value+"";
+ case 'CREATE_IN_PROGRESS':
+ return ""+value+"";
+ default:
+ return " NO_STACK_INFO ";
+ }
+ }else if (key === 'stack_name') {
+ return '';
+ }else{
+ return value;
+ }
}
-}
-function render_serverspecs(value, key, lang){
- if (key !== 'serverspec_name')
+ function render_clients(value, key, lang){
+ if (key === 'code') {
+ return value[0]+" "+value[1] +" "+ t ('clients.projects')+"";
+ }else{
return value;
-}
+ }
+ }
-function render_cf_templates(value, key, lang){
- if(key !== 'cf_subject')
+ function render_projects(value, key, lang){
+ if (key === 'code') {
+ return value[0]+" "+value[1] +" "+ t ('projects.infras')+"";
+ }else{
return value;
-}
-
-function render_dish(value, key, lang){
- if (key === 'status') {
- var label = null;
- if(value === 'SUCCESS'){
- label = 'label-success';
- }else if (value === 'FAILURE') {
- label = 'label-danger';
- }else if (value === 'CREATING' || value === 'BOOTSTRAPPING' || value === 'APPLYING' || value === 'SERVERSPEC') {
- label = 'label-info';
- }else {
- label = 'label-warning';
- value = 'NOT YET';
}
- return ""+value+"";
- }else if (key === 'dish_name') {
- return '';
- }else{
- return value;
}
-}
-function render_user_admin(value, key, lang){
- if(key === 'role'){
- return value[0]+" "+value[1];
- }else if (key === 'email') {
- return value[0]+" "+value[1]+" "+value[2];
- }else {
+ function render_serverspecs(value, key, lang){
+ return (key !== 'serverspec_name') ? value : '';
+ }
+
+ function render_cf_templates(value, key, lang){
+ return (key !== 'cf_subject') ? value : '';
+ }
+
+ function render_dish(value, key, lang){
+ if (key === 'status') {
+ var label = null;
+ if(value === 'SUCCESS'){
+ label = 'label-success';
+ }else if (value === 'FAILURE') {
+ label = 'label-danger';
+ }else if (value === 'CREATING' || value === 'BOOTSTRAPPING' || value === 'APPLYING' || value === 'SERVERSPEC') {
+ label = 'label-info';
+ }else {
+ label = 'label-warning';
+ value = 'NOT YET';
+ }
+ return ""+value+"";
+ }else if (key === 'dish_name') {
+ return '';
+ }else{
return value;
}
-}
+ }
-function render_serverspecs_results(value, key){
- if(key === 'status'){
- var ret;
- switch (value) {
- case 'success':
- ret = ""+value+"";
- break;
- case 'failed':
- ret = ""+value+"";
- break;
- case 'pending':
- ret = ""+value+"";
- break;
- }
- return ret;
- }else if (key === 'serverspec') {
- if(value.length > 0){
- var values = [];
- $.each(value, function(index, value){
- values.push(" "+value.name);
- });
- return values;
- }else {
- return 'auto generated';
- }
- }else if (key === 'message') {
- if(value[3].length <= 0){
- return " serverspec for "+value[1]+" is successfully finished. ";
- }else{
- var head = "
Serverspec for "+value[1]+" ... | ";
- var body = '';
- if(value[2]){
- body = "" +
- "
" +
- " " +
- " "+value[2]+" " +
- " " +
- " | " +
- "
";
+ function render_user_admin(value, key, lang){
+ if(key === 'role'){
+ return value[0]+" "+value[1];
+ }else if (key === 'email') {
+ return value[0]+" "+value[1]+" "+value[2];
+ }else {
+ return value;
}
+ }
+
+ function render_servertests_results(value, key){
+ switch (key) {
+ case 'status':
+ if(value == 'success') {
+ return ""+value+"";
+ }else if (value == 'failed') {
+ return ""+value+"";
+ }else if (value == 'pending') {
+ return ""+value+"";
+ }else{ return value; }
+ break;
+ case 'servertest':
+ return (value.length > 0) ? value.map(function(val){ return val.name; }) : 'auto generated';
+ case 'category':
+ var category = [];
+ value.forEach(function (argument) {
+ if (!category.includes(argument.category))
+ category.push(argument.category);
+ });
- return head+body;
+ return (value.length > 0) ? category : 'serverspec';
+
+ case 'message':
+ if(value[3].length <= 0){
+ return " serverspec for "+value[1]+" is successfully finished. ";
+ }else{
+ var head = "Serverspec for "+value[1]+" ... | ";
+ var body = '';
+ if(value[2]){
+ body = "" +
+ "
" +
+ " " +
+ " "+value[2]+" " +
+ " " +
+ " | " +
+ "
";
+ }
+ return head+body;
+ }break;
+ default:
+ return value;
}
- }else{
- return value;
- }
}
+
+})();
+
diff --git a/app/assets/javascripts/modules/wrap.js b/app/assets/javascripts/modules/wrap.js
index 3a23e4d8a..4874325c3 100644
--- a/app/assets/javascripts/modules/wrap.js
+++ b/app/assets/javascripts/modules/wrap.js
@@ -14,16 +14,16 @@ module.exports = function(value, index){
return render_projects(value);
case 'clients':
return render_clients(value);
- case 'serverspecs':
- return render_serverspecs(value);
+ case 'servertests':
+ return render_servertests(value);
case 'dishes':
return render_dish(value);
case 'cf_templates':
return render_cf_templates(value);
case 'user_admin':
return render_user_admin(value);
- case 'serverspec_results':
- return render_serverspecs_results(value);
+ case 'servertest_results':
+ return render_servertests_results(value);
case 'operation_sched':
return render_ops_sched(value);
default:
@@ -75,12 +75,14 @@ function render_clients(value){
}
}
-function render_serverspecs(value){
+function render_servertests(value){
switch (value) {
case 'description':
- return t ('serverspecs.description');
- case 'serverspec_name':
- return t ('serverspecs.name');
+ return t ('servertests.description');
+ case 'servertest_name':
+ return t ('servertests.name');
+ case 'category':
+ return t ('servertests.category');
default:
return value;
}
@@ -123,18 +125,18 @@ function render_user_admin(value){
}
}
-function render_serverspecs_results(value){
+function render_servertests_results(value){
switch (value) {
- case 'serverspec':
- return t('serverspecs.serverspecs');
+ case 'servertest':
+ return t('servertests.servertests');
case 'resource':
- return t('serverspecs.generator.resources');
+ return t('servertests.generator.resources');
case 'message':
return t('cf_templates.details');
case 'status':
return t ('infrastructures.status');
case 'created_at':
- return t ('serverspecs.created_at');
+ return t ('servertests.created_at');
default:
return value;
}
diff --git a/app/assets/javascripts/serverspecs.js b/app/assets/javascripts/serverspecs.js
deleted file mode 100644
index babaf8903..000000000
--- a/app/assets/javascripts/serverspecs.js
+++ /dev/null
@@ -1,76 +0,0 @@
-//
-// Copyright (c) 2013-2016 SKYARCH NETWORKS INC.
-//
-// This software is released under the MIT License.
-//
-// http://opensource.org/licenses/mit-license.php
-//
-
-//browserify functions for vue filters functionality
-var wrap = require('./modules/wrap');
-var listen = require('./modules/listen');
-var queryString = require('query-string').parse(location.search);
-var modal = require('modal');
-var app;
-
-Vue.component('demo-grid', require('demo-grid.js'));
-var serverspec_url = queryString.infrastructure_id ? 'infrastructure_id='+queryString.infrastructure_id: '';
-
-var serverspecIndex = new Vue({
- el: '#indexElement',
- data: {
- searchQuery: '',
- gridColumns: ['serverspec_name','description'],
- gridData: [],
- index: 'serverspecs',
- picked: {
- serverspec_path: null,
- edit_serverspec_path: null
- },
- infra_id: queryString.infrastructure_id ? '&infrastructure_id='+queryString.infrastructure_id: '',
- url: 'serverspecs?'+serverspec_url,
- is_empty: false,
- loading: true,
- },
- methods: {
- can_edit: function() {
- return this.picked.edit_serverspec_path === null ? true : false;
- },
- can_delete: function() {
- return (this.picked.serverspec_path === null) ? true: false;
- },
- delete_entry: function() {
- var self = this;
- modal.Confirm(t('serverspecs.serverspec'), t('serverspecs.msg.delete_serverspec'), 'danger').done(function () {
- $.ajax({
- type: "POST",
- url: self.picked.serverspec_path,
- dataType: "json",
- data: {"_method":"delete"},
- success: function (data) {
- location.reload();
- },
- }).fail(modal.AlertForAjaxStdError());
- });
- },
- reload: function () {
- this.loading = true;
- this.$children[0].load_ajax(this.url);
- this.picked = {};
- },
- show_serverspec: function(serverspec_id) {
- $.ajax({
- url : "/serverspecs/" + serverspec_id,
- type : "GET",
- success : function (data) {
- $("#value-information").html(data);
- }
- });
- document.getElementById('value').style.display='';
- }
- },
-});
-
-
-
-require("serverspec-gen");
diff --git a/app/assets/javascripts/servertests.js b/app/assets/javascripts/servertests.js
new file mode 100644
index 000000000..44fe973ea
--- /dev/null
+++ b/app/assets/javascripts/servertests.js
@@ -0,0 +1,124 @@
+//
+// Copyright (c) 2013-2016 SKYARCH NETWORKS INC.
+//
+// This software is released under the MIT License.
+//
+// http://opensource.org/licenses/mit-license.php
+//
+
+//browserify functions for vue filters functionality
+var wrap = require('./modules/wrap');
+var listen = require('./modules/listen');
+var queryString = require('query-string').parse(location.search);
+var modal = require('modal');
+
+var Servertest = require('models/servertest').default;
+var vace = require('vue-ace');
+require('brace/mode/ruby');
+require('brace/theme/github');
+Vue.use(vace, false, 'ruby', '25');
+
+Vue.component('demo-grid', require('demo-grid.js'));
+var servertest_url = queryString.infrastructure_id ? 'infrastructure_id='+queryString.infrastructure_id: '';
+
+var servertestIndex = new Vue({
+ el: '#indexElement',
+ data: {
+ searchQuery: '',
+ gridColumns: ['servertest_name','description', 'category'],
+ gridData: [],
+ index: 'servertests',
+ picked: {
+ servertest_path: null,
+ edit_servertest_path: null
+ },
+ infra_id: queryString.infrastructure_id ? '&infrastructure_id='+queryString.infrastructure_id: '',
+ sel_infra_id: null,
+ url: 'servertests?'+servertest_url,
+ is_empty: false,
+ loading: true,
+ generating: false,
+ awspec:{
+ value: null,
+ fname: null
+ }
+ },
+ methods: {
+ can_edit: function() {
+ return this.picked.edit_servertest_path === null ? true : false;
+ },
+ can_delete: function() {
+ return (this.picked.servertest_path === null) ? true: false;
+ },
+ delete_entry: function() {
+ var self = this;
+ console.log(self.picked.servertest_path);
+ modal.Confirm(t('servertests.servertest'), t('servertests.msg.delete_servertest'), 'danger').done(function () {
+ $.ajax({
+ type: "POST",
+ url: self.picked.servertest_path,
+ dataType: "json",
+ data: {"_method":"delete"},
+ success: function (data) {
+ location.reload();
+ },
+ }).fail(modal.AlertForAjaxStdError());
+ });
+ },
+ reload: function () {
+ this.loading = true;
+ this.$children[0].load_ajax(this.url);
+ this.picked = {};
+ },
+ show_servertest: function(servertest_id) {
+ $.ajax({
+ url : "/servertests/" + servertest_id,
+ type : "GET",
+ success : function (data) {
+ $("#value-information").html(data);
+ }
+ });
+ document.getElementById('value').style.display='';
+ },
+ generate: function () {
+ var self = this;
+ self.generating = true;
+
+ var svt = new Servertest(self.sel_infra_id);
+ svt.generate_awspec().done(function (data) {
+ self.awspec.value = data.generated;
+ self.generating = false;
+ }).fail(modal.AlertForAjaxStdError());
+ },
+ create_awspec: function () {
+ var self = this;
+ var params = self.awspec;
+ self.generating = true;
+
+ var svt = new Servertest(self.sel_infra_id);
+ svt.create(params.fname, params.value, 'awspec').done(function (data) {
+ modal.Alert(t('servertests.servertest'), data, 'success').done(function(){
+ location.href = "/servertests?infrastructure_id="+self.sel_infra_id+location.search;
+ });
+ }
+ ).fail(function (msg) {
+ modal.Alert(t('servertests.servertest'), msg, 'danger');
+ self.generating = false;
+ });
+ }
+ },
+ computed: {
+ required_filed: function () {
+ var awspec = this.awspec;
+ return (awspec.value && awspec.fname);
+ },
+ },
+ ready: function() {
+ var self = this;
+ self.loading = false;
+ }
+});
+
+
+
+require("serverspec-gen");
diff --git a/app/assets/javascripts/zabbix_servers.js b/app/assets/javascripts/zabbix_servers.js
index 6b2d4ac61..9b8eed5ee 100644
--- a/app/assets/javascripts/zabbix_servers.js
+++ b/app/assets/javascripts/zabbix_servers.js
@@ -12,14 +12,9 @@
var wrap = require('./modules/wrap');
var listen = require('./modules/listen');
var md5 = require('md5');
- var queryString = require('query-string').parse(location.search);
+ var qs = require('query-string').parse(location.search);
var modal = require('modal');
var ZabbixServer = require('models/zabbix_server').default;
- var helpers = require('infrastructures/helper.js');
- var alert_success = helpers.alert_success;
- var alert_danger = helpers.alert_danger;
-
- var app;
Vue.component('demo-grid', require('demo-grid.js'));
@@ -31,7 +26,7 @@
gridColumns: ['fqdn', 'version', 'details'],
gridData: [],
index: 'zabbix_servers',
- url: 'zabbix_servers?lang='+queryString.lang,
+ url: 'zabbix_servers?lang='+qs.lang,
is_empty: false,
loading: true,
new_loader: false,
@@ -44,7 +39,7 @@
username: null,
password: null,
details: null,
- lang: queryString.lang
+ lang: qs.lang
},
control_type: null
},
diff --git a/app/assets/stylesheets/application.css b/app/assets/stylesheets/application.css
index c6fbc01fe..b110894fd 100644
--- a/app/assets/stylesheets/application.css
+++ b/app/assets/stylesheets/application.css
@@ -199,6 +199,7 @@ h6.page-header {
.recipes-selectbox-height {
height: 285px !important;
+ background-image: none !important;
}
.runlist-selectbox-height {
diff --git a/app/assets/stylesheets/bootstrap_extend.css b/app/assets/stylesheets/bootstrap_extend.css
index e855587a6..0aa7ac1d0 100644
--- a/app/assets/stylesheets/bootstrap_extend.css
+++ b/app/assets/stylesheets/bootstrap_extend.css
@@ -346,3 +346,8 @@ pre {
.instructions{
color: #444444;;
}
+
+.terminal-ansi{
+ color: #b2dbfb !important;
+ background-color: #212121 !important;
+}
diff --git a/app/assets/stylesheets/nodes.css b/app/assets/stylesheets/nodes.css
index 07ac6e3ac..6bd6e0474 100644
--- a/app/assets/stylesheets/nodes.css
+++ b/app/assets/stylesheets/nodes.css
@@ -1,5 +1,6 @@
.pre-progress {
overflow: auto;
height: 300px;
- color: gray;
+ color: #b2dbfb !important;
+ background-color: #212121 !important;
}
diff --git a/app/controllers/app_settings_controller.rb b/app/controllers/app_settings_controller.rb
index c376c042a..fb50d275e 100644
--- a/app/controllers/app_settings_controller.rb
+++ b/app/controllers/app_settings_controller.rb
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2013-2016 SKYARCH NETWORKS INC.
+# Copyright (c) 2013-2017 SKYARCH NETWORKS INC.
#
# This software is released under the MIT License.
#
@@ -9,13 +9,14 @@
class AppSettingsController < ApplicationController
before_action :authenticate_user!, except: [:show, :create, :chef_create]
- before_action except: [:edit_zabbix, :update_zabbix, :chef_server, :chef_keys, :db, :export_db] do
+ before_action except: [:edit_zabbix, :update_zabbix, :chef_server, :chef_keys] do
if AppSetting.set?
redirect_to root_path
end
end
class AppSettingError < ::StandardError; end
+ CF_PARAMS_KEY = 'cf_params'.freeze
# GET /app_settings
def show
@@ -30,7 +31,26 @@ def create
keypair_name = settings.delete(:keypair_name)
keypair_value = settings.delete(:keypair_value)
- check_eip_limit!(settings[:aws_region], access_key, secret_access_key)
+ vpc_id = settings.delete(:vpc_id)
+ subnet_id = settings.delete(:subnet_id)
+
+ set_ec2(settings[:aws_region], access_key, secret_access_key)
+
+ cf_params = {}
+
+ if vpc_id
+ verify_vpc_id!(vpc_id)
+ cf_params[:VpcId] = vpc_id
+ end
+
+ if subnet_id
+ verify_subnet_id!(subnet_id)
+ cf_params[:SubnetId] = subnet_id
+ end
+
+ check_eip_limit!
+
+ Rails.cache.write(CF_PARAMS_KEY, cf_params)
ec2key = Ec2PrivateKey.create!(
name: keypair_name,
@@ -62,7 +82,7 @@ def create
set = AppSetting.get
stack_name = "SkyHopperZabbixServer-#{Digest::MD5.hexdigest(DateTime.now.in_time_zone.to_s)}"
- ChefServer::Deployment.create_zabbix(stack_name, set.aws_region, set.ec2_private_key.name, set.ec2_private_key.value)
+ ChefServer::Deployment.create_zabbix(stack_name, set.aws_region, set.ec2_private_key.name, set.ec2_private_key.value, cf_params)
end
render text: I18n.t('app_settings.msg.created') and return
@@ -122,11 +142,14 @@ def chef_create
CfTemplate
# rubocop:enable Lint/Void
+ cf_params = Rails.cache.fetch(CF_PARAMS_KEY) || {}
+ Rails.cache.delete(CF_PARAMS_KEY)
+
Thread.new_with_db do
ws = WSConnector.new('chef_server_deployment', 'status')
begin
- ChefServer::Deployment.create(stack_name, region, keypair_name, keypair_value) do |data, msg|
+ ChefServer::Deployment.create(stack_name, region, keypair_name, keypair_value, cf_params) do |data, msg|
Rails.logger.debug("ChefServer creating > #{data} #{msg}")
ws.push(build_ws_message(data, msg))
end
@@ -193,13 +216,6 @@ def chef_keys
@zipfile.close
end
- # GET /app_settings/export_db
- def export_db
- prepare_db_zip
- send_file(@zipfile.path, filename: "SkyHopper-db-#{Rails.env}.zip")
- @zipfile.close
- end
-
private
# statusに対応するメッセージをJSONとして返す
@@ -215,45 +231,36 @@ def build_ws_message(status, msg = nil)
return JSON.generate(hash)
end
+ def set_ec2(region, access_key_id, secret_access_key)
+ @ec2 = Aws::EC2::Client.new(region: region, access_key_id: access_key_id, secret_access_key: secret_access_key)
+ end
+
class EIPLimitError < StandardError; end
# @param [String] region
# @param [String] access_key_id
# @param [String] secret_access_key
# @raise [EIPLimitError] raise error when cann't allocate EIP.
- def check_eip_limit!(region, access_key_id, secret_access_key)
- e = Aws::EC2::Client.new(region: region, access_key_id: access_key_id, secret_access_key: secret_access_key)
- a = e.describe_account_attributes
+ def check_eip_limit!
+ a = @ec2.describe_account_attributes
limit = a.account_attributes.find{|x| x.attribute_name == 'vpc-max-elastic-ips'}.attribute_values.first.attribute_value.to_i
- n = e.describe_addresses.addresses.size
+ n = @ec2.describe_addresses.addresses.size
if limit - n < 2
raise EIPLimitError, I18n.t('app_settings.msg.eip_limit_error')
end
end
+ def verify_vpc_id!(vpc_id)
+ @ec2.describe_vpcs(vpc_ids: [vpc_id])
+ end
+
+ def verify_subnet_id!(subnet_id)
+ @ec2.describe_subnets(subnet_ids: [subnet_id])
+ end
+
def prepare_chef_key_zip
@zipfile = Tempfile.open('chef')
zf = ZipFileGenerator.new(File.expand_path('~/.chef'), @zipfile.path)
zf.write
end
-
- def prepare_db_zip
- dbname = ActiveRecord::Base.configurations[Rails.env]['database']
- filename = "#{dbname}.sql"
- path = Rails.root.join("tmp/#{filename}")
-
- system('rake db:data:dump')
-
- @zipfile = Tempfile.open("skyhopper")
- ::Zip::File.open(@zipfile.path, ::Zip::File::CREATE) do |zip|
- zip.add(filename, path)
-
- SkyHopper::Application.secrets.each do |key, value|
- next if value.nil?
- zip.get_output_stream(key) { |io| io.write(value) }
- end
- end
-
- FileUtils.rm(path)
- end
end
diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb
index 9c8bb5e4b..dada70bff 100644
--- a/app/controllers/application_controller.rb
+++ b/app/controllers/application_controller.rb
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2013-2016 SKYARCH NETWORKS INC.
+# Copyright (c) 2013-2017 SKYARCH NETWORKS INC.
#
# This software is released under the MIT License.
#
diff --git a/app/controllers/cf_templates_controller.rb b/app/controllers/cf_templates_controller.rb
index 3a8e6653e..df5d5b1fc 100644
--- a/app/controllers/cf_templates_controller.rb
+++ b/app/controllers/cf_templates_controller.rb
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2013-2016 SKYARCH NETWORKS INC.
+# Copyright (c) 2013-2017 SKYARCH NETWORKS INC.
#
# This software is released under the MIT License.
#
diff --git a/app/controllers/clients_controller.rb b/app/controllers/clients_controller.rb
index c11f473ee..4b18699cf 100644
--- a/app/controllers/clients_controller.rb
+++ b/app/controllers/clients_controller.rb
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2013-2016 SKYARCH NETWORKS INC.
+# Copyright (c) 2013-2017 SKYARCH NETWORKS INC.
#
# This software is released under the MIT License.
#
diff --git a/app/controllers/concerns/controller_util.rb b/app/controllers/concerns/controller_util.rb
index 134f3520e..0beef8f68 100644
--- a/app/controllers/concerns/controller_util.rb
+++ b/app/controllers/concerns/controller_util.rb
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2013-2016 SKYARCH NETWORKS INC.
+# Copyright (c) 2013-2017 SKYARCH NETWORKS INC.
#
# This software is released under the MIT License.
#
diff --git a/app/controllers/concerns/error_handler.rb b/app/controllers/concerns/error_handler.rb
index 4f3b972fb..5f1eb9aeb 100644
--- a/app/controllers/concerns/error_handler.rb
+++ b/app/controllers/concerns/error_handler.rb
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2013-2016 SKYARCH NETWORKS INC.
+# Copyright (c) 2013-2017 SKYARCH NETWORKS INC.
#
# This software is released under the MIT License.
#
diff --git a/app/controllers/concerns/infra_logger.rb b/app/controllers/concerns/infra_logger.rb
index 02a971316..8a1c66c3b 100644
--- a/app/controllers/concerns/infra_logger.rb
+++ b/app/controllers/concerns/infra_logger.rb
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2013-2016 SKYARCH NETWORKS INC.
+# Copyright (c) 2013-2017 SKYARCH NETWORKS INC.
#
# This software is released under the MIT License.
#
diff --git a/app/controllers/databases_controller.rb b/app/controllers/databases_controller.rb
new file mode 100644
index 000000000..0666ab92d
--- /dev/null
+++ b/app/controllers/databases_controller.rb
@@ -0,0 +1,63 @@
+#
+# Copyright (c) 2013-2016 SKYARCH NETWORKS INC.
+#
+# This software is released under the MIT License.
+#
+# http://opensource.org/licenses/mit-license.php
+#
+
+class DatabasesController < ApplicationController
+ skip_before_action :appsetting_set?
+
+ before_action if: :app_setting_is_set do
+ authenticate_user!
+
+ man = DatabaseManager.new
+ def man.policy_class; DatabasePolicy end
+ authorize man
+ end
+
+ helper_method :app_setting_is_set
+
+ # POST /databases/export
+ def export
+ authenticate_user!
+
+ time = Time.now.strftime('%Y%m%d%H%M%S')
+ zipfile = DatabaseManager.export_as_zip
+ send_file(zipfile.path, filename: "SkyHopper-db-#{Rails.env}-#{time}.zip")
+ zipfile.close
+ end
+
+ # POST /databases/import
+ def import
+ file = params.require(:file)
+
+ DatabaseManager.validate_zip_file!(file.path)
+
+ reason = I18n.available_locales.map { |locale|
+ I18n.t('databases.msg.under_maintenance', locale: locale)
+ }.join
+ MaintenanceMode.activate(reason: reason)
+
+ Thread.new do
+ import_zip(file)
+ end
+
+ redirect_to root_path
+ end
+
+ private
+ def app_setting_is_set
+ @app_setting_is_set ||= AppSetting.set?
+ end
+
+ def import_zip(file)
+ DatabaseManager.import_from_zip(file.path)
+ rescue => ex
+ Rails.cache.write(:err, "#{ex.inspect}\n#{ex.backtrace.join}")
+ ensure
+ file.close
+ MaintenanceMode.deactivate
+ end
+end
diff --git a/app/controllers/dishes_controller.rb b/app/controllers/dishes_controller.rb
index 6504b4bd4..12a2fa9ca 100644
--- a/app/controllers/dishes_controller.rb
+++ b/app/controllers/dishes_controller.rb
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2013-2016 SKYARCH NETWORKS INC.
+# Copyright (c) 2013-2017 SKYARCH NETWORKS INC.
#
# This software is released under the MIT License.
#
@@ -36,7 +36,7 @@ def index
# GET /dishes/1
def show
- @selected_serverspecs = @dish.serverspecs
+ @selected_serverspecs = @dish.servertests
@runlist = @dish.runlist
render partial: 'show'
@@ -44,13 +44,13 @@ def show
# GET /dishes/1/edit
def edit
- @global_serverspecs = Serverspec.global
+ @global_serverspecs = Servertest.global
@cookbooks = ChefAPI.index(:cookbook).keys
@roles = ChefAPI.index(:role).map(&:name)
@runlist = @dish.runlist
- @selected_serverspecs = @dish.serverspecs
+ @selected_serverspecs = @dish.servertests
render partial: 'edit'
end
@@ -58,12 +58,12 @@ def edit
# PUT /dishes/1
def update
runlist = params[:runlist] || []
- serverspec_ids = params[:serverspecs] || []
+ servertest_ids = params[:servertests] || []
# TODO error handling
@dish.update(
runlist: runlist,
- serverspec_ids: serverspec_ids,
+ servertest_ids: servertest_ids,
status: nil
)
diff --git a/app/controllers/dishes_controller/validate.rb b/app/controllers/dishes_controller/validate.rb
index 2fb5941cf..90a13ea6c 100644
--- a/app/controllers/dishes_controller/validate.rb
+++ b/app/controllers/dishes_controller/validate.rb
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2013-2016 SKYARCH NETWORKS INC.
+# Copyright (c) 2013-2017 SKYARCH NETWORKS INC.
#
# This software is released under the MIT License.
#
diff --git a/app/controllers/ec2_instances_controller.rb b/app/controllers/ec2_instances_controller.rb
index 2cb3cccdc..0a668d9c7 100644
--- a/app/controllers/ec2_instances_controller.rb
+++ b/app/controllers/ec2_instances_controller.rb
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2013-2016 SKYARCH NETWORKS INC.
+# Copyright (c) 2013-2017 SKYARCH NETWORKS INC.
#
# This software is released under the MIT License.
#
@@ -156,7 +156,7 @@ def reboot
# @return [String] JSON. {status: Boolean}
def serverspec_status
physical_id = params.require(:id)
- status = ! Resource.find_by(physical_id: physical_id).status.serverspec.failed?
+ status = ! Resource.find_by(physical_id: physical_id).status.servertest.failed?
render json: {status: status}
end
diff --git a/app/controllers/ec2_private_keys_controller.rb b/app/controllers/ec2_private_keys_controller.rb
index f09716c69..69e19e393 100644
--- a/app/controllers/ec2_private_keys_controller.rb
+++ b/app/controllers/ec2_private_keys_controller.rb
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2013-2016 SKYARCH NETWORKS INC.
+# Copyright (c) 2013-2017 SKYARCH NETWORKS INC.
#
# This software is released under the MIT License.
#
diff --git a/app/controllers/elb_controller.rb b/app/controllers/elb_controller.rb
index 3182a825c..372f7e82b 100755
--- a/app/controllers/elb_controller.rb
+++ b/app/controllers/elb_controller.rb
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2013-2016 SKYARCH NETWORKS INC.
+# Copyright (c) 2013-2017 SKYARCH NETWORKS INC.
#
# This software is released under the MIT License.
#
diff --git a/app/controllers/infrastructure_logs_controller.rb b/app/controllers/infrastructure_logs_controller.rb
index 1685ebb25..39ae22e74 100644
--- a/app/controllers/infrastructure_logs_controller.rb
+++ b/app/controllers/infrastructure_logs_controller.rb
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2013-2016 SKYARCH NETWORKS INC.
+# Copyright (c) 2013-2017 SKYARCH NETWORKS INC.
#
# This software is released under the MIT License.
#
diff --git a/app/controllers/infrastructures_controller.rb b/app/controllers/infrastructures_controller.rb
index d53ca63f5..e8fecd328 100644
--- a/app/controllers/infrastructures_controller.rb
+++ b/app/controllers/infrastructures_controller.rb
@@ -1,6 +1,6 @@
# -*- coding: utf-8 -*-
#
-# Copyright (c) 2013-2016 SKYARCH NETWORKS INC.
+# Copyright (c) 2013-2017 SKYARCH NETWORKS INC.
#
# This software is released under the MIT License.
#
diff --git a/app/controllers/key_pairs_controller.rb b/app/controllers/key_pairs_controller.rb
index 3cd7b712d..5e7b12529 100644
--- a/app/controllers/key_pairs_controller.rb
+++ b/app/controllers/key_pairs_controller.rb
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2013-2016 SKYARCH NETWORKS INC.
+# Copyright (c) 2013-2017 SKYARCH NETWORKS INC.
#
# This software is released under the MIT License.
#
diff --git a/app/controllers/monitorings_controller.rb b/app/controllers/monitorings_controller.rb
index 3e44161fd..2f3c2c697 100644
--- a/app/controllers/monitorings_controller.rb
+++ b/app/controllers/monitorings_controller.rb
@@ -1,6 +1,6 @@
# -*- coding: utf-8 -*-
#
-# Copyright (c) 2013-2016 SKYARCH NETWORKS INC.
+# Copyright (c) 2013-2017 SKYARCH NETWORKS INC.
#
# This software is released under the MIT License.
#
@@ -295,7 +295,8 @@ def set_infra
end
def set_zabbix
- @zabbix_server = ZabbixServer.find(@infra.project[:zabbix_server_id])
+ @zabbix_server = @infra.project.zabbix_server
+ raise t('projects.msg.zabbix_not_set') unless @zabbix_server
@zabbix = Zabbix.new(@zabbix_server.fqdn, current_user.email, current_user.encrypted_password)
end
end
diff --git a/app/controllers/nodes_controller.rb b/app/controllers/nodes_controller.rb
index 02625480c..fbcdf1765 100644
--- a/app/controllers/nodes_controller.rb
+++ b/app/controllers/nodes_controller.rb
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2013-2016 SKYARCH NETWORKS INC.
+# Copyright (c) 2013-2017 SKYARCH NETWORKS INC.
#
# This software is released under the MIT License.
#
@@ -105,7 +105,7 @@ def show
@info = {}
status = resource.status
@info[:cook_status] = status.cook
- @info[:serverspec_status] = status.serverspec
+ @info[:servertest_status] = status.servertest
@info[:update_status] = status.yum
@dishes = Dish.valid_dishes(@infra.project_id)
@@ -371,7 +371,7 @@ def update_runlist(physical_id: nil, infrastructure: nil, runlist: nil, dish_id:
# change cookstatus to unexected
r.status.cook.un_executed!
- r.status.serverspec.un_executed!
+ r.status.servertest.un_executed!
infra_logger_success("Updating runlist for #{physical_id} is successfully updated.")
return {status: true, message: nil}
@@ -385,7 +385,7 @@ def cook_node(infrastructure, physical_id, whyrun)
r = infrastructure.resource(physical_id)
r.status.cook.inprogress!
- r.status.serverspec.un_executed!
+ r.status.servertest.un_executed!
node = Node.new(physical_id)
node.wait_search_index
log = []
@@ -415,7 +415,7 @@ def cook_node(infrastructure, physical_id, whyrun)
ws.push_as_json({v: true})
if r.dish_id # if resource has dish
- ServerspecJob.perform_now(physical_id, @infra.id, current_user.id)
+ ServertestJob.perform_now(physical_id, @infra.id, current_user.id)
end
end
@@ -430,7 +430,7 @@ def exec_yum_update(infra, physical_id, security=true, exec=false)
r = this_infra.resource(physical_id)
r.status.yum.inprogress!
- r.status.serverspec.un_executed! if exec
+ r.status.servertest.un_executed! if exec
node = Node.new(physical_id)
diff --git a/app/controllers/project_parameters_controller.rb b/app/controllers/project_parameters_controller.rb
index 1d7343132..019279214 100644
--- a/app/controllers/project_parameters_controller.rb
+++ b/app/controllers/project_parameters_controller.rb
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2013-2016 SKYARCH NETWORKS INC.
+# Copyright (c) 2013-2017 SKYARCH NETWORKS INC.
#
# This software is released under the MIT License.
#
diff --git a/app/controllers/projects_controller.rb b/app/controllers/projects_controller.rb
index bc0c23875..f70326389 100644
--- a/app/controllers/projects_controller.rb
+++ b/app/controllers/projects_controller.rb
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2013-2016 SKYARCH NETWORKS INC.
+# Copyright (c) 2013-2017 SKYARCH NETWORKS INC.
#
# This software is released under the MIT License.
#
@@ -76,14 +76,19 @@ def edit
# POST /projects
# POST /projects.json
def create
- @project = Project.new(project_params)
- @zabbix = ZabbixServer.find(@project.zabbix_server_id)
-
on_error = -> () {
session[:form] = project_params
redirect_to new_project_path(client_id: params[:project][:client_id])
}
+ zid = project_params[:zabbix_server_id]
+ if zid.empty?
+ flash[:alert] = t('projects.msg.zabbix_not_set')
+ on_error.() and return
+ end
+ @zabbix = ZabbixServer.find(zid)
+
+ @project = Project.new(project_params)
unless @project.save
flash[:alert] = @project.errors
on_error.() and return
@@ -106,7 +111,13 @@ def create
# PATCH/PUT /projects/1
# PATCH/PUT /projects/1.json
def update
- @zabbix = ZabbixServer.find(project_params[:zabbix_server_id])
+ zid = project_params[:zabbix_server_id]
+ if zid.empty?
+ flash[:alert] = t('projects.msg.zabbix_not_set')
+ redirect_to edit_project_path and return
+ end
+
+ @zabbix = ZabbixServer.find(zid)
if @project.update(project_params)
register_hosts
redirect_to projects_path(client_id: @project.client_id),
diff --git a/app/controllers/resources_controller.rb b/app/controllers/resources_controller.rb
index 35c6d29cc..4818ccbcf 100644
--- a/app/controllers/resources_controller.rb
+++ b/app/controllers/resources_controller.rb
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2013-2016 SKYARCH NETWORKS INC.
+# Copyright (c) 2013-2017 SKYARCH NETWORKS INC.
#
# This software is released under the MIT License.
#
diff --git a/app/controllers/root_controller.rb b/app/controllers/root_controller.rb
index 78510162d..03b03e491 100644
--- a/app/controllers/root_controller.rb
+++ b/app/controllers/root_controller.rb
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2013-2016 SKYARCH NETWORKS INC.
+# Copyright (c) 2013-2017 SKYARCH NETWORKS INC.
#
# This software is released under the MIT License.
#
diff --git a/app/controllers/server_status_controller.rb b/app/controllers/server_status_controller.rb
index 027db8808..6da1c3547 100644
--- a/app/controllers/server_status_controller.rb
+++ b/app/controllers/server_status_controller.rb
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2013-2016 SKYARCH NETWORKS INC.
+# Copyright (c) 2013-2017 SKYARCH NETWORKS INC.
#
# This software is released under the MIT License.
#
diff --git a/app/controllers/serverspecs_controller.rb b/app/controllers/serverspecs_controller.rb
deleted file mode 100644
index 9a64b398a..000000000
--- a/app/controllers/serverspecs_controller.rb
+++ /dev/null
@@ -1,220 +0,0 @@
-#
-# Copyright (c) 2013-2016 SKYARCH NETWORKS INC.
-#
-# This software is released under the MIT License.
-#
-# http://opensource.org/licenses/mit-license.php
-#
-
-class ServerspecsController < ApplicationController
- include Concerns::InfraLogger
-
- before_action :set_serverspec, only: [:update, :show, :edit, :destroy]
-
- # --------------- Auth
- before_action :authenticate_user!
-
- before_action do
- authorize(@serverspec || Serverspec.new(infrastructure_id: have_infra?))
- end
-
- # GET /serverspecs
- def index
- @infrastructure_id = params[:infrastructure_id]
- page = params[:page]
-
- @infrastructure_name = Infrastructure.find(@infrastructure_id).stack_name if @infrastructure_id
- @serverspecs = Serverspec.where(infrastructure_id: @infrastructure_id).page(page)
-
- respond_to do |format|
- format.json
- format.html
- end
- end
-
- # GET /serverspecs/new
- def new
- infra_id = params[:infrastructure_id]
-
- @serverspec = Serverspec.new(infrastructure_id: infra_id)
- @serverspec.value = %!require 'serverspec_helper'\n\n!
- end
-
- # GET /serverspecs/1
- def show
- render text: @serverspec.value
- end
-
- # POST /serverspecs/1
- def update
- if @serverspec.update(global_serverspec_params)
- redirect_to serverspecs_path, notice: I18n.t('serverspecs.msg.updated')
- else
- flash.now[:alert] = @serverspec.errors[:value] if @serverspec.errors[:value]
- render action: 'edit'
- end
- end
-
- # POST /serverspecs
- def create
- @serverspec = Serverspec.new(global_serverspec_params)
-
- infra_id = @serverspec.infrastructure_id
-
- begin
- @serverspec.save!
- rescue => ex
- raise ex if ajax?
- flash.now[:alert] = @serverspec.errors[:value] if @serverspec.errors[:value]
- render action: 'new', infrastructure_id: infra_id; return
- end
-
- if ajax?
- render text: I18n.t('serverspecs.msg.created') and return
- else
- redirect_to serverspecs_path(infrastructure_id: infra_id),
- notice: I18n.t('serverspecs.msg.created')
- end
- end
-
- # GET /serverspecs/1/edit
- def edit
- end
-
- # GET /serverspecs/generator
- def generator
- @infra = Infrastructure.find(params[:infrastructure_id]) if params[:infrastructure_id]
- end
-
- # DELETE /serverspecs/1
- def destroy
- infra_id = @serverspec.infrastructure_id
- @serverspec.destroy
-
- redirect_to serverspecs_path(infrastructure_id: infra_id), notice: I18n.t('serverspecs.msg.deleted')
- end
-
- # GET /serverspecs/select
- def select
- physical_id = params.require(:physical_id)
- infra_id = params.require(:infra_id)
-
- resource = Resource.where(infrastructure_id: infra_id).find_by(physical_id: physical_id)
- @selected_serverspec_ids = resource.all_serverspec_ids
-
- serverspecs = Serverspec.for_infra(infra_id)
- @individual_serverspecs, @global_serverspecs = serverspecs.partition{|spec| spec.infrastructure_id }
- node = Node.new(physical_id)
- @is_available_auto_generated = node.have_auto_generated
-
- @serverspec_schedule = ServerspecSchedule.find_or_create_by(physical_id: physical_id)
- end
-
- # GET /serverspecs/results
- def results
- physical_id = params.require(:physical_id)
- infra_id = params.require(:infra_id)
- resource = Resource.where(infrastructure_id: infra_id).find_by(physical_id: physical_id)
-
- @serverspec_results = resource.serverspec_results.order("created_at desc")
-
- respond_to do |format|
- format.json { render json: @serverspec_results.as_json(only: [:id, :status, :message, :created_at],
- include: [{serverspec_result_details: {only: [:id]}},{serverspecs: {only:[:name]}}, {resource: {only: [:physical_id]}} ]) }
- end
- end
-
-
- # TODO: refactor
- # POST /serverspecs/run
- def run
- physical_id = params.require(:physical_id)
- infra_id = params.require(:infra_id)
- serverspec_ids = params.require(:serverspec_ids)
- resource = Resource.where(infrastructure_id: infra_id).find_by(physical_id: physical_id)
- if selected_auto_generated = serverspec_ids.include?('-1')
- serverspec_ids.delete('-1')
- end
-
- begin
- resp = ServerspecJob.perform_now(
- physical_id, infra_id, current_user.id,
- serverspec_ids: serverspec_ids, auto_generated: selected_auto_generated
- )
- rescue => ex
- # serverspec が正常に実行されなかったとき
- render text: ex.message, status: 500 and return
- end
-
- case resp[:status_text]
- when 'success'
- render_msg = I18n.t('serverspecs.msg.success', physical_id: physical_id)
- when 'pending'
- render_msg = I18n.t('serverspecs.msg.pending', physical_id: physical_id, pending_specs: resp[:short_msg])
- when 'failed'
- render_msg = I18n.t('serverspecs.msg.failure', physical_id: physical_id, failure_specs: resp[:short_msg])
- end
-
- ServerspecResult.create(
- resource_id: resource.id,
- status: resp[:status_text],
- message: resp[:message],
- serverspec_ids: serverspec_ids
- )
- render text: render_msg, status: 200 and return
- end
-
-
- # Generate serverspec to connect to RDS instance
- # PUT /serverspecs/create_for_rds
- def create_for_rds
- infra_id = params.require(:infra_id)
- physical_id = params.require(:physical_id)
- username = params.require(:username)
- password = params.require(:password)
- database = params[:database]
- database = nil if database.blank?
-
- infra = Infrastructure.find(infra_id)
- rds = RDS.new(infra, physical_id)
-
- Serverspec.create_rds(rds, username, password, infra_id, database)
-
- render text: I18n.t('serverspecs.msg.generated'), status: 201 and return
- end
-
- # POST /serverspecs/schedule
- def schedule
- physical_id = params.require(:physical_id)
- infra_id = params.require(:infra_id)
- schedule = params.require(:schedule).permit(:enabled, :frequency, :day_of_week, :time)
-
- ss = ServerspecSchedule.find_by(physical_id: physical_id)
- ss.update_attributes!(schedule)
-
- if ss.enabled?
- PeriodicServerspecJob.set(
- wait_until: ss.next_run
- ).perform_later(physical_id, infra_id, current_user.id)
- end
-
- render text: I18n.t('schedules.msg.serverspec_updated'), status: 200 and return
- end
-
-
- private
-
- def set_serverspec
- @serverspec = Serverspec.find(params.require(:id))
- end
-
- def global_serverspec_params
- params.require(:serverspec).permit(:name, :description, :value, :infrastructure_id)
- end
-
- def have_infra?
- return params[:infra_id] || params[:infrastructure_id] || params[:serverspec][:infrastructure_id]
- rescue
- return nil
- end
-end
diff --git a/app/controllers/servertests_controller.rb b/app/controllers/servertests_controller.rb
new file mode 100644
index 000000000..5db10f305
--- /dev/null
+++ b/app/controllers/servertests_controller.rb
@@ -0,0 +1,254 @@
+#
+# Copyright (c) 2013-2017 SKYARCH NETWORKS INC.
+#
+# This software is released under the MIT License.
+#
+# http://opensource.org/licenses/mit-license.php
+#
+
+class ServertestsController < ApplicationController
+ include Concerns::InfraLogger
+ class ServertestError < ::StandardError; end
+
+ before_action :set_servertest, only: [:update, :show, :edit, :destroy]
+
+ # --------------- Auth
+ before_action :authenticate_user!
+
+ before_action do
+ authorize(@serverspec || Servertest.new(infrastructure_id: have_infra?))
+ end
+
+ # GET /servertests
+ def index
+ @infrastructure_id = params[:infrastructure_id]
+ page = params[:page]
+
+ @infrastructure_name = Infrastructure.find(@infrastructure_id).stack_name if @infrastructure_id
+ @servertests = Servertest.where(infrastructure_id: @infrastructure_id).page(page)
+
+ respond_to do |format|
+ format.json
+ format.html
+ end
+ end
+
+ # GET /servertests/new
+ def new
+ infra_id = params[:infrastructure_id]
+
+ @servertest = Servertest.new(infrastructure_id: infra_id)
+ @servertest.value = %!require 'spec_helper'\n\n!
+ end
+
+ # GET /servertests/1
+ def show
+ render text: @servertest.value
+ end
+
+ # POST /servertests/1
+ def update
+ if @servertest.update(global_servertest_params)
+ redirect_to servertests_path, notice: I18n.t('servertests.msg.updated')
+ else
+ flash.now[:alert] = @servertest.errors[:value] if @servertest.errors[:value]
+ render action: 'edit'
+ end
+ end
+
+ # POST /servertests
+ def create
+ @servertest = Servertest.new(global_servertest_params)
+
+ infra_id = @servertest.infrastructure_id
+
+ begin
+ @servertest.save!
+ rescue => ex
+ raise ex if ajax?
+ flash.now[:alert] = @servertest.errors[:value] if @servertest.errors[:value]
+ render action: 'new', infrastructure_id: infra_id; return
+ end
+
+ if ajax?
+ render text: I18n.t('servertests.msg.created') and return
+ else
+ redirect_to servertests_path(infrastructure_id: infra_id),
+ notice: I18n.t('servertests.msg.created')
+ end
+ end
+
+ # GET /servertests/1/edit
+ def edit; end # Rubocop fix
+
+ # GET /servertests/generator
+ def generator
+ @infra = Infrastructure.find(params[:infrastructure_id]) if params[:infrastructure_id]
+ end
+
+ # GET /servertests/awspec_generator
+ def awspec_generator
+ @infras = Infrastructure.all
+ end
+
+ # GET /servertests/generate_awspec
+ def generate_awspec
+ @infra = Infrastructure.find(params[:infrastructure_id]) if params[:infrastructure_id]
+
+ ws = WSConnector.new('awspec-generate', @infra.id)
+ ruby_cmd = File.join(RbConfig::CONFIG['bindir'], RbConfig::CONFIG['ruby_install_name'])
+
+ cmd = []
+ cmd << "AWS_ACCESS_KEY_ID=#{@infra.access_key}"
+ cmd << "AWS_REGION=#{@infra.region}"
+ cmd << "AWS_SECRET_ACCESS_KEY=#{@infra.secret_access_key}"
+ cmd << ruby_cmd << "-S awspec generate ec2 #{@infra.ec2.describe_vpcs[:vpcs][0].vpc_id}"
+ cmd = cmd.flatten.reject(&:blank?).join(" ")
+ generated = %!require 'awspec_helper'\n\n!
+ Thread.new_with_db do
+ begin
+ gen, = Node.exec_command(cmd, ServertestError)
+ generated += gen
+ ws.push_as_json({status: true, message: I18n.t('zabbix_servers.msg.created'), generated: generated})
+ rescue => ex
+ generated = ex.to_s
+ ws.push_as_json({status: false, message: ex.message})
+ render status: 404 and return
+ end
+ end
+
+ render nothing: true, status: 200 and return
+ end
+
+ # DELETE /servertests/1
+ def destroy
+ infra_id = @servertest.infrastructure_id
+ @servertest.destroy
+
+ redirect_to servertests_path(infrastructure_id: infra_id), notice: I18n.t('servertests.msg.deleted')
+ end
+
+ # GET /servertests/select
+ def select
+ physical_id = params.require(:physical_id)
+ infra_id = params.require(:infra_id)
+
+ resource = Resource.where(infrastructure_id: infra_id).find_by(physical_id: physical_id)
+ @selected_servertest_ids = resource.all_servertest_ids
+
+ servertests = Servertest.for_infra_serverspec(infra_id)
+ @individual_servertests, @global_servertests = servertests.partition{|spec| spec.infrastructure_id }
+ node = Node.new(physical_id)
+ @is_available_auto_generated = node.have_auto_generated
+
+ @servertest_schedule = ServertestSchedule.find_or_create_by(physical_id: physical_id)
+ end
+
+ # GET /servertests/results
+ def results
+ physical_id = params.require(:physical_id)
+ infra_id = params.require(:infra_id)
+ resource = Resource.where(infrastructure_id: infra_id).find_by(physical_id: physical_id)
+
+ @servertest_results = resource.servertest_results.order("created_at desc")
+
+ respond_to do |format|
+ format.json { render json: @servertest_results.as_json(only: [:id, :status, :message, :created_at, :category],
+ include: [{servertest_result_details: {only: [:id]}},{servertests: {only: [:name, :category]}}, {resource: {only: [:physical_id]}} ]) }
+ end
+ end
+
+
+ # TODO: refactor
+ # POST /servertests/run_serverspec
+ def run_serverspec
+ physical_id = params.require(:physical_id)
+ infra_id = params.require(:infra_id)
+ servertest_ids = params.require(:servertest_ids)
+ resource = Resource.where(infrastructure_id: infra_id).find_by(physical_id: physical_id)
+ if selected_auto_generated = servertest_ids.include?('-1')
+ servertest_ids.delete('-1')
+ end
+
+ begin
+ resp = ServertestJob.perform_now(
+ physical_id, infra_id, current_user.id,
+ servertest_ids: servertest_ids, auto_generated: selected_auto_generated
+ )
+ rescue => ex
+ # serverspec が正常に実行されなかったとき
+ render text: ex.message, status: 500 and return
+ end
+
+ case resp[:status_text]
+ when 'success'
+ render_msg = I18n.t('servertests.msg.success', physical_id: physical_id)
+ when 'pending'
+ render_msg = I18n.t('servertests.msg.pending', physical_id: physical_id, pending_specs: resp[:short_msg])
+ when 'failed'
+ render_msg = I18n.t('servertests.msg.failure', physical_id: physical_id, failure_specs: resp[:short_msg])
+ end
+
+ ServertestResult.create(
+ resource_id: resource.id,
+ status: resp[:status_text],
+ message: resp[:message],
+ servertest_ids: servertest_ids
+ )
+ render text: render_msg, status: 200 and return
+ end
+
+
+ # Generate serverspec to connect to RDS instance
+ # PUT /servertests/create_for_rds
+ def create_for_rds
+ infra_id = params.require(:infra_id)
+ physical_id = params.require(:physical_id)
+ username = params.require(:username)
+ password = params.require(:password)
+ database = params[:database]
+ database = nil if database.blank?
+
+ infra = Infrastructure.find(infra_id)
+ rds = RDS.new(infra, physical_id)
+
+ Servertest.create_rds(rds, username, password, infra_id, database)
+
+ render text: I18n.t('servertests.msg.generated'), status: 201 and return
+ end
+
+ # POST /servertests/schedule
+ def schedule
+ physical_id = params.require(:physical_id)
+ infra_id = params.require(:infra_id)
+ schedule = params.require(:schedule).permit(:enabled, :frequency, :day_of_week, :time)
+
+ ss = ServertestSchedule.find_by(physical_id: physical_id)
+ ss.update_attributes!(schedule)
+
+ if ss.enabled?
+ PeriodicServerspecJob.set(
+ wait_until: ss.next_run
+ ).perform_later(physical_id, infra_id, current_user.id)
+ end
+
+ render text: I18n.t('schedules.msg.serverspec_updated'), status: 200 and return
+ end
+
+
+ private
+
+ def set_servertest
+ @servertest = Servertest.find(params.require(:id))
+ end
+
+ def global_servertest_params
+ params.require(:servertest).permit(:name, :description, :value, :infrastructure_id, :category)
+ end
+
+ def have_infra?
+ return params[:infra_id] || params[:infrastructure_id] || params[:serverspec][:infrastructure_id]
+ rescue
+ return nil
+ end
+end
diff --git a/app/controllers/snapshots_controller.rb b/app/controllers/snapshots_controller.rb
index 81e3c9c9f..4073f17e2 100644
--- a/app/controllers/snapshots_controller.rb
+++ b/app/controllers/snapshots_controller.rb
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2013-2016 SKYARCH NETWORKS INC.
+# Copyright (c) 2013-2017 SKYARCH NETWORKS INC.
#
# This software is released under the MIT License.
#
diff --git a/app/controllers/template_builder_controller.rb b/app/controllers/template_builder_controller.rb
index bdfbe6b25..f7ab16b77 100644
--- a/app/controllers/template_builder_controller.rb
+++ b/app/controllers/template_builder_controller.rb
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2013-2016 SKYARCH NETWORKS INC.
+# Copyright (c) 2013-2017 SKYARCH NETWORKS INC.
#
# This software is released under the MIT License.
#
diff --git a/app/controllers/users/sessions_controller.rb b/app/controllers/users/sessions_controller.rb
index aa3d932c5..dba75e655 100644
--- a/app/controllers/users/sessions_controller.rb
+++ b/app/controllers/users/sessions_controller.rb
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2013-2016 SKYARCH NETWORKS INC.
+# Copyright (c) 2013-2017 SKYARCH NETWORKS INC.
#
# This software is released under the MIT License.
#
diff --git a/app/controllers/users_admin_controller.rb b/app/controllers/users_admin_controller.rb
index 6190ca8d1..f45724dc7 100644
--- a/app/controllers/users_admin_controller.rb
+++ b/app/controllers/users_admin_controller.rb
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2013-2016 SKYARCH NETWORKS INC.
+# Copyright (c) 2013-2017 SKYARCH NETWORKS INC.
#
# This software is released under the MIT License.
#
diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb
index fd9a29fee..bf26c8fd2 100644
--- a/app/helpers/application_helper.rb
+++ b/app/helpers/application_helper.rb
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2013-2016 SKYARCH NETWORKS INC.
+# Copyright (c) 2013-2017 SKYARCH NETWORKS INC.
#
# This software is released under the MIT License.
#
@@ -29,6 +29,10 @@ def gravatar(email)
def bootstrap_flash(options = {})
flash_messages = []
+ if Rails.cache.exist?(:err)
+ flash[:danger] = Rails.cache.read(:err)
+ Rails.cache.delete(:err)
+ end
flash.each do |type, message|
# Skip empty messages, e.g. for devise messages set to nothing in a locale file.
next if message.blank?
diff --git a/app/helpers/cf_templates_helper.rb b/app/helpers/cf_templates_helper.rb
index e62b38688..a6b86facd 100644
--- a/app/helpers/cf_templates_helper.rb
+++ b/app/helpers/cf_templates_helper.rb
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2013-2016 SKYARCH NETWORKS INC.
+# Copyright (c) 2013-2017 SKYARCH NETWORKS INC.
#
# This software is released under the MIT License.
#
diff --git a/app/helpers/clients_helper.rb b/app/helpers/clients_helper.rb
index 23938b4e9..fe02c149a 100644
--- a/app/helpers/clients_helper.rb
+++ b/app/helpers/clients_helper.rb
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2013-2016 SKYARCH NETWORKS INC.
+# Copyright (c) 2013-2017 SKYARCH NETWORKS INC.
#
# This software is released under the MIT License.
#
diff --git a/app/helpers/deploy_wizard_helper.rb b/app/helpers/deploy_wizard_helper.rb
index 484726a1c..c6ea19a32 100644
--- a/app/helpers/deploy_wizard_helper.rb
+++ b/app/helpers/deploy_wizard_helper.rb
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2013-2016 SKYARCH NETWORKS INC.
+# Copyright (c) 2013-2017 SKYARCH NETWORKS INC.
#
# This software is released under the MIT License.
#
diff --git a/app/helpers/dishes_helper.rb b/app/helpers/dishes_helper.rb
index a3e7b0d96..fa8e63f72 100644
--- a/app/helpers/dishes_helper.rb
+++ b/app/helpers/dishes_helper.rb
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2013-2016 SKYARCH NETWORKS INC.
+# Copyright (c) 2013-2017 SKYARCH NETWORKS INC.
#
# This software is released under the MIT License.
#
diff --git a/app/helpers/form_helper.rb b/app/helpers/form_helper.rb
index 7f239e565..1c1855d48 100644
--- a/app/helpers/form_helper.rb
+++ b/app/helpers/form_helper.rb
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2013-2016 SKYARCH NETWORKS INC.
+# Copyright (c) 2013-2017 SKYARCH NETWORKS INC.
#
# This software is released under the MIT License.
#
diff --git a/app/helpers/infrastructures_helper.rb b/app/helpers/infrastructures_helper.rb
index 9ca31da32..a4667254f 100644
--- a/app/helpers/infrastructures_helper.rb
+++ b/app/helpers/infrastructures_helper.rb
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2013-2016 SKYARCH NETWORKS INC.
+# Copyright (c) 2013-2017 SKYARCH NETWORKS INC.
#
# This software is released under the MIT License.
#
diff --git a/app/helpers/monitorings_helper.rb b/app/helpers/monitorings_helper.rb
index 83c0c33cb..fb402820c 100644
--- a/app/helpers/monitorings_helper.rb
+++ b/app/helpers/monitorings_helper.rb
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2013-2016 SKYARCH NETWORKS INC.
+# Copyright (c) 2013-2017 SKYARCH NETWORKS INC.
#
# This software is released under the MIT License.
#
diff --git a/app/helpers/nodes_helper.rb b/app/helpers/nodes_helper.rb
index c6dd7f3b4..625c298e3 100644
--- a/app/helpers/nodes_helper.rb
+++ b/app/helpers/nodes_helper.rb
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2013-2016 SKYARCH NETWORKS INC.
+# Copyright (c) 2013-2017 SKYARCH NETWORKS INC.
#
# This software is released under the MIT License.
#
diff --git a/app/helpers/notifications_helper.rb b/app/helpers/notifications_helper.rb
index 736d26f6f..e3fab9aa0 100644
--- a/app/helpers/notifications_helper.rb
+++ b/app/helpers/notifications_helper.rb
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2013-2016 SKYARCH NETWORKS INC.
+# Copyright (c) 2013-2017 SKYARCH NETWORKS INC.
#
# This software is released under the MIT License.
#
diff --git a/app/helpers/projects_helper.rb b/app/helpers/projects_helper.rb
index 1985762e8..4ec03e6fb 100644
--- a/app/helpers/projects_helper.rb
+++ b/app/helpers/projects_helper.rb
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2013-2016 SKYARCH NETWORKS INC.
+# Copyright (c) 2013-2017 SKYARCH NETWORKS INC.
#
# This software is released under the MIT License.
#
diff --git a/app/helpers/template_builders_helper.rb b/app/helpers/template_builders_helper.rb
index b9e503bce..16c5eae68 100644
--- a/app/helpers/template_builders_helper.rb
+++ b/app/helpers/template_builders_helper.rb
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2013-2016 SKYARCH NETWORKS INC.
+# Copyright (c) 2013-2017 SKYARCH NETWORKS INC.
#
# This software is released under the MIT License.
#
diff --git a/app/helpers/users_helper.rb b/app/helpers/users_helper.rb
index 451210788..c1b8bcc11 100644
--- a/app/helpers/users_helper.rb
+++ b/app/helpers/users_helper.rb
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2013-2016 SKYARCH NETWORKS INC.
+# Copyright (c) 2013-2017 SKYARCH NETWORKS INC.
#
# This software is released under the MIT License.
#
diff --git a/app/helpers/vue_helper.rb b/app/helpers/vue_helper.rb
index 3f60d537c..75ba393b8 100644
--- a/app/helpers/vue_helper.rb
+++ b/app/helpers/vue_helper.rb
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2013-2016 SKYARCH NETWORKS INC.
+# Copyright (c) 2013-2017 SKYARCH NETWORKS INC.
#
# This software is released under the MIT License.
#
diff --git a/app/jobs/delete_outdated_snapshots_job.rb b/app/jobs/delete_outdated_snapshots_job.rb
index 421b1897b..3dc13e0e1 100644
--- a/app/jobs/delete_outdated_snapshots_job.rb
+++ b/app/jobs/delete_outdated_snapshots_job.rb
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2013-2016 SKYARCH NETWORKS INC.
+# Copyright (c) 2013-2017 SKYARCH NETWORKS INC.
#
# This software is released under the MIT License.
#
diff --git a/app/jobs/operation_worker.rb b/app/jobs/operation_worker.rb
index da1a2c7f6..b17609ec9 100644
--- a/app/jobs/operation_worker.rb
+++ b/app/jobs/operation_worker.rb
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2013-2016 SKYARCH NETWORKS INC.
+# Copyright (c) 2013-2017 SKYARCH NETWORKS INC.
#
# This software is released under the MIT License.
#
diff --git a/app/jobs/periodic_serverspec_job.rb b/app/jobs/periodic_serverspec_job.rb
index 7011096cf..5c9d1dbde 100644
--- a/app/jobs/periodic_serverspec_job.rb
+++ b/app/jobs/periodic_serverspec_job.rb
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2013-2016 SKYARCH NETWORKS INC.
+# Copyright (c) 2013-2017 SKYARCH NETWORKS INC.
#
# This software is released under the MIT License.
#
diff --git a/app/jobs/periodic_yum_job.rb b/app/jobs/periodic_yum_job.rb
index 0ffa3d8c7..978feb6ba 100644
--- a/app/jobs/periodic_yum_job.rb
+++ b/app/jobs/periodic_yum_job.rb
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2013-2016 SKYARCH NETWORKS INC.
+# Copyright (c) 2013-2017 SKYARCH NETWORKS INC.
#
# This software is released under the MIT License.
#
diff --git a/app/jobs/reload_secrets_job.rb b/app/jobs/reload_secrets_job.rb
new file mode 100644
index 000000000..a24f89b03
--- /dev/null
+++ b/app/jobs/reload_secrets_job.rb
@@ -0,0 +1,18 @@
+#
+# Copyright (c) 2013-2016 SKYARCH NETWORKS INC.
+#
+# This software is released under the MIT License.
+#
+# http://opensource.org/licenses/mit-license.php
+#
+
+class ReloadSecretsJob < ActiveJob::Base
+ queue_as :default
+
+ # Ref: https://github.com/rails/rails/blob/634741d9721eb938c8bce38c109023178268e43d/railties/lib/rails/application.rb#L385
+ def perform
+ Rails.application.remove_instance_variable(:@secrets)
+ ensure
+ Rails.application.secrets
+ end
+end
diff --git a/app/jobs/server_state_worker.rb b/app/jobs/server_state_worker.rb
index f544163c5..f709929aa 100644
--- a/app/jobs/server_state_worker.rb
+++ b/app/jobs/server_state_worker.rb
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2013-2016 SKYARCH NETWORKS INC.
+# Copyright (c) 2013-2017 SKYARCH NETWORKS INC.
#
# This software is released under the MIT License.
#
diff --git a/app/jobs/serverspec_job.rb b/app/jobs/servertest_job.rb
similarity index 70%
rename from app/jobs/serverspec_job.rb
rename to app/jobs/servertest_job.rb
index 2d2dd3667..0ab6312e2 100644
--- a/app/jobs/serverspec_job.rb
+++ b/app/jobs/servertest_job.rb
@@ -1,12 +1,12 @@
#
-# Copyright (c) 2013-2016 SKYARCH NETWORKS INC.
+# Copyright (c) 2013-2017 SKYARCH NETWORKS INC.
#
# This software is released under the MIT License.
#
# http://opensource.org/licenses/mit-license.php
#
-class ServerspecJob < ActiveJob::Base
+class ServertestJob < ActiveJob::Base
queue_as :default
# Serverspec を実行し、結果をインフラログに書き出す。
@@ -14,26 +14,30 @@ class ServerspecJob < ActiveJob::Base
# @param [String] physical_id ID of EC2 Instance
# @param [Integer] infra_id
# @param [Integer] user_id このユーザーで Serverspec が実行される
- # @param [Array] serverspec_ids 指定されていなければ、Resource に紐付いた Serverspec を実行する。
+ # @param [Array] servertest_ids 指定されていなければ、Resource に紐付いた Serverspec を実行する。
# 指定されていれば、指定した Serverspec を実行する。
# @param [Boolean] auto_generated
- def perform(physical_id, infra_id, user_id, serverspec_ids: nil, auto_generated: false)
+ def perform(physical_id, infra_id, user_id, servertest_ids: nil, auto_generated: false, category: nil)
node = Node.new(physical_id)
- unless serverspec_ids
+ unless servertest_ids
infra = Infrastructure.find(infra_id)
resource = infra.resource(physical_id)
- serverspec_ids = resource.all_serverspec_ids
+ servertest_ids = resource.all_servertest_ids
end
@ws = WSConnector.new('notifications', User.find(user_id).ws_key)
- infra_logger_serverspec_start(physical_id, infra_id, user_id, auto_generated, serverspec_ids)
+ infra_logger_serverspec_start(physical_id, infra_id, user_id, auto_generated, servertest_ids)
begin
- resp = node.run_serverspec(infra_id, serverspec_ids, auto_generated)
+ resp = if category.nil?
+ node.run_serverspec(infra_id, servertest_ids, auto_generated)
+ else
+ node.run_awsspec(infra_id, servertest_ids, auto_generated)
+ end
rescue => ex
log = InfrastructureLog.create(
infrastructure_id: infra_id, user_id: user_id, status: false,
- details: "serverspec for #{physical_id} is failed. results: \n#{ex.message}"
+ details: "servertest for #{physical_id} is failed. results: \n#{ex.message}"
)
@ws.push_as_json({message: log.details, status: log.status, timestamp: Time.zone.now.to_s})
raise ex
@@ -41,21 +45,21 @@ def perform(physical_id, infra_id, user_id, serverspec_ids: nil, auto_generated:
case resp[:status_text]
when 'success'
- log_msg = "serverspec for #{physical_id} is successfully finished."
+ log_msg = "servertest for #{physical_id} is successfully finished."
when 'pending'
- log_msg = "serverspec for #{physical_id} is successfully finished. but have pending specs: \n#{resp[:message]}"
+ log_msg = "servertest for #{physical_id} is successfully finished. but have pending specs: \n#{resp[:message]}"
when 'failed'
- log_msg = "serverspec for #{physical_id} is failed. failure specs: \n#{resp[:message]}"
+ log_msg = "servertest for #{physical_id} is failed. failure specs: \n#{resp[:message]}"
end
log = InfrastructureLog.create(infrastructure_id: infra_id, user_id: user_id, details: log_msg, status: resp[:status])
@ws.push_as_json({message: log.details, status: log.status, timestamp: Time.zone.now.to_s})
- Resource.where(infrastructure_id: infra_id).find_by(physical_id: physical_id).serverspec_ids = serverspec_ids
+ Resource.where(infrastructure_id: infra_id).find_by(physical_id: physical_id).servertest_ids = servertest_ids
return resp
end
- def infra_logger_serverspec_start(physical_id, infra_id, user_id, auto_generated, serverspec_ids)
- selected_serverspecs = Serverspec.where(id: serverspec_ids)
+ def infra_logger_serverspec_start(physical_id, infra_id, user_id, auto_generated, servertest_ids)
+ selected_serverspecs = Servertest.where(id: servertest_ids, category: 1)
serverspec_names = []
serverspec_names << 'auto_generated' if auto_generated
diff --git a/app/jobs/snapshot_job.rb b/app/jobs/snapshot_job.rb
index 2dc05bc49..b1c88912f 100644
--- a/app/jobs/snapshot_job.rb
+++ b/app/jobs/snapshot_job.rb
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2013-2016 SKYARCH NETWORKS INC.
+# Copyright (c) 2013-2017 SKYARCH NETWORKS INC.
#
# This software is released under the MIT License.
#
diff --git a/app/jobs/yum_job.rb b/app/jobs/yum_job.rb
index f94d253ab..c4d0055e3 100644
--- a/app/jobs/yum_job.rb
+++ b/app/jobs/yum_job.rb
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2013-2016 SKYARCH NETWORKS INC.
+# Copyright (c) 2013-2017 SKYARCH NETWORKS INC.
#
# This software is released under the MIT License.
#
diff --git a/app/models/app_setting.rb b/app/models/app_setting.rb
index 80965e204..6beae0d54 100644
--- a/app/models/app_setting.rb
+++ b/app/models/app_setting.rb
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2013-2016 SKYARCH NETWORKS INC.
+# Copyright (c) 2013-2017 SKYARCH NETWORKS INC.
#
# This software is released under the MIT License.
#
@@ -40,7 +40,7 @@ def clear_dummy
# AppSetting.get 用のキャッシュを削除する。
# 設定を更新した場合などにする必要がある
def clear_cache
- Rails.cache.clear('app_setting')
+ Rails.cache.delete('app_setting')
end
def ec2_client(access_key, secret_access_key, region)
diff --git a/app/models/cf_template.rb b/app/models/cf_template.rb
index a9fb4b30c..a8f3c87ea 100644
--- a/app/models/cf_template.rb
+++ b/app/models/cf_template.rb
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2013-2016 SKYARCH NETWORKS INC.
+# Copyright (c) 2013-2017 SKYARCH NETWORKS INC.
#
# This software is released under the MIT License.
#
diff --git a/app/models/chef_api.rb b/app/models/chef_api.rb
index 5e1c667d7..63dcc25c0 100644
--- a/app/models/chef_api.rb
+++ b/app/models/chef_api.rb
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2013-2016 SKYARCH NETWORKS INC.
+# Copyright (c) 2013-2017 SKYARCH NETWORKS INC.
#
# This software is released under the MIT License.
#
@@ -19,7 +19,10 @@ class CookbookNotFound < NotFound; end
# TODO: Rails server をリスタートする必要がある
def setup
- @@ridley = ::Ridley.from_chef_config(File.expand_path("~/.chef/knife.rb"))
+ options = {
+ ssl: {verify: false} # disable SSL verification
+ }
+ @@ridley = ::Ridley.from_chef_config(File.expand_path("~/.chef/knife.rb"), options)
rescue => ex
Rails.logger.warn(ex)
end
diff --git a/app/models/chef_server/deployment.rb b/app/models/chef_server/deployment.rb
index ff648aa66..0cc881777 100644
--- a/app/models/chef_server/deployment.rb
+++ b/app/models/chef_server/deployment.rb
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2013-2016 SKYARCH NETWORKS INC.
+# Copyright (c) 2013-2017 SKYARCH NETWORKS INC.
#
# This software is released under the MIT License.
#
@@ -39,7 +39,7 @@ class Error < StandardError; end
class << self
# chef_serverを作成し、自身のインスタンスを返す。
# blockが与えられていれば、そのブロックに進捗状況を渡して実行する。
- def create(stack_name, region, keypair_name, keypair_value, &block)
+ def create(stack_name, region, keypair_name, keypair_value, params = {}, &block)
__yield :creating_infra, &block
prj = Project.for_chef_server
@@ -55,12 +55,14 @@ def create(stack_name, region, keypair_name, keypair_value, &block)
region: region
)
- stack = create_stack(infra, 'Chef Server', params: {
+ params.merge!(
InstanceType: 't2.small',
UserPemID: UserPemID,
OrgPemID: OrgPemID,
TrustedCertsPemID: TrustedCertsPemID,
- })
+ )
+
+ stack = create_stack(infra, 'Chef Server', params: params)
__yield :init_ec2, &block
stack.wait_resource_status('EC2Instance', 'CREATE_COMPLETE')
@@ -88,7 +90,7 @@ def create(stack_name, region, keypair_name, keypair_value, &block)
# XXX: こぴぺをやめてここじゃないとこにちゃんと定義する
- def create_zabbix(stack_name, region, keypair_name, keypair_value)
+ def create_zabbix(stack_name, region, keypair_name, keypair_value, params = {})
prj = Project.for_zabbix_server
infra = Infrastructure.create_with_ec2_private_key(
project: prj,
@@ -98,7 +100,7 @@ def create_zabbix(stack_name, region, keypair_name, keypair_value)
region: region
)
template = ERB::Builder.new('zabbix_server').build
- stack = create_stack(infra, 'Zabbix Server', template: template)
+ stack = create_stack(infra, 'Zabbix Server', params: params, template: template)
wait_creation(stack)
physical_id = stack.instances.first.physical_resource_id
diff --git a/app/models/client.rb b/app/models/client.rb
index c2470aeb0..d34536bc5 100644
--- a/app/models/client.rb
+++ b/app/models/client.rb
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2013-2016 SKYARCH NETWORKS INC.
+# Copyright (c) 2013-2017 SKYARCH NETWORKS INC.
#
# This software is released under the MIT License.
#
diff --git a/app/models/cloud_provider.rb b/app/models/cloud_provider.rb
index 3e6ec09a9..4442b463b 100644
--- a/app/models/cloud_provider.rb
+++ b/app/models/cloud_provider.rb
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2013-2016 SKYARCH NETWORKS INC.
+# Copyright (c) 2013-2017 SKYARCH NETWORKS INC.
#
# This software is released under the MIT License.
#
diff --git a/app/models/cloud_watch.rb b/app/models/cloud_watch.rb
index 698989691..c0f2c1eb8 100644
--- a/app/models/cloud_watch.rb
+++ b/app/models/cloud_watch.rb
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2013-2016 SKYARCH NETWORKS INC.
+# Copyright (c) 2013-2017 SKYARCH NETWORKS INC.
#
# This software is released under the MIT License.
#
diff --git a/app/models/concerns/cryptize.rb b/app/models/concerns/cryptize.rb
index 614640141..fa29a639b 100644
--- a/app/models/concerns/cryptize.rb
+++ b/app/models/concerns/cryptize.rb
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2013-2016 SKYARCH NETWORKS INC.
+# Copyright (c) 2013-2017 SKYARCH NETWORKS INC.
#
# This software is released under the MIT License.
#
@@ -10,15 +10,16 @@ module Concerns::Cryptize
# @param [Symbol] name is an attributes name.
def cryptize(name)
- c = crypter
+ # XXX: secrets を変更したときに正しく (en|de)crypt できる?
+ crypter = method(:crypter)
define_method(:"#{name}=") do |v|
- val = v.nil? ? v : c.encrypt_and_sign(v)
+ val = v.nil? ? v : crypter.call.encrypt_and_sign(v)
self[name] = val
end
define_method(name) do
v = self[name]
- v.nil? ? v : c.decrypt_and_verify(v)
+ v.nil? ? v : crypter.call.decrypt_and_verify(v)
end
end
diff --git a/app/models/database_manager.rb b/app/models/database_manager.rb
new file mode 100644
index 000000000..ec7665e82
--- /dev/null
+++ b/app/models/database_manager.rb
@@ -0,0 +1,81 @@
+#
+# Copyright (c) 2013-2016 SKYARCH NETWORKS INC.
+#
+# This software is released under the MIT License.
+#
+# http://opensource.org/licenses/mit-license.php
+#
+
+class DatabaseManager
+ SQLPATH = 'tmp/import.sql'.freeze
+ SECRETS = [:secret_key_base, :db_crypt_key].freeze
+ SUFFIX = {
+ 'development' => 'dev',
+ 'test' => 'test',
+ 'production' => 'prod',
+ }.freeze
+
+ class << self
+ def export_as_zip
+ dbname = ActiveRecord::Base.configurations[Rails.env]['database']
+ filename = "#{dbname}.sql"
+ path = Rails.root.join("tmp/#{filename}")
+
+ system('rake db:data:dump')
+
+ zipfile = Tempfile.open("skyhopper")
+ ::Zip::File.open(zipfile.path, ::Zip::File::CREATE) do |zip|
+ zip.add(filename, path)
+
+ Rails.application.secrets.each do |key, value|
+ next if value.nil?
+ zip.get_output_stream(key) { |io| io.write(value) }
+ end
+ end
+
+ FileUtils.rm(path)
+
+ zipfile
+ end
+
+ def import(sqlpath, secrets)
+ env = SUFFIX[Rails.env]
+ secrets.each do |key, value|
+ path = Rails.root.join('secrets', "#{key}-#{env}")
+ File.write(path, value)
+ end
+
+ ReloadSecretsJob.perform_now # runs in Rails process
+ ReloadSecretsJob.perform_later # runs in Sidekiq process
+
+ system("rake db:data:load[#{sqlpath}]")
+ Rails.cache.clear
+ end
+
+
+ def import_from_zip(path)
+ zip = ::Zip::File.open(path)
+ validate_zip!(zip)
+
+ FileUtils.rm(SQLPATH) if File.exist?(SQLPATH)
+ zip.glob('*.sql').first.extract(SQLPATH)
+ secrets = SECRETS.map { |name| [name, zip.read(name)] }.to_h
+ zip.close
+
+ import(SQLPATH, secrets)
+ end
+
+ def validate_zip_file!(path)
+ zip = ::Zip::File.open(path)
+ validate_zip!(zip)
+ end
+
+ private
+ def validate_zip!(zip)
+ SECRETS.each do |filename|
+ raise "#{filename} is not found in zip." unless zip.find_entry(filename)
+ end
+ raise 'SQL file is not found in zip.' if zip.glob('*.sql').empty?
+ end
+ end
+end
diff --git a/app/models/dish.rb b/app/models/dish.rb
index 7d58abc38..61cf50aea 100644
--- a/app/models/dish.rb
+++ b/app/models/dish.rb
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2013-2016 SKYARCH NETWORKS INC.
+# Copyright (c) 2013-2017 SKYARCH NETWORKS INC.
#
# This software is released under the MIT License.
#
@@ -9,8 +9,8 @@
class Dish < ActiveRecord::Base
belongs_to :project
has_many :resources
- has_many :dish_serverspecs
- has_many :serverspecs, through: :dish_serverspecs
+ has_many :dish_servertests
+ has_many :servertests, through: :dish_servertests
serialize :runlist
diff --git a/app/models/dish_serverspec.rb b/app/models/dish_servertest.rb
similarity index 53%
rename from app/models/dish_serverspec.rb
rename to app/models/dish_servertest.rb
index 99e607259..7338cd525 100644
--- a/app/models/dish_serverspec.rb
+++ b/app/models/dish_servertest.rb
@@ -1,12 +1,12 @@
#
-# Copyright (c) 2013-2016 SKYARCH NETWORKS INC.
+# Copyright (c) 2013-2017 SKYARCH NETWORKS INC.
#
# This software is released under the MIT License.
#
# http://opensource.org/licenses/mit-license.php
#
-class DishServerspec < ActiveRecord::Base
+class DishServertest < ActiveRecord::Base
belongs_to :dish, dependent: :destroy
- belongs_to :serverspec, dependent: :destroy
+ belongs_to :servertest, dependent: :destroy
end
diff --git a/app/models/ec2_instance.rb b/app/models/ec2_instance.rb
index 558b8482c..ff1d9d0b9 100644
--- a/app/models/ec2_instance.rb
+++ b/app/models/ec2_instance.rb
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2013-2016 SKYARCH NETWORKS INC.
+# Copyright (c) 2013-2017 SKYARCH NETWORKS INC.
#
# This software is released under the MIT License.
#
diff --git a/app/models/ec2_private_key.rb b/app/models/ec2_private_key.rb
index 995d473e0..83439df0d 100644
--- a/app/models/ec2_private_key.rb
+++ b/app/models/ec2_private_key.rb
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2013-2016 SKYARCH NETWORKS INC.
+# Copyright (c) 2013-2017 SKYARCH NETWORKS INC.
#
# This software is released under the MIT License.
#
diff --git a/app/models/elb.rb b/app/models/elb.rb
index 242595aac..8f6aa2172 100644
--- a/app/models/elb.rb
+++ b/app/models/elb.rb
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2013-2016 SKYARCH NETWORKS INC.
+# Copyright (c) 2013-2017 SKYARCH NETWORKS INC.
#
# This software is released under the MIT License.
#
diff --git a/app/models/infrastructure.rb b/app/models/infrastructure.rb
index 81a875d9e..d42c5bec2 100644
--- a/app/models/infrastructure.rb
+++ b/app/models/infrastructure.rb
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2013-2016 SKYARCH NETWORKS INC.
+# Copyright (c) 2013-2017 SKYARCH NETWORKS INC.
#
# This software is released under the MIT License.
#
@@ -14,7 +14,7 @@ class Infrastructure < ActiveRecord::Base
belongs_to :ec2_private_key, dependent: :delete
has_many :infrastructure_logs, dependent: :delete_all
- has_many :serverspecs, dependent: :delete_all
+ has_many :servertests, dependent: :delete_all
has_many :resources, dependent: :destroy
has_many :monitorings, dependent: :delete_all
has_many :master_monitorings, through: :monitorings
diff --git a/app/models/infrastructure_log.rb b/app/models/infrastructure_log.rb
index fc221dcc4..f7bf5912f 100644
--- a/app/models/infrastructure_log.rb
+++ b/app/models/infrastructure_log.rb
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2013-2016 SKYARCH NETWORKS INC.
+# Copyright (c) 2013-2017 SKYARCH NETWORKS INC.
#
# This software is released under the MIT License.
#
diff --git a/app/models/key_pair.rb b/app/models/key_pair.rb
index 778ed440d..b8e144c4a 100644
--- a/app/models/key_pair.rb
+++ b/app/models/key_pair.rb
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2013-2016 SKYARCH NETWORKS INC.
+# Copyright (c) 2013-2017 SKYARCH NETWORKS INC.
#
# This software is released under the MIT License.
#
diff --git a/app/models/maintenance_mode.rb b/app/models/maintenance_mode.rb
new file mode 100644
index 000000000..9b0ab5d51
--- /dev/null
+++ b/app/models/maintenance_mode.rb
@@ -0,0 +1,24 @@
+#
+# Copyright (c) 2013-2016 SKYARCH NETWORKS INC.
+#
+# This software is released under the MIT License.
+#
+# http://opensource.org/licenses/mit-license.php
+#
+
+module MaintenanceMode
+ module_function
+
+ def activate(settings = nil)
+ maint_file = Turnout::MaintenanceFile.default
+ maint_file.import(settings.stringify_keys) if settings.is_a?(Hash)
+ maint_file.write
+ Rails.logger.info("Maintenance mode has activated.\nReason: \"#{maint_file.reason}\"")
+ end
+
+ def deactivate
+ Turnout::MaintenanceFile.default.delete
+ Rails.logger.info('Maintenance mode has deactivated.')
+ end
+
+end
diff --git a/app/models/master_monitoring.rb b/app/models/master_monitoring.rb
index a1d1ff9c6..81fd1ad3b 100644
--- a/app/models/master_monitoring.rb
+++ b/app/models/master_monitoring.rb
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2013-2016 SKYARCH NETWORKS INC.
+# Copyright (c) 2013-2017 SKYARCH NETWORKS INC.
#
# This software is released under the MIT License.
#
diff --git a/app/models/monitoring.rb b/app/models/monitoring.rb
index 652718b16..2300be457 100644
--- a/app/models/monitoring.rb
+++ b/app/models/monitoring.rb
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2013-2016 SKYARCH NETWORKS INC.
+# Copyright (c) 2013-2017 SKYARCH NETWORKS INC.
#
# This software is released under the MIT License.
#
diff --git a/app/models/node.rb b/app/models/node.rb
index d84b3b032..143c94e90 100644
--- a/app/models/node.rb
+++ b/app/models/node.rb
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2013-2016 SKYARCH NETWORKS INC.
+# Copyright (c) 2013-2017 SKYARCH NETWORKS INC.
#
# This software is released under the MIT License.
#
@@ -150,13 +150,13 @@ def have_roles?(roles)
end
# serverspec_ids => ServerspecのidのArray
- def run_serverspec(infra_id, serverspec_ids, selected_auto_generated)
+ def run_serverspec(infra_id, servertest_ids, selected_auto_generated)
# get params
infra = Infrastructure.find(infra_id)
ec2key = infra.ec2_private_key
ec2key.output_temp(prefix: @name)
- raise ServerspecError, 'specs is empty' if serverspec_ids.empty? and ! selected_auto_generated
+ raise ServerspecError, 'specs is empty' if servertest_ids.empty? and ! selected_auto_generated
fqdn = infra.instance(@name).fqdn
@@ -164,8 +164,8 @@ def run_serverspec(infra_id, serverspec_ids, selected_auto_generated)
local_path = scp_specs(ec2key.path_temp, fqdn)
end
- run_spec_list_path = serverspec_ids.map do |spec|
- ::Serverspec.to_file(spec)
+ run_spec_list_path = servertest_ids.map do |spec|
+ ::Servertest.to_file(spec)
end
ruby_cmd = File.join(RbConfig::CONFIG['bindir'], RbConfig::CONFIG['ruby_install_name'])
@@ -187,36 +187,12 @@ def run_serverspec(infra_id, serverspec_ids, selected_auto_generated)
end
# create result
- result = JSON::parse(out, symbolize_names: true)
- result[:examples].each do |e|
- e[:exception].delete(:backtrace) if e[:exception]
- end
- result[:status] = result[:summary][:failure_count].zero?
- result[:status_text] =
- if result[:status]
- if result[:summary][:pending_count].zero?
- 'success'
- else
- 'pending'
- end
- else
- 'failed'
- end
-
+ result = generate_result(out)
+ Resource.find_by(physical_id: @name).status.servertest.update(value: result[:status_text])
- case result[:status_text]
- when 'pending'
- result[:message] = result[:examples].select{|x| x[:status] == 'pending'}.map{|x| x[:full_description]+"\n"+x[:command]+"\n"+x[:exception][:message]}.join("\n")
- result[:short_msg] = result[:examples].select{|x| x[:status] == 'failed'},map{|x| x[:full_description]}.join("\n")
- when 'failed'
- result[:message] = result[:examples].select{|x| x[:status] == 'failed'}.map{|x| x[:full_description]+"\n"+x[:command]+"\n"+x[:exception][:message]}.join("\n")
- result[:short_msg] = result[:examples].select{|x| x[:status] == 'failed'}.map{|x| x[:full_description]}.join("\n")
- end
-
- Resource.find_by(physical_id: @name).status.serverspec.update(value: result[:status_text])
return result
rescue => ex
- Resource.find_by(physical_id: @name).status.serverspec.failed!
+ Resource.find_by(physical_id: @name).status.servertest.failed!
raise ex
ensure
ec2key.close_temp
@@ -273,8 +249,8 @@ def scp_specs(sshkey_path, fqdn)
d['default']['serverspec-handler']['output_dir']
end
- Dir::mkdir(Serverspec::TmpDir) unless Dir::exist?(Serverspec::TmpDir)
- local_path = Dir::mktmpdir(nil, Serverspec::TmpDir)
+ Dir::mkdir(Servertest::TmpDir) unless Dir::exist?(Servertest::TmpDir)
+ local_path = Dir::mktmpdir(nil, Servertest::TmpDir)
Net::SCP.start(fqdn, @user, keys: sshkey_path) do |scp|
scp.download!(remote_path, local_path, recursive: true)
@@ -312,7 +288,6 @@ def exec_knife_ssh(command, infra)
Open3.popen3(cmd) do |_stdin, stdout, stderr, w|
while line = stdout.gets
- line.gsub!(/\x1b[^m]*m/, '') # remove ANSI escape
line.chomp!
yield line
@@ -337,7 +312,6 @@ def exec_knife_winrm(command, infra)
Open3.popen3(cmd) do |_stdin, stdout, stderr, w|
while line = stdout.gets
- line.gsub!(/\x1b[^m]*m/, '') # remove ANSI escape
line.chomp!
yield line
@@ -352,5 +326,35 @@ def exec_knife_winrm(command, infra)
# ec2key.close_temp
end
+ def generate_result(out)
+ result = JSON::parse(out, symbolize_names: true)
+ result[:examples].each do |e|
+ e[:exception].delete(:backtrace) if e[:exception]
+ end
+ result[:status] = result[:summary][:failure_count].zero?
+ result[:status_text] =
+ if result[:status]
+ if result[:summary][:pending_count].zero?
+ 'success'
+ else
+ 'pending'
+ end
+ else
+ 'failed'
+ end
+
+
+ case result[:status_text]
+ when 'pending'
+ result[:message] = result[:examples].select{|x| x[:status] == 'pending'}.map{|x| x[:full_description]+"\n"+x[:command]+"\n"+x[:exception][:message]}.join("\n")
+ result[:short_msg] = result[:examples].select{|x| x[:status] == 'failed'},map{|x| x[:full_description]}.join("\n")
+ when 'failed'
+ result[:message] = result[:examples].select{|x| x[:status] == 'failed'}.map{|x| x[:full_description]+"\n"+x[:command]+"\n"+x[:exception][:message]}.join("\n")
+ result[:short_msg] = result[:examples].select{|x| x[:status] == 'failed'}.map{|x| x[:full_description]}.join("\n")
+ end
+
+ return result
+ end
+
end
diff --git a/app/models/node/attribute.rb b/app/models/node/attribute.rb
index f87fcd30a..a61950615 100644
--- a/app/models/node/attribute.rb
+++ b/app/models/node/attribute.rb
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2013-2016 SKYARCH NETWORKS INC.
+# Copyright (c) 2013-2017 SKYARCH NETWORKS INC.
#
# This software is released under the MIT License.
#
diff --git a/app/models/operation_duration.rb b/app/models/operation_duration.rb
index 398146366..470c5323f 100644
--- a/app/models/operation_duration.rb
+++ b/app/models/operation_duration.rb
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2013-2016 SKYARCH NETWORKS INC.
+# Copyright (c) 2013-2017 SKYARCH NETWORKS INC.
#
# This software is released under the MIT License.
#
diff --git a/app/models/project.rb b/app/models/project.rb
index e68b01641..deb6e229c 100644
--- a/app/models/project.rb
+++ b/app/models/project.rb
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2013-2016 SKYARCH NETWORKS INC.
+# Copyright (c) 2013-2017 SKYARCH NETWORKS INC.
#
# This software is released under the MIT License.
#
diff --git a/app/models/project_parameter.rb b/app/models/project_parameter.rb
index c8596eb82..bfa52635c 100644
--- a/app/models/project_parameter.rb
+++ b/app/models/project_parameter.rb
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2013-2016 SKYARCH NETWORKS INC.
+# Copyright (c) 2013-2017 SKYARCH NETWORKS INC.
#
# This software is released under the MIT License.
#
diff --git a/app/models/rds.rb b/app/models/rds.rb
index 1d70da516..99482af9c 100644
--- a/app/models/rds.rb
+++ b/app/models/rds.rb
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2013-2016 SKYARCH NETWORKS INC.
+# Copyright (c) 2013-2017 SKYARCH NETWORKS INC.
#
# This software is released under the MIT License.
#
diff --git a/app/models/recurring_date.rb b/app/models/recurring_date.rb
index af5001b6c..2f0a161b7 100644
--- a/app/models/recurring_date.rb
+++ b/app/models/recurring_date.rb
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2013-2016 SKYARCH NETWORKS INC.
+# Copyright (c) 2013-2017 SKYARCH NETWORKS INC.
#
# This software is released under the MIT License.
#
diff --git a/app/models/resource.rb b/app/models/resource.rb
index bd730b416..933d56ce0 100644
--- a/app/models/resource.rb
+++ b/app/models/resource.rb
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2013-2016 SKYARCH NETWORKS INC.
+# Copyright (c) 2013-2017 SKYARCH NETWORKS INC.
#
# This software is released under the MIT License.
#
@@ -10,13 +10,13 @@ class Resource < ActiveRecord::Base
belongs_to :infrastructure
belongs_to :dish
- has_many :resource_serverspecs
- has_many :serverspecs, through: :resource_serverspecs
+ has_many :resource_servertests
+ has_many :servertests, through: :resource_servertests
has_many :status, dependent: :delete_all, class_name: 'ResourceStatus'
- has_many :serverspec_results
+ has_many :servertest_results
has_many :operation_durations
- has_one :serverspec_schedule, dependent: :destroy, foreign_key: 'physical_id', primary_key: 'physical_id'
+ has_one :servertest_schedule, dependent: :destroy, foreign_key: 'physical_id', primary_key: 'physical_id'
validates :physical_id, uniqueness: true
@@ -30,13 +30,13 @@ class Resource < ActiveRecord::Base
# 自身の持つ Serverpsec と、自身が持つ Dish に紐づく Serverspec の和集合を返す。
# @XXX ActiveRecord::Relation を返したい。だけど arel の union が relation を返してくれなくてうまくいかない。
# @return [Array]
- def all_serverspecs
- self.serverspecs | (self.dish.try(:serverspecs) || [])
+ def all_servertests
+ self.servertests | (self.dish.try(:servertests) || [])
end
# XXX: パフォーマンスがきになる. all_serverspecs のほうが relation を返せば pluck が使える
- def all_serverspec_ids
- all_serverspecs.map{|x|x.id}
+ def all_servertest_ids
+ all_servertests.map{|x|x.id}
end
def initialize_statuses
@@ -52,9 +52,10 @@ def detach_chef
end
def detach_zabbix
- s = AppSetting.get
+ z = ZabbixServer.find(self.infrastructure.project.zabbix_server_id)
+
begin
- z = Zabbix.new(s.zabbix_user, s.zabbix_pass)
+ z = Zabbix.new(z.fqdn, z.username, z.password)
z.delete_hosts_by_resource(self.physical_id)
rescue => ex
return self if ex.message.include("physical id not found.")
diff --git a/app/models/resource_serverspec.rb b/app/models/resource_servertest.rb
similarity index 53%
rename from app/models/resource_serverspec.rb
rename to app/models/resource_servertest.rb
index 7e561a416..e94bfd6b1 100644
--- a/app/models/resource_serverspec.rb
+++ b/app/models/resource_servertest.rb
@@ -1,12 +1,12 @@
#
-# Copyright (c) 2013-2016 SKYARCH NETWORKS INC.
+# Copyright (c) 2013-2017 SKYARCH NETWORKS INC.
#
# This software is released under the MIT License.
#
# http://opensource.org/licenses/mit-license.php
#
-class ResourceServerspec < ActiveRecord::Base
+class ResourceServertest < ActiveRecord::Base
belongs_to :resource, dependent: :destroy
- belongs_to :serverspec, dependent: :destroy
+ belongs_to :servertest, dependent: :destroy
end
diff --git a/app/models/resource_status.rb b/app/models/resource_status.rb
index bc2c8124f..0b96bd513 100644
--- a/app/models/resource_status.rb
+++ b/app/models/resource_status.rb
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2013-2016 SKYARCH NETWORKS INC.
+# Copyright (c) 2013-2017 SKYARCH NETWORKS INC.
#
# This software is released under the MIT License.
#
@@ -10,7 +10,7 @@ class ResourceStatus < ActiveRecord::Base
belongs_to :resource
enum value: %i(success failed pending un_executed inprogress)
- enum kind: %i(serverspec cook yum)
+ enum kind: %i(servertest cook yum)
kinds.each do |k, v|
scope k, -> { find_by(kind: v) }
diff --git a/app/models/s3.rb b/app/models/s3.rb
index c48b300a4..e42d92cf8 100644
--- a/app/models/s3.rb
+++ b/app/models/s3.rb
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2013-2016 SKYARCH NETWORKS INC.
+# Copyright (c) 2013-2017 SKYARCH NETWORKS INC.
#
# This software is released under the MIT License.
#
@@ -18,7 +18,8 @@ def initialize(infra, bucket_name)
@s3 = ::AWS::S3.new(
access_key_id: access_key_id,
- secret_access_key: secret_access_key
+ secret_access_key: secret_access_key,
+ s3_endpoint: "s3-#{@region}.amazonaws.com"
)
@s3_bucket = @s3.buckets[bucket_name]
diff --git a/app/models/schedule.rb b/app/models/schedule.rb
index 29d8cf52b..a63cf115c 100644
--- a/app/models/schedule.rb
+++ b/app/models/schedule.rb
@@ -1,13 +1,11 @@
#
-# Copyright (c) 2013-2016 SKYARCH NETWORKS INC.
+# Copyright (c) 2013-2017 SKYARCH NETWORKS INC.
#
# This software is released under the MIT License.
#
# http://opensource.org/licenses/mit-license.php
#
-require 'sidekiq/api'
-
class Schedule < ActiveRecord::Base
enum frequency: %i[daily weekly intervals]
enum day_of_week: %i[sunday monday tuesday wednesday thursday friday saturday]
diff --git a/app/models/server_state.rb b/app/models/server_state.rb
index 6be190a59..2929383a1 100644
--- a/app/models/server_state.rb
+++ b/app/models/server_state.rb
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2013-2016 SKYARCH NETWORKS INC.
+# Copyright (c) 2013-2017 SKYARCH NETWORKS INC.
#
# This software is released under the MIT License.
#
diff --git a/app/models/serverspec_result.rb b/app/models/serverspec_result.rb
deleted file mode 100644
index 987efa5b4..000000000
--- a/app/models/serverspec_result.rb
+++ /dev/null
@@ -1,14 +0,0 @@
-#
-# Copyright (c) 2013-2016 SKYARCH NETWORKS INC.
-#
-# This software is released under the MIT License.
-#
-# http://opensource.org/licenses/mit-license.php
-#
-
-class ServerspecResult < ActiveRecord::Base
- belongs_to :resource
- has_many :serverspec_result_details
- has_many :serverspecs, through: :serverspec_result_details
- enum status: [:success, :pending, :failed]
-end
diff --git a/app/models/serverspec_result_detail.rb b/app/models/serverspec_result_detail.rb
deleted file mode 100644
index 8403a5223..000000000
--- a/app/models/serverspec_result_detail.rb
+++ /dev/null
@@ -1,12 +0,0 @@
-#
-# Copyright (c) 2013-2016 SKYARCH NETWORKS INC.
-#
-# This software is released under the MIT License.
-#
-# http://opensource.org/licenses/mit-license.php
-#
-
-class ServerspecResultDetail < ActiveRecord::Base
- belongs_to :serverspec
- belongs_to :serverspec_result
-end
diff --git a/app/models/serverspec.rb b/app/models/servertest.rb
similarity index 75%
rename from app/models/serverspec.rb
rename to app/models/servertest.rb
index 8e65ed66b..3942eeccf 100644
--- a/app/models/serverspec.rb
+++ b/app/models/servertest.rb
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2013-2016 SKYARCH NETWORKS INC.
+# Copyright (c) 2013-2017 SKYARCH NETWORKS INC.
#
# This software is released under the MIT License.
#
@@ -8,14 +8,15 @@
require 'fileutils'
-class Serverspec < ActiveRecord::Base
+class Servertest < ActiveRecord::Base
belongs_to :infrastructure
- has_many :dish_serverspecs
- has_many :dishes, through: :dish_serverspecs
- has_many :resource_serverspecs
- has_many :resources, through: :resource_serverspecs
- has_many :serverspec_results, through: :serverspec_result_details
+ has_many :dish_servertests
+ has_many :dishes, through: :dish_servertests
+ has_many :resource_servertests
+ has_many :resources, through: :resource_servertests
+ has_many :servertest_results, through: :servertest_result_details
+ enum category: [:awspec, :serverspec]
validates :value, ruby: true
@@ -31,6 +32,10 @@ def for_infra(infrastructure_id)
where(infrastructure_id: [nil, infrastructure_id]).to_a
end
+ def for_infra_serverspec(infrastructure_id)
+ where(infrastructure_id: [nil, infrastructure_id], category: 1).to_a
+ end
+
def global
where(infrastructure_id: nil)
end
diff --git a/app/models/servertest_result.rb b/app/models/servertest_result.rb
new file mode 100644
index 000000000..a599dc91b
--- /dev/null
+++ b/app/models/servertest_result.rb
@@ -0,0 +1,14 @@
+#
+# Copyright (c) 2013-2017 SKYARCH NETWORKS INC.
+#
+# This software is released under the MIT License.
+#
+# http://opensource.org/licenses/mit-license.php
+#
+
+class ServertestResult < ActiveRecord::Base
+ belongs_to :resource
+ has_many :servertest_result_details
+ has_many :servertests, through: :servertest_result_details
+ enum status: [:success, :pending, :failed]
+end
diff --git a/app/models/servertest_result_detail.rb b/app/models/servertest_result_detail.rb
new file mode 100644
index 000000000..55d7ba1b4
--- /dev/null
+++ b/app/models/servertest_result_detail.rb
@@ -0,0 +1,12 @@
+#
+# Copyright (c) 2013-2017 SKYARCH NETWORKS INC.
+#
+# This software is released under the MIT License.
+#
+# http://opensource.org/licenses/mit-license.php
+#
+
+class ServertestResultDetail < ActiveRecord::Base
+ belongs_to :servertest
+ belongs_to :servertest_result
+end
diff --git a/app/models/serverspec_schedule.rb b/app/models/servertest_schedule.rb
similarity index 86%
rename from app/models/serverspec_schedule.rb
rename to app/models/servertest_schedule.rb
index 0a915308e..3d9db9283 100644
--- a/app/models/serverspec_schedule.rb
+++ b/app/models/servertest_schedule.rb
@@ -1,12 +1,12 @@
#
-# Copyright (c) 2013-2016 SKYARCH NETWORKS INC.
+# Copyright (c) 2013-2017 SKYARCH NETWORKS INC.
#
# This software is released under the MIT License.
#
# http://opensource.org/licenses/mit-license.php
#
-class ServerspecSchedule < Schedule
+class ServertestSchedule < Schedule
belongs_to :resource, foreign_key: 'physical_id', primary_key: 'physical_id'
before_update :delete_enqueued_jobs
diff --git a/app/models/snapshot.rb b/app/models/snapshot.rb
index b09549fc4..0822900d2 100644
--- a/app/models/snapshot.rb
+++ b/app/models/snapshot.rb
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2013-2016 SKYARCH NETWORKS INC.
+# Copyright (c) 2013-2017 SKYARCH NETWORKS INC.
#
# This software is released under the MIT License.
#
diff --git a/app/models/snapshot_schedule.rb b/app/models/snapshot_schedule.rb
index d77aa01f6..820b05dd8 100644
--- a/app/models/snapshot_schedule.rb
+++ b/app/models/snapshot_schedule.rb
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2013-2016 SKYARCH NETWORKS INC.
+# Copyright (c) 2013-2017 SKYARCH NETWORKS INC.
#
# This software is released under the MIT License.
#
diff --git a/app/models/stack.rb b/app/models/stack.rb
index a7175b422..a55c3a436 100644
--- a/app/models/stack.rb
+++ b/app/models/stack.rb
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2013-2016 SKYARCH NETWORKS INC.
+# Copyright (c) 2013-2017 SKYARCH NETWORKS INC.
#
# This software is released under the MIT License.
#
diff --git a/app/models/template_builder.rb b/app/models/template_builder.rb
index dde889cd2..98152db59 100644
--- a/app/models/template_builder.rb
+++ b/app/models/template_builder.rb
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2013-2016 SKYARCH NETWORKS INC.
+# Copyright (c) 2013-2017 SKYARCH NETWORKS INC.
#
# This software is released under the MIT License.
#
diff --git a/app/models/template_builder/output.rb b/app/models/template_builder/output.rb
index 4b8380bf7..c6c2fbbf1 100644
--- a/app/models/template_builder/output.rb
+++ b/app/models/template_builder/output.rb
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2013-2016 SKYARCH NETWORKS INC.
+# Copyright (c) 2013-2017 SKYARCH NETWORKS INC.
#
# This software is released under the MIT License.
#
diff --git a/app/models/template_builder/parameter.rb b/app/models/template_builder/parameter.rb
index be1a985b2..e9f2365c6 100644
--- a/app/models/template_builder/parameter.rb
+++ b/app/models/template_builder/parameter.rb
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2013-2016 SKYARCH NETWORKS INC.
+# Copyright (c) 2013-2017 SKYARCH NETWORKS INC.
#
# This software is released under the MIT License.
#
diff --git a/app/models/template_builder/property.rb b/app/models/template_builder/property.rb
index 4cfa320fe..3c956da63 100644
--- a/app/models/template_builder/property.rb
+++ b/app/models/template_builder/property.rb
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2013-2016 SKYARCH NETWORKS INC.
+# Copyright (c) 2013-2017 SKYARCH NETWORKS INC.
#
# This software is released under the MIT License.
#
diff --git a/app/models/template_builder/resource.rb b/app/models/template_builder/resource.rb
index 0ccd2bf57..3aef94ce7 100644
--- a/app/models/template_builder/resource.rb
+++ b/app/models/template_builder/resource.rb
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2013-2016 SKYARCH NETWORKS INC.
+# Copyright (c) 2013-2017 SKYARCH NETWORKS INC.
#
# This software is released under the MIT License.
#
diff --git a/app/models/template_builder/resource/ec2.rb b/app/models/template_builder/resource/ec2.rb
index 8d58805b2..985565f2d 100644
--- a/app/models/template_builder/resource/ec2.rb
+++ b/app/models/template_builder/resource/ec2.rb
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2013-2016 SKYARCH NETWORKS INC.
+# Copyright (c) 2013-2017 SKYARCH NETWORKS INC.
#
# This software is released under the MIT License.
#
diff --git a/app/models/template_builder/resource/ec2/eip.rb b/app/models/template_builder/resource/ec2/eip.rb
index f173b9902..466167318 100644
--- a/app/models/template_builder/resource/ec2/eip.rb
+++ b/app/models/template_builder/resource/ec2/eip.rb
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2013-2016 SKYARCH NETWORKS INC.
+# Copyright (c) 2013-2017 SKYARCH NETWORKS INC.
#
# This software is released under the MIT License.
#
diff --git a/app/models/template_builder/resource/ec2/instance.rb b/app/models/template_builder/resource/ec2/instance.rb
index 7733b125a..2b4e60618 100644
--- a/app/models/template_builder/resource/ec2/instance.rb
+++ b/app/models/template_builder/resource/ec2/instance.rb
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2013-2016 SKYARCH NETWORKS INC.
+# Copyright (c) 2013-2017 SKYARCH NETWORKS INC.
#
# This software is released under the MIT License.
#
diff --git a/app/models/template_builder/resource/ec2/security_group.rb b/app/models/template_builder/resource/ec2/security_group.rb
index a0bb69c9b..68690e0d3 100644
--- a/app/models/template_builder/resource/ec2/security_group.rb
+++ b/app/models/template_builder/resource/ec2/security_group.rb
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2013-2016 SKYARCH NETWORKS INC.
+# Copyright (c) 2013-2017 SKYARCH NETWORKS INC.
#
# This software is released under the MIT License.
#
diff --git a/app/models/template_builder/resource/ec2/vpc.rb b/app/models/template_builder/resource/ec2/vpc.rb
index ae1a7abf3..55b7ee0e2 100644
--- a/app/models/template_builder/resource/ec2/vpc.rb
+++ b/app/models/template_builder/resource/ec2/vpc.rb
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2013-2016 SKYARCH NETWORKS INC.
+# Copyright (c) 2013-2017 SKYARCH NETWORKS INC.
#
# This software is released under the MIT License.
#
diff --git a/app/models/template_builder/resource/rds.rb b/app/models/template_builder/resource/rds.rb
index 194c027de..d45b8fb08 100644
--- a/app/models/template_builder/resource/rds.rb
+++ b/app/models/template_builder/resource/rds.rb
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2013-2016 SKYARCH NETWORKS INC.
+# Copyright (c) 2013-2017 SKYARCH NETWORKS INC.
#
# This software is released under the MIT License.
#
diff --git a/app/models/template_builder/resource/rds/db_instance.rb b/app/models/template_builder/resource/rds/db_instance.rb
index 6f6510516..ecce7353c 100644
--- a/app/models/template_builder/resource/rds/db_instance.rb
+++ b/app/models/template_builder/resource/rds/db_instance.rb
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2013-2016 SKYARCH NETWORKS INC.
+# Copyright (c) 2013-2017 SKYARCH NETWORKS INC.
#
# This software is released under the MIT License.
#
diff --git a/app/models/template_builder/resource/s3/bucket.rb b/app/models/template_builder/resource/s3/bucket.rb
index 15f576d36..938bb7dff 100644
--- a/app/models/template_builder/resource/s3/bucket.rb
+++ b/app/models/template_builder/resource/s3/bucket.rb
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2013-2016 SKYARCH NETWORKS INC.
+# Copyright (c) 2013-2017 SKYARCH NETWORKS INC.
#
# This software is released under the MIT License.
#
diff --git a/app/models/user.rb b/app/models/user.rb
index aad4c7790..5f7a7811b 100644
--- a/app/models/user.rb
+++ b/app/models/user.rb
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2013-2016 SKYARCH NETWORKS INC.
+# Copyright (c) 2013-2017 SKYARCH NETWORKS INC.
#
# This software is released under the MIT License.
#
diff --git a/app/models/user_project.rb b/app/models/user_project.rb
index b14ba37aa..6525f2899 100644
--- a/app/models/user_project.rb
+++ b/app/models/user_project.rb
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2013-2016 SKYARCH NETWORKS INC.
+# Copyright (c) 2013-2017 SKYARCH NETWORKS INC.
#
# This software is released under the MIT License.
#
diff --git a/app/models/user_zabbix_server.rb b/app/models/user_zabbix_server.rb
index c9f5fcad0..d99e7d485 100644
--- a/app/models/user_zabbix_server.rb
+++ b/app/models/user_zabbix_server.rb
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2013-2016 SKYARCH NETWORKS INC.
+# Copyright (c) 2013-2017 SKYARCH NETWORKS INC.
#
# This software is released under the MIT License.
#
diff --git a/app/models/ws_connector.rb b/app/models/ws_connector.rb
index c7e16656c..fcb76f6cc 100644
--- a/app/models/ws_connector.rb
+++ b/app/models/ws_connector.rb
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2013-2016 SKYARCH NETWORKS INC.
+# Copyright (c) 2013-2017 SKYARCH NETWORKS INC.
#
# This software is released under the MIT License.
#
diff --git a/app/models/yum_schedule.rb b/app/models/yum_schedule.rb
index 818d607cf..2420a43fd 100644
--- a/app/models/yum_schedule.rb
+++ b/app/models/yum_schedule.rb
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2013-2016 SKYARCH NETWORKS INC.
+# Copyright (c) 2013-2017 SKYARCH NETWORKS INC.
#
# This software is released under the MIT License.
#
diff --git a/app/models/zabbix.rb b/app/models/zabbix.rb
index a61b28acb..49238fb8f 100644
--- a/app/models/zabbix.rb
+++ b/app/models/zabbix.rb
@@ -1,6 +1,6 @@
# -*- coding: utf-8 -*-
#
-# Copyright (c) 2013-2016 SKYARCH NETWORKS INC.
+# Copyright (c) 2013-2017 SKYARCH NETWORKS INC.
#
# This software is released under the MIT License.
#
diff --git a/app/policies/application_policy.rb b/app/policies/application_policy.rb
index 476d16ebc..ff5d762aa 100644
--- a/app/policies/application_policy.rb
+++ b/app/policies/application_policy.rb
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2013-2016 SKYARCH NETWORKS INC.
+# Copyright (c) 2013-2017 SKYARCH NETWORKS INC.
#
# This software is released under the MIT License.
#
diff --git a/app/policies/cf_template_policy.rb b/app/policies/cf_template_policy.rb
index e88e1e43b..155197abe 100644
--- a/app/policies/cf_template_policy.rb
+++ b/app/policies/cf_template_policy.rb
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2013-2016 SKYARCH NETWORKS INC.
+# Copyright (c) 2013-2017 SKYARCH NETWORKS INC.
#
# This software is released under the MIT License.
#
diff --git a/app/policies/client_policy.rb b/app/policies/client_policy.rb
index 77767b008..27da5ad71 100644
--- a/app/policies/client_policy.rb
+++ b/app/policies/client_policy.rb
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2013-2016 SKYARCH NETWORKS INC.
+# Copyright (c) 2013-2017 SKYARCH NETWORKS INC.
#
# This software is released under the MIT License.
#
diff --git a/spec/models/dish_serverspec_spec.rb b/app/policies/database_policy.rb
similarity index 65%
rename from spec/models/dish_serverspec_spec.rb
rename to app/policies/database_policy.rb
index ab6925a56..a3b82fd8c 100644
--- a/spec/models/dish_serverspec_spec.rb
+++ b/app/policies/database_policy.rb
@@ -6,7 +6,6 @@
# http://opensource.org/licenses/mit-license.php
#
-require_relative '../spec_helper'
-
-RSpec.describe DishServerspec, type: :model do
+class DatabasePolicy < ApplicationPolicy
+ master_admin :index?, :export?, :import?
end
diff --git a/app/policies/dish_policy.rb b/app/policies/dish_policy.rb
index aff5cccc2..ea6b64945 100644
--- a/app/policies/dish_policy.rb
+++ b/app/policies/dish_policy.rb
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2013-2016 SKYARCH NETWORKS INC.
+# Copyright (c) 2013-2017 SKYARCH NETWORKS INC.
#
# This software is released under the MIT License.
#
diff --git a/app/policies/ec2_instance_policy.rb b/app/policies/ec2_instance_policy.rb
index a87831874..d57fff685 100644
--- a/app/policies/ec2_instance_policy.rb
+++ b/app/policies/ec2_instance_policy.rb
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2013-2016 SKYARCH NETWORKS INC.
+# Copyright (c) 2013-2017 SKYARCH NETWORKS INC.
#
# This software is released under the MIT License.
#
diff --git a/app/policies/infrastructure_policy.rb b/app/policies/infrastructure_policy.rb
index 41f84123c..e82ed6d15 100644
--- a/app/policies/infrastructure_policy.rb
+++ b/app/policies/infrastructure_policy.rb
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2013-2016 SKYARCH NETWORKS INC.
+# Copyright (c) 2013-2017 SKYARCH NETWORKS INC.
#
# This software is released under the MIT License.
#
diff --git a/app/policies/key_pair_policy.rb b/app/policies/key_pair_policy.rb
index df2b6db87..c38188ab4 100644
--- a/app/policies/key_pair_policy.rb
+++ b/app/policies/key_pair_policy.rb
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2013-2016 SKYARCH NETWORKS INC.
+# Copyright (c) 2013-2017 SKYARCH NETWORKS INC.
#
# This software is released under the MIT License.
#
diff --git a/app/policies/monitoring_policy.rb b/app/policies/monitoring_policy.rb
index 8f2800840..ad62fc40a 100644
--- a/app/policies/monitoring_policy.rb
+++ b/app/policies/monitoring_policy.rb
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2013-2016 SKYARCH NETWORKS INC.
+# Copyright (c) 2013-2017 SKYARCH NETWORKS INC.
#
# This software is released under the MIT License.
#
diff --git a/app/policies/node_policy.rb b/app/policies/node_policy.rb
index 41d20bdf3..4c475c9d9 100644
--- a/app/policies/node_policy.rb
+++ b/app/policies/node_policy.rb
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2013-2016 SKYARCH NETWORKS INC.
+# Copyright (c) 2013-2017 SKYARCH NETWORKS INC.
#
# This software is released under the MIT License.
#
diff --git a/app/policies/project_parameter_policy.rb b/app/policies/project_parameter_policy.rb
index d9b72dc04..3c9570af9 100644
--- a/app/policies/project_parameter_policy.rb
+++ b/app/policies/project_parameter_policy.rb
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2013-2016 SKYARCH NETWORKS INC.
+# Copyright (c) 2013-2017 SKYARCH NETWORKS INC.
#
# This software is released under the MIT License.
#
diff --git a/app/policies/project_policy.rb b/app/policies/project_policy.rb
index aa9b40c1b..0340b1fc8 100644
--- a/app/policies/project_policy.rb
+++ b/app/policies/project_policy.rb
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2013-2016 SKYARCH NETWORKS INC.
+# Copyright (c) 2013-2017 SKYARCH NETWORKS INC.
#
# This software is released under the MIT License.
#
diff --git a/app/policies/serverspec_policy.rb b/app/policies/servertest_policy.rb
similarity index 65%
rename from app/policies/serverspec_policy.rb
rename to app/policies/servertest_policy.rb
index a13e76983..2c434e955 100644
--- a/app/policies/serverspec_policy.rb
+++ b/app/policies/servertest_policy.rb
@@ -1,12 +1,12 @@
#
-# Copyright (c) 2013-2016 SKYARCH NETWORKS INC.
+# Copyright (c) 2013-2017 SKYARCH NETWORKS INC.
#
# This software is released under the MIT License.
#
# http://opensource.org/licenses/mit-license.php
#
-class ServerspecPolicy < ApplicationPolicy
+class ServertestPolicy < ApplicationPolicy
%i[index? show?].each do |action|
define_method(action) do
if record.infrastructure
@@ -17,7 +17,7 @@ class ServerspecPolicy < ApplicationPolicy
end
end
- %i[new? update? create? edit? destroy? select? results? run? create_for_rds? schedule? generator?].each do |action|
+ %i[new? update? create? edit? generate_awspec? destroy? select? results? run_serverspec? create_for_rds? schedule? generator? awspec_generator?].each do |action|
define_method(action) do
if record.infrastructure
user.allow?(record.infrastructure) && user.admin?
diff --git a/app/policies/snapshot_policy.rb b/app/policies/snapshot_policy.rb
index 77dfeb6e5..58a66b434 100644
--- a/app/policies/snapshot_policy.rb
+++ b/app/policies/snapshot_policy.rb
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2013-2016 SKYARCH NETWORKS INC.
+# Copyright (c) 2013-2017 SKYARCH NETWORKS INC.
#
# This software is released under the MIT License.
#
diff --git a/app/policies/template_builder_policy.rb b/app/policies/template_builder_policy.rb
index ce5474f43..27a73d9a3 100644
--- a/app/policies/template_builder_policy.rb
+++ b/app/policies/template_builder_policy.rb
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2013-2016 SKYARCH NETWORKS INC.
+# Copyright (c) 2013-2017 SKYARCH NETWORKS INC.
#
# This software is released under the MIT License.
#
diff --git a/app/policies/user_policy.rb b/app/policies/user_policy.rb
index 5c8f2b59e..1ad49dd9d 100644
--- a/app/policies/user_policy.rb
+++ b/app/policies/user_policy.rb
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2013-2016 SKYARCH NETWORKS INC.
+# Copyright (c) 2013-2017 SKYARCH NETWORKS INC.
#
# This software is released under the MIT License.
#
diff --git a/app/policies/zabbix_server_policy.rb b/app/policies/zabbix_server_policy.rb
index c2a85f246..21cf11590 100644
--- a/app/policies/zabbix_server_policy.rb
+++ b/app/policies/zabbix_server_policy.rb
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2013-2016 SKYARCH NETWORKS INC.
+# Copyright (c) 2013-2017 SKYARCH NETWORKS INC.
#
# This software is released under the MIT License.
#
diff --git a/app/validators/json_validator.rb b/app/validators/json_validator.rb
index a650b458d..1827dd28e 100644
--- a/app/validators/json_validator.rb
+++ b/app/validators/json_validator.rb
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2013-2016 SKYARCH NETWORKS INC.
+# Copyright (c) 2013-2017 SKYARCH NETWORKS INC.
#
# This software is released under the MIT License.
#
diff --git a/app/validators/project_code_validator.rb b/app/validators/project_code_validator.rb
index 0f5d40b5c..c49176a2f 100644
--- a/app/validators/project_code_validator.rb
+++ b/app/validators/project_code_validator.rb
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2013-2016 SKYARCH NETWORKS INC.
+# Copyright (c) 2013-2017 SKYARCH NETWORKS INC.
#
# This software is released under the MIT License.
#
diff --git a/app/validators/rsa_validator.rb b/app/validators/rsa_validator.rb
index 74f1873eb..1c0f88f12 100644
--- a/app/validators/rsa_validator.rb
+++ b/app/validators/rsa_validator.rb
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2013-2016 SKYARCH NETWORKS INC.
+# Copyright (c) 2013-2017 SKYARCH NETWORKS INC.
#
# This software is released under the MIT License.
#
diff --git a/app/validators/ruby_validator.rb b/app/validators/ruby_validator.rb
index 651b184d7..a24f61f21 100644
--- a/app/validators/ruby_validator.rb
+++ b/app/validators/ruby_validator.rb
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2013-2016 SKYARCH NETWORKS INC.
+# Copyright (c) 2013-2017 SKYARCH NETWORKS INC.
#
# This software is released under the MIT License.
#
diff --git a/app/validators/zabbix_server_fqdn_validator.rb b/app/validators/zabbix_server_fqdn_validator.rb
index 5778a67a5..6337e9623 100644
--- a/app/validators/zabbix_server_fqdn_validator.rb
+++ b/app/validators/zabbix_server_fqdn_validator.rb
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2013-2016 SKYARCH NETWORKS INC.
+# Copyright (c) 2013-2017 SKYARCH NETWORKS INC.
#
# This software is released under the MIT License.
#
diff --git a/app/views/app_settings/_panel_content_system.html.erb b/app/views/app_settings/_panel_content_system.html.erb
index d8c8baa84..fd3403687 100644
--- a/app/views/app_settings/_panel_content_system.html.erb
+++ b/app/views/app_settings/_panel_content_system.html.erb
@@ -92,6 +92,29 @@
+
+
+
+
+
+
+
+
diff --git a/app/views/app_settings/db.html.erb b/app/views/app_settings/db.html.erb
deleted file mode 100644
index 1f8c8e0c9..000000000
--- a/app/views/app_settings/db.html.erb
+++ /dev/null
@@ -1,23 +0,0 @@
-<% provide(:title, t('infrastructures.database')) %>
-
-
-
diff --git a/app/views/app_settings/show.html.erb b/app/views/app_settings/show.html.erb
index 443c793ef..ab398a9e6 100644
--- a/app/views/app_settings/show.html.erb
+++ b/app/views/app_settings/show.html.erb
@@ -10,7 +10,10 @@
<%= I18n.t("app_settings.title.setup") %>
-
+
<%= render partial: 'panel_content_system' %>
@@ -23,3 +26,5 @@
+
+<%= render partial: 'databases/modal_import' %>
diff --git a/app/views/databases/_modal_export.html.erb b/app/views/databases/_modal_export.html.erb
new file mode 100644
index 000000000..8f770b844
--- /dev/null
+++ b/app/views/databases/_modal_export.html.erb
@@ -0,0 +1,36 @@
+
+
+
+
+
+
+
+
+
Info
+
+
+
<%= t('databases.msg.db_export')%>
+
+ - <%= t('databases.msg.env', {env: Rails.env.capitalize}) %>
+ - <%= t('databases.msg.secret')%>
+ - <%= t('databases.msg.db_key')%>
+
+
+
+
+
+
+
+
diff --git a/app/views/databases/_modal_import.html.erb b/app/views/databases/_modal_import.html.erb
new file mode 100644
index 000000000..d117346cc
--- /dev/null
+++ b/app/views/databases/_modal_import.html.erb
@@ -0,0 +1,55 @@
+
+
+
+
+
+
+
+
Warning
+
+ <% if AppSetting.set? %>
+ <%= t('databases.msg.db_import_warning') %>
+ <% else %>
+ <%= t('databases.msg.db_import_intro') %>
+ <% end %>
+
+
+
+
+
+
Info
+
+
+
<%= t('databases.msg.db_import')%>
+
+ - <%= t('databases.msg.env', {env: Rails.env.capitalize}) %>
+ - <%= t('databases.msg.secret')%>
+ - <%= t('databases.msg.db_key')%>
+
+
+
+
+
+
+
+
diff --git a/app/views/databases/show.html.erb b/app/views/databases/show.html.erb
new file mode 100644
index 000000000..314671b60
--- /dev/null
+++ b/app/views/databases/show.html.erb
@@ -0,0 +1,25 @@
+<% provide(:title, t('infrastructures.database')) %>
+
+
+
+
+
+
<%= t('databases.db_management') %>
+
+
+ <% if app_setting_is_set %>
+
+ <% end %>
+
+
+
+
+ <%= render 'modal_export' if app_setting_is_set %>
+ <%= render 'modal_import' %>
+
diff --git a/app/views/infrastructures/_show.html.erb b/app/views/infrastructures/_show.html.erb
index 283458b83..c2cba8e50 100644
--- a/app/views/infrastructures/_show.html.erb
+++ b/app/views/infrastructures/_show.html.erb
@@ -31,7 +31,7 @@
- Operations <%= fa 'caret-down' %>
+ <%= t 'infrastructures.operations' %> <%= fa 'caret-down' %>