cfn_manage 0.6.0 → 0.7.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 035ab73bb14da783dcba810528e796a5a5fd21cea291b533b69a54aeeab66930
4
- data.tar.gz: c3317a41490aa56e188e5692d1edf9e64be73ca800bd172906c58297137135ec
3
+ metadata.gz: cb08cd584ef82577a2d39c688d07e5352113d94bc77bb82b260b311aa4928e8d
4
+ data.tar.gz: 89ea17602c3daddbd0019bc51aa4ae474a975e948470520d9529f0ebe4d17203
5
5
  SHA512:
6
- metadata.gz: 0e81937b62aa1ae30ae87b18376103d3b27dbf8a942422655524d97818082be1e4da70e455fd6139df6060a49e89aff5bda20af9ea9c422629b20c1a51cad2a5
7
- data.tar.gz: 389307f1ac698c5d52e2bc8e612f01d0bb85252c4e71f07cdf14e36a6547577be4f9a46a7474a4b1f8f3f323beddc0465a2d5c9251d82a7359b8d1b13f7e815d
6
+ metadata.gz: 6e525014378d5c3b3011aa871fce84d0a26175f067c90fd0d2185c6d354eda26340f59ccf2348b6b8eb5c73aa43cb772c689eed0bc16bcfceab8cdfd6202b4cc
7
+ data.tar.gz: 5b73fc500491e92a9871c1abebd7c9f8d4c480a7a6b1ab06cba002fc46c492648e6c377afdfba4306140fcbb8aab08f68f7643d143737ab4fc6af1ac388651e9
@@ -58,6 +58,10 @@ OptionParser.new do |opts|
58
58
  $options['DOCDB_CLUSTER_ID'] = cluster
59
59
  end
60
60
 
61
+ opts.on('--transfer-server-id [TRANSFER_SERVER_ID]') do |server|
62
+ $options['TRANSFER_SERVER_ID'] = server
63
+ end
64
+
61
65
  opts.on('--ec2-instance-id [EC2_INSTANCE_ID]') do |ec2|
62
66
  $options['EC2_INSTANCE_ID'] = ec2
63
67
  end
@@ -143,6 +147,12 @@ case command
143
147
  when 'start-docdb-cluster'
144
148
  CfnManage::CloudFormation::EnvironmentRunStop.new().start_resource($options['DOCDB_CLUSTER_ID'],'AWS::DocDB::DBCluster')
145
149
 
150
+ # docdb cluster commands
151
+ when 'stop-transfer-server'
152
+ CfnManage::CloudFormation::EnvironmentRunStop.new().stop_resource($options['TRANSFER_SERVER_ID'],'AWS::Transfer::Server')
153
+ when 'start-transfer-server'
154
+ CfnManage::CloudFormation::EnvironmentRunStop.new().start_resource($options['TRANSFER_SERVER_ID'],'AWS::Transfer::Server')
155
+
146
156
  # ec2 instance
147
157
  when 'stop-ec2'
148
158
  CfnManage::CloudFormation::EnvironmentRunStop.new().stop_resource($options['EC2_INSTANCE_ID'],'AWS::EC2::Instance')
@@ -26,6 +26,10 @@ cfn_manage stop-docdb-cluster --docdb-cluster-id [DOCDB_CLUSTER_ID]
26
26
 
27
27
  cfn_manage start-docdb-cluster --docdb-cluster-id [DOCDB_CLUSTER_ID]
28
28
 
29
+ cfn_manage stop-transfer-server --transfer-server-id [TRANSFER_SERVER_ID]
30
+
31
+ cfn_manage start-transfer-server --transfer-server-id [TRANSFER_SERVER_ID]
32
+
29
33
  cfn_manage stop-ec2 --ec2-instance-id [EC2_INSTANCE_ID]
30
34
 
31
35
  cfn_manage start-ec2 --ec2-instance-id [EC2_INSTANCE_ID]
@@ -141,6 +141,7 @@ module CfnManage
141
141
  allHealthy += 1
142
142
  else
143
143
  $log.info("Instance #{instance.instance_id} not currently healthy...")
144
+ sleep(15)
144
145
  end
145
146
  end
146
147
 
@@ -32,6 +32,7 @@ module CfnManage
32
32
  'AWS::AutoScaling::AutoScalingGroup' => '200',
33
33
  'AWS::EC2::Instance' => '200',
34
34
  'AWS::EC2::SpotFleet' => '200',
35
+ 'AWS::Transfer::Server' => '200',
35
36
  'AWS::ECS::Cluster' => '250',
36
37
  'AWS::CloudWatch::Alarm' => '300'
37
38
  }
@@ -6,6 +6,7 @@ require 'cfn_manage/alarm_start_stop_handler'
6
6
  require 'cfn_manage/spot_fleet_start_stop_handler'
7
7
  require 'cfn_manage/ecs_cluster_start_stop_handler'
8
8
  require 'cfn_manage/documentdb_cluster_start_stop_handler'
9
+ require 'cfn_manage/transfer_start_stop_handler'
9
10
 
10
11
  module CfnManage
11
12
 
@@ -40,6 +41,9 @@ module CfnManage
40
41
  when 'AWS::ECS::Cluster'
41
42
  return CfnManage::EcsClusterStartStopHandler.new(resource_id, skip_wait)
42
43
 
44
+ when 'AWS::Transfer::Server'
45
+ return CfnManage::TransferStartStopHandler.new(resource_id, skip_wait)
46
+
43
47
  else
44
48
  return nil
45
49
  end
@@ -0,0 +1,97 @@
1
+ require 'cfn_manage/aws_credentials'
2
+ require 'aws-sdk-transfer'
3
+
4
+ module CfnManage
5
+
6
+ class TransferStartStopHandler
7
+
8
+ def initialize(server_id, skip_wait)
9
+ sftpId = server_id.split("/")
10
+ @server_id = sftpId.last
11
+ @skip_wait = skip_wait
12
+ credentials = CfnManage::AWSCredentials.get_session_credentials("startstoptransfer_#{@server_id}")
13
+ @client = Aws::Transfer::Client.new(retry_limit: 20)
14
+ if credentials != nil
15
+ @client = Aws::Transfer::Client.new(credentials: credentials, retry_limit: 20)
16
+ end
17
+ end
18
+
19
+ def start(configuration)
20
+
21
+ state = get_state()
22
+
23
+ if state != "OFFLINE"
24
+ $log.warn("SFTP Server #{@server_id} is in a state of #{state} and can not be started.")
25
+ return
26
+ end
27
+
28
+ $log.info("Starting SFTP Server #{@server_id}")
29
+ @client.start_server({
30
+ server_id: @server_id,
31
+ })
32
+ unless @skip_wait
33
+ $log.info("Waiting for SFTP to start #{@cluster_id}")
34
+ wait('ONLINE')
35
+ end
36
+
37
+ return configuration
38
+ end
39
+
40
+ def stop()
41
+
42
+ state = get_state()
43
+
44
+ if state != "ONLINE"
45
+ $log.warn("SFTP Server #{@server_id} is in a state of #{state} and can not be stopped.")
46
+ return {}
47
+ end
48
+
49
+ @client.stop_server({
50
+ server_id: @server_id,
51
+ })
52
+ unless @skip_wait
53
+ $log.info("Waiting for SFTP to stop #{@cluster_id}")
54
+ wait('OFFLINE')
55
+ end
56
+ return {}
57
+ end
58
+
59
+ def get_state()
60
+ resp = @client.describe_server({
61
+ server_id: @server_id,
62
+ })
63
+ return resp.server.state
64
+ end
65
+
66
+ def wait(completed_state)
67
+
68
+ state_count = 0
69
+ steady_count = 2
70
+ attempts = 0
71
+ until attempts == (max_attempts = 60*6) do
72
+ state = get_state()
73
+ $log.info("SFTP Server #{@server_id} state: #{state}, waiting for #{completed_state}")
74
+
75
+ if state == "#{completed_state}"
76
+ state_count = state_count + 1
77
+ $log.info("#{state_count}/#{steady_count}")
78
+ elsif ["START_FAILED", "STOP_FAILED"].include?(state)
79
+ $log.error("SFTP Server #{@server_id} failed to reach state #{completed_state} with current state #{state}!")
80
+ break
81
+ else
82
+ state_count = 0
83
+ end
84
+ break if state_count == steady_count
85
+ attempts = attempts + 1
86
+ sleep(15)
87
+ end
88
+
89
+ if attempts == max_attempts
90
+ $log.error("SFTP Server #{@server_id} did not enter #{completed_state} state, however continuing operations...")
91
+ end
92
+
93
+ end
94
+
95
+ end
96
+
97
+ end
@@ -1,3 +1,3 @@
1
1
  module CfnManage
2
- VERSION="0.6.0".freeze
2
+ VERSION="0.7.0".freeze
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cfn_manage
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.0
4
+ version: 0.7.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Base2Services
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2019-07-11 00:00:00.000000000 Z
13
+ date: 2019-08-09 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: aws-sdk-core
@@ -212,6 +212,26 @@ dependencies:
212
212
  - - "<"
213
213
  - !ruby/object:Gem::Version
214
214
  version: '2'
215
+ - !ruby/object:Gem::Dependency
216
+ name: aws-sdk-transfer
217
+ requirement: !ruby/object:Gem::Requirement
218
+ requirements:
219
+ - - "~>"
220
+ - !ruby/object:Gem::Version
221
+ version: '1'
222
+ - - "<"
223
+ - !ruby/object:Gem::Version
224
+ version: '2'
225
+ type: :runtime
226
+ prerelease: false
227
+ version_requirements: !ruby/object:Gem::Requirement
228
+ requirements:
229
+ - - "~>"
230
+ - !ruby/object:Gem::Version
231
+ version: '1'
232
+ - - "<"
233
+ - !ruby/object:Gem::Version
234
+ version: '2'
215
235
  - !ruby/object:Gem::Dependency
216
236
  name: bundler
217
237
  requirement: !ruby/object:Gem::Requirement
@@ -333,6 +353,7 @@ files:
333
353
  - lib/cfn_manage/rds_start_stop_handler.rb
334
354
  - lib/cfn_manage/spot_fleet_start_stop_handler.rb
335
355
  - lib/cfn_manage/start_stop_handler_factory.rb
356
+ - lib/cfn_manage/transfer_start_stop_handler.rb
336
357
  - lib/cfn_manage/version.rb
337
358
  homepage: https://github.com/base2Services/cfn-start-stop-stack/blob/master/README.md
338
359
  licenses: