scout-camp 0.1.13 → 0.1.14
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/.vimproject +52 -11
- data/Rakefile +5 -0
- data/VERSION +1 -1
- data/bin/scout-camp +46 -0
- data/doc/terraform.md +188 -0
- data/lib/scout/aws/s3.rb +6 -4
- data/lib/scout/offsite/resource.rb +110 -5
- data/lib/scout/offsite/step.rb +21 -14
- data/lib/scout/offsite/sync.rb +38 -10
- data/lib/scout/offsite.rb +1 -0
- data/lib/scout/render/engine.rb +119 -0
- data/lib/scout/render/helpers.rb +92 -0
- data/lib/scout/render/resource.rb +54 -0
- data/lib/scout/render.rb +3 -0
- data/lib/scout/sinatra/auth.rb +158 -0
- data/lib/scout/sinatra/base/assets.rb +245 -0
- data/lib/scout/sinatra/base/favicon.rb +43 -0
- data/lib/scout/sinatra/base/headers.rb +77 -0
- data/lib/scout/sinatra/base/helpers.rb +14 -0
- data/lib/scout/sinatra/base/parameters.rb +147 -0
- data/lib/scout/sinatra/base/post_processing.rb +18 -0
- data/lib/scout/sinatra/base/session.rb +72 -0
- data/lib/scout/sinatra/base.rb +253 -0
- data/lib/scout/sinatra/entity.rb +259 -0
- data/lib/scout/sinatra/finder.rb +9 -0
- data/lib/scout/sinatra/fragment.rb +275 -0
- data/lib/scout/sinatra/htmx.rb +68 -0
- data/lib/scout/sinatra/knowledge_base.rb +14 -0
- data/lib/scout/sinatra/tool.rb +11 -0
- data/lib/scout/sinatra/workflow.rb +129 -0
- data/lib/scout-camp.rb +1 -1
- data/scout-camp.gemspec +39 -3
- data/scout_commands/find +83 -0
- data/scout_commands/glob +90 -0
- data/share/aws/lambda_function.rb +53 -30
- data/share/terraform/aws/efs_host/data.tf +1 -2
- data/share/terraform/aws/efs_host/main.tf +1 -1
- data/share/terraform/aws/efs_host/variables.tf +5 -1
- data/test/scout/render/test_engine.rb +88 -0
- data/test/scout/render/test_resource.rb +29 -0
- data/test/scout/sinatra/base/test_headers.rb +125 -0
- data/test/scout/sinatra/base/test_parameters.rb +88 -0
- data/test/scout/sinatra/test_base.rb +27 -0
- data/test/scout/sinatra/test_entity.rb +44 -0
- data/test/scout/sinatra/test_render.rb +44 -0
- data/test/scout/sinatra/test_workflow.rb +157 -0
- data/test/test_helper.rb +26 -0
- metadata +103 -2
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
require File.expand_path(__FILE__).sub(%r(/test/.*), '/test/test_helper.rb')
|
|
2
|
+
require File.expand_path(__FILE__).sub(%r(.*/test/), '').sub(/test_(.*)\.rb/,'\1')
|
|
3
|
+
|
|
4
|
+
module Pantry
|
|
5
|
+
extend Resource
|
|
6
|
+
self.subdir = 'share/pantry'
|
|
7
|
+
Pantry.claim Pantry.eggs, :proc do
|
|
8
|
+
Log.info "Buying Eggs in the store"
|
|
9
|
+
"Eggs"
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
Pantry.claim Pantry.flour, :proc do
|
|
13
|
+
Log.info "Buying Flour in the store"
|
|
14
|
+
"Flour"
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
Pantry.claim Pantry.blueberries, :proc do
|
|
18
|
+
Log.info "Buying Bluberries in the store"
|
|
19
|
+
"Bluberries"
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
module Baking
|
|
24
|
+
extend Workflow
|
|
25
|
+
|
|
26
|
+
self.description = <<-EOF
|
|
27
|
+
This is the Baking workflow
|
|
28
|
+
EOF
|
|
29
|
+
|
|
30
|
+
helper :whisk do |eggs|
|
|
31
|
+
"Whisking eggs from #{eggs}"
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
helper :mix do |base, mixer|
|
|
35
|
+
"Mixing base (#{base}) with mixer (#{mixer})"
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
helper :bake do |batter|
|
|
39
|
+
"Baking batter (#{batter})"
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
task :whisk_eggs => :string do
|
|
43
|
+
whisk(Pantry.eggs.produce)
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
dep :whisk_eggs
|
|
47
|
+
input :add_bluberries, :boolean
|
|
48
|
+
task :prepare_batter => :string do |add_bluberries|
|
|
49
|
+
whisked_eggs = step(:whisk_eggs).load
|
|
50
|
+
batter = mix(whisked_eggs, Pantry.flour.produce)
|
|
51
|
+
|
|
52
|
+
if add_bluberries
|
|
53
|
+
batter = mix(batter, Pantry.blueberries.produce)
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
batter
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
dep :prepare_batter
|
|
60
|
+
task :bake_muffin_tray => :string do
|
|
61
|
+
file('test').write "TEST FILE"
|
|
62
|
+
bake(step(:prepare_batter).load)
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
export :bake_muffin_tray
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
require 'rack/test'
|
|
71
|
+
class TestSinatraWorkflows < Test::Unit::TestCase
|
|
72
|
+
include Rack::Test::Methods
|
|
73
|
+
|
|
74
|
+
class TestApp < Sinatra::Base
|
|
75
|
+
register SinatraScoutBase
|
|
76
|
+
register SinatraScoutWorkflow
|
|
77
|
+
set :protection, false
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
setup do
|
|
81
|
+
header 'Host', 'localhost'
|
|
82
|
+
#Baking.directory = tmpdir.var.jobs.baking.find
|
|
83
|
+
app.add_workflow Baking
|
|
84
|
+
app.set :protection, false
|
|
85
|
+
Pantry.path_maps[:test_tmp] = tmpdir.dup
|
|
86
|
+
Pantry.path_maps[:default] = :test_tmp
|
|
87
|
+
Pantry.map_order = [:test_tmp]
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
def app
|
|
91
|
+
TestApp
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
def test_workflow_exports_json
|
|
95
|
+
get '/Baking', { '_format' => 'json'}
|
|
96
|
+
assert_equal 200, last_response.status, "expected 200 got #{last_response.status}: #{last_response.errors}"
|
|
97
|
+
body = JSON.parse(last_response.body)
|
|
98
|
+
assert body.key?('exec'), "expected 'exec' key in #{body.inspect}"
|
|
99
|
+
assert body.key?('stream'), "expected 'stream' key in #{body.inspect}"
|
|
100
|
+
assert body.key?('synchronous'), "expected 'synchronous' key in #{body.inspect}"
|
|
101
|
+
assert body.key?('asynchronous'), "expected 'asynchronous' key in #{body.inspect}"
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
def _test_documentation_json
|
|
105
|
+
get '/Baking/documentation', { '_format' => 'json' }
|
|
106
|
+
assert_equal 200, last_response.status
|
|
107
|
+
body = JSON.parse(last_response.body)
|
|
108
|
+
assert_include body['description'], 'Baking'
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
def _test_task_info_json
|
|
112
|
+
get '/Baking/bake_muffin_tray/info', { '_format' => 'json' }
|
|
113
|
+
assert_equal 200, last_response.status
|
|
114
|
+
body = JSON.parse(last_response.body)
|
|
115
|
+
assert body.key?('inputs'), "task_info should contain inputs: #{body.inspect}"
|
|
116
|
+
end
|
|
117
|
+
|
|
118
|
+
def _test_create_job_via_post
|
|
119
|
+
post '/Baking/bake_muffin_tray', { 'add_bluberries' => true, '_format' => 'json' }
|
|
120
|
+
assert_equal 200, last_response.status, "POST failed: #{last_response.body}"
|
|
121
|
+
body = JSON.parse(last_response.body)
|
|
122
|
+
assert body.key?('jobname'), "expected jobname in response: #{body.inspect}"
|
|
123
|
+
assert body.key?('status'), "expected status in response: #{body.inspect}"
|
|
124
|
+
end
|
|
125
|
+
|
|
126
|
+
def _test_get_job_info
|
|
127
|
+
post '/Baking/bake_muffin_tray', { 'add_bluberries' => true, '_format' => 'json' }
|
|
128
|
+
assert_equal 200, last_response.status, "POST failed: #{last_response.body}"
|
|
129
|
+
body = JSON.parse(last_response.body)
|
|
130
|
+
get "/Baking/bake_muffin_tray/#{body['jobname']}", { '_format' => 'json' }
|
|
131
|
+
assert_equal 200, last_response.status
|
|
132
|
+
body = JSON.parse(last_response.body)
|
|
133
|
+
assert (body.is_a?(Hash) && (body.key?('status') || body.key?('job'))), "unexpected job info response: #{body.inspect}"
|
|
134
|
+
end
|
|
135
|
+
|
|
136
|
+
def _test_list_job_files
|
|
137
|
+
post '/Baking/bake_muffin_tray', { 'add_bluberries' => true, '_format' => 'json' }
|
|
138
|
+
assert_equal 200, last_response.status, "POST failed: #{last_response.body}"
|
|
139
|
+
body = JSON.parse(last_response.body)
|
|
140
|
+
get "/Baking/bake_muffin_tray/#{body['jobname']}/files", { '_format' => 'json' }
|
|
141
|
+
body = JSON.parse(last_response.body)
|
|
142
|
+
assert_kind_of Array, body
|
|
143
|
+
end
|
|
144
|
+
|
|
145
|
+
def _test_delete_job
|
|
146
|
+
post '/Baking/bake_muffin_tray', { 'add_bluberries' => true, '_format' => 'json' }
|
|
147
|
+
assert_equal 200, last_response.status, "POST failed: #{last_response.body}"
|
|
148
|
+
body = JSON.parse(last_response.body)
|
|
149
|
+
delete "/Baking/bake_muffin_tray/#{body['jobname']}"
|
|
150
|
+
assert_equal 200, last_response.status
|
|
151
|
+
body = JSON.parse(last_response.body)
|
|
152
|
+
assert_equal true, body['ok']
|
|
153
|
+
get "/Baking/bake_muffin_tray/#{body['jobname']}", { '_format' => 'json' }
|
|
154
|
+
assert_equal 404, last_response.status
|
|
155
|
+
end
|
|
156
|
+
end
|
|
157
|
+
|
data/test/test_helper.rb
CHANGED
|
@@ -4,8 +4,34 @@ require 'scout/log'
|
|
|
4
4
|
$LOAD_PATH.unshift(File.expand_path(File.join(File.dirname(__FILE__), '..', 'lib')))
|
|
5
5
|
$LOAD_PATH.unshift(__dir__)
|
|
6
6
|
|
|
7
|
+
require 'scout'
|
|
7
8
|
class Test::Unit::TestCase
|
|
8
9
|
|
|
10
|
+
def self.tmpdir
|
|
11
|
+
@@tmpdir ||= Path.setup('tmp/test_tmpdir').find
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def tmpdir
|
|
15
|
+
@tmpdir ||= Test::Unit::TestCase.tmpdir
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
setup do
|
|
19
|
+
Open.rm_rf tmpdir
|
|
20
|
+
TmpFile.tmpdir = tmpdir.tmpfiles
|
|
21
|
+
Log::ProgressBar.default_severity = 0
|
|
22
|
+
Persist.cache_dir = tmpdir.var.cache
|
|
23
|
+
Persist::MEMORY_CACHE.clear
|
|
24
|
+
Open.remote_cache_dir = tmpdir.var.cache
|
|
25
|
+
Workflow.directory = tmpdir.var.jobs
|
|
26
|
+
Workflow.workflows.each{|wf| wf.directory = Workflow.directory[wf.name] }
|
|
27
|
+
Entity.entity_property_cache = tmpdir.entity_properties if defined?(Entity)
|
|
28
|
+
ScoutRender.app_dir = tmpdir.var.render
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
teardown do
|
|
32
|
+
Open.rm_rf tmpdir
|
|
33
|
+
Workflow.job_cache.clear
|
|
34
|
+
end
|
|
9
35
|
def with_tmp_file
|
|
10
36
|
name = 'test_file_terraform_' + rand(100000).to_s
|
|
11
37
|
file = File.join('/tmp', name)
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: scout-camp
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.1.
|
|
4
|
+
version: 0.1.14
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Miguel Vazquez
|
|
@@ -23,6 +23,76 @@ dependencies:
|
|
|
23
23
|
- - ">="
|
|
24
24
|
- !ruby/object:Gem::Version
|
|
25
25
|
version: '0'
|
|
26
|
+
- !ruby/object:Gem::Dependency
|
|
27
|
+
name: aws-sdk-s3
|
|
28
|
+
requirement: !ruby/object:Gem::Requirement
|
|
29
|
+
requirements:
|
|
30
|
+
- - ">="
|
|
31
|
+
- !ruby/object:Gem::Version
|
|
32
|
+
version: '0'
|
|
33
|
+
type: :runtime
|
|
34
|
+
prerelease: false
|
|
35
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
36
|
+
requirements:
|
|
37
|
+
- - ">="
|
|
38
|
+
- !ruby/object:Gem::Version
|
|
39
|
+
version: '0'
|
|
40
|
+
- !ruby/object:Gem::Dependency
|
|
41
|
+
name: sinatra
|
|
42
|
+
requirement: !ruby/object:Gem::Requirement
|
|
43
|
+
requirements:
|
|
44
|
+
- - ">="
|
|
45
|
+
- !ruby/object:Gem::Version
|
|
46
|
+
version: '0'
|
|
47
|
+
type: :runtime
|
|
48
|
+
prerelease: false
|
|
49
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
50
|
+
requirements:
|
|
51
|
+
- - ">="
|
|
52
|
+
- !ruby/object:Gem::Version
|
|
53
|
+
version: '0'
|
|
54
|
+
- !ruby/object:Gem::Dependency
|
|
55
|
+
name: omniauth
|
|
56
|
+
requirement: !ruby/object:Gem::Requirement
|
|
57
|
+
requirements:
|
|
58
|
+
- - ">="
|
|
59
|
+
- !ruby/object:Gem::Version
|
|
60
|
+
version: '0'
|
|
61
|
+
type: :runtime
|
|
62
|
+
prerelease: false
|
|
63
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
64
|
+
requirements:
|
|
65
|
+
- - ">="
|
|
66
|
+
- !ruby/object:Gem::Version
|
|
67
|
+
version: '0'
|
|
68
|
+
- !ruby/object:Gem::Dependency
|
|
69
|
+
name: mimemagic
|
|
70
|
+
requirement: !ruby/object:Gem::Requirement
|
|
71
|
+
requirements:
|
|
72
|
+
- - ">="
|
|
73
|
+
- !ruby/object:Gem::Version
|
|
74
|
+
version: '0'
|
|
75
|
+
type: :runtime
|
|
76
|
+
prerelease: false
|
|
77
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
78
|
+
requirements:
|
|
79
|
+
- - ">="
|
|
80
|
+
- !ruby/object:Gem::Version
|
|
81
|
+
version: '0'
|
|
82
|
+
- !ruby/object:Gem::Dependency
|
|
83
|
+
name: omniauth-google-oauth2
|
|
84
|
+
requirement: !ruby/object:Gem::Requirement
|
|
85
|
+
requirements:
|
|
86
|
+
- - ">="
|
|
87
|
+
- !ruby/object:Gem::Version
|
|
88
|
+
version: '0'
|
|
89
|
+
type: :runtime
|
|
90
|
+
prerelease: false
|
|
91
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
92
|
+
requirements:
|
|
93
|
+
- - ">="
|
|
94
|
+
- !ruby/object:Gem::Version
|
|
95
|
+
version: '0'
|
|
26
96
|
description: Functionalities to deploy and use scouts in remote servers like AWS
|
|
27
97
|
email: mikisvaz@gmail.com
|
|
28
98
|
executables:
|
|
@@ -38,6 +108,7 @@ files:
|
|
|
38
108
|
- Rakefile
|
|
39
109
|
- VERSION
|
|
40
110
|
- bin/scout-camp
|
|
111
|
+
- doc/terraform.md
|
|
41
112
|
- lib/scout-camp.rb
|
|
42
113
|
- lib/scout/aws/s3.rb
|
|
43
114
|
- lib/scout/offsite.rb
|
|
@@ -46,10 +117,32 @@ files:
|
|
|
46
117
|
- lib/scout/offsite/ssh.rb
|
|
47
118
|
- lib/scout/offsite/step.rb
|
|
48
119
|
- lib/scout/offsite/sync.rb
|
|
120
|
+
- lib/scout/render.rb
|
|
121
|
+
- lib/scout/render/engine.rb
|
|
122
|
+
- lib/scout/render/helpers.rb
|
|
123
|
+
- lib/scout/render/resource.rb
|
|
124
|
+
- lib/scout/sinatra/auth.rb
|
|
125
|
+
- lib/scout/sinatra/base.rb
|
|
126
|
+
- lib/scout/sinatra/base/assets.rb
|
|
127
|
+
- lib/scout/sinatra/base/favicon.rb
|
|
128
|
+
- lib/scout/sinatra/base/headers.rb
|
|
129
|
+
- lib/scout/sinatra/base/helpers.rb
|
|
130
|
+
- lib/scout/sinatra/base/parameters.rb
|
|
131
|
+
- lib/scout/sinatra/base/post_processing.rb
|
|
132
|
+
- lib/scout/sinatra/base/session.rb
|
|
133
|
+
- lib/scout/sinatra/entity.rb
|
|
134
|
+
- lib/scout/sinatra/finder.rb
|
|
135
|
+
- lib/scout/sinatra/fragment.rb
|
|
136
|
+
- lib/scout/sinatra/htmx.rb
|
|
137
|
+
- lib/scout/sinatra/knowledge_base.rb
|
|
138
|
+
- lib/scout/sinatra/tool.rb
|
|
139
|
+
- lib/scout/sinatra/workflow.rb
|
|
49
140
|
- lib/scout/terraform_dsl.rb
|
|
50
141
|
- lib/scout/terraform_dsl/deployment.rb
|
|
51
142
|
- lib/scout/terraform_dsl/util.rb
|
|
52
143
|
- scout-camp.gemspec
|
|
144
|
+
- scout_commands/find
|
|
145
|
+
- scout_commands/glob
|
|
53
146
|
- scout_commands/offsite
|
|
54
147
|
- scout_commands/sync
|
|
55
148
|
- scout_commands/terraform/add/lambda
|
|
@@ -123,6 +216,14 @@ files:
|
|
|
123
216
|
- test/scout/offsite/test_ssh.rb
|
|
124
217
|
- test/scout/offsite/test_step.rb
|
|
125
218
|
- test/scout/offsite/test_sync.rb
|
|
219
|
+
- test/scout/render/test_engine.rb
|
|
220
|
+
- test/scout/render/test_resource.rb
|
|
221
|
+
- test/scout/sinatra/base/test_headers.rb
|
|
222
|
+
- test/scout/sinatra/base/test_parameters.rb
|
|
223
|
+
- test/scout/sinatra/test_base.rb
|
|
224
|
+
- test/scout/sinatra/test_entity.rb
|
|
225
|
+
- test/scout/sinatra/test_render.rb
|
|
226
|
+
- test/scout/sinatra/test_workflow.rb
|
|
126
227
|
- test/scout/test_terraform_dsl.rb
|
|
127
228
|
- test/test_helper.rb
|
|
128
229
|
homepage: http://github.com/mikisvaz/scout-camp
|
|
@@ -143,7 +244,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
143
244
|
- !ruby/object:Gem::Version
|
|
144
245
|
version: '0'
|
|
145
246
|
requirements: []
|
|
146
|
-
rubygems_version: 3.
|
|
247
|
+
rubygems_version: 3.7.0.dev
|
|
147
248
|
specification_version: 4
|
|
148
249
|
summary: Deploy you scouts
|
|
149
250
|
test_files: []
|