stax 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.
- checksums.yaml +4 -4
- data/bin/stax +1 -4
- data/lib/stax.rb +33 -3
- data/lib/stax/asg.rb +140 -0
- data/lib/stax/aws/alb.rb +28 -0
- data/lib/stax/aws/asg.rb +34 -0
- data/lib/stax/aws/cfn.rb +102 -0
- data/lib/stax/aws/dynamodb.rb +27 -0
- data/lib/stax/aws/ec2.rb +22 -0
- data/lib/stax/aws/ecr.rb +25 -0
- data/lib/stax/aws/ecs.rb +54 -0
- data/lib/stax/aws/elb.rb +30 -0
- data/lib/stax/aws/emr.rb +28 -0
- data/lib/stax/aws/iam.rb +19 -0
- data/lib/stax/aws/keypair.rb +26 -0
- data/lib/stax/aws/kms.rb +19 -0
- data/lib/stax/aws/lambda.rb +33 -0
- data/lib/stax/aws/logs.rb +25 -0
- data/lib/stax/aws/s3.rb +41 -0
- data/lib/stax/aws/sdk.rb +21 -0
- data/lib/stax/aws/sg.rb +42 -0
- data/lib/stax/aws/sqs.rb +30 -0
- data/lib/stax/aws/ssm.rb +49 -0
- data/lib/stax/aws/sts.rb +31 -0
- data/lib/stax/base.rb +92 -4
- data/lib/stax/cfer.rb +59 -0
- data/lib/stax/cli.rb +13 -4
- data/lib/stax/docker.rb +106 -0
- data/lib/stax/dsl.rb +15 -0
- data/lib/stax/git.rb +61 -0
- data/lib/stax/github.rb +25 -0
- data/lib/stax/iam.rb +18 -0
- data/lib/stax/keypair.rb +75 -0
- data/lib/stax/mixin/alb.rb +45 -0
- data/lib/stax/mixin/asg.rb +115 -0
- data/lib/stax/mixin/dynamodb.rb +62 -0
- data/lib/stax/mixin/ec2.rb +37 -0
- data/lib/stax/mixin/ecs.rb +114 -0
- data/lib/stax/mixin/elb.rb +42 -0
- data/lib/stax/mixin/emr.rb +69 -0
- data/lib/stax/mixin/keypair.rb +45 -0
- data/lib/stax/mixin/kms.rb +30 -0
- data/lib/stax/mixin/lambda.rb +76 -0
- data/lib/stax/mixin/logs.rb +94 -0
- data/lib/stax/mixin/s3.rb +76 -0
- data/lib/stax/mixin/sg.rb +95 -0
- data/lib/stax/mixin/sqs.rb +49 -0
- data/lib/stax/mixin/ssh.rb +52 -0
- data/lib/stax/mixin/ssm.rb +137 -0
- data/lib/stax/stack.rb +19 -35
- data/lib/stax/stack/cfn.rb +24 -0
- data/lib/stax/stack/crud.rb +92 -0
- data/lib/stax/stack/outputs.rb +24 -0
- data/lib/stax/stack/parameters.rb +24 -0
- data/lib/stax/stack/resources.rb +35 -0
- data/lib/stax/staxfile.rb +41 -0
- data/lib/stax/subcommand.rb +12 -0
- data/lib/stax/version.rb +1 -1
- data/stax.gemspec +6 -13
- metadata +105 -9
data/lib/stax/aws/ecs.rb
ADDED
@@ -0,0 +1,54 @@
|
|
1
|
+
module Stax
|
2
|
+
module Aws
|
3
|
+
class Ecs < Sdk
|
4
|
+
|
5
|
+
class << self
|
6
|
+
|
7
|
+
def client
|
8
|
+
@_client ||= ::Aws::ECS::Client.new
|
9
|
+
end
|
10
|
+
|
11
|
+
def clusters(names)
|
12
|
+
client.describe_clusters(clusters: Array(names)).clusters
|
13
|
+
end
|
14
|
+
|
15
|
+
def services(cluster, services)
|
16
|
+
client.describe_services(cluster: cluster, services: services).services
|
17
|
+
end
|
18
|
+
|
19
|
+
def task_definition(name)
|
20
|
+
client.describe_task_definition(task_definition: name).task_definition
|
21
|
+
end
|
22
|
+
|
23
|
+
def list_tasks(cluster, status = :RUNNING)
|
24
|
+
paginate(:task_arns) do |token|
|
25
|
+
client.list_tasks(cluster: cluster, next_token: token, desired_status: status)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
def tasks(cluster, status = :RUNNING)
|
30
|
+
client.describe_tasks(cluster: cluster, tasks: list_tasks(cluster, status)).tasks
|
31
|
+
end
|
32
|
+
|
33
|
+
def list_instances(cluster)
|
34
|
+
paginate(:container_instance_arns) do |token|
|
35
|
+
client.list_container_instances(cluster: cluster, next_token: token)
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
def instances(cluster)
|
40
|
+
client.describe_container_instances(cluster: cluster, container_instances: list_instances(cluster)).container_instances
|
41
|
+
end
|
42
|
+
|
43
|
+
def run(cluster, task)
|
44
|
+
client.run_task(cluster: cluster, task_definition: task).tasks
|
45
|
+
end
|
46
|
+
|
47
|
+
def stop(cluster, task)
|
48
|
+
client.stop_task(cluster: cluster, task: task).task
|
49
|
+
end
|
50
|
+
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
data/lib/stax/aws/elb.rb
ADDED
@@ -0,0 +1,30 @@
|
|
1
|
+
module Stax
|
2
|
+
module Aws
|
3
|
+
class Elb < Sdk
|
4
|
+
|
5
|
+
COLORS = {
|
6
|
+
InService: :green,
|
7
|
+
OutOfService: :red,
|
8
|
+
}
|
9
|
+
|
10
|
+
class << self
|
11
|
+
|
12
|
+
def client
|
13
|
+
@_client ||= ::Aws::ElasticLoadBalancing::Client.new
|
14
|
+
end
|
15
|
+
|
16
|
+
def describe(elb_names)
|
17
|
+
paginate(:load_balancer_descriptions) do |marker|
|
18
|
+
client.describe_load_balancers(load_balancer_names: elb_names, marker: marker)
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
def instance_health(elb_name)
|
23
|
+
client.describe_instance_health(load_balancer_name: elb_name).instance_states
|
24
|
+
end
|
25
|
+
|
26
|
+
end
|
27
|
+
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
data/lib/stax/aws/emr.rb
ADDED
@@ -0,0 +1,28 @@
|
|
1
|
+
module Stax
|
2
|
+
module Aws
|
3
|
+
class Emr < Sdk
|
4
|
+
|
5
|
+
class << self
|
6
|
+
|
7
|
+
def client
|
8
|
+
@_client ||= ::Aws::EMR::Client.new
|
9
|
+
end
|
10
|
+
|
11
|
+
def describe(id)
|
12
|
+
client.describe_cluster(cluster_id: id).cluster
|
13
|
+
end
|
14
|
+
|
15
|
+
def groups(id)
|
16
|
+
## TODO paginate me
|
17
|
+
client.list_instance_groups(cluster_id: id).instance_groups
|
18
|
+
end
|
19
|
+
|
20
|
+
def instances(id, types = nil)
|
21
|
+
## TODO paginate me
|
22
|
+
client.list_instances(cluster_id: id, instance_group_types: types).instances
|
23
|
+
end
|
24
|
+
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
data/lib/stax/aws/iam.rb
ADDED
@@ -0,0 +1,26 @@
|
|
1
|
+
module Stax
|
2
|
+
module Aws
|
3
|
+
class Keypair < Sdk
|
4
|
+
|
5
|
+
class << self
|
6
|
+
|
7
|
+
def client
|
8
|
+
@_client ||= ::Aws::EC2::Client.new
|
9
|
+
end
|
10
|
+
|
11
|
+
def describe(names = nil)
|
12
|
+
client.describe_key_pairs(key_names: names).key_pairs
|
13
|
+
end
|
14
|
+
|
15
|
+
def create(name)
|
16
|
+
client.create_key_pair(key_name: name)
|
17
|
+
end
|
18
|
+
|
19
|
+
def delete(name)
|
20
|
+
client.delete_key_pair(key_name: name)
|
21
|
+
end
|
22
|
+
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
data/lib/stax/aws/kms.rb
ADDED
@@ -0,0 +1,33 @@
|
|
1
|
+
module Stax
|
2
|
+
module Aws
|
3
|
+
class Lambda < Sdk
|
4
|
+
|
5
|
+
class << self
|
6
|
+
|
7
|
+
def client
|
8
|
+
@_client ||= ::Aws::Lambda::Client.new
|
9
|
+
end
|
10
|
+
|
11
|
+
def list
|
12
|
+
paginate(:functions) do |marker|
|
13
|
+
client.list_functions(marker: marker)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
def configuration(name)
|
18
|
+
client.get_function_configuration(function_name: name)
|
19
|
+
end
|
20
|
+
|
21
|
+
def code(name)
|
22
|
+
client.get_function(function_name: name).code.location
|
23
|
+
end
|
24
|
+
|
25
|
+
def invoke(opt)
|
26
|
+
client.invoke(opt)
|
27
|
+
end
|
28
|
+
|
29
|
+
end
|
30
|
+
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
module Stax
|
2
|
+
module Aws
|
3
|
+
class Logs < Sdk
|
4
|
+
|
5
|
+
class << self
|
6
|
+
|
7
|
+
def client
|
8
|
+
@_client ||= ::Aws::CloudWatchLogs::Client.new
|
9
|
+
end
|
10
|
+
|
11
|
+
def groups(prefix = nil)
|
12
|
+
paginate(:log_groups) do |token|
|
13
|
+
client.describe_log_groups(log_group_name_prefix: prefix, next_token: token)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
def streams(opt)
|
18
|
+
client.describe_log_streams(opt).log_streams
|
19
|
+
end
|
20
|
+
|
21
|
+
end
|
22
|
+
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
data/lib/stax/aws/s3.rb
ADDED
@@ -0,0 +1,41 @@
|
|
1
|
+
module Stax
|
2
|
+
module Aws
|
3
|
+
class S3 < Sdk
|
4
|
+
|
5
|
+
class << self
|
6
|
+
|
7
|
+
def client
|
8
|
+
@_client ||= ::Aws::S3::Client.new
|
9
|
+
end
|
10
|
+
|
11
|
+
def list_buckets
|
12
|
+
client.list_buckets.buckets
|
13
|
+
end
|
14
|
+
|
15
|
+
def bucket_tags(bucket)
|
16
|
+
client.get_bucket_tagging(bucket: bucket).tag_set
|
17
|
+
rescue ::Aws::S3::Errors::NoSuchTagSet
|
18
|
+
[]
|
19
|
+
end
|
20
|
+
|
21
|
+
def bucket_region(bucket)
|
22
|
+
client.get_bucket_location(bucket: bucket).location_constraint
|
23
|
+
end
|
24
|
+
|
25
|
+
def put(opt)
|
26
|
+
client.put_object(opt)
|
27
|
+
end
|
28
|
+
|
29
|
+
def get_lifecycle(bucket)
|
30
|
+
client.get_bucket_lifecycle_configuration(bucket: bucket).rules
|
31
|
+
end
|
32
|
+
|
33
|
+
def put_lifecycle(bucket, cfg)
|
34
|
+
client.put_bucket_lifecycle_configuration(bucket: bucket, lifecycle_configuration: cfg)
|
35
|
+
end
|
36
|
+
|
37
|
+
end
|
38
|
+
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
data/lib/stax/aws/sdk.rb
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
module Stax
|
2
|
+
module Aws
|
3
|
+
class Sdk
|
4
|
+
|
5
|
+
## universal paginator for aws-sdk calls
|
6
|
+
def self.paginate(thing)
|
7
|
+
token = nil
|
8
|
+
things = []
|
9
|
+
loop do
|
10
|
+
resp = yield(token)
|
11
|
+
things += resp.send(thing)
|
12
|
+
## some apis use marker, some use token
|
13
|
+
token = resp.respond_to?(:next_marker) ? resp.next_marker : resp.next_token
|
14
|
+
break if token.nil?
|
15
|
+
end
|
16
|
+
things
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
end
|
21
|
+
end
|
data/lib/stax/aws/sg.rb
ADDED
@@ -0,0 +1,42 @@
|
|
1
|
+
module Stax
|
2
|
+
module Aws
|
3
|
+
class Sg < Sdk
|
4
|
+
|
5
|
+
class << self
|
6
|
+
|
7
|
+
def client
|
8
|
+
@_client ||= ::Aws::EC2::Client.new
|
9
|
+
end
|
10
|
+
|
11
|
+
def describe(ids)
|
12
|
+
client.describe_security_groups(group_ids: Array(ids)).security_groups
|
13
|
+
end
|
14
|
+
|
15
|
+
def authorize(id, cidr, port = 22)
|
16
|
+
client.authorize_security_group_ingress(
|
17
|
+
group_id: id,
|
18
|
+
ip_protocol: :tcp,
|
19
|
+
from_port: port,
|
20
|
+
to_port: port,
|
21
|
+
cidr_ip: cidr,
|
22
|
+
)
|
23
|
+
rescue ::Aws::EC2::Errors::InvalidPermissionDuplicate => e
|
24
|
+
warn(e.message)
|
25
|
+
end
|
26
|
+
|
27
|
+
def revoke(id, cidr, port = 22)
|
28
|
+
client.revoke_security_group_ingress(
|
29
|
+
group_id: id,
|
30
|
+
ip_protocol: :tcp,
|
31
|
+
from_port: port,
|
32
|
+
to_port: port,
|
33
|
+
cidr_ip: cidr,
|
34
|
+
)
|
35
|
+
rescue ::Aws::EC2::Errors::InvalidPermissionNotFound => e
|
36
|
+
warn(e.message)
|
37
|
+
end
|
38
|
+
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
data/lib/stax/aws/sqs.rb
ADDED
@@ -0,0 +1,30 @@
|
|
1
|
+
module Stax
|
2
|
+
module Aws
|
3
|
+
class Sqs < Sdk
|
4
|
+
|
5
|
+
class << self
|
6
|
+
|
7
|
+
def client
|
8
|
+
@_client ||= ::Aws::SQS::Client.new
|
9
|
+
end
|
10
|
+
|
11
|
+
def get(url, attributes = :All)
|
12
|
+
client.get_queue_attributes(queue_url: url, attribute_names: Array(attributes)).attributes
|
13
|
+
end
|
14
|
+
|
15
|
+
def purge(url)
|
16
|
+
client.purge_queue(queue_url: url)
|
17
|
+
end
|
18
|
+
|
19
|
+
def queue_url(name)
|
20
|
+
client.get_queue_url(queue_name: name)&.queue_url
|
21
|
+
end
|
22
|
+
|
23
|
+
def send(opt)
|
24
|
+
client.send_message(opt)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
data/lib/stax/aws/ssm.rb
ADDED
@@ -0,0 +1,49 @@
|
|
1
|
+
module Stax
|
2
|
+
module Aws
|
3
|
+
class Ssm < Sdk
|
4
|
+
|
5
|
+
class << self
|
6
|
+
|
7
|
+
def client
|
8
|
+
@_client ||= ::Aws::SSM::Client.new
|
9
|
+
end
|
10
|
+
|
11
|
+
def instances(stack)
|
12
|
+
client.describe_instance_information(filters: [{key: 'tag:aws:cloudformation:stack-name', values: [stack]}]).instance_information_list
|
13
|
+
end
|
14
|
+
|
15
|
+
def run(opt)
|
16
|
+
client.send_command(opt).command
|
17
|
+
end
|
18
|
+
|
19
|
+
def commands
|
20
|
+
client.list_commands.commands
|
21
|
+
end
|
22
|
+
|
23
|
+
def invocation(id)
|
24
|
+
client.list_command_invocations(command_id: id, details: true).command_invocations
|
25
|
+
end
|
26
|
+
|
27
|
+
def parameters(opt)
|
28
|
+
paginate(:parameters) do |token|
|
29
|
+
client.get_parameters_by_path(opt.merge(next_token: token))
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
def get(opt)
|
34
|
+
client.get_parameters(opt).parameters
|
35
|
+
end
|
36
|
+
|
37
|
+
def put(opt)
|
38
|
+
client.put_parameter(opt)
|
39
|
+
end
|
40
|
+
|
41
|
+
def delete(opt)
|
42
|
+
client.delete_parameters(opt).deleted_parameters
|
43
|
+
end
|
44
|
+
|
45
|
+
end
|
46
|
+
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
data/lib/stax/aws/sts.rb
ADDED
@@ -0,0 +1,31 @@
|
|
1
|
+
module Stax
|
2
|
+
module Aws
|
3
|
+
class Sts < Sdk
|
4
|
+
|
5
|
+
class << self
|
6
|
+
|
7
|
+
def client
|
8
|
+
@_client ||= ::Aws::STS::Client.new
|
9
|
+
end
|
10
|
+
|
11
|
+
def id
|
12
|
+
@_id ||= client.get_caller_identity
|
13
|
+
end
|
14
|
+
|
15
|
+
def account_id
|
16
|
+
id.account
|
17
|
+
end
|
18
|
+
|
19
|
+
def user_id
|
20
|
+
id.user_id
|
21
|
+
end
|
22
|
+
|
23
|
+
def user_arn
|
24
|
+
id.arn
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
28
|
+
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|