orats 0.7.3 → 0.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.gitignore +2 -1
- data/Gemfile +1 -1
- data/{LICENSE.txt → LICENSE} +21 -21
- data/README.md +51 -346
- data/Rakefile +1 -1
- data/bin/orats +5 -2
- data/lib/orats/argv_adjust.rb +61 -0
- data/lib/orats/cli.rb +53 -141
- data/lib/orats/cli_help/new +27 -0
- data/lib/orats/cli_help/nuke +19 -0
- data/lib/orats/commands/new/exec.rb +59 -0
- data/lib/orats/commands/new/rails.rb +197 -0
- data/lib/orats/commands/new/server.rb +67 -0
- data/lib/orats/commands/nuke.rb +66 -44
- data/lib/orats/common.rb +76 -0
- data/lib/orats/postgres.rb +90 -0
- data/lib/orats/process.rb +35 -0
- data/lib/orats/redis.rb +25 -0
- data/lib/orats/shell.rb +12 -0
- data/lib/orats/templates/auth.rb +96 -82
- data/lib/orats/templates/base.rb +115 -110
- data/lib/orats/templates/includes/new/rails/.env +28 -28
- data/lib/orats/templates/includes/new/rails/Gemfile +4 -4
- data/lib/orats/templates/includes/new/rails/config/{whenever.rb → schedule.rb} +0 -0
- data/lib/orats/ui.rb +33 -0
- data/lib/orats/version.rb +3 -2
- data/lib/orats.rb +2 -1
- data/orats.gemspec +7 -5
- data/test/integration/cli_test.rb +28 -177
- data/test/test_helper.rb +24 -9
- metadata +17 -29
- data/lib/orats/commands/common.rb +0 -146
- data/lib/orats/commands/diff/compare.rb +0 -106
- data/lib/orats/commands/diff/exec.rb +0 -60
- data/lib/orats/commands/diff/parse.rb +0 -66
- data/lib/orats/commands/inventory.rb +0 -100
- data/lib/orats/commands/playbook.rb +0 -60
- data/lib/orats/commands/project/exec.rb +0 -74
- data/lib/orats/commands/project/rails.rb +0 -162
- data/lib/orats/commands/project/server.rb +0 -57
- data/lib/orats/commands/role.rb +0 -70
- data/lib/orats/commands/ui.rb +0 -47
- data/lib/orats/templates/includes/inventory/group_vars/all.yml +0 -202
- data/lib/orats/templates/includes/inventory/hosts +0 -8
- data/lib/orats/templates/includes/playbook/Galaxyfile +0 -15
- data/lib/orats/templates/includes/playbook/common.yml +0 -23
- data/lib/orats/templates/includes/playbook/site.yml +0 -36
- data/lib/orats/templates/includes/role/.travis.yml +0 -19
- data/lib/orats/templates/includes/role/README.md +0 -62
- data/lib/orats/templates/includes/role/meta/main.yml +0 -123
- data/lib/orats/templates/includes/role/tests/inventory +0 -1
- data/lib/orats/templates/includes/role/tests/main.yml +0 -7
- data/lib/orats/templates/playbook.rb +0 -119
- data/lib/orats/templates/role.rb +0 -144
@@ -1,60 +0,0 @@
|
|
1
|
-
require 'orats/commands/common'
|
2
|
-
require 'orats/commands/diff/parse'
|
3
|
-
require 'orats/commands/diff/compare'
|
4
|
-
require 'orats/version'
|
5
|
-
|
6
|
-
module Orats
|
7
|
-
module Commands
|
8
|
-
module Diff
|
9
|
-
class Exec < Commands::Common
|
10
|
-
include Parse
|
11
|
-
include Compare
|
12
|
-
|
13
|
-
attr_accessor :diff_list
|
14
|
-
|
15
|
-
def initialize(target_path = '', options = {})
|
16
|
-
super
|
17
|
-
|
18
|
-
@remote_galaxyfile = galaxyfile url_to_string(@remote_paths[:galaxyfile])
|
19
|
-
@remote_playbook = playbook url_to_string(@remote_paths[:playbook])
|
20
|
-
@remote_hosts = hosts url_to_string(@remote_paths[:hosts])
|
21
|
-
@remote_inventory = inventory url_to_string(@remote_paths[:inventory])
|
22
|
-
|
23
|
-
galaxyfile_path = @options[:galaxyfile]
|
24
|
-
playbook_path = @options[:playbook]
|
25
|
-
hosts_path = @options[:hosts]
|
26
|
-
inventory_path = @options[:inventory]
|
27
|
-
|
28
|
-
if !@options[:inventory].empty? && File.directory?(@options[:inventory])
|
29
|
-
hosts_path = File.join(inventory_path, 'hosts')
|
30
|
-
inventory_path = File.join(inventory_path, 'group_vars/all.yml')
|
31
|
-
end
|
32
|
-
|
33
|
-
if !@options[:playbook].empty? && File.directory?(@options[:playbook])
|
34
|
-
galaxyfile_path = File.join(playbook_path, 'Galaxyfile')
|
35
|
-
playbook_path = File.join(playbook_path, 'site.yml')
|
36
|
-
end
|
37
|
-
|
38
|
-
@your_galaxyfile = galaxyfile file_to_string (galaxyfile_path) unless galaxyfile_path.empty?
|
39
|
-
@your_playbook = playbook file_to_string(playbook_path) unless playbook_path.empty?
|
40
|
-
@your_hosts = hosts file_to_string(hosts_path) unless hosts_path.empty?
|
41
|
-
@your_inventory = inventory file_to_string(inventory_path) unless inventory_path.empty?
|
42
|
-
|
43
|
-
end
|
44
|
-
|
45
|
-
def init
|
46
|
-
remote_gem_vs_yours
|
47
|
-
|
48
|
-
remote_vs_yours('galaxyfile', @remote_galaxyfile,
|
49
|
-
@your_galaxyfile, false) unless @your_galaxyfile.nil?
|
50
|
-
remote_vs_yours('playbook', @remote_playbook,
|
51
|
-
@your_playbook, true) unless @your_playbook.nil?
|
52
|
-
remote_vs_yours('hosts', @remote_hosts,
|
53
|
-
@your_hosts, true) unless @your_hosts.nil?
|
54
|
-
remote_vs_yours('inventory', @remote_inventory,
|
55
|
-
@your_inventory, true) unless @your_inventory.nil?
|
56
|
-
end
|
57
|
-
end
|
58
|
-
end
|
59
|
-
end
|
60
|
-
end
|
@@ -1,66 +0,0 @@
|
|
1
|
-
module Orats
|
2
|
-
module Commands
|
3
|
-
module Diff
|
4
|
-
module Parse
|
5
|
-
def gem_version
|
6
|
-
"v#{url_to_string(@remote_paths[:version]).match(/'(.*)'/)[1..-1].first}"
|
7
|
-
end
|
8
|
-
|
9
|
-
def galaxyfile(contents)
|
10
|
-
contents.split
|
11
|
-
end
|
12
|
-
|
13
|
-
def hosts(contents)
|
14
|
-
contents.scan(/^\[.*\]/)
|
15
|
-
end
|
16
|
-
|
17
|
-
def inventory(contents)
|
18
|
-
# pluck out all of the values contained with {{ }}
|
19
|
-
ansible_variables = contents.scan(/\{\{([^{{}}]*)\}\}/)
|
20
|
-
|
21
|
-
# remove the leading space
|
22
|
-
ansible_variables.map! { |line| line.first[0] = '' }
|
23
|
-
|
24
|
-
# match every line that is not a comment and contains a colon
|
25
|
-
inventory_variables = contents.scan(/^[^#].*:/)
|
26
|
-
|
27
|
-
inventory_variables.map! do |line|
|
28
|
-
# only strip lines that need it
|
29
|
-
line.strip! if line.include?(' ') || line.include?("\n")
|
30
|
-
|
31
|
-
# get rid of the trailing colon
|
32
|
-
line.chomp(':')
|
33
|
-
|
34
|
-
# if a value of a certain variable has a colon then the regex
|
35
|
-
# picks this up as a match. only take the variable name
|
36
|
-
# if this happens to occur
|
37
|
-
line.split(':').first if line.include?(':')
|
38
|
-
end
|
39
|
-
|
40
|
-
(ansible_variables + inventory_variables).uniq.delete_if(&:empty?)
|
41
|
-
end
|
42
|
-
|
43
|
-
def playbook(contents)
|
44
|
-
roles = contents.scan(/^.*role:.*/)
|
45
|
-
|
46
|
-
roles.map! do |line|
|
47
|
-
line.strip! if line.include?(' ') || line.include?("\n")
|
48
|
-
|
49
|
-
role_parts = line.split('role:')
|
50
|
-
|
51
|
-
# start at the actual role name
|
52
|
-
line = role_parts[1]
|
53
|
-
|
54
|
-
if line.include?(',')
|
55
|
-
line = line.split(',').first
|
56
|
-
end
|
57
|
-
|
58
|
-
line.strip! if line.include?(' ')
|
59
|
-
end
|
60
|
-
|
61
|
-
roles.uniq
|
62
|
-
end
|
63
|
-
end
|
64
|
-
end
|
65
|
-
end
|
66
|
-
end
|
@@ -1,100 +0,0 @@
|
|
1
|
-
require 'securerandom'
|
2
|
-
require 'orats/commands/common'
|
3
|
-
require 'orats/commands/project/rails'
|
4
|
-
|
5
|
-
module Orats
|
6
|
-
module Commands
|
7
|
-
class Inventory < Common
|
8
|
-
include Project::Rails
|
9
|
-
|
10
|
-
def initialize(target_path = '', options = {})
|
11
|
-
super
|
12
|
-
end
|
13
|
-
|
14
|
-
def init
|
15
|
-
exit_if_path_exists('inventory')
|
16
|
-
|
17
|
-
create_inventory
|
18
|
-
|
19
|
-
secrets_path = "#{@target_path}/secrets"
|
20
|
-
create_secrets secrets_path
|
21
|
-
|
22
|
-
log_task 'Update secrets path in group_vars/all.yml'
|
23
|
-
gsub_file "#{@target_path}/#{fix_path_for_user(Common::RELATIVE_PATHS[:inventory])}",
|
24
|
-
'/home/yourname/dev/testproj/secrets', File.expand_path(secrets_path)
|
25
|
-
|
26
|
-
log_task 'Update place holder app name in group_vars/all.yml'
|
27
|
-
gsub_file "#{@target_path}/#{fix_path_for_user(Common::RELATIVE_PATHS[:inventory])}",
|
28
|
-
'testproj', File.basename(@target_path)
|
29
|
-
|
30
|
-
log_task 'Add ssh keypair'
|
31
|
-
run "ssh-keygen -t rsa -P '' -f #{secrets_path}/id_rsa"
|
32
|
-
|
33
|
-
log_task 'Add self signed ssl certificates'
|
34
|
-
run create_rsa_certificate(secrets_path, 'sslkey.key', 'sslcert.crt')
|
35
|
-
|
36
|
-
log_task 'Add monit pem file'
|
37
|
-
run "#{create_rsa_certificate(secrets_path,
|
38
|
-
'monit.pem', 'monit.pem')} && openssl gendh 512 >> #{secrets_path}/monit.pem"
|
39
|
-
|
40
|
-
log_success
|
41
|
-
end
|
42
|
-
|
43
|
-
private
|
44
|
-
|
45
|
-
def create_inventory
|
46
|
-
log_task 'Add ansible inventory'
|
47
|
-
run "mkdir -p #{@target_path}/inventory/group_vars"
|
48
|
-
|
49
|
-
local_to_user Common::RELATIVE_PATHS[:hosts]
|
50
|
-
local_to_user Common::RELATIVE_PATHS[:inventory]
|
51
|
-
end
|
52
|
-
|
53
|
-
def local_to_user(file)
|
54
|
-
fixed_file = fix_path_for_user(file)
|
55
|
-
|
56
|
-
log_task "Add #{fixed_file}"
|
57
|
-
run "cp #{base_path}/#{file} #{@target_path}/#{fixed_file}"
|
58
|
-
end
|
59
|
-
|
60
|
-
def create_secrets(secrets_path)
|
61
|
-
log_task 'Add ansible secrets'
|
62
|
-
run "mkdir #{secrets_path}"
|
63
|
-
|
64
|
-
save_secret_string "#{secrets_path}/postgres_password"
|
65
|
-
save_secret_string "#{secrets_path}/redis_password"
|
66
|
-
save_secret_string "#{secrets_path}/mail_password"
|
67
|
-
save_secret_string "#{secrets_path}/rails_token"
|
68
|
-
save_secret_string "#{secrets_path}/devise_token"
|
69
|
-
save_secret_string "#{secrets_path}/devise_pepper_token"
|
70
|
-
end
|
71
|
-
|
72
|
-
def save_secret_string(file)
|
73
|
-
File.open(file, 'w+') { |f| f.write(SecureRandom.hex(64)) }
|
74
|
-
end
|
75
|
-
|
76
|
-
def create_rsa_certificate(secrets_path, keyout, out)
|
77
|
-
"openssl req -new -newkey rsa:2048 -days 365 -nodes -x509 -subj '/C=US/ST=Foo/L=Bar/O=Baz/CN=qux.com' -keyout #{secrets_path}/#{keyout} -out #{secrets_path}/#{out}"
|
78
|
-
end
|
79
|
-
|
80
|
-
def log_success
|
81
|
-
log_status_top 'success', 'Everything has been setup successfully',
|
82
|
-
:cyan
|
83
|
-
puts
|
84
|
-
log_status_bottom 'question', 'Not sure what to do?', :yellow, true
|
85
|
-
log_status_bottom 'answer', 'Check out the inventory/hosts file',
|
86
|
-
:white, true
|
87
|
-
log_status_bottom 'answer', 'Check out the inventory/group_vars/all.yml file', :white
|
88
|
-
|
89
|
-
log_status_bottom 'question', 'Are you new to ansible?', :yellow, true
|
90
|
-
log_status_bottom 'answer',
|
91
|
-
'http://docs.ansible.com/intro_getting_started.html',
|
92
|
-
:white
|
93
|
-
end
|
94
|
-
|
95
|
-
def fix_path_for_user(file)
|
96
|
-
file.sub('templates/includes', '')
|
97
|
-
end
|
98
|
-
end
|
99
|
-
end
|
100
|
-
end
|
@@ -1,60 +0,0 @@
|
|
1
|
-
require 'orats/commands/common'
|
2
|
-
require 'orats/commands/project/rails'
|
3
|
-
|
4
|
-
module Orats
|
5
|
-
module Commands
|
6
|
-
class Playbook < Common
|
7
|
-
include Project::Rails
|
8
|
-
|
9
|
-
def initialize(target_path = '', options = {})
|
10
|
-
super
|
11
|
-
end
|
12
|
-
|
13
|
-
def init
|
14
|
-
exit_if_updating_playbook
|
15
|
-
|
16
|
-
rails_template 'playbook'
|
17
|
-
custom_rails_template unless @options[:custom].empty?
|
18
|
-
|
19
|
-
galaxy_install
|
20
|
-
log_success
|
21
|
-
end
|
22
|
-
|
23
|
-
private
|
24
|
-
|
25
|
-
def exit_if_updating_playbook
|
26
|
-
galaxyfile = File.join(@target_path, 'Galaxyfile')
|
27
|
-
|
28
|
-
if File.exist?(galaxyfile)
|
29
|
-
galaxy_install 'Update'
|
30
|
-
exit 1
|
31
|
-
end
|
32
|
-
end
|
33
|
-
|
34
|
-
def galaxy_install(git_commit_type='Add')
|
35
|
-
log_task "#{git_commit_type} ansible roles from the galaxy"
|
36
|
-
|
37
|
-
galaxy_install = "ansible-galaxy install -r #{@target_path}/Galaxyfile --roles-path #{@target_path}/roles --force"
|
38
|
-
|
39
|
-
run galaxy_install
|
40
|
-
|
41
|
-
git_commit "#{git_commit_type} galaxy installed roles"
|
42
|
-
end
|
43
|
-
|
44
|
-
def log_success
|
45
|
-
log_status_top 'success', 'Everything has been setup successfully',
|
46
|
-
:cyan
|
47
|
-
puts
|
48
|
-
log_status_bottom 'question', 'Are most of your apps similar?', :yellow, true
|
49
|
-
log_status_bottom 'answer', 'You only need to generate one playbook and you just did',
|
50
|
-
:white, true
|
51
|
-
log_status_bottom 'answer', 'Use the inventory in each project to customize certain things', :white
|
52
|
-
|
53
|
-
log_status_bottom 'question', 'Are you new to ansible?', :yellow, true
|
54
|
-
log_status_bottom 'answer',
|
55
|
-
'http://docs.ansible.com/intro_getting_started.html',
|
56
|
-
:white
|
57
|
-
end
|
58
|
-
end
|
59
|
-
end
|
60
|
-
end
|
@@ -1,74 +0,0 @@
|
|
1
|
-
require 'orats/commands/common'
|
2
|
-
require 'orats/commands/inventory'
|
3
|
-
require 'orats/commands/project/rails'
|
4
|
-
require 'orats/commands/project/server'
|
5
|
-
|
6
|
-
module Orats
|
7
|
-
module Commands
|
8
|
-
module Project
|
9
|
-
class Exec < Commands::Common
|
10
|
-
include Rails
|
11
|
-
include Server
|
12
|
-
|
13
|
-
PROJECT_TEMPLATES = {
|
14
|
-
auth: 'add authentication and authorization'
|
15
|
-
}
|
16
|
-
|
17
|
-
def initialize(target_path = '', options = {})
|
18
|
-
super
|
19
|
-
|
20
|
-
@active_path = services_path
|
21
|
-
end
|
22
|
-
|
23
|
-
def list_templates
|
24
|
-
log_status_top 'templates', 'Available templates to choose from:',
|
25
|
-
:blue
|
26
|
-
puts
|
27
|
-
PROJECT_TEMPLATES.each_pair do |key, value|
|
28
|
-
log_status_bottom key, value, :cyan, true
|
29
|
-
log_status_bottom 'usage', "orats project /tmp/foo --template #{key}",
|
30
|
-
:white
|
31
|
-
end
|
32
|
-
end
|
33
|
-
|
34
|
-
def init
|
35
|
-
check_exit_conditions
|
36
|
-
|
37
|
-
rails_template 'base' do
|
38
|
-
gsub_postgres_info
|
39
|
-
gsub_redis_info unless @options[:redis_password].empty?
|
40
|
-
gsub_project_path
|
41
|
-
gsub_readme
|
42
|
-
|
43
|
-
bundle_install
|
44
|
-
bundle_binstubs
|
45
|
-
spring_binstub
|
46
|
-
|
47
|
-
create_and_migrate_database
|
48
|
-
generate_home_page
|
49
|
-
generate_favicons
|
50
|
-
end
|
51
|
-
|
52
|
-
if template_exist?(@options[:template])
|
53
|
-
rails_template @options[:template], '--skip ' do
|
54
|
-
migrate_and_seed_database
|
55
|
-
end
|
56
|
-
end
|
57
|
-
|
58
|
-
Commands::Inventory.new(@target_path,
|
59
|
-
@options).init unless @options[:skip_ansible]
|
60
|
-
|
61
|
-
custom_rails_template unless @options[:custom].empty?
|
62
|
-
|
63
|
-
server_start
|
64
|
-
end
|
65
|
-
|
66
|
-
private
|
67
|
-
|
68
|
-
def services_path
|
69
|
-
"#{@target_path}/services/#{File.basename @target_path}"
|
70
|
-
end
|
71
|
-
end
|
72
|
-
end
|
73
|
-
end
|
74
|
-
end
|
@@ -1,162 +0,0 @@
|
|
1
|
-
module Orats
|
2
|
-
module Commands
|
3
|
-
module Project
|
4
|
-
module Rails
|
5
|
-
def check_exit_conditions(check_running_processes: true)
|
6
|
-
exit_if_process :not_found, 'rails', 'git'
|
7
|
-
exit_if_process :not_running, 'postgres', 'redis' if check_running_processes
|
8
|
-
exit_if_path_exists
|
9
|
-
exit_if_invalid_template
|
10
|
-
end
|
11
|
-
|
12
|
-
def rails_template(command, flags = '')
|
13
|
-
orats_template = "--template #{base_path}/templates/#{command}.rb"
|
14
|
-
|
15
|
-
run "rails new #{@active_path} #{flags} --skip-bundle #{orats_template unless command.empty?}"
|
16
|
-
yield if block_given?
|
17
|
-
end
|
18
|
-
|
19
|
-
def custom_rails_template
|
20
|
-
log_task 'Run custom rails template'
|
21
|
-
|
22
|
-
@options[:custom].include?('://') ? url_to_string(@options[:custom])
|
23
|
-
: file_to_string(@options[:custom])
|
24
|
-
|
25
|
-
rails_template '', "--skip --template #{@options[:custom]}"
|
26
|
-
end
|
27
|
-
|
28
|
-
def gsub_postgres_info
|
29
|
-
log_task 'Update the postgres connection details'
|
30
|
-
gsub_file "#{@active_path}/.env", 'DATABASE_HOST: localhost', "DATABASE_HOST: #{@options[:pg_location]}"
|
31
|
-
gsub_file "#{@active_path}/.env", ': postgres', ": #{@options[:pg_username]}"
|
32
|
-
gsub_file "#{@active_path}/.env", ': supersecrets', ": #{@options[:pg_password]}"
|
33
|
-
|
34
|
-
git_commit 'Update the postgres connection details'
|
35
|
-
end
|
36
|
-
|
37
|
-
def gsub_redis_info
|
38
|
-
log_task 'Update the redis connection details'
|
39
|
-
gsub_file "#{@active_path}/.env", 'HE_PASSWORD: ""', "HE_PASSWORD: #{@options[:redis_password]}"
|
40
|
-
gsub_file "#{@active_path}/.env", 'CACHE_HOST: localhost', "CACHE_HOST: #{@options[:redis_location]}"
|
41
|
-
|
42
|
-
git_commit 'Update the redis connection details'
|
43
|
-
end
|
44
|
-
|
45
|
-
def gsub_project_path
|
46
|
-
log_task 'Update the project path'
|
47
|
-
gsub_file "#{@active_path}/.env", ': /home/yourname/dev/testproj',
|
48
|
-
": #{File.expand_path(@active_path)}"
|
49
|
-
|
50
|
-
git_commit 'Update the project path'
|
51
|
-
end
|
52
|
-
|
53
|
-
def gsub_readme
|
54
|
-
log_task 'Update the readme'
|
55
|
-
gsub_file "#{@active_path}/README.md", 'VERSION', VERSION
|
56
|
-
|
57
|
-
git_commit 'Update the version'
|
58
|
-
end
|
59
|
-
|
60
|
-
def bundle_install
|
61
|
-
log_task 'Run bundle install, this may take a while'
|
62
|
-
run_from @active_path, 'bundle install'
|
63
|
-
|
64
|
-
git_commit 'Add Gemfile.lock'
|
65
|
-
end
|
66
|
-
|
67
|
-
def bundle_binstubs
|
68
|
-
log_task 'Run bundle binstubs for a few gems'
|
69
|
-
run_from @active_path, 'bundle binstubs whenever puma sidekiq backup'
|
70
|
-
|
71
|
-
git_commit 'Add binstubs for the important gems'
|
72
|
-
end
|
73
|
-
|
74
|
-
def spring_binstub
|
75
|
-
log_task 'Run spring binstub'
|
76
|
-
run_from @active_path, 'bundle exec spring binstub --all'
|
77
|
-
|
78
|
-
git_commit 'Add spring binstubs for all of the bins'
|
79
|
-
end
|
80
|
-
|
81
|
-
def run_rake(command)
|
82
|
-
log_task 'Run rake command'
|
83
|
-
|
84
|
-
run_from @active_path, "bundle exec rake #{command}"
|
85
|
-
end
|
86
|
-
|
87
|
-
def generate_home_page
|
88
|
-
kill_spring_servers
|
89
|
-
|
90
|
-
log_task 'Add pages controller with static page'
|
91
|
-
run_from @active_path, 'bundle exec rails g controller Pages home'
|
92
|
-
|
93
|
-
gsub_file "#{@active_path}/config/routes.rb", " # root 'welcome#index'" do
|
94
|
-
<<-S
|
95
|
-
root 'pages#home'
|
96
|
-
S
|
97
|
-
end
|
98
|
-
gsub_file "#{@active_path}/config/routes.rb", " get 'pages/home'\n\n", ''
|
99
|
-
|
100
|
-
gsub_file "#{@active_path}/test/controllers/pages_controller_test.rb",
|
101
|
-
'"should get home"', "'expect home page'"
|
102
|
-
|
103
|
-
run_from @active_path, "rm app/views/pages/home.html.erb"
|
104
|
-
Commands::Common.copy_from_local_gem 'new/rails/app/views/pages/home.html.erb',
|
105
|
-
"#{@active_path}/app/views/pages/home.html.erb"
|
106
|
-
gsub_file "#{@active_path}/app/views/pages/home.html.erb",
|
107
|
-
'vVERSION', VERSION
|
108
|
-
|
109
|
-
git_commit 'Add pages controller with home page'
|
110
|
-
end
|
111
|
-
|
112
|
-
def generate_favicons
|
113
|
-
log_task 'Add favicons'
|
114
|
-
run_rake 'orats:favicons'
|
115
|
-
git_commit 'Add favicons'
|
116
|
-
end
|
117
|
-
|
118
|
-
def create_and_migrate_database
|
119
|
-
run_rake 'db:create:all db:migrate'
|
120
|
-
git_commit 'Add the database schema file'
|
121
|
-
end
|
122
|
-
|
123
|
-
def migrate_and_seed_database
|
124
|
-
run_rake 'db:migrate db:seed'
|
125
|
-
git_commit 'Update the database schema file'
|
126
|
-
end
|
127
|
-
|
128
|
-
def template_exist?(template)
|
129
|
-
Exec::PROJECT_TEMPLATES.include?(template.to_sym)
|
130
|
-
end
|
131
|
-
|
132
|
-
private
|
133
|
-
|
134
|
-
def exit_if_invalid_template
|
135
|
-
template = @options[:template] || ''
|
136
|
-
|
137
|
-
if template.length > 0
|
138
|
-
log_task 'Check if template exists'
|
139
|
-
|
140
|
-
unless template_exist?(template)
|
141
|
-
log_error 'error', 'Cannot find template', 'message',
|
142
|
-
"'#{template}' is not a valid template name",
|
143
|
-
true do
|
144
|
-
log_status_bottom 'tip',
|
145
|
-
'run `orats templates` to get a list of valid templates',
|
146
|
-
:white
|
147
|
-
end
|
148
|
-
|
149
|
-
exit 1
|
150
|
-
end
|
151
|
-
end
|
152
|
-
end
|
153
|
-
|
154
|
-
def kill_spring_servers
|
155
|
-
# rails generators will lock up if a spring server is running,
|
156
|
-
# so kill them before continuing
|
157
|
-
system 'pkill -f spring'
|
158
|
-
end
|
159
|
-
end
|
160
|
-
end
|
161
|
-
end
|
162
|
-
end
|
@@ -1,57 +0,0 @@
|
|
1
|
-
require 'socket'
|
2
|
-
require 'timeout'
|
3
|
-
|
4
|
-
module Orats
|
5
|
-
module Commands
|
6
|
-
module Project
|
7
|
-
module Server
|
8
|
-
START_COMMAND = 'bundle exec foreman start'
|
9
|
-
|
10
|
-
def server_start
|
11
|
-
@options[:skip_server_start] ? message = 'Start your' : message = 'Starting'
|
12
|
-
|
13
|
-
puts '', '='*80
|
14
|
-
log_status_top 'action', "#{message} server with the following commands", :cyan
|
15
|
-
log_status_bottom 'command', "cd #{@active_path}", :magenta, true
|
16
|
-
log_status_bottom 'command', START_COMMAND, :magenta
|
17
|
-
puts '='*80, ''
|
18
|
-
|
19
|
-
attempt_to_start unless @options[:skip_server_start]
|
20
|
-
end
|
21
|
-
|
22
|
-
private
|
23
|
-
|
24
|
-
def attempt_to_start
|
25
|
-
while port_taken? do
|
26
|
-
log_status_top 'error', "Another application is using port 3000\n", :red
|
27
|
-
|
28
|
-
exit 1 if no?('Would you like to try running the server again? (y/N)', :cyan)
|
29
|
-
end
|
30
|
-
|
31
|
-
puts
|
32
|
-
|
33
|
-
run_from @active_path, START_COMMAND
|
34
|
-
end
|
35
|
-
|
36
|
-
def port_taken?
|
37
|
-
begin
|
38
|
-
Timeout::timeout(5) do
|
39
|
-
begin
|
40
|
-
s = TCPSocket.new('localhost', 3000)
|
41
|
-
s.close
|
42
|
-
|
43
|
-
return true
|
44
|
-
rescue Errno::ECONNREFUSED, Errno::EHOSTUNREACH
|
45
|
-
return false
|
46
|
-
end
|
47
|
-
end
|
48
|
-
rescue Timeout::Error
|
49
|
-
false
|
50
|
-
end
|
51
|
-
|
52
|
-
false
|
53
|
-
end
|
54
|
-
end
|
55
|
-
end
|
56
|
-
end
|
57
|
-
end
|
data/lib/orats/commands/role.rb
DELETED
@@ -1,70 +0,0 @@
|
|
1
|
-
require 'orats/commands/common'
|
2
|
-
require 'orats/commands/project/rails'
|
3
|
-
|
4
|
-
module Orats
|
5
|
-
module Commands
|
6
|
-
class Role < Common
|
7
|
-
include Project::Rails
|
8
|
-
|
9
|
-
def initialize(target_path = '', options = {})
|
10
|
-
super
|
11
|
-
end
|
12
|
-
|
13
|
-
def init
|
14
|
-
check_exit_conditions check_running_processes: false
|
15
|
-
exit_if_invalid_role_name
|
16
|
-
|
17
|
-
rails_template 'role'
|
18
|
-
custom_rails_template unless @options[:custom].empty?
|
19
|
-
|
20
|
-
repo_name = @options[:repo_name].empty? ? base_file_name :
|
21
|
-
@options[:repo_name]
|
22
|
-
|
23
|
-
log_task 'Update place holder repo name'
|
24
|
-
gsub_file "#{@target_path}/README.md", 'repo_name',
|
25
|
-
repo_name
|
26
|
-
gsub_file "#{@target_path}/tests/main.yml", 'repo_name',
|
27
|
-
repo_name
|
28
|
-
git_commit 'Update place holder repo name'
|
29
|
-
|
30
|
-
log_success
|
31
|
-
end
|
32
|
-
|
33
|
-
private
|
34
|
-
|
35
|
-
def base_file_name
|
36
|
-
File.basename(@target_path)
|
37
|
-
end
|
38
|
-
|
39
|
-
def exit_if_invalid_role_name
|
40
|
-
log_task 'Check if role name is valid'
|
41
|
-
|
42
|
-
unless base_file_name.count('.') == 1
|
43
|
-
log_error 'error', 'Invalid role name', 'message',
|
44
|
-
"'#{base_file_name}' is invalid, it must contain 1 period",
|
45
|
-
true do
|
46
|
-
log_status_bottom 'tip',
|
47
|
-
'Your role name should be github_user.role_name',
|
48
|
-
:white
|
49
|
-
end
|
50
|
-
|
51
|
-
exit 1
|
52
|
-
end
|
53
|
-
end
|
54
|
-
|
55
|
-
def log_success
|
56
|
-
log_status_top 'success', 'Everything has been setup successfully',
|
57
|
-
:cyan
|
58
|
-
puts
|
59
|
-
log_status_bottom 'question', 'What should you do next?', :yellow, true
|
60
|
-
log_status_bottom 'answer', 'Check the readme in the role',
|
61
|
-
:white
|
62
|
-
|
63
|
-
log_status_bottom 'question', 'Are you new to ansible?', :yellow, true
|
64
|
-
log_status_bottom 'answer',
|
65
|
-
'http://docs.ansible.com/intro_getting_started.html',
|
66
|
-
:white
|
67
|
-
end
|
68
|
-
end
|
69
|
-
end
|
70
|
-
end
|