scout-camp 0.1.2 → 0.1.4

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: b22b7fc83e0cee051edf923ffd40bfaa3759f78eb59d80c7abb0b120be250682
4
- data.tar.gz: aa35cfafdb9ac3aeee81b247c1f81e1ab3bfb638b51c08108eb88e23940254f2
3
+ metadata.gz: bc2855face5f3cb3ced365171398295b656f378fc681da6f0cd530c2c2977ea6
4
+ data.tar.gz: baacce8525b32344f5391d9fa61b62dbb639a91bbddb2ca392a8f7ac8ce762f3
5
5
  SHA512:
6
- metadata.gz: 7c48331d38a61928b7de2aa8c94d04a6feaf11e60bedcac7bde2be0ecb242a78f622b519ee7dccc2faefa42d721ed58fd22a3ce58202641ce92c67c2b3d90988
7
- data.tar.gz: c6ede844ae01c2acffe2150b88b2ab1b674fe2e3937161da471a0a03be710d3cbf728a2a353be840f5ef1a3cdab20a1660d41bd579cbc4dc30b6281b890a8e93
6
+ metadata.gz: c4e5de039eaba61b854f1b0af3a41172d95bbd872f64750d8bd9775b6321bcc0cbe174adbdf684a14ff836195b6cc840be06d97ddd4803ceb2b56cb032302d91
7
+ data.tar.gz: ca4e6b9e69160ba22e57b3b2cadc9a669f628fdf47b20ea696cf2678b998f686bb6eebc6abcc9aba03369356a5257175b701f080dafd9bb464b3f71cbcceb779
data/.vimproject CHANGED
@@ -29,6 +29,7 @@ scout-camp=/$PWD filter="*" {
29
29
  add
30
30
  status
31
31
  apply
32
+ plan
32
33
  destroy
33
34
  remove
34
35
  }
@@ -41,19 +42,28 @@ scout-camp=/$PWD filter="*" {
41
42
  output.tf
42
43
  variables.tf
43
44
  }
44
- cluster=cluster {
45
+ lambda=lambda {
46
+ main.tf
47
+ variables.tf
48
+ }
49
+ role=role{
45
50
  main.tf
51
+ variables.tf
46
52
  output.tf
53
+ }
54
+ policy_attachment=policy_attachment {
55
+ main.tf
47
56
  variables.tf
48
57
  }
49
- host=host {
50
- locals.tf
58
+ cluster=cluster {
51
59
  main.tf
52
60
  output.tf
53
61
  variables.tf
54
62
  }
55
- lambda=lambda {
63
+ host=host {
64
+ locals.tf
56
65
  main.tf
66
+ output.tf
57
67
  variables.tf
58
68
  }
59
69
  provider=provider {
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.2
1
+ 0.1.4
data/bin/scout-camp CHANGED
@@ -1,5 +1,7 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
+ $LOAD_PATH.unshift File.join(__dir__, '../lib')
4
+
3
5
  require 'scout-camp'
4
6
 
5
7
  load Scout.bin.scout.find
data/lib/scout/aws/s3.rb CHANGED
@@ -9,15 +9,24 @@ module Open
9
9
  module S3
10
10
  extend Hook
11
11
 
12
+ def self.lock(*args, &block)
13
+ yield nil
14
+ end
15
+
12
16
  def self.is_s3?(uri)
13
17
  uri.start_with? 's3://'
14
18
  end
15
19
 
16
20
  def self.claim(uri, ...)
17
- is_s3? uri
21
+ if Path === uri and not uri.located?
22
+ is_s3? uri.find
23
+ else
24
+ is_s3? uri
25
+ end
18
26
  end
19
27
 
20
28
  def self.parse_s3_uri(uri)
29
+ uri = uri.find if Path === uri and not uri.located?
21
30
  uri = uri.sub(%r{^s3://}, '')
22
31
  bucket, *key_parts = uri.split('/', -1)
23
32
  key = key_parts.join('/').sub(%r{^/}, '')
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.2 ruby lib
5
+ # stub: scout-camp 0.1.4 ruby lib
6
6
 
7
7
  Gem::Specification.new do |s|
8
8
  s.name = "scout-camp".freeze
9
- s.version = "0.1.2".freeze
9
+ s.version = "0.1.4".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-19"
14
+ s.date = "2025-03-25"
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,6 +42,7 @@ 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",
47
48
  "share/terraform/aws/bucket/main.tf",
@@ -56,8 +57,13 @@ Gem::Specification.new do |s|
56
57
  "share/terraform/aws/host/variables.tf",
57
58
  "share/terraform/aws/lambda/main.tf",
58
59
  "share/terraform/aws/lambda/variables.tf",
60
+ "share/terraform/aws/policy_attachment/main.tf",
61
+ "share/terraform/aws/policy_attachment/variables.tf",
59
62
  "share/terraform/aws/provider/data.tf",
60
63
  "share/terraform/aws/provider/output.tf",
64
+ "share/terraform/aws/role/main.tf",
65
+ "share/terraform/aws/role/output.tf",
66
+ "share/terraform/aws/role/variables.tf",
61
67
  "test/scout/aws/test_s3.rb",
62
68
  "test/scout/offsite/test_ssh.rb",
63
69
  "test/scout/offsite/test_step.rb",
@@ -12,6 +12,8 @@ $ #{$0} [<options>] <name>
12
12
 
13
13
  -h--help Print this help
14
14
  -w--workflows* Workflows to provision
15
+ -w--dependencies* Workflows to provision
16
+ -b--bucket* Bucket to connect
15
17
  EOF
16
18
  if options[:help]
17
19
  if defined? scout_usage
@@ -29,19 +31,27 @@ deployments = Scout.var.deployments.glob_all("*").collect(&:basename)
29
31
  raise "Deployment clash" if deployments.include? name
30
32
  dir = Scout.var.deployments[name]
31
33
 
32
- IndiferentHash.add_defaults options, workflows: '', dependencies: 'scout-gear'
34
+ IndiferentHash.add_defaults options, workflows: '', dependencies: 'scout-gear,scout-camp', bucket: 'scout.var'
33
35
 
34
36
  workflows = options[:workflows].split(",")
35
37
  dependencies = options[:dependencies].split(",")
36
38
 
37
- code =<<-EOF
39
+ code =<<-'EOF'
38
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
+
39
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
40
52
 
41
- wf = Workflow.require_workflow event["workflow"]
42
- job = wf.job(event["task_name"], event["jobname"], event["inputs"])
43
- id = job.short_path
44
- id
53
+ job = wf.job(task_name, jobname, inputs)
54
+ job.run
45
55
  end
46
56
  EOF
47
57
 
@@ -71,8 +81,24 @@ lambda_package dependencies, workflows, code do |file|
71
81
  terraform = TerraformDSL.new
72
82
  filename = 'lambda_package.zip'
73
83
  Open.cp file, dir[filename]
74
- terraform.add :aws, :lambda, function_name: "ScoutJob", filename: filename, environment_variables: {HOME: '.'}
75
- terraform.config dir
76
- end
77
84
 
85
+ role = terraform.add :aws, :role, role_name: "lambda_execution_role", principal: {Service: ["lambda.amazonaws.com"]}
78
86
 
87
+ terraform.add :aws, :policy_attachment, name: "exec_policy", policy_name: "lamda_basic_execution",
88
+ roles: [role.id],
89
+ policy_arn: "arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole"
90
+
91
+ terraform.add :aws, :policy_attachment, name: "s3_policy", policy_name: "lamda_s3_full_access",
92
+ roles: [role.id],
93
+ policy_arn: "arn:aws:iam::aws:policy/AmazonS3FullAccess"
94
+
95
+ terraform.add :aws, :lambda, function_name: "#{name}Job", filename: filename, role: role.arn,
96
+ environment_variables: {
97
+ HOME: '.',
98
+ HOSTNAME: "aws_lambda",
99
+ AWS_BUCKET: options[:bucket],
100
+ SCOUT_NOCOLOR: "true"
101
+ }
102
+
103
+ terraform.config dir
104
+ end
@@ -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
+
@@ -1,8 +1,4 @@
1
- provider "aws" {
2
- region = "eu-west-2" # Change to your preferred AWS region
3
- }
4
-
5
1
  resource "aws_s3_bucket" "this" {
6
- bucket = var.name # Change to a globally unique name
2
+ bucket = var.bucket_name # Change to a globally unique name
7
3
  }
8
4
 
@@ -1,3 +1,3 @@
1
- output "bucket_name" {
2
- value = aws_s3_bucket.my_bucket.id
1
+ output "bucket_id" {
2
+ value = aws_s3_bucket.this.id
3
3
  }
@@ -1,4 +1,4 @@
1
- variable "name" {
1
+ variable "bucket_name" {
2
2
  description = "Bucket name"
3
3
  type = string
4
4
  }
@@ -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
- }
@@ -21,3 +21,7 @@ variable "environment_variables" {
21
21
  description = "A map of environment variables to pass to the resource"
22
22
  default = {}
23
23
  }
24
+ variable "role" {
25
+ description = "Role to assume"
26
+ type = string
27
+ }
@@ -0,0 +1,5 @@
1
+ resource "aws_iam_policy_attachment" "this" {
2
+ name = var.policy_name
3
+ roles = var.roles
4
+ policy_arn = var.policy_arn
5
+ }
@@ -0,0 +1,12 @@
1
+ variable "policy_arn" {
2
+ description = "Policy arn"
3
+ type = string
4
+ }
5
+ variable "policy_name" {
6
+ description = "Policy name"
7
+ type = string
8
+ }
9
+ variable "roles" {
10
+ description = "Roles to which to attach policy"
11
+ type = set(string)
12
+ }
@@ -0,0 +1,14 @@
1
+ resource "aws_iam_role" "this" {
2
+ name = var.role_name
3
+
4
+ assume_role_policy = jsonencode({
5
+ Version = "2012-10-17"
6
+ Statement = [
7
+ {
8
+ Action = "sts:AssumeRole"
9
+ Effect = "Allow"
10
+ Principal = var.principal
11
+ }
12
+ ]
13
+ })
14
+ }
@@ -0,0 +1,15 @@
1
+ output "arn" {
2
+ description = "Role arn"
3
+ value = aws_iam_role.this.arn
4
+ }
5
+
6
+ output "name" {
7
+ description = "Role name"
8
+ value = aws_iam_role.this.name
9
+ }
10
+
11
+ output "id" {
12
+ description = "Role id"
13
+ value = aws_iam_role.this.id
14
+ }
15
+
@@ -0,0 +1,11 @@
1
+ variable "role_name" {
2
+ description = "Role name"
3
+ type = string
4
+ }
5
+
6
+ variable "principal" {
7
+ description = "Principal that can assume the role"
8
+ type = map(any)
9
+ }
10
+
11
+
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.2
4
+ version: 0.1.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Miguel Vazquez
8
8
  bindir: bin
9
9
  cert_chain: []
10
- date: 2025-03-19 00:00:00.000000000 Z
10
+ date: 2025-03-25 00:00:00.000000000 Z
11
11
  dependencies:
12
12
  - !ruby/object:Gem::Dependency
13
13
  name: scout-essentials
@@ -54,6 +54,7 @@ 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
59
60
  - share/terraform/aws/bucket/main.tf
@@ -68,8 +69,13 @@ files:
68
69
  - share/terraform/aws/host/variables.tf
69
70
  - share/terraform/aws/lambda/main.tf
70
71
  - share/terraform/aws/lambda/variables.tf
72
+ - share/terraform/aws/policy_attachment/main.tf
73
+ - share/terraform/aws/policy_attachment/variables.tf
71
74
  - share/terraform/aws/provider/data.tf
72
75
  - share/terraform/aws/provider/output.tf
76
+ - share/terraform/aws/role/main.tf
77
+ - share/terraform/aws/role/output.tf
78
+ - share/terraform/aws/role/variables.tf
73
79
  - test/scout/aws/test_s3.rb
74
80
  - test/scout/offsite/test_ssh.rb
75
81
  - test/scout/offsite/test_step.rb