scout-camp 0.1.3 → 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 +21 -1
- data/VERSION +1 -1
- data/lib/scout/aws/s3.rb +15 -3
- data/scout-camp.gemspec +11 -3
- data/scout_commands/terraform/add +23 -29
- data/scout_commands/terraform/plan +31 -0
- data/scout_commands/terraform/task +92 -0
- data/share/aws/lambda_function.rb +27 -0
- data/share/terraform/aws/host/variables.tf +0 -1
- data/share/terraform/aws/lambda/main.tf +1 -28
- data/share/terraform/aws/lambda/variables.tf +4 -0
- data/share/terraform/aws/policy_attachment/main.tf +5 -0
- data/share/terraform/aws/policy_attachment/variables.tf +12 -0
- data/share/terraform/aws/role/main.tf +14 -0
- data/share/terraform/aws/role/output.tf +15 -0
- data/share/terraform/aws/role/variables.tf +11 -0
- metadata +10 -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,10 +27,13 @@ scout-camp=/$PWD filter="*" {
|
|
27
27
|
terraform=terraform{
|
28
28
|
list
|
29
29
|
add
|
30
|
+
fargate
|
30
31
|
status
|
31
32
|
apply
|
33
|
+
plan
|
32
34
|
destroy
|
33
35
|
remove
|
36
|
+
task
|
34
37
|
}
|
35
38
|
}
|
36
39
|
share=share {
|
@@ -41,6 +44,19 @@ scout-camp=/$PWD filter="*" {
|
|
41
44
|
output.tf
|
42
45
|
variables.tf
|
43
46
|
}
|
47
|
+
lambda=lambda {
|
48
|
+
main.tf
|
49
|
+
variables.tf
|
50
|
+
}
|
51
|
+
role=role{
|
52
|
+
main.tf
|
53
|
+
variables.tf
|
54
|
+
output.tf
|
55
|
+
}
|
56
|
+
policy_attachment=policy_attachment {
|
57
|
+
main.tf
|
58
|
+
variables.tf
|
59
|
+
}
|
44
60
|
cluster=cluster {
|
45
61
|
main.tf
|
46
62
|
output.tf
|
@@ -52,7 +68,8 @@ scout-camp=/$PWD filter="*" {
|
|
52
68
|
output.tf
|
53
69
|
variables.tf
|
54
70
|
}
|
55
|
-
|
71
|
+
fargate=fargate{
|
72
|
+
locals.tf
|
56
73
|
main.tf
|
57
74
|
variables.tf
|
58
75
|
}
|
@@ -62,6 +79,9 @@ scout-camp=/$PWD filter="*" {
|
|
62
79
|
}
|
63
80
|
}
|
64
81
|
}
|
82
|
+
aws=aws{
|
83
|
+
lambda_function.rb
|
84
|
+
}
|
65
85
|
}
|
66
86
|
test=test {
|
67
87
|
test_helper.rb
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.1.
|
1
|
+
0.1.5
|
data/lib/scout/aws/s3.rb
CHANGED
@@ -18,10 +18,15 @@ module Open
|
|
18
18
|
end
|
19
19
|
|
20
20
|
def self.claim(uri, ...)
|
21
|
-
|
21
|
+
if Path === uri and not uri.located?
|
22
|
+
is_s3? uri.find
|
23
|
+
else
|
24
|
+
is_s3? uri
|
25
|
+
end
|
22
26
|
end
|
23
27
|
|
24
28
|
def self.parse_s3_uri(uri)
|
29
|
+
uri = uri.find if Path === uri and not uri.located?
|
25
30
|
uri = uri.sub(%r{^s3://}, '')
|
26
31
|
bucket, *key_parts = uri.split('/', -1)
|
27
32
|
key = key_parts.join('/').sub(%r{^/}, '')
|
@@ -64,8 +69,13 @@ module Open
|
|
64
69
|
|
65
70
|
resp.contents.each do |object|
|
66
71
|
key = object.key
|
67
|
-
|
68
|
-
|
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
|
69
79
|
|
70
80
|
if File.fnmatch?(pattern, remaining, File::FNM_PATHNAME)
|
71
81
|
matches << "s3://#{bucket}/#{key}"
|
@@ -138,6 +148,8 @@ module Open
|
|
138
148
|
Open::S3.write(path, content)
|
139
149
|
end
|
140
150
|
|
151
|
+
def self.mkdir(path)
|
152
|
+
end
|
141
153
|
end
|
142
154
|
end
|
143
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]
|
@@ -42,8 +42,11 @@ Gem::Specification.new do |s|
|
|
42
42
|
"scout_commands/terraform/apply",
|
43
43
|
"scout_commands/terraform/destroy",
|
44
44
|
"scout_commands/terraform/list",
|
45
|
+
"scout_commands/terraform/plan",
|
45
46
|
"scout_commands/terraform/remove",
|
46
47
|
"scout_commands/terraform/status",
|
48
|
+
"scout_commands/terraform/task",
|
49
|
+
"share/aws/lambda_function.rb",
|
47
50
|
"share/terraform/aws/bucket/main.tf",
|
48
51
|
"share/terraform/aws/bucket/output.tf",
|
49
52
|
"share/terraform/aws/bucket/variables.tf",
|
@@ -56,8 +59,13 @@ Gem::Specification.new do |s|
|
|
56
59
|
"share/terraform/aws/host/variables.tf",
|
57
60
|
"share/terraform/aws/lambda/main.tf",
|
58
61
|
"share/terraform/aws/lambda/variables.tf",
|
62
|
+
"share/terraform/aws/policy_attachment/main.tf",
|
63
|
+
"share/terraform/aws/policy_attachment/variables.tf",
|
59
64
|
"share/terraform/aws/provider/data.tf",
|
60
65
|
"share/terraform/aws/provider/output.tf",
|
66
|
+
"share/terraform/aws/role/main.tf",
|
67
|
+
"share/terraform/aws/role/output.tf",
|
68
|
+
"share/terraform/aws/role/variables.tf",
|
61
69
|
"test/scout/aws/test_s3.rb",
|
62
70
|
"test/scout/offsite/test_ssh.rb",
|
63
71
|
"test/scout/offsite/test_step.rb",
|
@@ -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,24 +53,34 @@ 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
|
|
85
|
-
terraform
|
67
|
+
terraform = TerraformDSL.new
|
68
|
+
role = terraform.add :aws, :role, role_name: "lambda_execution_role", principal: {Service: ["lambda.amazonaws.com"]}
|
69
|
+
|
70
|
+
terraform.add :aws, :policy_attachment, name: "exec_policy", policy_name: "lamda_basic_execution",
|
71
|
+
roles: [role.id],
|
72
|
+
policy_arn: "arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole"
|
73
|
+
|
74
|
+
terraform.add :aws, :policy_attachment, name: "s3_policy", policy_name: "lamda_s3_full_access",
|
75
|
+
roles: [role.id],
|
76
|
+
policy_arn: "arn:aws:iam::aws:policy/AmazonS3FullAccess"
|
77
|
+
|
78
|
+
terraform.add :aws, :lambda, function_name: "#{name}Job", filename: filename, role: role.arn,
|
86
79
|
environment_variables: {
|
87
80
|
HOME: '.',
|
88
81
|
HOSTNAME: "aws_lambda",
|
89
82
|
AWS_BUCKET: options[:bucket],
|
83
|
+
SCOUT_NOCOLOR: "true"
|
90
84
|
}
|
91
85
|
|
92
86
|
terraform.config dir
|
@@ -0,0 +1,31 @@
|
|
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
|
+
Work with deployment
|
10
|
+
|
11
|
+
$ #{$0} [<options>] <name>
|
12
|
+
|
13
|
+
-h--help Print this help
|
14
|
+
EOF
|
15
|
+
if options[:help]
|
16
|
+
if defined? scout_usage
|
17
|
+
scout_usage
|
18
|
+
else
|
19
|
+
puts SOPT.doc
|
20
|
+
end
|
21
|
+
exit 0
|
22
|
+
end
|
23
|
+
|
24
|
+
name = ARGV.shift
|
25
|
+
raise MissingParameterException, :name if name.nil?
|
26
|
+
|
27
|
+
dir = Scout.var.deployments.glob_all(name).first
|
28
|
+
|
29
|
+
deployment = TerraformDSL::Deployment.new dir
|
30
|
+
deployment.plan
|
31
|
+
|
@@ -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
|
@@ -1,40 +1,13 @@
|
|
1
|
-
provider "aws" {
|
2
|
-
region = "eu-west-2"
|
3
|
-
}
|
4
|
-
|
5
1
|
resource "aws_lambda_function" "this" {
|
6
2
|
function_name = var.function_name
|
7
|
-
role = aws_iam_role.lambda_role.arn
|
8
3
|
handler = "lambda_function.lambda_handler"
|
9
4
|
runtime = var.runtime
|
10
5
|
filename = var.filename
|
11
6
|
source_code_hash = filebase64sha256(var.filename)
|
12
7
|
timeout = var.timeout
|
8
|
+
role = var.role
|
13
9
|
|
14
10
|
environment {
|
15
11
|
variables = var.environment_variables
|
16
12
|
}
|
17
13
|
}
|
18
|
-
|
19
|
-
resource "aws_iam_role" "lambda_role" {
|
20
|
-
name = "lambda_execution_role"
|
21
|
-
|
22
|
-
assume_role_policy = jsonencode({
|
23
|
-
Version = "2012-10-17"
|
24
|
-
Statement = [
|
25
|
-
{
|
26
|
-
Action = "sts:AssumeRole"
|
27
|
-
Effect = "Allow"
|
28
|
-
Principal = {
|
29
|
-
Service = "lambda.amazonaws.com"
|
30
|
-
}
|
31
|
-
}
|
32
|
-
]
|
33
|
-
})
|
34
|
-
}
|
35
|
-
|
36
|
-
resource "aws_iam_policy_attachment" "lambda_basic" {
|
37
|
-
name = "lambda_basic"
|
38
|
-
roles = [aws_iam_role.lambda_role.name]
|
39
|
-
policy_arn = "arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole"
|
40
|
-
}
|
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
|
@@ -54,8 +54,11 @@ files:
|
|
54
54
|
- scout_commands/terraform/apply
|
55
55
|
- scout_commands/terraform/destroy
|
56
56
|
- scout_commands/terraform/list
|
57
|
+
- scout_commands/terraform/plan
|
57
58
|
- scout_commands/terraform/remove
|
58
59
|
- scout_commands/terraform/status
|
60
|
+
- scout_commands/terraform/task
|
61
|
+
- share/aws/lambda_function.rb
|
59
62
|
- share/terraform/aws/bucket/main.tf
|
60
63
|
- share/terraform/aws/bucket/output.tf
|
61
64
|
- share/terraform/aws/bucket/variables.tf
|
@@ -68,8 +71,13 @@ files:
|
|
68
71
|
- share/terraform/aws/host/variables.tf
|
69
72
|
- share/terraform/aws/lambda/main.tf
|
70
73
|
- share/terraform/aws/lambda/variables.tf
|
74
|
+
- share/terraform/aws/policy_attachment/main.tf
|
75
|
+
- share/terraform/aws/policy_attachment/variables.tf
|
71
76
|
- share/terraform/aws/provider/data.tf
|
72
77
|
- share/terraform/aws/provider/output.tf
|
78
|
+
- share/terraform/aws/role/main.tf
|
79
|
+
- share/terraform/aws/role/output.tf
|
80
|
+
- share/terraform/aws/role/variables.tf
|
73
81
|
- test/scout/aws/test_s3.rb
|
74
82
|
- test/scout/offsite/test_ssh.rb
|
75
83
|
- test/scout/offsite/test_step.rb
|