scout-camp 0.1.4 → 0.1.5
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 +10 -0
- data/VERSION +1 -1
- data/lib/scout/aws/s3.rb +9 -2
- data/scout-camp.gemspec +5 -3
- data/scout_commands/terraform/add +11 -28
- data/scout_commands/terraform/task +92 -0
- data/share/aws/lambda_function.rb +27 -0
- data/share/terraform/aws/host/variables.tf +0 -1
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 225a937ec9eac0522929e3da409bed070cf387a725d8c8cc5e4041832746fee5
|
4
|
+
data.tar.gz: 5d88f8bc6d5d382b0de9b1765a5cf95e688708dfdbe67cb4372055876fcc5f4c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7008e9b2ae08a9f6c8fdef48e913d09a6d07eb42825c246bd6182b23868798c1d5227fbcd8acf9147dc1918e0b920d90851539c6a8d74cae481e1cc65afce22a
|
7
|
+
data.tar.gz: 9cfc47356b2225417cceab5625e43a047df912011b655ff6754f770d6cdf9beca85dd6cddfe266ffe6a4018ba5ee52728d7a199051dfcfa4a026aa7248801f10
|
data/.vimproject
CHANGED
@@ -27,11 +27,13 @@ scout-camp=/$PWD filter="*" {
|
|
27
27
|
terraform=terraform{
|
28
28
|
list
|
29
29
|
add
|
30
|
+
fargate
|
30
31
|
status
|
31
32
|
apply
|
32
33
|
plan
|
33
34
|
destroy
|
34
35
|
remove
|
36
|
+
task
|
35
37
|
}
|
36
38
|
}
|
37
39
|
share=share {
|
@@ -66,12 +68,20 @@ scout-camp=/$PWD filter="*" {
|
|
66
68
|
output.tf
|
67
69
|
variables.tf
|
68
70
|
}
|
71
|
+
fargate=fargate{
|
72
|
+
locals.tf
|
73
|
+
main.tf
|
74
|
+
variables.tf
|
75
|
+
}
|
69
76
|
provider=provider {
|
70
77
|
data.tf
|
71
78
|
output.tf
|
72
79
|
}
|
73
80
|
}
|
74
81
|
}
|
82
|
+
aws=aws{
|
83
|
+
lambda_function.rb
|
84
|
+
}
|
75
85
|
}
|
76
86
|
test=test {
|
77
87
|
test_helper.rb
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.1.
|
1
|
+
0.1.5
|
data/lib/scout/aws/s3.rb
CHANGED
@@ -69,8 +69,13 @@ module Open
|
|
69
69
|
|
70
70
|
resp.contents.each do |object|
|
71
71
|
key = object.key
|
72
|
-
|
73
|
-
|
72
|
+
|
73
|
+
if prefix.empty?
|
74
|
+
remaining = key.sub(%r{^/}, '')
|
75
|
+
else
|
76
|
+
remaining = key[prefix.length..-1] || ''
|
77
|
+
remaining = remaining.sub(%r{^/}, '')
|
78
|
+
end
|
74
79
|
|
75
80
|
if File.fnmatch?(pattern, remaining, File::FNM_PATHNAME)
|
76
81
|
matches << "s3://#{bucket}/#{key}"
|
@@ -143,6 +148,8 @@ module Open
|
|
143
148
|
Open::S3.write(path, content)
|
144
149
|
end
|
145
150
|
|
151
|
+
def self.mkdir(path)
|
152
|
+
end
|
146
153
|
end
|
147
154
|
end
|
148
155
|
|
data/scout-camp.gemspec
CHANGED
@@ -2,16 +2,16 @@
|
|
2
2
|
# DO NOT EDIT THIS FILE DIRECTLY
|
3
3
|
# Instead, edit Juwelier::Tasks in Rakefile, and run 'rake gemspec'
|
4
4
|
# -*- encoding: utf-8 -*-
|
5
|
-
# stub: scout-camp 0.1.
|
5
|
+
# stub: scout-camp 0.1.5 ruby lib
|
6
6
|
|
7
7
|
Gem::Specification.new do |s|
|
8
8
|
s.name = "scout-camp".freeze
|
9
|
-
s.version = "0.1.
|
9
|
+
s.version = "0.1.5".freeze
|
10
10
|
|
11
11
|
s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
|
12
12
|
s.require_paths = ["lib".freeze]
|
13
13
|
s.authors = ["Miguel Vazquez".freeze]
|
14
|
-
s.date = "2025-03-
|
14
|
+
s.date = "2025-03-31"
|
15
15
|
s.description = "Functionalities to deploy and use scouts in remote servers like AWS".freeze
|
16
16
|
s.email = "mikisvaz@gmail.com".freeze
|
17
17
|
s.executables = ["scout-camp".freeze]
|
@@ -45,6 +45,8 @@ Gem::Specification.new do |s|
|
|
45
45
|
"scout_commands/terraform/plan",
|
46
46
|
"scout_commands/terraform/remove",
|
47
47
|
"scout_commands/terraform/status",
|
48
|
+
"scout_commands/terraform/task",
|
49
|
+
"share/aws/lambda_function.rb",
|
48
50
|
"share/terraform/aws/bucket/main.tf",
|
49
51
|
"share/terraform/aws/bucket/output.tf",
|
50
52
|
"share/terraform/aws/bucket/variables.tf",
|
@@ -14,6 +14,7 @@ $ #{$0} [<options>] <name>
|
|
14
14
|
-w--workflows* Workflows to provision
|
15
15
|
-w--dependencies* Workflows to provision
|
16
16
|
-b--bucket* Bucket to connect
|
17
|
+
--pkg* Pkgdir, scout or rbbt (defaults to scout)
|
17
18
|
EOF
|
18
19
|
if options[:help]
|
19
20
|
if defined? scout_usage
|
@@ -31,37 +32,20 @@ deployments = Scout.var.deployments.glob_all("*").collect(&:basename)
|
|
31
32
|
raise "Deployment clash" if deployments.include? name
|
32
33
|
dir = Scout.var.deployments[name]
|
33
34
|
|
34
|
-
IndiferentHash.add_defaults options, workflows: '', dependencies: 'scout-gear,scout-camp', bucket: 'scout.var'
|
35
|
+
IndiferentHash.add_defaults options, workflows: '', dependencies: 'scout-gear,scout-camp', bucket: 'scout.var', pkg: 'scout'
|
35
36
|
|
36
37
|
workflows = options[:workflows].split(",")
|
37
38
|
dependencies = options[:dependencies].split(",")
|
39
|
+
dependencies.push 'scout-camp' unless dependencies.include?('scout-camp')
|
40
|
+
pkg = options[:pkg]
|
38
41
|
|
39
|
-
|
40
|
-
def lambda_handler(event:, context:)
|
41
|
-
require 'scout'
|
42
|
-
Path.path_maps[:bucket] = "s3://#{ENV["AWS_BUCKET"]}/{TOPLEVEL}/{SUBPATH}"
|
43
|
-
Path.path_maps[:default] = :bucket
|
44
|
-
|
45
|
-
require 'scout/workflow'
|
46
|
-
require 'scout/aws/s3'
|
47
|
-
|
48
|
-
workflow, task_name, jobname, inputs = IndiferentHash.process_options event,
|
49
|
-
:workflow, :task_name, :jobname, :inputs
|
50
|
-
|
51
|
-
wf = Workflow.require_workflow workflow
|
52
|
-
|
53
|
-
job = wf.job(task_name, jobname, inputs)
|
54
|
-
job.run
|
55
|
-
end
|
56
|
-
EOF
|
57
|
-
|
58
|
-
def lambda_package(dependencies, workflows, code)
|
42
|
+
def lambda_package(dependencies, workflows, function_file, pkg)
|
59
43
|
TmpFile.with_path do |dir|
|
60
|
-
dir["lambda_function.rb"]
|
44
|
+
Open.cp function_file, dir["lambda_function.rb"]
|
61
45
|
dir["Gemfile"].write "source 'https://rubygems.org'\n" + dependencies.collect{|d| "gem '#{d}'"}*"\n"
|
62
46
|
workflows.each do |workflow|
|
63
|
-
Open.mkdir dir["
|
64
|
-
Open.
|
47
|
+
Open.mkdir dir[".#{pkg}"].workflows
|
48
|
+
Open.ln_s Scout.workflows[workflow], dir[".#{pkg}"].workflows[workflow]
|
65
49
|
end
|
66
50
|
Misc.in_dir dir do
|
67
51
|
`bundle config set path 'vendor/bundle'`
|
@@ -69,19 +53,18 @@ def lambda_package(dependencies, workflows, code)
|
|
69
53
|
`rm -Rf vendor/bundle/ruby/*/cache`
|
70
54
|
`rm -Rf vendor/bundle/ruby/*/gems/RubyInline*`
|
71
55
|
TmpFile.with_file nil, extension: :zip do |zip|
|
72
|
-
`zip -r "#{zip}" vendor/bundle lambda_function.rb
|
56
|
+
`zip -r "#{zip}" vendor/bundle lambda_function.rb .#{pkg}`
|
73
57
|
yield zip
|
74
58
|
end
|
75
59
|
end
|
76
60
|
end
|
77
61
|
end
|
78
62
|
|
79
|
-
|
80
|
-
lambda_package dependencies, workflows, code do |file|
|
81
|
-
terraform = TerraformDSL.new
|
63
|
+
lambda_package dependencies, workflows, Scout.share.aws.lambda_function.set_extension('rb'), options[:pkg] do |file|
|
82
64
|
filename = 'lambda_package.zip'
|
83
65
|
Open.cp file, dir[filename]
|
84
66
|
|
67
|
+
terraform = TerraformDSL.new
|
85
68
|
role = terraform.add :aws, :role, role_name: "lambda_execution_role", principal: {Service: ["lambda.amazonaws.com"]}
|
86
69
|
|
87
70
|
terraform.add :aws, :policy_attachment, name: "exec_policy", policy_name: "lamda_basic_execution",
|
@@ -0,0 +1,92 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'scout'
|
4
|
+
|
5
|
+
$0 = "scout #{$previous_commands.any? ? $previous_commands*" " + " " : "" }#{ File.basename(__FILE__) }" if $previous_commands
|
6
|
+
|
7
|
+
options = SOPT.setup <<EOF
|
8
|
+
|
9
|
+
Call a task on AWS
|
10
|
+
|
11
|
+
$ #{$0} [<options>] <workflow> <task> [<other|->]*
|
12
|
+
|
13
|
+
-h--help Print this help
|
14
|
+
--prefix* Prefix, defaults to Scout
|
15
|
+
EOF
|
16
|
+
if options[:help]
|
17
|
+
if defined? scout_usage
|
18
|
+
scout_usage
|
19
|
+
else
|
20
|
+
puts SOPT.doc
|
21
|
+
end
|
22
|
+
exit 0
|
23
|
+
end
|
24
|
+
|
25
|
+
workflow, task_name = ARGV
|
26
|
+
|
27
|
+
raise ParamterException, "No workflow specified" if workflow.nil?
|
28
|
+
|
29
|
+
prefix = IndiferentHash.process_options options, :prefix, prefix: "Scout"
|
30
|
+
require 'aws-sdk-lambda'
|
31
|
+
payload = {}
|
32
|
+
payload["workflow"] = workflow
|
33
|
+
payload["task_name"] = task_name
|
34
|
+
lambda_handler = "#{prefix}Job"
|
35
|
+
|
36
|
+
def aws_lambda(name, payload)
|
37
|
+
client = Aws::Lambda::Client.new
|
38
|
+
resp = client.invoke({
|
39
|
+
function_name: name,
|
40
|
+
payload: payload.to_json,
|
41
|
+
})
|
42
|
+
|
43
|
+
JSON.load(resp.payload)
|
44
|
+
end
|
45
|
+
|
46
|
+
def SOPT_str(task_info)
|
47
|
+
sopt_options = []
|
48
|
+
task_info[:inputs].each do |name|
|
49
|
+
options = task_info[:input_options][name]
|
50
|
+
type = task_info[:input_types][name]
|
51
|
+
shortcut = (options && options[:shortcut]) || name.to_s.slice(0,1)
|
52
|
+
boolean = type.to_sym == :boolean
|
53
|
+
|
54
|
+
sopt_options << "-#{shortcut}--#{name}#{boolean ? "" : "*"}"
|
55
|
+
end
|
56
|
+
|
57
|
+
sopt_options * ":"
|
58
|
+
end
|
59
|
+
|
60
|
+
def get_SOPT(task_info)
|
61
|
+
IndiferentHash.setup task_info
|
62
|
+
sopt_option_string = self.SOPT_str(task_info)
|
63
|
+
job_options = SOPT.get sopt_option_string
|
64
|
+
|
65
|
+
task_info[:inputs].each do |name|
|
66
|
+
options = task_info[:input_options][name]
|
67
|
+
type = task_info[:input_types][name]
|
68
|
+
next unless type.to_s.include?('array')
|
69
|
+
if job_options.include?(name) && (! Open.exist?(job_options[name]) || type.to_s.include?('file') || type.to_s.include?('path'))
|
70
|
+
job_options[name] = job_options[name].split(",")
|
71
|
+
end
|
72
|
+
end
|
73
|
+
job_options
|
74
|
+
end
|
75
|
+
|
76
|
+
res = case task_name
|
77
|
+
when nil
|
78
|
+
aws_lambda(lambda_handler, payload)
|
79
|
+
else
|
80
|
+
task_info = aws_lambda(lambda_handler, payload.merge(task_name: "info", inputs: {task_name: task_name}))
|
81
|
+
|
82
|
+
payload["inputs"] = get_SOPT(task_info)
|
83
|
+
|
84
|
+
aws_lambda(lambda_handler, payload)
|
85
|
+
end
|
86
|
+
|
87
|
+
if res["errorMessage"]
|
88
|
+
Log.error res["errorMessage"]
|
89
|
+
Log.stack res["stackTrace"]
|
90
|
+
else
|
91
|
+
iii res
|
92
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
def lambda_handler(event:, context:)
|
2
|
+
require 'scout'
|
3
|
+
|
4
|
+
Path.path_maps[:bucket] = "s3://#{ENV["AWS_BUCKET"]}/{TOPLEVEL}/{SUBPATH}"
|
5
|
+
Path.path_maps[:default] = :bucket
|
6
|
+
|
7
|
+
require 'scout/workflow'
|
8
|
+
require 'scout/aws/s3'
|
9
|
+
|
10
|
+
workflow, task_name, jobname, inputs = IndiferentHash.process_options event,
|
11
|
+
:workflow, :task_name, :jobname, :inputs
|
12
|
+
|
13
|
+
raise ParamterException, "No workflow specified" if workflow.nil?
|
14
|
+
|
15
|
+
workflow = Workflow.require_workflow workflow
|
16
|
+
|
17
|
+
case task_name
|
18
|
+
when nil
|
19
|
+
return {tasks: workflow.tasks.keys, documentation: workflow.documentation}
|
20
|
+
when "info"
|
21
|
+
raise ParamterException, "No task_name specified" if task_name.nil?
|
22
|
+
return workflow.task_info(inputs["task_name"])
|
23
|
+
else
|
24
|
+
job = workflow.job(task_name, jobname, inputs)
|
25
|
+
job.run
|
26
|
+
end
|
27
|
+
end
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
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.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Miguel Vazquez
|
8
8
|
bindir: bin
|
9
9
|
cert_chain: []
|
10
|
-
date: 2025-03-
|
10
|
+
date: 2025-03-31 00:00:00.000000000 Z
|
11
11
|
dependencies:
|
12
12
|
- !ruby/object:Gem::Dependency
|
13
13
|
name: scout-essentials
|
@@ -57,6 +57,8 @@ files:
|
|
57
57
|
- scout_commands/terraform/plan
|
58
58
|
- scout_commands/terraform/remove
|
59
59
|
- scout_commands/terraform/status
|
60
|
+
- scout_commands/terraform/task
|
61
|
+
- share/aws/lambda_function.rb
|
60
62
|
- share/terraform/aws/bucket/main.tf
|
61
63
|
- share/terraform/aws/bucket/output.tf
|
62
64
|
- share/terraform/aws/bucket/variables.tf
|