generators_rails 0.0.3 → 0.0.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/generators/docker/config/config_generator.rb +46 -36
- data/lib/generators/docker/config/templates/Dockerfile +1 -2
- data/lib/generators/docker/config/templates/docker-compose.debug.yml +1 -1
- data/lib/generators/docker/config/templates/docker-compose.yml +1 -1
- data/lib/generators/docker/config/templates/docker.rake +73 -27
- data/lib/generators/docker/config/templates/dockerconfig.json +17 -0
- data/lib/generators/rancher/config/config_generator.rb +46 -16
- data/lib/generators/rancher/config/templates/rancher +1 -5
- data/lib/generators/rancher/config/templates/rancher-compose.yml +7 -0
- data/lib/generators/rancher/config/templates/rancher.rake +186 -0
- data/lib/generators/rancher/config/templates/rancherconfig.json +8 -0
- data/lib/generators_rails/version.rb +1 -1
- metadata +6 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 914fc3e4b1f4e40599b753681bee0f502b77cff2
|
4
|
+
data.tar.gz: d1ff48e2cbef5afec03e5cd2e7910b1899c21f44
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6bce52e3469ef1a1dc723261cfdd13bfb0121fbf459f9a1beed16bf581ce34827228645e14913ddea98e22a34cf67a3ed989ce092f1a81d515993c838f2a6d4f
|
7
|
+
data.tar.gz: 412afc6c8bf29fd9a33de550db9e2884e5a9bda74460eced8fc944e0280b6e9106d886bc055d72ca6e074206b2604090bfa1ac8e20dee355d141e8780d30d9ff
|
@@ -1,11 +1,14 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Docker
|
2
4
|
class ConfigGenerator < Rails::Generators::Base
|
3
5
|
source_root File.expand_path('../templates', __FILE__)
|
4
6
|
|
5
7
|
def setup
|
6
|
-
|
7
|
-
@
|
8
|
-
@
|
8
|
+
config = file?('docker/dockerconfig.json') ? JSON.parse(File.read('docker/dockerconfig.json')) : {}
|
9
|
+
@base_image_name = ask_with_default('Which Image do you want to from(Base Image)?', config['base_name'] || default_base_image_name)
|
10
|
+
@author = ask_with_default('Who is the Author', config['author'] || ENV['USER'])
|
11
|
+
@service_name = ask_with_default('What is the Service Name', config['service_name'] || 'app')
|
9
12
|
db_type = %w[mongo mysql postgres]
|
10
13
|
say('what type of DB you are using:')
|
11
14
|
print_table(db_type.map.with_index { |a, i| [i + 1, a] })
|
@@ -17,11 +20,16 @@ module Docker
|
|
17
20
|
db_select = ask_with_default('choice:', default_choice).to_i
|
18
21
|
@db_type = db_type[db_select - 1]
|
19
22
|
@db = db_content(@db_type)
|
20
|
-
@service_image_name = ask_with_default('Service Image Name ', default_service_image_name)
|
21
|
-
@docker_repo_url = ask_with_default('Your docker repo', default_docker_repo)
|
23
|
+
@service_image_name = ask_with_default('Service Image Name ', config['image_name'] || default_service_image_name)
|
24
|
+
@docker_repo_url = ask_with_default('Your docker repo', config['docker_repo'] || default_docker_repo)
|
22
25
|
@secret = `rake secret`.chop
|
23
26
|
end
|
24
27
|
|
28
|
+
def create_docker_config
|
29
|
+
say('creating docker config')
|
30
|
+
template 'dockerconfig.json', 'docker/dockerconfig.json'
|
31
|
+
end
|
32
|
+
|
25
33
|
def create_docker_file
|
26
34
|
say('creating docker file')
|
27
35
|
@db_config_file = if @db_type == 'mongo'
|
@@ -33,11 +41,13 @@ module Docker
|
|
33
41
|
end
|
34
42
|
|
35
43
|
def create_docker_ignore
|
36
|
-
content =
|
37
|
-
config/database.yml
|
38
|
-
config/mongoid.yml
|
39
|
-
Dockerfile
|
40
|
-
docker-compose*.yml
|
44
|
+
content = <<~CODE
|
45
|
+
config/database.yml
|
46
|
+
config/mongoid.yml
|
47
|
+
Dockerfile
|
48
|
+
docker-compose*.yml
|
49
|
+
docker/
|
50
|
+
lib/tasks/docker.rake
|
41
51
|
CODE
|
42
52
|
filename = '.dockerignore'
|
43
53
|
if file? filename
|
@@ -48,31 +58,31 @@ CODE
|
|
48
58
|
end
|
49
59
|
|
50
60
|
def create_git_ignore
|
51
|
-
content =
|
52
|
-
# See https://help.github.com/articles/ignoring-files for more about ignoring files.
|
53
|
-
#
|
54
|
-
# If you find yourself ignoring temporary files generated by your text editor
|
55
|
-
# or operating system, you probably want to add a global ignore instead:
|
56
|
-
# git config --global core.excludesfile '~/.gitignore_global'
|
57
|
-
|
58
|
-
# Ignore bundler config.
|
59
|
-
/.bundle
|
60
|
-
|
61
|
-
# Ignore all logfiles and tempfiles.
|
62
|
-
.rake_tasks
|
63
|
-
/log/*
|
64
|
-
!/log/.keep
|
65
|
-
/tmp
|
66
|
-
*~
|
67
|
-
.#*
|
68
|
-
public/assets
|
69
|
-
config/settings.local.yml
|
70
|
-
config/settings/*.local.yml
|
71
|
-
config/environments/*.local.yml
|
72
|
-
config/mongoid.yml
|
73
|
-
cache
|
74
|
-
spring/*
|
75
|
-
vendor/*
|
61
|
+
content = <<~CODE
|
62
|
+
# See https://help.github.com/articles/ignoring-files for more about ignoring files.
|
63
|
+
#
|
64
|
+
# If you find yourself ignoring temporary files generated by your text editor
|
65
|
+
# or operating system, you probably want to add a global ignore instead:
|
66
|
+
# git config --global core.excludesfile '~/.gitignore_global'
|
67
|
+
|
68
|
+
# Ignore bundler config.
|
69
|
+
/.bundle
|
70
|
+
|
71
|
+
# Ignore all logfiles and tempfiles.
|
72
|
+
.rake_tasks
|
73
|
+
/log/*
|
74
|
+
!/log/.keep
|
75
|
+
/tmp
|
76
|
+
*~
|
77
|
+
.#*
|
78
|
+
public/assets
|
79
|
+
config/settings.local.yml
|
80
|
+
config/settings/*.local.yml
|
81
|
+
config/environments/*.local.yml
|
82
|
+
config/mongoid.yml
|
83
|
+
cache
|
84
|
+
spring/*
|
85
|
+
vendor/*
|
76
86
|
CODE
|
77
87
|
filename = '.gitignore'
|
78
88
|
if file? filename
|
@@ -117,7 +127,7 @@ CODE
|
|
117
127
|
end
|
118
128
|
|
119
129
|
def default_base_image_name
|
120
|
-
'shaoyang/ruby:
|
130
|
+
'shaoyang/ruby:alpine'
|
121
131
|
end
|
122
132
|
|
123
133
|
def default_service_image_name
|
@@ -3,7 +3,6 @@ FROM <%=@base_image_name%>
|
|
3
3
|
MAINTAINER <%=@author%>
|
4
4
|
ADD . /usr/src/app
|
5
5
|
ADD config/<%=@db_config_file%>.docker.yml /usr/src/app/config/<%=@db_config_file%>.yml
|
6
|
-
ENV RAILS_ENV=production
|
7
6
|
RUN bundle install --local
|
8
7
|
RUN rake assets:precompile
|
9
|
-
CMD bash -c "rake db:setup&&
|
8
|
+
CMD bash -c "bundle exec rake db:setup&&bundle exec unicorn -p3000 -E $RAILS_ENV"
|
@@ -3,49 +3,59 @@
|
|
3
3
|
require 'thor'
|
4
4
|
class Hammer < Thor
|
5
5
|
include Thor::Actions
|
6
|
+
source_root '.'
|
6
7
|
end
|
7
8
|
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
9
|
+
class Hash
|
10
|
+
def method_missing(methodname, *params)
|
11
|
+
if self.class == Hash && key?(methodname.to_s)
|
12
|
+
self[methodname.to_s]
|
13
|
+
else
|
14
|
+
super
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
13
18
|
|
19
|
+
namespace :docker do
|
20
|
+
config = JSON.parse(File.read('docker/dockerconfig.json'))
|
21
|
+
TAG = ENV['TAG'] || 'latest'
|
14
22
|
desc 'exec bash for service container'
|
15
23
|
task :bash, [:service] do |_t, args|
|
16
|
-
exec_cmd("docker-compose -f #{debug_yml} exec #{args[:service] ||
|
24
|
+
exec_cmd("TAG=#{TAG} docker-compose -f #{config.debug_yml} exec #{args[:service] || config.service_name} #{config.shell_command}")
|
17
25
|
end
|
18
26
|
|
19
27
|
desc 'destroy all services container'
|
20
28
|
task :down do |_t, _args|
|
21
|
-
exec_cmd("docker-compose -f #{debug_yml} down")
|
29
|
+
exec_cmd("TAG=#{TAG} docker-compose -f #{config.debug_yml} down")
|
22
30
|
end
|
23
31
|
|
24
|
-
desc 'run
|
32
|
+
desc 'run test with docker'
|
25
33
|
task test: :up do
|
26
|
-
exec_cmd("docker-compose -f #{debug_yml}
|
27
|
-
|
28
|
-
|
34
|
+
exec_cmd("TAG=#{TAG} docker-compose -f #{config.debug_yml} exec #{config.service_name} #{config.test_command}")
|
35
|
+
end
|
36
|
+
|
37
|
+
desc 'run rspec with docker'
|
38
|
+
task rspec: :test do
|
29
39
|
end
|
30
40
|
|
31
41
|
desc 'start service with docker with prod env'
|
32
42
|
task :run do
|
33
|
-
exec_cmd("docker-compose -f #{prod_yml} up -d")
|
43
|
+
exec_cmd("TAG=#{TAG} docker-compose -f #{config.prod_yml} up -d")
|
34
44
|
end
|
35
45
|
|
36
46
|
desc 'start service with docker in debug mode '
|
37
47
|
task :up do
|
38
|
-
exec_cmd("docker-compose -f #{debug_yml} up -d")
|
48
|
+
exec_cmd("TAG=#{TAG} docker-compose -f #{config.debug_yml} up -d")
|
39
49
|
end
|
40
50
|
|
41
51
|
desc 'debug service with docker '
|
42
52
|
task debug: :up do
|
43
|
-
exec_cmd("docker-compose -f #{debug_yml} exec #{
|
53
|
+
exec_cmd("TAG=#{TAG} docker-compose -f #{config.debug_yml} exec #{config.service_name} #{config.up_command}")
|
44
54
|
end
|
45
55
|
|
46
56
|
desc 'rubocop service with docker '
|
47
|
-
task
|
48
|
-
exec_cmd("docker-compose -f #{debug_yml} exec -T #{
|
57
|
+
task lint: :up do
|
58
|
+
exec_cmd("TAG=#{TAG} docker-compose -f #{config.debug_yml} exec -T #{config.service_name} #{config.lint_command}")
|
49
59
|
end
|
50
60
|
|
51
61
|
desc 'gitpull'
|
@@ -54,32 +64,68 @@ namespace :docker do
|
|
54
64
|
end
|
55
65
|
|
56
66
|
desc 'precheck before release'
|
57
|
-
task precommit: %i[
|
58
|
-
exec_cmd("docker-compose -f #{debug_yml} down")
|
67
|
+
task precommit: %i[lint test gitpull] do |_t, _args|
|
68
|
+
exec_cmd("TAG=#{TAG} docker-compose -f #{config.debug_yml} down")
|
59
69
|
hammer.say 'Precommit succeed.'
|
60
70
|
end
|
61
71
|
|
62
72
|
desc 'build as docker image '
|
63
73
|
task :build do
|
64
|
-
exec_cmd(
|
65
|
-
exec_cmd("docker build -t
|
74
|
+
exec_cmd(config.package_command.to_s)
|
75
|
+
exec_cmd("TAG=#{TAG} docker build -t #{config.image_name}:#{TAG} -f #{config.docker_file} .")
|
66
76
|
end
|
67
77
|
|
68
78
|
desc 'release docker image '
|
69
|
-
task :release
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
tag_cmd = "docker tag <%=@service_image_name%> #{remote_image}"
|
79
|
+
task :release do |_t, _args|
|
80
|
+
if `TAG=#{TAG} docker images -f reference=#{config.image_name}:#{TAG} -q`.chop.present?
|
81
|
+
remote_image = "#{config.docker_repo}/#{config.image_name}:#{TAG}"
|
82
|
+
tag_cmd = "TAG=#{TAG} docker tag #{config.image_name} #{remote_image}"
|
74
83
|
exec_cmd(tag_cmd)
|
75
|
-
push_cmd = "docker push #{remote_image}"
|
84
|
+
push_cmd = "TAG=#{TAG} docker push #{remote_image}"
|
76
85
|
exec_cmd(push_cmd)
|
77
|
-
rmi_cmd = "docker rmi #{remote_image}"
|
86
|
+
rmi_cmd = "TAG=#{TAG} docker rmi #{remote_image}"
|
78
87
|
exec_cmd(rmi_cmd)
|
79
88
|
hammer.say('pls commit code and push it manually!!')
|
80
89
|
else
|
81
90
|
hammer.say('There is no local image for push')
|
91
|
+
end
|
92
|
+
end
|
93
|
+
desc 'show docker config'
|
94
|
+
task :info do
|
95
|
+
last_build_time = `docker inspect -f '{{ .Created }}' #{config.image_name}`.chop
|
96
|
+
last_build_time = Time.parse(last_build_time).localtime
|
97
|
+
puts JSON.pretty_generate(config)
|
82
98
|
end
|
99
|
+
|
100
|
+
desc 'parse dockerfile and docker-compose'
|
101
|
+
task :parse do
|
102
|
+
match = ->(rexp) { File.open(config.docker_file).grep(rexp).first.match(rexp)[1] }
|
103
|
+
service_config = YAML.load_file(config.prod_yml)
|
104
|
+
image = service_config['services'][config.service_name]['image'].match(/((.*)\/)?(.*)/)
|
105
|
+
image_name = image[3].gsub('${TAG}', ENV['TAG'] || 'latest')
|
106
|
+
last_build_time = `docker inspect -f '{{ .Created }}' #{image_name}`.chop
|
107
|
+
last_build_time = Time.parse(last_build_time).localtime
|
108
|
+
ret = {
|
109
|
+
base_image: match.call(/FROM (.*)/),
|
110
|
+
author: match.call(/MAINTAINER (.*)/),
|
111
|
+
docker_repo: image[2] || 'docker.io',
|
112
|
+
image_name: image_name,
|
113
|
+
last_build_at: last_build_time
|
114
|
+
}
|
115
|
+
File.write(config.docker_parse, ret.to_json)
|
116
|
+
puts JSON.pretty_generate(ret)
|
117
|
+
end
|
118
|
+
|
119
|
+
desc 'dump docker task '
|
120
|
+
task :dump do
|
121
|
+
target_path = hammer.ask('target path?:')
|
122
|
+
hammer.directory('./docker', "#{target_path}/docker")
|
123
|
+
hammer.copy_file('./lib/tasks/docker.rake', "#{target_path}/docker/docker.rake")
|
124
|
+
target_rakefile = "#{target_path}/Rakefile"
|
125
|
+
File.open(target_rakefile, 'a') do |f|
|
126
|
+
f.puts "import 'docker/docker.rake'"
|
127
|
+
f.puts "require 'json'"
|
128
|
+
end
|
83
129
|
end
|
84
130
|
|
85
131
|
private
|
@@ -0,0 +1,17 @@
|
|
1
|
+
{
|
2
|
+
"base_name": "<%=@base_image_name%>",
|
3
|
+
"author": "<%=@author%>",
|
4
|
+
"docker_repo": "<%=@docker_repo_url%>",
|
5
|
+
"image_name": "<%=@service_image_name%>",
|
6
|
+
"service_name": "<%=@service_name%>",
|
7
|
+
"debug_yml": "docker/docker-compose.debug.yml",
|
8
|
+
"prod_yml": "docker/docker-compose.yml",
|
9
|
+
"docker_file": "docker/Dockerfile",
|
10
|
+
"docker_parse": "docker/.docker_parse.json",
|
11
|
+
"test_command": "bundle exec rspec --format documentation",
|
12
|
+
"up_command": "bundle exec rails s -b 0.0.0.0",
|
13
|
+
"lint_command": "rubocop -a",
|
14
|
+
"shell_command": "/bin/bash",
|
15
|
+
"package_command": "bundle package",
|
16
|
+
"db_type": "<%=@db_type%>"
|
17
|
+
}
|
@@ -2,34 +2,64 @@ module Rancher
|
|
2
2
|
class ConfigGenerator < Rails::Generators::Base
|
3
3
|
source_root File.expand_path('../templates', __FILE__)
|
4
4
|
def setup
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
@
|
5
|
+
config = file?('rancher/rancherconfig.json') ? load_json_file('rancher/rancherconfig.json') : {}
|
6
|
+
docker_config = file?('docker/dockerconfig.json') ? load_json_file('docker/dockerconfig.json') : {}
|
7
|
+
|
8
|
+
@docker_compose_config = YAML.load_file(docker_config['prod_yml'])
|
9
|
+
@services = @docker_compose_config['services'].each_with_object([]) { |(key, _value), r| r << key; }
|
10
|
+
@url = ask_with_default('Rancher URL:[example:http://<server_ip>:8080]', config['url'] || '')
|
11
|
+
@access_key = ask_with_default('ACCESS KEY:', config['accessKey'])
|
12
|
+
@secret_key = ask_with_default('SECRET KEY:', config['secretKey'])
|
13
|
+
@environment = ask_with_default('Enviroment Id Or Name:', config['environment'])
|
14
|
+
@stack = ask_with_default('stack name:', config['stack'] || File.basename(Dir.getwd))
|
15
|
+
|
9
16
|
@debug = false
|
10
17
|
end
|
11
18
|
|
19
|
+
def create_rancher_config
|
20
|
+
template 'rancherconfig.json', 'rancher/rancherconfig.json'
|
21
|
+
end
|
22
|
+
|
23
|
+
def ignore_rancher_config
|
24
|
+
ignore('.gitignore', 'rancher/rancherconfig.json')
|
25
|
+
ignore('.dockerignore', 'rancher/')
|
26
|
+
ignore('.dockerignore', 'lib/tasks/rancher.rake')
|
27
|
+
end
|
28
|
+
|
29
|
+
def create_ranche_compose
|
30
|
+
template 'rancher-compose.yml', 'rancher/rancher-compose.yml'
|
31
|
+
end
|
32
|
+
|
12
33
|
def create_rancher_wrapper
|
13
34
|
template 'rancher', 'bin/rancher'
|
14
35
|
run('chmod +x bin/rancher')
|
15
36
|
end
|
16
37
|
|
17
|
-
|
18
|
-
|
19
|
-
def create_env_var
|
20
|
-
generate('direnv:config') unless file?('.envrc')
|
21
|
-
content = <<-CODE
|
22
|
-
export RANCHER_URL=#{@url}
|
23
|
-
export RANCHER_ACCESS_KEY=#{@access_key}
|
24
|
-
export RANCHER_SECRET_KEY=#{@secret_key}
|
25
|
-
export RANCHER_ENVIORONMENT=#{@environment}
|
26
|
-
export RANCHER_CLIENT_DEBUG=#{@debug}
|
27
|
-
CODE
|
28
|
-
append_to_file '.envrc', content
|
38
|
+
def create_rancher_task
|
39
|
+
template 'rancher.rake', 'lib/tasks/rancher.rake'
|
29
40
|
end
|
30
41
|
|
42
|
+
private
|
43
|
+
|
31
44
|
def file?(path)
|
32
45
|
File.exist?(path)
|
33
46
|
end
|
47
|
+
|
48
|
+
def ignore(filename, content)
|
49
|
+
if file? filename
|
50
|
+
append_to_file filename, content
|
51
|
+
else
|
52
|
+
create_file filename, content
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
def load_json_file(file)
|
57
|
+
JSON.parse(File.read(file))
|
58
|
+
end
|
59
|
+
|
60
|
+
def ask_with_default(statement, default_value)
|
61
|
+
answer = ask("#{statement}[#{default_value}]:", Thor::Shell::Color::BLUE)
|
62
|
+
answer.present? ? answer : default_value
|
63
|
+
end
|
34
64
|
end
|
35
65
|
end
|
@@ -0,0 +1,186 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'thor'
|
4
|
+
class Hammer < Thor
|
5
|
+
include Thor::Actions
|
6
|
+
source_root '.'
|
7
|
+
end
|
8
|
+
|
9
|
+
class Hash
|
10
|
+
def method_missing(methodname, *params)
|
11
|
+
if self.class == Hash && key?(methodname.to_s)
|
12
|
+
self[methodname.to_s]
|
13
|
+
else
|
14
|
+
super
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
namespace :rancher do
|
20
|
+
rancherconfig = 'rancher/rancherconfig.json'
|
21
|
+
dockerconfig = 'docker/dockerconfig.json'
|
22
|
+
config = File.exist?(rancherconfig) ? JSON.parse(File.read(rancherconfig)) : {}
|
23
|
+
docker_config = JSON.parse(File.read(dockerconfig))
|
24
|
+
docker_file = 'docker/docker-compose.yml'
|
25
|
+
rancher_file = 'rancher/rancher-compose.yml'
|
26
|
+
tag = ENV['TAG'] || 'latest'
|
27
|
+
RANCHER = "rancher -c #{rancherconfig}".freeze
|
28
|
+
File.write('rancher/.env.tmp', "TAG=#{tag}")
|
29
|
+
RANCHER_UP = [
|
30
|
+
RANCHER,
|
31
|
+
'up',
|
32
|
+
"-s #{config.stack}",
|
33
|
+
"-f #{docker_file}",
|
34
|
+
"-rancher-file #{rancher_file}",
|
35
|
+
'-e rancher/.env.tmp'
|
36
|
+
].join(' ')
|
37
|
+
|
38
|
+
desc 'rancher up current service'
|
39
|
+
task :up_service, [:service] do |_t, _args|
|
40
|
+
exec_cmd(RANCHER_UP.to_s,
|
41
|
+
'--upgrade',
|
42
|
+
'--pull',
|
43
|
+
_args[:service] || docker_config.service_name)
|
44
|
+
end
|
45
|
+
|
46
|
+
desc 'rancher restart service'
|
47
|
+
task :restart, [:service] do |_t, _args|
|
48
|
+
exec_cmd(RANCHER.to_s,
|
49
|
+
'restart',
|
50
|
+
"#{config.stack}/#{_args[:service] || docker_config.service_name}")
|
51
|
+
end
|
52
|
+
|
53
|
+
desc 'rancher upall'
|
54
|
+
task :up, [:deamon] do |_t, _args|
|
55
|
+
exec_cmd(RANCHER_UP,
|
56
|
+
'--upgrade',
|
57
|
+
'--pull #{_args[:deamon]}')
|
58
|
+
end
|
59
|
+
desc 'rancher inspect stack'
|
60
|
+
task :inspect, [:opt] do |_t, _args|
|
61
|
+
exec_cmd(RANCHER, 'inspect', '-a')
|
62
|
+
end
|
63
|
+
|
64
|
+
desc 'rancher rm service'
|
65
|
+
task :rm do |_t, _args|
|
66
|
+
exec_cmd(RANCHER,
|
67
|
+
'rm',
|
68
|
+
"#{config.stack}/#{docker_config.service_name}")
|
69
|
+
end
|
70
|
+
|
71
|
+
desc 'rancher rm stack'
|
72
|
+
task :rm_stack do |_t, _args|
|
73
|
+
exec_cmd(RANCHER,
|
74
|
+
'rm',
|
75
|
+
config.stack)
|
76
|
+
end
|
77
|
+
|
78
|
+
desc 'rancher rollback service'
|
79
|
+
task :rollback, [:service] do |_t, _args|
|
80
|
+
exec_cmd(RANCHER_UP,
|
81
|
+
'-r',
|
82
|
+
_args[:service] || docker_config.service_name)
|
83
|
+
end
|
84
|
+
|
85
|
+
desc 'rancher upgrade'
|
86
|
+
task :upgrade_service, [:service] do |_t, _args|
|
87
|
+
exec_cmd(RANCHER_UP,
|
88
|
+
'--force-upgrade',
|
89
|
+
'--pull',
|
90
|
+
_args[:service] || docker_config.service_name)
|
91
|
+
end
|
92
|
+
|
93
|
+
desc 'rancher upgrade-all'
|
94
|
+
task :upgrade do |_t, _args|
|
95
|
+
exec_cmd(RANCHER_UP, '--force-upgrade', '--pull')
|
96
|
+
end
|
97
|
+
|
98
|
+
desc 'rancher confirm upgrade'
|
99
|
+
task :confirm, [:service] do |_t, _args|
|
100
|
+
exec_cmd(RANCHER_UP,
|
101
|
+
'--confirm-upgrade',
|
102
|
+
_args[:service] || docker_config.service_name)
|
103
|
+
end
|
104
|
+
|
105
|
+
desc 'rancher export'
|
106
|
+
task :export do |_t, _args|
|
107
|
+
exec_cmd(RANCHER, 'export', config.stack)
|
108
|
+
end
|
109
|
+
|
110
|
+
desc 'rancher host'
|
111
|
+
task :host do |_t, _args|
|
112
|
+
exec_cmd(RANCHER, 'host', '-a')
|
113
|
+
end
|
114
|
+
|
115
|
+
desc 'rancher ls container'
|
116
|
+
task :lsc do |_t, _args|
|
117
|
+
exec_cmd(RANCHER, 'ps', '-c')
|
118
|
+
end
|
119
|
+
|
120
|
+
desc 'rancher ls service'
|
121
|
+
task :lss do |_t, _args|
|
122
|
+
exec_cmd(RANCHER, 'ps', '-a')
|
123
|
+
end
|
124
|
+
|
125
|
+
desc 'rancher ls stacks'
|
126
|
+
task :lsk do |_t, _args|
|
127
|
+
exec_cmd(RANCHER, 'stacks')
|
128
|
+
end
|
129
|
+
|
130
|
+
desc 'rancher ls volume'
|
131
|
+
task lsv: [:volume] do |_t, _args|
|
132
|
+
end
|
133
|
+
|
134
|
+
desc 'rancher logs'
|
135
|
+
task :logs, [:container] do |_t, _args|
|
136
|
+
exec_cmd(RANCHER, 'logs', "#{config.stack}/#{docker_config.service_name}")
|
137
|
+
end
|
138
|
+
|
139
|
+
desc 'rancher exec'
|
140
|
+
task :exec, [:container, :cmd] do |_t, _args|
|
141
|
+
exec_cmd(RANCHER,
|
142
|
+
'-i',
|
143
|
+
'-t',
|
144
|
+
_args[:container],
|
145
|
+
_args[:cmd] || '/bin/bash')
|
146
|
+
end
|
147
|
+
|
148
|
+
desc 'rancher volume'
|
149
|
+
task :volume, [:cmd] do |_t, _args|
|
150
|
+
exec_cmd(RANCHER,
|
151
|
+
'volume',
|
152
|
+
_args[:cmd] || 'ls')
|
153
|
+
end
|
154
|
+
|
155
|
+
desc 'show rancher config'
|
156
|
+
task :info do
|
157
|
+
puts JSON.pretty_generate(config)
|
158
|
+
end
|
159
|
+
|
160
|
+
desc 'dump rancher task '
|
161
|
+
task :dump do
|
162
|
+
target_path = hammer.ask('target path?:')
|
163
|
+
hammer.directory('./rancher', "#{target_path}/rancher")
|
164
|
+
hammer.copy_file('./lib/tasks/rancher.rake', "#{target_path}/rancher/rancher.rake")
|
165
|
+
target_rakefile = "#{target_path}/Rakefile"
|
166
|
+
File.open(target_rakefile, 'a') do |f|
|
167
|
+
f.puts "import 'rancher/rancher.rake'"
|
168
|
+
end
|
169
|
+
hammer.directory('bin/rancher', "#{target_path}/bin")
|
170
|
+
end
|
171
|
+
|
172
|
+
private
|
173
|
+
|
174
|
+
def exec_cmd(*cmdstr)
|
175
|
+
hammer.say cmdstr.join(' ')
|
176
|
+
hammer.run(cmdstr.join(' '))
|
177
|
+
end
|
178
|
+
|
179
|
+
def hello
|
180
|
+
p :hello
|
181
|
+
end
|
182
|
+
|
183
|
+
def hammer
|
184
|
+
Hammer.new
|
185
|
+
end
|
186
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: generators_rails
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- shaoyang
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-10-
|
11
|
+
date: 2017-10-15 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -59,6 +59,7 @@ files:
|
|
59
59
|
- lib/generators/docker/config/templates/docker-compose.yml
|
60
60
|
- lib/generators/docker/config/templates/docker.rake
|
61
61
|
- lib/generators/docker/config/templates/dockercfg.yml
|
62
|
+
- lib/generators/docker/config/templates/dockerconfig.json
|
62
63
|
- lib/generators/docker/config/templates/mongo.erb
|
63
64
|
- lib/generators/docker/config/templates/mongoid.yml
|
64
65
|
- lib/generators/docker/config/templates/mysql.erb
|
@@ -66,6 +67,9 @@ files:
|
|
66
67
|
- lib/generators/rancher/config/USAGE
|
67
68
|
- lib/generators/rancher/config/config_generator.rb
|
68
69
|
- lib/generators/rancher/config/templates/rancher
|
70
|
+
- lib/generators/rancher/config/templates/rancher-compose.yml
|
71
|
+
- lib/generators/rancher/config/templates/rancher.rake
|
72
|
+
- lib/generators/rancher/config/templates/rancherconfig.json
|
69
73
|
- lib/generators/rspec/config/USAGE
|
70
74
|
- lib/generators/rspec/config/config_generator.rb
|
71
75
|
- lib/generators/setup/full/USAGE
|