mcrain 0.7.3 → 0.8.4

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: e81bfac8bb58900a70df34d2c27e79ad600e2969
4
- data.tar.gz: c63154c3050a2e0307f1b872a09ef4c36a9dd946
2
+ SHA256:
3
+ metadata.gz: 339765a35beeab2ffad8a971e16f3cc8e21460374e5b663f87c2d6d455d12a44
4
+ data.tar.gz: ddb34c0413484a816e2c65b2720de44aea4a89f14f3752df1b3caea5f8f15c84
5
5
  SHA512:
6
- metadata.gz: bef8b1dafdcbdb38bee4e91c01a0aa7b3a63662894a1c4eca270a45331cb479f7b4d4ed49bc37a0ed5d16f82b8e26640b97df99d77f4a8479b5fa544fdf32dc7
7
- data.tar.gz: fa41ced5e00303e01899172f3ef225aca69569703a3f524d630315010726e73075404e32b0b087f38a96df8e0db453066042524ef3a8ce773cdace9b1874ffc1
6
+ metadata.gz: 7cf9ebd19c312d03d73f02e952761ea81b4a28863ef9962465e5b7ff1144e75a46b510376f91599a36a54aafc3e6432d82fae211f7240800eeca6aa2b6d854a8
7
+ data.tar.gz: 5165fd35e975cf2017c137eb660ab14f986f9c84278c058abd662abfa4b16a269e136fb0a6e1aba89ac4b1bbd2b60b6bc3600189366793f0524cbda3b2e47282
@@ -0,0 +1,58 @@
1
+ pipeline {
2
+ agent any
3
+ stages {
4
+ stage("test") {
5
+ agent { label "unittest" }
6
+ environment {
7
+ PARALLEL_TEST_PROCESSORS = "1"
8
+ BUNDLE_DISABLE_EXEC_LOAD = "1"
9
+ DOCKER_HOST = "tcp://127.0.0.1:2375"
10
+ }
11
+ steps {
12
+ sh '''#!/bin/bash -l
13
+ set -xe
14
+ export -p
15
+ gem env
16
+ bundle check || bundle install --jobs=4 --path=vendor/bundle
17
+ bundle exec mcrain pull all
18
+ bundle exec rake parallel:spec
19
+ '''
20
+ }
21
+ }
22
+ }
23
+ post {
24
+ changed {
25
+ slackNotify(currentBuild.currentResult)
26
+ }
27
+ aborted {
28
+ slackNotify("ABORTED")
29
+ }
30
+ }
31
+ }
32
+
33
+
34
+ def slackNotify(result){
35
+ // https://github.com/jenkinsci/slack-plugin/issues/327
36
+ def durationString = currentBuild.durationString.replace(' and counting', '')
37
+ def notificationMessage = {resultString ->
38
+ "${env.JOB_NAME} - ${currentBuild.displayName} ${resultString} after ${durationString} (<${env.RUN_DISPLAY_URL}|Open>)"
39
+ }
40
+ switch(result){
41
+ case "SUCCESS":
42
+ slackSend color: 'good', message: notificationMessage("Back to normal")
43
+ break
44
+ case "FAILURE":
45
+ slackSend color: 'danger', message: notificationMessage("Failure")
46
+ break
47
+ case "UNSTABLE":
48
+ slackSend color: 'danger', message: notificationMessage("Unstable")
49
+ break
50
+ case "ABORTED":
51
+ slackSend color: 'warning', message: notificationMessage("Aborted")
52
+ break
53
+ default:
54
+ slackSend color: 'warning', message: notificationMessage("Unknown")
55
+ }
56
+ }
57
+
58
+ /* vim:set ft=groovy: */
data/README.md CHANGED
@@ -72,6 +72,38 @@ HBase | N/A | `gem 'hbase-jruby'`
72
72
 
73
73
  ## Usage
74
74
 
75
+ ### configure images
76
+
77
+ ```ruby
78
+ Mcrain.configure do |config|
79
+ config.images[:mysql] = "mysql:5.6"
80
+ config.images[:redis] = "redis:3.2-alpine"
81
+ # config.images[:rabbitmq] = ...
82
+ # config.images[:riak] = ...
83
+ # config.images[:hbase] = ...
84
+ end
85
+ ```
86
+
87
+ Or put `.mcrain.yml` file with following content
88
+
89
+ ```yaml
90
+ ---
91
+ images:
92
+ mysql: "mysql:5.6"
93
+ redis: "redis:3.2-alpine"
94
+ # rabbitmq: ...
95
+ # riak: ...
96
+ # hbase: ...
97
+ ```
98
+
99
+ and load it by `Mcrain.load_config`:
100
+
101
+ ```ruby
102
+ Mcrain.load_config "/path/to/.mcrain.yml"
103
+ ```
104
+
105
+ `mcrain` command accepts `-c` (`--config`) option to configure images by yaml file, and its default is `.mcrain.yml`.
106
+
75
107
  ### redis in code
76
108
 
77
109
  ```ruby
data/exe/mcrain CHANGED
@@ -2,12 +2,16 @@
2
2
  # coding: utf-8
3
3
 
4
4
  require "mcrain"
5
+ require "optparse"
5
6
 
6
- action, service, *args = *ARGV
7
- verbose = ARGV.include?('-V') || ARGV.include?('--verbose')
8
- if action.nil? || service.nil?
9
- $stderr.puts(<<MESSAGE)
10
- #{$PROGRAM_NAME} <action> <service> [n] [-v or --verbose]
7
+ opts = {
8
+ verbose: false,
9
+ config_file: ".mcrain.yml"
10
+ }
11
+
12
+ ARGV.options do |q|
13
+ q.banner = <<MESSAGE
14
+ #{q.program_name} <action> <service> [n] [options]
11
15
  actions: start, stop or pull
12
16
 
13
17
  start:
@@ -19,16 +23,32 @@ if action.nil? || service.nil?
19
23
 
20
24
  pull:
21
25
  service: redis, rabbitmq, mysql, riak or all
26
+
27
+ [options]
22
28
  MESSAGE
29
+ q.on("-c", "--config=file", "Path to mcrain config file, default: .mcrain.yml"){ |v| opts[:config_file] = v }
30
+ q.on("-V", "--verbose"){ |v| opts[:verbose] = v }
31
+ q.parse!
32
+ end
23
33
 
34
+ action, service, *args = *ARGV
35
+ if action.nil? || service.nil?
36
+ $stderr.puts ARGV.options
24
37
  exit(1)
25
38
  end
26
39
 
27
- unless verbose
40
+ unless opts[:verbose]
28
41
  require 'logger'
29
42
  Mcrain.logger = Logger.new("/dev/null")
30
43
  end
31
44
 
45
+ if opts[:config_file] && File.exist?(opts[:config_file])
46
+ Mcrain.logger.debug "Loading config file from #{opts[:config_file]}"
47
+ Mcrain.load_config opts[:config_file]
48
+ else
49
+ Mcrain.logger.debug "Skipped to load config file"
50
+ end
51
+
32
52
  begin
33
53
  options = {}
34
54
  case service
@@ -64,7 +84,7 @@ begin
64
84
  exit(1)
65
85
  end
66
86
  when "pull" then
67
- services = (service == "all") ? Mcrain.images.keys : [service]
87
+ services = (service == "all") ? Mcrain.configuration.images.keys : [service]
68
88
  services.map(&:to_sym).map{|s| Mcrain.class_for(s)}.each(&:pull_image)
69
89
  else
70
90
  raise "Unknown action: #{action.inspect}"
@@ -72,7 +92,7 @@ begin
72
92
 
73
93
  rescue => e
74
94
  $stderr.puts "\e[31m[#{e.class}] #{e.message}\e[0m"
75
- $stderr.puts e.backtrace.join("\n ") if verbose
95
+ $stderr.puts e.backtrace.join("\n ") if opts[:verbose]
76
96
  exit(1)
77
97
  else
78
98
  $stderr.puts "\e[32mOK\e[0m"
@@ -31,18 +31,19 @@ module Mcrain
31
31
  class_names[name] = class_name
32
32
  end
33
33
 
34
- DEFAULT_IMAGES = {
35
- mysql: "mysql:5.5",
36
- redis: "redis:2.8.19",
37
- rabbitmq: "rabbitmq:3.4.4-management",
38
- riak: "hectcastro/riak",
39
- hbase: "nerdammer/hbase:latest",
40
- }.freeze
41
-
42
- def images
43
- @images ||= DEFAULT_IMAGES.dup
34
+ def load_config(file)
35
+ @configuration = Mcrain::Configuration.load_config(file)
36
+ end
37
+
38
+ attr_writer :configuration
39
+ def configuration
40
+ @configuration ||= Mcrain::Configuration.new
41
+ end
42
+
43
+ def configure
44
+ yield configuration
45
+ configuration
44
46
  end
45
- attr_writer :images
46
47
 
47
48
  attr_writer :logger
48
49
  def logger
@@ -73,6 +74,7 @@ module Mcrain
73
74
  end
74
75
 
75
76
  autoload :Base, 'mcrain/base'
77
+ autoload :Configuration, 'mcrain/configuration'
76
78
  autoload :DockerMachine, 'mcrain/docker_machine'
77
79
  autoload :ContainerController, 'mcrain/container_controller'
78
80
  autoload :ClientProvider, 'mcrain/client_provider'
@@ -75,7 +75,7 @@ module Mcrain
75
75
  # 実際にそのAPIを叩いてみて例外が起きないことを確認します。
76
76
  def wait
77
77
  logger.info("#{self.class.name}#wait STARTED")
78
- Timeout.timeout(30) do
78
+ Timeout.timeout(60) do
79
79
  begin
80
80
  wait_for_ready
81
81
  rescue => e
@@ -0,0 +1,33 @@
1
+ require "mcrain"
2
+ require "yaml"
3
+
4
+ module Mcrain
5
+ class Configuration
6
+ DEFAULT_IMAGES = {
7
+ mysql: "mysql:5.5",
8
+ redis: "redis:2.8",
9
+ rabbitmq: "rabbitmq:3.5-management",
10
+ riak: "hectcastro/riak",
11
+ hbase: "nerdammer/hbase:latest",
12
+ }.freeze
13
+
14
+ attr_accessor :images
15
+
16
+ def initialize
17
+ @images = DEFAULT_IMAGES.dup
18
+ end
19
+
20
+ class << self
21
+ def load_config(file)
22
+ loaded_config = YAML.load(File.read(file))
23
+ c = self.new
24
+ if loaded_config["images"]
25
+ loaded_config["images"].each do |k,v|
26
+ c.images[k.to_sym] = v
27
+ end
28
+ end
29
+ c
30
+ end
31
+ end
32
+ end
33
+ end
@@ -13,9 +13,9 @@ module Mcrain
13
13
  end
14
14
 
15
15
  def container_image
16
- @container_image ||= Mcrain.images[server_name]
16
+ Mcrain.configuration.images[server_name]
17
17
  end
18
- attr_writer :container_image
18
+
19
19
  attr_accessor :port
20
20
 
21
21
  def pull_image
@@ -33,7 +33,9 @@ module Mcrain
33
33
  class Node
34
34
  include ContainerController
35
35
 
36
- self.container_image = "hectcastro/riak"
36
+ def self.container_image
37
+ Mcrain.configuration.images[:riak]
38
+ end
37
39
 
38
40
  self.port = 8087 # protocol buffer
39
41
  # self.http_port = 8098 # HTTP
@@ -1,3 +1,3 @@
1
1
  module Mcrain
2
- VERSION = "0.7.3"
2
+ VERSION = "0.8.4"
3
3
  end
@@ -23,7 +23,7 @@ Gem::Specification.new do |spec|
23
23
  spec.add_runtime_dependency "net-scp", "~> 1.2.1"
24
24
  spec.add_runtime_dependency "activesupport", ">= 3.0"
25
25
 
26
- spec.add_development_dependency "bundler", "~> 1.9"
27
- spec.add_development_dependency "rake", "~> 10.0"
26
+ spec.add_development_dependency "bundler"
27
+ spec.add_development_dependency "rake"
28
28
  spec.add_development_dependency "rspec"
29
29
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mcrain
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.3
4
+ version: 0.8.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - akm
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2017-10-03 00:00:00.000000000 Z
11
+ date: 2020-09-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: logger_pipe
@@ -56,30 +56,30 @@ dependencies:
56
56
  name: bundler
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - "~>"
59
+ - - ">="
60
60
  - !ruby/object:Gem::Version
61
- version: '1.9'
61
+ version: '0'
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
- - - "~>"
66
+ - - ">="
67
67
  - !ruby/object:Gem::Version
68
- version: '1.9'
68
+ version: '0'
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: rake
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
- - - "~>"
73
+ - - ">="
74
74
  - !ruby/object:Gem::Version
75
- version: '10.0'
75
+ version: '0'
76
76
  type: :development
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
- - - "~>"
80
+ - - ">="
81
81
  - !ruby/object:Gem::Version
82
- version: '10.0'
82
+ version: '0'
83
83
  - !ruby/object:Gem::Dependency
84
84
  name: rspec
85
85
  requirement: !ruby/object:Gem::Requirement
@@ -108,15 +108,16 @@ files:
108
108
  - ".travis.yml"
109
109
  - CODE_OF_CONDUCT.md
110
110
  - Gemfile
111
+ - Jenkinsfile
111
112
  - README.md
112
113
  - Rakefile
113
114
  - bin/console
114
115
  - bin/setup
115
- - circle.yml
116
116
  - exe/mcrain
117
117
  - lib/mcrain.rb
118
118
  - lib/mcrain/base.rb
119
119
  - lib/mcrain/client_provider.rb
120
+ - lib/mcrain/configuration.rb
120
121
  - lib/mcrain/container_controller.rb
121
122
  - lib/mcrain/docker_machine.rb
122
123
  - lib/mcrain/hbase.rb
@@ -145,8 +146,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
145
146
  - !ruby/object:Gem::Version
146
147
  version: '0'
147
148
  requirements: []
148
- rubyforge_project:
149
- rubygems_version: 2.6.13
149
+ rubygems_version: 3.1.4
150
150
  signing_key:
151
151
  specification_version: 4
152
152
  summary: mcrain supports to run docker container for test.
data/circle.yml DELETED
@@ -1,44 +0,0 @@
1
- machine:
2
- ruby:
3
- version: 2.2.2
4
- services:
5
- - docker
6
-
7
- dependencies:
8
- cache_directories:
9
- - "~/docker"
10
- pre:
11
- - echo 'DOCKER_OPTS="$DOCKER_OPTS -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock"' | sudo tee -a /etc/default/docker
12
- - sudo service docker restart
13
- - gem install bundler --version '~> 1.10.5'
14
- - mkdir -p ~/docker
15
- - if [[ -e ~/docker/mysql.tar ]]; then
16
- docker load -i ~/docker/mysql.tar;
17
- else
18
- docker pull mysql:5.5;
19
- docker save mysql:5.5 > ~/docker/mysql.tar;
20
- fi
21
- - if [[ -e ~/docker/redis.tar ]]; then
22
- docker load -i ~/docker/redis.tar;
23
- else
24
- docker pull redis:2.8.19;
25
- docker save redis:2.8.19 > ~/docker/redis.tar;
26
- fi
27
- - if [[ -e ~/docker/rabbitmq.tar ]]; then
28
- docker load -i ~/docker/rabbitmq.tar;
29
- else
30
- docker pull rabbitmq:3.4.4-management;
31
- docker save rabbitmq:3.4.4-management > ~/docker/rabbitmq.tar;
32
- fi
33
- - if [[ -e ~/docker/riak.tar ]]; then
34
- docker load -i ~/docker/riak.tar;
35
- else
36
- docker pull hectcastro/riak:latest;
37
- docker save hectcastro/riak:latest > ~/docker/riak.tar;
38
- fi
39
-
40
- test:
41
- override:
42
- - bundle exec rake spec:
43
- environment:
44
- DOCKER_HOST: tcp://127.0.0.1:2375