foreplay 0.0.1 → 0.0.2
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.
- data/.gitignore +2 -2
- data/.rvmrc +5 -0
- data/README.md +3 -3
- data/features/check.feature +74 -0
- data/features/deploy.feature +96 -0
- data/features/setup.feature +140 -0
- data/features/support/env.rb +5 -0
- data/foreplay.gemspec +2 -2
- data/lib/foreplay.rb +4 -6
- data/lib/foreplay/cli.rb +32 -8
- data/lib/foreplay/deploy.rb +305 -0
- data/lib/foreplay/setup.rb +32 -0
- data/lib/foreplay/{generators → setup}/foreplay.yml +17 -15
- data/lib/foreplay/utility.rb +29 -0
- data/lib/foreplay/version.rb +1 -1
- data/spec/lib/foreplay/deploy_spec.rb +153 -0
- data/spec/lib/foreplay/setup_spec.rb +13 -0
- data/spec/lib/foreplay/utility_spec.rb +28 -0
- data/spec/spec_helper.rb +16 -0
- metadata +41 -31
- data/features/config.feature +0 -66
- data/features/generator.feature +0 -97
- data/features/support/setup.rb +0 -1
- data/lib/foreplay/config.rb +0 -25
- data/lib/foreplay/generators/setup.rb +0 -20
- data/spec/foreplay_spec.rb +0 -7
data/.gitignore
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
*.TMP
|
1
2
|
*.rbc
|
2
3
|
*.sassc
|
3
4
|
.sass-cache
|
@@ -17,7 +18,7 @@ pickle-email-*.html
|
|
17
18
|
|
18
19
|
*.gem
|
19
20
|
.bundle
|
20
|
-
|
21
|
+
/config
|
21
22
|
.yardoc
|
22
23
|
Gemfile.lock
|
23
24
|
InstalledFiles
|
@@ -31,4 +32,3 @@ spec/reports
|
|
31
32
|
test/tmp
|
32
33
|
test/version_tmp
|
33
34
|
tmp
|
34
|
-
config
|
data/.rvmrc
ADDED
data/README.md
CHANGED
@@ -52,9 +52,9 @@ defaults: # global defaults for all environments
|
|
52
52
|
servers: [server1, server2, server3] # which servers to deploy the app on
|
53
53
|
user: # The username to connect with (must have SSH permissions)
|
54
54
|
password: # The password to use to connect (not necessary if you've set up SSH keys)
|
55
|
-
keyfile: #
|
55
|
+
keyfile: # or a file containing a private key that allows the named user access to the server
|
56
56
|
key: # ...or a private key that allows the named user access to the server
|
57
|
-
path: # absolute path to deploy the app on each server. %s will
|
57
|
+
path: # absolute path to deploy the app on each server. %s will substitute to the app name
|
58
58
|
database: # the database.yml elements to write to the config folder
|
59
59
|
env: # contents of the .env file
|
60
60
|
key: value # will go into the .env file as key=value
|
@@ -62,7 +62,7 @@ defaults: # global defaults for all environments
|
|
62
62
|
key: value # will go into the .foreman file as key: value
|
63
63
|
production: # deployment configuration for the production environment
|
64
64
|
defaults: # defaults for all roles in this environment (structure same as global defaults)
|
65
|
-
role1: # settings for the a particular role (e.g. web, worker, etc.)
|
65
|
+
role1: # settings for the a particular role (e.g. web, worker, etc.)
|
66
66
|
```
|
67
67
|
|
68
68
|
### Environment
|
@@ -0,0 +1,74 @@
|
|
1
|
+
Feature: check
|
2
|
+
In order to check Foreplay
|
3
|
+
From the CLI
|
4
|
+
I want to be able to check all features
|
5
|
+
|
6
|
+
Scenario: Check configuration
|
7
|
+
When I run `foreplay check`
|
8
|
+
Then the output should contain:
|
9
|
+
"""
|
10
|
+
ERROR: foreplay check was called with no arguments
|
11
|
+
Usage: "foreplay check ENVIRONMENT".
|
12
|
+
"""
|
13
|
+
|
14
|
+
Scenario: Check configuration parameters - invalid parameter
|
15
|
+
When I run `foreplay check test --invalid xyz`
|
16
|
+
Then the output should contain:
|
17
|
+
"""
|
18
|
+
ERROR: foreplay check was called with arguments ["test", "--invalid", "xyz"]
|
19
|
+
Usage: "foreplay check ENVIRONMENT".
|
20
|
+
"""
|
21
|
+
|
22
|
+
Scenario: Check configuration parameters - short invalid parameter
|
23
|
+
When I run `foreplay check test -x xyz`
|
24
|
+
Then the output should contain:
|
25
|
+
"""
|
26
|
+
ERROR: foreplay check was called with arguments ["test", "-x", "xyz"]
|
27
|
+
Usage: "foreplay check ENVIRONMENT".
|
28
|
+
"""
|
29
|
+
|
30
|
+
Scenario: Check configuration parameters - no config file
|
31
|
+
When I run `foreplay check test`
|
32
|
+
Then the output should contain "Checking"
|
33
|
+
And the output should contain "Can't find configuration file"
|
34
|
+
|
35
|
+
Scenario: Check configuration parameters
|
36
|
+
When I run `foreplay setup`
|
37
|
+
And I run `foreplay check test`
|
38
|
+
Then the output should contain "create config/foreplay.yml"
|
39
|
+
And the output should contain "Checking"
|
40
|
+
And the output should contain "test environment"
|
41
|
+
And the output should contain "all roles"
|
42
|
+
And the output should contain "all servers"
|
43
|
+
And the output should contain "No deployment configuration defined for test environment"
|
44
|
+
And the output should not contain "Can't find configuration file"
|
45
|
+
And the following files should exist:
|
46
|
+
| config/foreplay.yml |
|
47
|
+
|
48
|
+
Scenario: Check configuration parameters - role parameter
|
49
|
+
When I run `foreplay check test --role worker`
|
50
|
+
Then the output should contain "Checking"
|
51
|
+
And the output should contain "test environment"
|
52
|
+
And the output should contain "worker role"
|
53
|
+
And the output should contain "all servers"
|
54
|
+
|
55
|
+
Scenario: Check configuration parameters - server parameter
|
56
|
+
When I run `foreplay check test --server worker.example.com`
|
57
|
+
Then the output should contain "Checking"
|
58
|
+
And the output should contain "test environment"
|
59
|
+
And the output should contain "all roles"
|
60
|
+
And the output should contain "worker.example.com server"
|
61
|
+
|
62
|
+
Scenario: Check configuration parameters - short role parameter
|
63
|
+
When I run `foreplay check test -r worker`
|
64
|
+
Then the output should contain "Checking"
|
65
|
+
And the output should contain "test environment"
|
66
|
+
And the output should contain "worker role"
|
67
|
+
And the output should contain "all servers"
|
68
|
+
|
69
|
+
Scenario: Check configuration parameters - short server parameter
|
70
|
+
When I run `foreplay check test -s worker.example.com`
|
71
|
+
Then the output should contain "Checking"
|
72
|
+
And the output should contain "test environment"
|
73
|
+
And the output should contain "all roles"
|
74
|
+
And the output should contain "worker.example.com server"
|
@@ -0,0 +1,96 @@
|
|
1
|
+
Feature: deploy
|
2
|
+
In order to deploy my app
|
3
|
+
From the CLI
|
4
|
+
I want to be able to use all features
|
5
|
+
|
6
|
+
Scenario: No arguments
|
7
|
+
When I run `foreplay deploy`
|
8
|
+
Then the output should contain:
|
9
|
+
"""
|
10
|
+
ERROR: foreplay deploy was called with no arguments
|
11
|
+
Usage: "foreplay deploy ENVIRONMENT".
|
12
|
+
"""
|
13
|
+
|
14
|
+
Scenario: invalid parameter
|
15
|
+
When I run `foreplay deploy test --invalid xyz`
|
16
|
+
Then the output should contain:
|
17
|
+
"""
|
18
|
+
ERROR: foreplay deploy was called with arguments ["test", "--invalid", "xyz"]
|
19
|
+
Usage: "foreplay deploy ENVIRONMENT".
|
20
|
+
"""
|
21
|
+
|
22
|
+
Scenario: short invalid parameter
|
23
|
+
When I run `foreplay deploy test -x xyz`
|
24
|
+
Then the output should contain:
|
25
|
+
"""
|
26
|
+
ERROR: foreplay deploy was called with arguments ["test", "-x", "xyz"]
|
27
|
+
Usage: "foreplay deploy ENVIRONMENT".
|
28
|
+
"""
|
29
|
+
|
30
|
+
Scenario: no config file
|
31
|
+
When I run `foreplay deploy test`
|
32
|
+
Then the output should contain "Deploying"
|
33
|
+
And the output should contain "test environment"
|
34
|
+
And the output should contain "all roles"
|
35
|
+
And the output should contain "all servers"
|
36
|
+
And the output should contain "Can't find configuration file"
|
37
|
+
|
38
|
+
Scenario: deploy all roles
|
39
|
+
When I run `foreplay setup`
|
40
|
+
And I run `foreplay deploy test`
|
41
|
+
Then the output should contain "create config/foreplay.yml"
|
42
|
+
And the output should contain "Deploying"
|
43
|
+
And the output should contain "test environment"
|
44
|
+
And the output should contain "all roles"
|
45
|
+
And the output should contain "all servers"
|
46
|
+
And the output should contain "No deployment configuration defined for test environment"
|
47
|
+
And the output should not contain "Can't find configuration file"
|
48
|
+
And the following files should exist:
|
49
|
+
| config/foreplay.yml |
|
50
|
+
|
51
|
+
Scenario: deploy one role
|
52
|
+
When I run `foreplay deploy test --role worker`
|
53
|
+
Then the output should contain "Deploying"
|
54
|
+
And the output should contain "test environment"
|
55
|
+
And the output should contain "worker role"
|
56
|
+
And the output should contain "all servers"
|
57
|
+
|
58
|
+
Scenario: deploy to one server
|
59
|
+
When I run `foreplay deploy test --server worker.example.com`
|
60
|
+
Then the output should contain "Deploying"
|
61
|
+
And the output should contain "test environment"
|
62
|
+
And the output should contain "all roles"
|
63
|
+
And the output should contain "worker.example.com server"
|
64
|
+
|
65
|
+
Scenario: deploy to one role - short role parameter
|
66
|
+
When I run `foreplay deploy test -r worker`
|
67
|
+
Then the output should contain "Deploying"
|
68
|
+
And the output should contain "test environment"
|
69
|
+
And the output should contain "worker role"
|
70
|
+
And the output should contain "all servers"
|
71
|
+
|
72
|
+
Scenario: deployto one server - short server parameter
|
73
|
+
When I run `foreplay deploy test -s worker.example.com`
|
74
|
+
Then the output should contain "Deploying"
|
75
|
+
And the output should contain "test environment"
|
76
|
+
And the output should contain "all roles"
|
77
|
+
And the output should contain "worker.example.com server"
|
78
|
+
|
79
|
+
Scenario: deploy all roles
|
80
|
+
When I run `foreplay setup`
|
81
|
+
And I run `foreplay deploy test`
|
82
|
+
Then the output should contain "create config/foreplay.yml"
|
83
|
+
And the output should contain "Deploying"
|
84
|
+
And the output should contain "test environment"
|
85
|
+
And the output should contain "all roles"
|
86
|
+
And the output should contain "all servers"
|
87
|
+
And the output should not contain "Can't find configuration file"
|
88
|
+
And the following files should exist:
|
89
|
+
| config/foreplay.yml |
|
90
|
+
|
91
|
+
Scenario: deploy
|
92
|
+
When I run `foreplay setup -r git@github.com:Xenapto/foreplay.git -s web.example.com --password "top-secret"`
|
93
|
+
And I run `foreplay deploy production`
|
94
|
+
Then the output should contain "Deploying aruba to web.example.com in the web role on the production environment"
|
95
|
+
And the output should contain "Connecting to web.example.com"
|
96
|
+
And the output should contain "There was a problem starting an ssh session on web.example.com"
|
@@ -0,0 +1,140 @@
|
|
1
|
+
Feature: Setup
|
2
|
+
In order to setup Foreplay
|
3
|
+
As a CLI user
|
4
|
+
I want to be able to create the config scaffold
|
5
|
+
|
6
|
+
Scenario: Setup with defaults
|
7
|
+
When I run `foreplay setup`
|
8
|
+
Then the output should contain "create config/foreplay.yml"
|
9
|
+
And the following files should exist:
|
10
|
+
| config/foreplay.yml |
|
11
|
+
And the file "config/foreplay.yml" should contain:
|
12
|
+
"""
|
13
|
+
defaults:
|
14
|
+
name: aruba
|
15
|
+
repository: TODO Put the git repository path here
|
16
|
+
user: TODO Put here the user to logon to the deployment server
|
17
|
+
path: TODO Put here the path to deploy to on the deployment server
|
18
|
+
port: 50000
|
19
|
+
production:
|
20
|
+
defaults:
|
21
|
+
database:
|
22
|
+
adapter: postgresql
|
23
|
+
encoding: utf8
|
24
|
+
database: TODO Put the database name here
|
25
|
+
pool: 5
|
26
|
+
host: TODO Put here the database host name
|
27
|
+
username: TODO Put here the database user
|
28
|
+
password: TODO Put here the database user's password
|
29
|
+
web:
|
30
|
+
servers: [TODO Put here the name or names of the production web servers]
|
31
|
+
foreman:
|
32
|
+
concurrency: 'web=1,worker=0,scheduler=0'
|
33
|
+
"""
|
34
|
+
|
35
|
+
Scenario: Setup invalid short option
|
36
|
+
When I run `foreplay setup -x abc`
|
37
|
+
Then the following files should not exist:
|
38
|
+
| config/foreplay.yml |
|
39
|
+
And the output should contain:
|
40
|
+
"""
|
41
|
+
ERROR: foreplay setup was called with arguments ["-x", "abc"]
|
42
|
+
Usage: "foreplay setup".
|
43
|
+
"""
|
44
|
+
|
45
|
+
Scenario: Setup invalid option
|
46
|
+
When I run `foreplay setup --xyz abc`
|
47
|
+
Then the following files should not exist:
|
48
|
+
| config/foreplay.yml |
|
49
|
+
And the output should contain:
|
50
|
+
"""
|
51
|
+
ERROR: foreplay setup was called with arguments ["--xyz", "abc"]
|
52
|
+
Usage: "foreplay setup".
|
53
|
+
"""
|
54
|
+
|
55
|
+
Scenario: Setup invalid pool option type
|
56
|
+
When I run `foreplay setup --db_pool abc`
|
57
|
+
Then the following files should not exist:
|
58
|
+
| config/foreplay.yml |
|
59
|
+
And the output should contain:
|
60
|
+
"""
|
61
|
+
Expected numeric value for '--db-pool'; got "abc"
|
62
|
+
"""
|
63
|
+
|
64
|
+
Scenario: Setup invalid port option type
|
65
|
+
When I run `foreplay setup --port abc`
|
66
|
+
Then the following files should not exist:
|
67
|
+
| config/foreplay.yml |
|
68
|
+
And the output should contain:
|
69
|
+
"""
|
70
|
+
Expected numeric value for '--port'; got "abc"
|
71
|
+
"""
|
72
|
+
|
73
|
+
Scenario: Setup invalid port short option type
|
74
|
+
When I run `foreplay setup -p abc`
|
75
|
+
Then the following files should not exist:
|
76
|
+
| config/foreplay.yml |
|
77
|
+
And the output should contain:
|
78
|
+
"""
|
79
|
+
Expected numeric value for '--port'; got "abc"
|
80
|
+
"""
|
81
|
+
|
82
|
+
Scenario: Setup with short options
|
83
|
+
When I run `foreplay setup -n string1 -r string2 -u string3 -p 10000 --password string4 -f string5 -s string6a string6b string6c -a string7 -e string8 -d string9 -h string10 --db_pool 23 --db_user string11 --db_password string12`
|
84
|
+
Then the output should contain "create config/foreplay.yml"
|
85
|
+
And the following files should exist:
|
86
|
+
| config/foreplay.yml |
|
87
|
+
And the file "config/foreplay.yml" should contain:
|
88
|
+
"""
|
89
|
+
defaults:
|
90
|
+
name: string1
|
91
|
+
repository: string2
|
92
|
+
user: string3
|
93
|
+
password: string4
|
94
|
+
path: string5
|
95
|
+
port: 10000
|
96
|
+
production:
|
97
|
+
defaults:
|
98
|
+
database:
|
99
|
+
adapter: string7
|
100
|
+
encoding: string8
|
101
|
+
database: string9
|
102
|
+
pool: 23
|
103
|
+
host: string10
|
104
|
+
username: string11
|
105
|
+
password: string12
|
106
|
+
web:
|
107
|
+
servers: ["string6a", "string6b", "string6c"]
|
108
|
+
foreman:
|
109
|
+
concurrency: 'web=1,worker=0,scheduler=0'
|
110
|
+
"""
|
111
|
+
|
112
|
+
Scenario: Setup with short options
|
113
|
+
When I run `foreplay setup --name string1 --repository string2 --user string3 --port 10000 --password string4 --path string5 --servers string6a string6b string6c --db_adapter string7 --db_encoding string8 --db_name string9 --db_host string10 --db_pool 23 --db_user string11 --db_password string12`
|
114
|
+
Then the output should contain "create config/foreplay.yml"
|
115
|
+
And the following files should exist:
|
116
|
+
| config/foreplay.yml |
|
117
|
+
And the file "config/foreplay.yml" should contain:
|
118
|
+
"""
|
119
|
+
defaults:
|
120
|
+
name: string1
|
121
|
+
repository: string2
|
122
|
+
user: string3
|
123
|
+
password: string4
|
124
|
+
path: string5
|
125
|
+
port: 10000
|
126
|
+
production:
|
127
|
+
defaults:
|
128
|
+
database:
|
129
|
+
adapter: string7
|
130
|
+
encoding: string8
|
131
|
+
database: string9
|
132
|
+
pool: 23
|
133
|
+
host: string10
|
134
|
+
username: string11
|
135
|
+
password: string12
|
136
|
+
web:
|
137
|
+
servers: ["string6a", "string6b", "string6c"]
|
138
|
+
foreman:
|
139
|
+
concurrency: 'web=1,worker=0,scheduler=0'
|
140
|
+
"""
|
data/foreplay.gemspec
CHANGED
@@ -14,12 +14,11 @@ Gem::Specification.new do |spec|
|
|
14
14
|
|
15
15
|
spec.files = `git ls-files`.split($/)
|
16
16
|
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
17
|
-
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
17
|
+
spec.test_files = spec.files.grep(%r{^(test|spec|features|coverage)/})
|
18
18
|
spec.require_paths = ["lib"]
|
19
19
|
|
20
20
|
spec.add_dependency 'activesupport'
|
21
21
|
spec.add_dependency 'colorize'
|
22
|
-
spec.add_dependency 'hashie'
|
23
22
|
spec.add_dependency 'foreman'
|
24
23
|
spec.add_dependency 'net-ssh-shell'
|
25
24
|
spec.add_dependency 'thor'
|
@@ -30,4 +29,5 @@ Gem::Specification.new do |spec|
|
|
30
29
|
spec.add_development_dependency "cucumber"
|
31
30
|
spec.add_development_dependency "aruba"
|
32
31
|
spec.add_development_dependency "gem-release"
|
32
|
+
spec.add_development_dependency "simplecov"
|
33
33
|
end
|
data/lib/foreplay.rb
CHANGED
data/lib/foreplay/cli.rb
CHANGED
@@ -1,23 +1,47 @@
|
|
1
1
|
require 'thor'
|
2
2
|
require 'foreplay'
|
3
|
-
require 'foreplay/generators/setup'
|
4
3
|
|
5
4
|
module Foreplay
|
6
5
|
class CLI < Thor
|
7
|
-
desc '
|
6
|
+
desc 'deploy ENVIRONMENT', 'Deploys to specified environment'
|
8
7
|
|
9
|
-
method_option :
|
10
|
-
method_option :
|
11
|
-
method_option :server, :aliases => "-s"
|
8
|
+
method_option :role, :aliases => '-r'
|
9
|
+
method_option :server, :aliases => '-s'
|
12
10
|
|
13
|
-
def
|
14
|
-
|
11
|
+
def deploy(environment)
|
12
|
+
Foreplay::Deploy.start [:deploy, environment, options]
|
13
|
+
end
|
14
|
+
|
15
|
+
desc 'check ENVIRONMENT', 'Checks if configuration is OK for specified environment'
|
16
|
+
|
17
|
+
method_option :role, :aliases => '-r'
|
18
|
+
method_option :server, :aliases => '-s'
|
19
|
+
|
20
|
+
def check(environment)
|
21
|
+
Foreplay::Deploy.start [:check, environment, options]
|
15
22
|
end
|
16
23
|
|
17
24
|
desc 'setup', 'Create the Foreplay config file'
|
18
25
|
|
26
|
+
method_option :name, :aliases => '-n'
|
27
|
+
method_option :repository, :aliases => '-r'
|
28
|
+
method_option :user, :aliases => '-u'
|
29
|
+
method_option :password
|
30
|
+
method_option :keyfile
|
31
|
+
method_option :private_key, :aliases => '-k'
|
32
|
+
method_option :path, :aliases => '-f'
|
33
|
+
method_option :port, :aliases => '-p', :type => :numeric
|
34
|
+
method_option :servers, :aliases => '-s', :type => :array
|
35
|
+
method_option :db_adapter, :aliases => '-a'
|
36
|
+
method_option :db_encoding, :aliases => '-e'
|
37
|
+
method_option :db_name, :aliases => '-d'
|
38
|
+
method_option :db_pool , :type => :numeric
|
39
|
+
method_option :db_host, :aliases => '-h'
|
40
|
+
method_option :db_user
|
41
|
+
method_option :db_password
|
42
|
+
|
19
43
|
def setup
|
20
|
-
Foreplay::
|
44
|
+
Foreplay::Setup.start
|
21
45
|
end
|
22
46
|
end
|
23
47
|
end
|