aws-codedeploy-agent 0.0.2 → 0.0.3
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.
- data/aws-codedeploy-agent.gemspec +5 -5
- data/certs/host-agent-deployment-signer-ca-chain.pem +30 -0
- data/conf/codedeployagent.yml +0 -1
- data/lib/instance_agent.rb +1 -13
- data/lib/instance_agent/agent/base.rb +38 -12
- data/lib/instance_agent/agent/plugin.rb +21 -0
- data/lib/instance_agent/config.rb +2 -1
- data/lib/instance_agent/platform/linux_util.rb +4 -0
- data/lib/instance_agent/plugins/codedeploy/application_specification/ace_info.rb +133 -0
- data/lib/instance_agent/plugins/codedeploy/application_specification/acl_info.rb +163 -0
- data/lib/instance_agent/plugins/codedeploy/application_specification/application_specification.rb +143 -0
- data/lib/instance_agent/plugins/codedeploy/application_specification/context_info.rb +23 -0
- data/lib/instance_agent/plugins/codedeploy/application_specification/file_info.rb +23 -0
- data/lib/instance_agent/plugins/codedeploy/application_specification/linux_permission_info.rb +121 -0
- data/lib/instance_agent/plugins/codedeploy/application_specification/mode_info.rb +66 -0
- data/lib/instance_agent/plugins/codedeploy/application_specification/range_info.rb +134 -0
- data/lib/instance_agent/plugins/codedeploy/application_specification/script_info.rb +27 -0
- data/lib/instance_agent/plugins/codedeploy/codedeploy_control.rb +100 -0
- data/lib/instance_agent/plugins/codedeploy/command_executor.rb +359 -0
- data/lib/instance_agent/plugins/codedeploy/command_poller.rb +178 -0
- data/lib/instance_agent/plugins/codedeploy/deployment_specification.rb +161 -0
- data/lib/instance_agent/plugins/codedeploy/hook_executor.rb +226 -0
- data/lib/instance_agent/plugins/codedeploy/install_instruction.rb +389 -0
- data/lib/instance_agent/plugins/codedeploy/installer.rb +147 -0
- data/lib/instance_agent/plugins/codedeploy/onpremise_config.rb +42 -0
- data/lib/instance_agent/plugins/codedeploy/register_plugin.rb +17 -0
- data/lib/instance_agent/runner/child.rb +20 -5
- data/lib/instance_agent/runner/master.rb +2 -15
- data/lib/instance_metadata.rb +2 -2
- data/test/certificate_helper.rb +1 -1
- data/test/helpers/instance_agent_helper.rb +1 -0
- data/test/instance_agent/agent/base_test.rb +16 -3
- data/test/instance_agent/config_test.rb +2 -1
- data/test/instance_agent/plugins/codedeploy/application_specification_test.rb +1713 -0
- data/test/instance_agent/{codedeploy_plugin → plugins/codedeploy}/codedeploy_control_test.rb +1 -1
- data/test/instance_agent/{codedeploy_plugin → plugins/codedeploy}/command_executor_test.rb +32 -9
- data/test/instance_agent/{codedeploy_plugin → plugins/codedeploy}/command_poller_test.rb +13 -14
- data/test/instance_agent/{codedeploy_plugin → plugins/codedeploy}/deployment_specification_test.rb +98 -25
- data/test/instance_agent/{codedeploy_plugin → plugins/codedeploy}/hook_executor_test.rb +83 -15
- data/test/instance_agent/plugins/codedeploy/install_instruction_test.rb +568 -0
- data/test/instance_agent/{codedeploy_plugin → plugins/codedeploy}/installer_test.rb +12 -9
- data/test/instance_agent/plugins/codedeploy/onpremise_config_test.rb +72 -0
- data/test/instance_agent/runner/child_test.rb +1 -1
- data/vendor/gems/.codedeploy-commands-1.0.0.created.rid +1 -1
- data/vendor/gems/codedeploy-commands/lib/aws/plugins/deploy_control_endpoint.rb +4 -0
- data/vendor/gems/jmespath-1.0.1/lib/jmespath.rb +41 -0
- data/vendor/gems/jmespath-1.0.1/lib/jmespath/caching_parser.rb +30 -0
- data/vendor/gems/jmespath-1.0.1/lib/jmespath/errors.rb +17 -0
- data/vendor/gems/jmespath-1.0.1/lib/jmespath/expr_node.rb +15 -0
- data/vendor/gems/jmespath-1.0.1/lib/jmespath/lexer.rb +116 -0
- data/vendor/gems/jmespath-1.0.1/lib/jmespath/parser.rb +347 -0
- data/vendor/gems/jmespath-1.0.1/lib/jmespath/runtime.rb +71 -0
- data/vendor/gems/jmespath-1.0.1/lib/jmespath/token.rb +41 -0
- data/vendor/gems/jmespath-1.0.1/lib/jmespath/token_stream.rb +60 -0
- data/vendor/gems/jmespath-1.0.1/lib/jmespath/tree_interpreter.rb +523 -0
- data/vendor/gems/jmespath-1.0.1/lib/jmespath/version.rb +3 -0
- data/vendor/gems/process_manager/lib/process_manager/master.rb +16 -5
- data/vendor/specifications/{aws-sdk-core-2.0.5.gemspec → aws-sdk-core-2.0.42.gemspec} +9 -11
- data/vendor/specifications/builder-3.2.2.gemspec +1 -1
- data/vendor/specifications/codedeploy-commands-1.0.0.gemspec +7 -6
- data/vendor/specifications/gli-2.5.6.gemspec +1 -1
- data/vendor/specifications/jmespath-1.0.1.gemspec +29 -0
- data/vendor/specifications/little-plugger-1.1.3.gemspec +1 -1
- data/vendor/specifications/logging-1.8.1.gemspec +1 -1
- data/vendor/specifications/multi_json-1.7.7.gemspec +1 -1
- data/vendor/specifications/multi_json-1.8.4.gemspec +1 -1
- data/vendor/specifications/multi_xml-0.5.5.gemspec +1 -1
- data/vendor/specifications/process_manager-0.0.13.gemspec +1 -1
- data/vendor/specifications/simple_pid-0.2.1.gemspec +1 -1
- metadata +76 -63
- data/lib/instance_agent/codedeploy_plugin/application_specification/ace_info.rb +0 -133
- data/lib/instance_agent/codedeploy_plugin/application_specification/acl_info.rb +0 -163
- data/lib/instance_agent/codedeploy_plugin/application_specification/application_specification.rb +0 -142
- data/lib/instance_agent/codedeploy_plugin/application_specification/context_info.rb +0 -23
- data/lib/instance_agent/codedeploy_plugin/application_specification/file_info.rb +0 -23
- data/lib/instance_agent/codedeploy_plugin/application_specification/linux_permission_info.rb +0 -121
- data/lib/instance_agent/codedeploy_plugin/application_specification/mode_info.rb +0 -66
- data/lib/instance_agent/codedeploy_plugin/application_specification/range_info.rb +0 -134
- data/lib/instance_agent/codedeploy_plugin/application_specification/script_info.rb +0 -27
- data/lib/instance_agent/codedeploy_plugin/codedeploy_control.rb +0 -72
- data/lib/instance_agent/codedeploy_plugin/command_executor.rb +0 -357
- data/lib/instance_agent/codedeploy_plugin/command_poller.rb +0 -170
- data/lib/instance_agent/codedeploy_plugin/deployment_specification.rb +0 -150
- data/lib/instance_agent/codedeploy_plugin/hook_executor.rb +0 -206
- data/lib/instance_agent/codedeploy_plugin/install_instruction.rb +0 -374
- data/lib/instance_agent/codedeploy_plugin/installer.rb +0 -143
- data/lib/instance_agent/codedeploy_plugin/request_helper.rb +0 -28
- data/test/instance_agent/codedeploy_plugin/application_specification_test.rb +0 -1710
- data/test/instance_agent/codedeploy_plugin/install_instruction_test.rb +0 -566
- data/test/instance_agent/codedeploy_plugin/request_helper_test.rb +0 -37
- data/vendor/specifications/jamespath-0.5.1.gemspec +0 -35
|
@@ -5,7 +5,7 @@ $:.push File.expand_path("../vendor/gems/process_manager/lib", __FILE__)
|
|
|
5
5
|
|
|
6
6
|
Gem::Specification.new do |s|
|
|
7
7
|
s.name = 'aws-codedeploy-agent'
|
|
8
|
-
s.version = '0.0.
|
|
8
|
+
s.version = '0.0.3'
|
|
9
9
|
s.license = 'Apache-2.0'
|
|
10
10
|
s.summary = 'AWS CodeDeploy Agent'
|
|
11
11
|
s.description = 'CodeDeploy Agent is responsible for doing the actual work of deploying software on an individual EC2 instance.'
|
|
@@ -21,16 +21,16 @@ Gem::Specification.new do |s|
|
|
|
21
21
|
s.executables = s.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
|
22
22
|
s.test_files = s.files.grep(%r{^(test|spec|features)/})
|
|
23
23
|
|
|
24
|
-
s.add_dependency('
|
|
25
|
-
s.add_dependency('rubyzip')
|
|
24
|
+
s.add_dependency('json_pure', '~> 1.6')
|
|
25
|
+
s.add_dependency('rubyzip', '~> 1.1.0')
|
|
26
26
|
s.add_dependency('httpclient')
|
|
27
27
|
s.add_dependency('rake')
|
|
28
|
+
s.add_dependency('archive-tar-minitar', '~> 0.5.2')
|
|
28
29
|
|
|
29
30
|
s.add_dependency('gli', '~> 2.5')
|
|
30
|
-
s.add_dependency('aws-sdk-core', '~> 2.0.
|
|
31
|
+
s.add_dependency('aws-sdk-core', '~> 2.0.42')
|
|
31
32
|
s.add_dependency('builder', '~> 3.2.2')
|
|
32
33
|
s.add_dependency('gli', '~> 2.5.6')
|
|
33
|
-
s.add_dependency('jamespath', '~> 0.5.1')
|
|
34
34
|
s.add_dependency('little-plugger', '~> 1.1.3')
|
|
35
35
|
s.add_dependency('logging', '~> 1.8.1')
|
|
36
36
|
s.add_dependency('multi_json', '~> 1.8.4')
|
|
@@ -74,3 +74,33 @@ CSqGSIb3DQEBBQUAA4GBABByUqkFFBkyCEHwxWsKzH4PIRnN5GfcX6kb5sroc50i
|
|
|
74
74
|
2JhucwNhkcV8sEVAbkSdjbCxlnRhLQ2pRdKkkirWmnWXbj9T/UWZYB2oK0z5XqcJ
|
|
75
75
|
2HUw19JlYD1n1khVdWk/kfVIC0dpImmClr7JyDiGSnoscxlIaU5rfGW/D/xwzoiQ
|
|
76
76
|
-----END CERTIFICATE-----
|
|
77
|
+
-----BEGIN CERTIFICATE-----
|
|
78
|
+
MIIFODCCBCCgAwIBAgIQUT+5dDhwtzRAQY0wkwaZ/zANBgkqhkiG9w0BAQsFADCB
|
|
79
|
+
yjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQL
|
|
80
|
+
ExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJp
|
|
81
|
+
U2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxW
|
|
82
|
+
ZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0
|
|
83
|
+
aG9yaXR5IC0gRzUwHhcNMTMxMDMxMDAwMDAwWhcNMjMxMDMwMjM1OTU5WjB+MQsw
|
|
84
|
+
CQYDVQQGEwJVUzEdMBsGA1UEChMUU3ltYW50ZWMgQ29ycG9yYXRpb24xHzAdBgNV
|
|
85
|
+
BAsTFlN5bWFudGVjIFRydXN0IE5ldHdvcmsxLzAtBgNVBAMTJlN5bWFudGVjIENs
|
|
86
|
+
YXNzIDMgU2VjdXJlIFNlcnZlciBDQSAtIEc0MIIBIjANBgkqhkiG9w0BAQEFAAOC
|
|
87
|
+
AQ8AMIIBCgKCAQEAstgFyhx0LbUXVjnFSlIJluhL2AzxaJ+aQihiw6UwU35VEYJb
|
|
88
|
+
A3oNL+F5BMm0lncZgQGUWfm893qZJ4Itt4PdWid/sgN6nFMl6UgfRk/InSn4vnlW
|
|
89
|
+
9vf92Tpo2otLgjNBEsPIPMzWlnqEIRoiBAMnF4scaGGTDw5RgDMdtLXO637QYqzu
|
|
90
|
+
s3sBdO9pNevK1T2p7peYyo2qRA4lmUoVlqTObQJUHypqJuIGOmNIrLRM0XWTUP8T
|
|
91
|
+
L9ba4cYY9Z/JJV3zADreJk20KQnNDz0jbxZKgRb78oMQw7jW2FUyPfG9D72MUpVK
|
|
92
|
+
Fpd6UiFjdS8W+cRmvvW1Cdj/JwDNRHxvSz+w9wIDAQABo4IBYzCCAV8wEgYDVR0T
|
|
93
|
+
AQH/BAgwBgEB/wIBADAwBgNVHR8EKTAnMCWgI6Ahhh9odHRwOi8vczEuc3ltY2Iu
|
|
94
|
+
Y29tL3BjYTMtZzUuY3JsMA4GA1UdDwEB/wQEAwIBBjAvBggrBgEFBQcBAQQjMCEw
|
|
95
|
+
HwYIKwYBBQUHMAGGE2h0dHA6Ly9zMi5zeW1jYi5jb20wawYDVR0gBGQwYjBgBgpg
|
|
96
|
+
hkgBhvhFAQc2MFIwJgYIKwYBBQUHAgEWGmh0dHA6Ly93d3cuc3ltYXV0aC5jb20v
|
|
97
|
+
Y3BzMCgGCCsGAQUFBwICMBwaGmh0dHA6Ly93d3cuc3ltYXV0aC5jb20vcnBhMCkG
|
|
98
|
+
A1UdEQQiMCCkHjAcMRowGAYDVQQDExFTeW1hbnRlY1BLSS0xLTUzNDAdBgNVHQ4E
|
|
99
|
+
FgQUX2DPYZBV34RDFIpgKrL1evRDGO8wHwYDVR0jBBgwFoAUf9Nlp8Ld7LvwMAnz
|
|
100
|
+
Qzn6Aq8zMTMwDQYJKoZIhvcNAQELBQADggEBAF6UVkndji1l9cE2UbYD49qecxny
|
|
101
|
+
H1mrWH5sJgUs+oHXXCMXIiw3k/eG7IXmsKP9H+IyqEVv4dn7ua/ScKAyQmW/hP4W
|
|
102
|
+
Ko8/xabWo5N9Q+l0IZE1KPRj6S7t9/Vcf0uatSDpCr3gRRAMFJSaXaXjS5HoJJtG
|
|
103
|
+
QGX0InLNmfiIEfXzf+YzguaoxX7+0AjiJVgIcWjmzaLmFN5OUiQt/eV5E1PnXi8t
|
|
104
|
+
TRttQBVSK/eHiXgSgW7ZTaoteNTCLD0IX4eRnh8OsN4wUmSGiaqdZpwOdgyA8nTY
|
|
105
|
+
Kvi4Os7X1g8RvmurFPW9QaAiY4nxug9vKWNmLT+sjHLF+8fk1A/yO0+MKcc=
|
|
106
|
+
-----END CERTIFICATE-----
|
data/conf/codedeployagent.yml
CHANGED
data/lib/instance_agent.rb
CHANGED
|
@@ -8,20 +8,8 @@ unless defined?(InstanceAgent)
|
|
|
8
8
|
require 'instance_agent/log'
|
|
9
9
|
require 'instance_agent/platform'
|
|
10
10
|
require 'instance_agent/platform/linux_util'
|
|
11
|
+
require 'instance_agent/agent/plugin'
|
|
11
12
|
require 'instance_agent/agent/base'
|
|
12
|
-
require 'instance_agent/codedeploy_plugin/command_poller'
|
|
13
|
-
require 'instance_agent/codedeploy_plugin/command_executor'
|
|
14
|
-
require 'instance_agent/codedeploy_plugin/deployment_specification'
|
|
15
|
-
require 'instance_agent/codedeploy_plugin/application_specification/application_specification'
|
|
16
|
-
require 'instance_agent/codedeploy_plugin/application_specification/file_info'
|
|
17
|
-
require 'instance_agent/codedeploy_plugin/application_specification/script_info'
|
|
18
|
-
require 'instance_agent/codedeploy_plugin/application_specification/linux_permission_info'
|
|
19
|
-
require 'instance_agent/codedeploy_plugin/application_specification/mode_info'
|
|
20
|
-
require 'instance_agent/codedeploy_plugin/application_specification/acl_info'
|
|
21
|
-
require 'instance_agent/codedeploy_plugin/application_specification/ace_info'
|
|
22
|
-
require 'instance_agent/codedeploy_plugin/application_specification/context_info'
|
|
23
|
-
require 'instance_agent/codedeploy_plugin/application_specification/range_info'
|
|
24
|
-
require 'instance_agent/codedeploy_plugin/install_instruction'
|
|
25
13
|
require 'instance_agent/runner/master'
|
|
26
14
|
require 'instance_agent/runner/child'
|
|
27
15
|
end
|
|
@@ -1,10 +1,15 @@
|
|
|
1
1
|
# encoding: UTF-8
|
|
2
|
+
require 'instance_agent/agent/plugin'
|
|
3
|
+
|
|
2
4
|
module InstanceAgent
|
|
3
5
|
module Agent
|
|
4
6
|
class Base
|
|
7
|
+
include InstanceAgent::Agent::Plugin
|
|
5
8
|
|
|
6
9
|
def self.runner
|
|
7
|
-
self.new
|
|
10
|
+
instance = self.new
|
|
11
|
+
instance.validate if instance.respond_to?('validate')
|
|
12
|
+
instance
|
|
8
13
|
end
|
|
9
14
|
|
|
10
15
|
def description
|
|
@@ -17,18 +22,39 @@ module InstanceAgent
|
|
|
17
22
|
end
|
|
18
23
|
|
|
19
24
|
def run
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
25
|
+
start_time = Time.now
|
|
26
|
+
|
|
27
|
+
begin
|
|
28
|
+
perform
|
|
29
|
+
@error_count = 0
|
|
30
|
+
rescue Aws::Errors::MissingCredentialsError
|
|
31
|
+
log(:error, "Missing credentials - please check if this instance was started with an IAM instance profile")
|
|
32
|
+
@error_count = @error_count.to_i + 1
|
|
33
|
+
rescue SocketError, Errno::ENETDOWN, Aws::Errors::ServiceError => e
|
|
34
|
+
log(:error, "Cannot reach InstanceService: #{e.class} - #{e.message}")
|
|
35
|
+
@error_count = @error_count.to_i + 1
|
|
36
|
+
rescue Exception => e
|
|
37
|
+
log(:error, "Error during perform: #{e.class} - #{e.message} - #{e.backtrace.join("\n")}")
|
|
38
|
+
@error_count = @error_count.to_i + 1
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
if @error_count > 0
|
|
42
|
+
# Max out at 90 seconds between calls and take 5 minutes before reaching the cap and allowing 10 calls to get there
|
|
31
43
|
|
|
44
|
+
if @error_count > 10
|
|
45
|
+
@error_count = 10
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
elapsed_time = (Time.now - start_time).ceil
|
|
49
|
+
backoff_time = (((1.2675 ** @error_count) * (90.0 / (1.2675 ** 10)))).floor
|
|
50
|
+
sleep_time = backoff_time - elapsed_time
|
|
51
|
+
|
|
52
|
+
if(sleep_time > 0)
|
|
53
|
+
log(:debug, "Sleeping #{sleep_time} seconds.")
|
|
54
|
+
sleep sleep_time
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
end
|
|
32
58
|
end
|
|
33
59
|
end
|
|
34
60
|
end
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
require 'set'
|
|
2
|
+
|
|
3
|
+
module InstanceAgent
|
|
4
|
+
module Agent
|
|
5
|
+
module Plugin
|
|
6
|
+
module PluginMethods
|
|
7
|
+
def plugins
|
|
8
|
+
@plugins ||= Set.new
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def inherited(plugin)
|
|
12
|
+
plugins << plugin
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def self.included(klass)
|
|
17
|
+
klass.extend PluginMethods
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
@@ -30,7 +30,8 @@ module InstanceAgent
|
|
|
30
30
|
:instance_service_port => nil,
|
|
31
31
|
:wait_between_runs => 30,
|
|
32
32
|
:wait_after_error => 30,
|
|
33
|
-
:codedeploy_test_profile => 'prod'
|
|
33
|
+
:codedeploy_test_profile => 'prod',
|
|
34
|
+
:on_premises_config_file => '/etc/codedeploy-agent/conf/codedeploy.onpremises.yml'
|
|
34
35
|
})
|
|
35
36
|
end
|
|
36
37
|
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
module InstanceAgent
|
|
2
|
+
module Plugins
|
|
3
|
+
module CodeDeployPlugin
|
|
4
|
+
module ApplicationSpecification
|
|
5
|
+
#Helper Class for storing an ace
|
|
6
|
+
class AceInfo
|
|
7
|
+
|
|
8
|
+
attr_reader :default, :type, :name, :read, :write, :execute
|
|
9
|
+
def initialize(ace, internal=false)
|
|
10
|
+
@default = false
|
|
11
|
+
@type = nil
|
|
12
|
+
@name = ""
|
|
13
|
+
parts = ace.split(":", -1).reverse
|
|
14
|
+
if (parts.length < 2) || (parts.length > 4)
|
|
15
|
+
raise AppSpecValidationException, "invalid acl entry #{ace}"
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
if (parts.length == 4)
|
|
19
|
+
if !(parts[3].eql?("d") || (parts[3].eql?("default")))
|
|
20
|
+
raise AppSpecValidationException, "invalid acl entry #{ace}"
|
|
21
|
+
end
|
|
22
|
+
@default = true
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
if parts.length >= 3
|
|
26
|
+
if parts[2].eql?("d") || (parts[2].eql?("default"))
|
|
27
|
+
if @default
|
|
28
|
+
raise AppSpecValidationException, "invalid acl entry #{ace}"
|
|
29
|
+
end
|
|
30
|
+
@default = true
|
|
31
|
+
elsif parts[2].eql?("m") || parts[2].eql?("mask")
|
|
32
|
+
@type = "mask"
|
|
33
|
+
elsif parts[2].eql?("o") || parts[2].eql?("other")
|
|
34
|
+
@type = "other"
|
|
35
|
+
elsif parts[2].eql?("g") || parts[2].eql?("group")
|
|
36
|
+
@type = "group"
|
|
37
|
+
elsif parts[2].eql?("u") || parts[2].eql?("user")
|
|
38
|
+
@type = "user"
|
|
39
|
+
else
|
|
40
|
+
raise AppSpecValidationException, "invalid acl entry #{ace}"
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
if parts[1].eql?("m") || parts[1].eql?("mask")
|
|
45
|
+
if @type.nil?
|
|
46
|
+
@type = "mask"
|
|
47
|
+
else
|
|
48
|
+
@name = "mask"
|
|
49
|
+
end
|
|
50
|
+
elsif parts[1].eql?("o") || parts[1].eql?("other")
|
|
51
|
+
if @type.nil?
|
|
52
|
+
@type = "other"
|
|
53
|
+
else
|
|
54
|
+
@name = "other"
|
|
55
|
+
end
|
|
56
|
+
else
|
|
57
|
+
if @type.nil?
|
|
58
|
+
@type = "user"
|
|
59
|
+
end
|
|
60
|
+
@name = parts[1]
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
if (@type.eql?("mask") || @type.eql?("other")) && !@name.empty?
|
|
64
|
+
raise AppSpecValidationException, "invalid acl entry #{ace}"
|
|
65
|
+
end
|
|
66
|
+
if (!internal && !@default && !@type.eql?("mask") && @name.empty?)
|
|
67
|
+
raise AppSpecValidationException, "use mode to set the base acl entry #{ace}"
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
perm_chars = parts[0].chars.entries
|
|
71
|
+
if (perm_chars.length == 1) && (perm_chars[0].ord >= "0".ord) && (perm_chars[0].ord <= "7".ord)
|
|
72
|
+
perm_bits = to_bits(perm_chars[0].to_i, 3)
|
|
73
|
+
@read = (perm_bits[0] == 1)
|
|
74
|
+
@write = (perm_bits[1] == 1)
|
|
75
|
+
@execute = (perm_bits[2] == 1)
|
|
76
|
+
else
|
|
77
|
+
@read = false
|
|
78
|
+
@write = false
|
|
79
|
+
@execute = false
|
|
80
|
+
perm_chars.each do |perm|
|
|
81
|
+
case perm
|
|
82
|
+
when 'r'
|
|
83
|
+
@read = true
|
|
84
|
+
when 'w'
|
|
85
|
+
@write = true
|
|
86
|
+
when 'x'
|
|
87
|
+
@execute = true
|
|
88
|
+
when '-'
|
|
89
|
+
else
|
|
90
|
+
raise AppSpecValidationException, "unrecognized permission character #{perm} in #{ace}"
|
|
91
|
+
end
|
|
92
|
+
end
|
|
93
|
+
end
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
#format [default:][user|group|mask|other]:[name]:(r|-)(w|-)(x|-)
|
|
97
|
+
def get_ace
|
|
98
|
+
result = "";
|
|
99
|
+
if @default
|
|
100
|
+
result = "default:"
|
|
101
|
+
end
|
|
102
|
+
result = result + type + ":" + name + ":"
|
|
103
|
+
if (@read)
|
|
104
|
+
result = result + "r"
|
|
105
|
+
else
|
|
106
|
+
result = result + "-"
|
|
107
|
+
end
|
|
108
|
+
if (@write)
|
|
109
|
+
result = result + "w"
|
|
110
|
+
else
|
|
111
|
+
result = result + "-"
|
|
112
|
+
end
|
|
113
|
+
if (@execute)
|
|
114
|
+
result = result + "x"
|
|
115
|
+
else
|
|
116
|
+
result = result + "-"
|
|
117
|
+
end
|
|
118
|
+
result
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
def to_bits(num, min_size)
|
|
122
|
+
bits = Array.new(min_size, 0)
|
|
123
|
+
num_bits = num.to_s(2).split("")
|
|
124
|
+
diff = [0, min_size - num_bits.length].max
|
|
125
|
+
num_bits.map.with_index {|n,i| bits[i+diff] = n.to_i}
|
|
126
|
+
bits
|
|
127
|
+
end
|
|
128
|
+
end
|
|
129
|
+
|
|
130
|
+
end
|
|
131
|
+
end
|
|
132
|
+
end
|
|
133
|
+
end
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
module InstanceAgent
|
|
2
|
+
module Plugins
|
|
3
|
+
module CodeDeployPlugin
|
|
4
|
+
module ApplicationSpecification
|
|
5
|
+
#Helper Class for storing an acl
|
|
6
|
+
class AclInfo
|
|
7
|
+
|
|
8
|
+
attr_reader :aces, :additional
|
|
9
|
+
def initialize(acl)
|
|
10
|
+
@aces = []
|
|
11
|
+
@additional = []
|
|
12
|
+
acl.each do |ace|
|
|
13
|
+
@aces << AceInfo.new(ace)
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
#format [default:][user|group|mask|other]:[name]:(r|-)(w|-)(x|-) (or nil if none present)
|
|
18
|
+
def get_default_ace
|
|
19
|
+
@aces.each do |ace|
|
|
20
|
+
if ace.default
|
|
21
|
+
return ace.get_ace
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
@additional.each do |ace|
|
|
25
|
+
if ace.default
|
|
26
|
+
return ace.get_ace
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
nil
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
#format array of aces with format: [default:][user|group|mask|other]:[name]:(r|-)(w|-)(x|-)
|
|
33
|
+
def get_acl
|
|
34
|
+
aces = []
|
|
35
|
+
@aces.each do |ace|
|
|
36
|
+
aces << ace.get_ace
|
|
37
|
+
end
|
|
38
|
+
@additional.each do |ace|
|
|
39
|
+
aces << ace.get_ace
|
|
40
|
+
end
|
|
41
|
+
aces
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
def add_ace(ace)
|
|
45
|
+
additional << AceInfo.new(ace, true)
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
def clear_additional()
|
|
49
|
+
additional = []
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
def has_base_named?
|
|
53
|
+
@aces.each do |ace|
|
|
54
|
+
if !ace.default && !ace.name.eql?("")
|
|
55
|
+
return true
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
@additional.each do |ace|
|
|
59
|
+
if !ace.default && !ace.name.eql?("")
|
|
60
|
+
return true
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
false
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
def has_base_mask?
|
|
67
|
+
@aces.each do |ace|
|
|
68
|
+
if !ace.default && ace.type.eql?("mask")
|
|
69
|
+
return true
|
|
70
|
+
end
|
|
71
|
+
end
|
|
72
|
+
@additional.each do |ace|
|
|
73
|
+
if !ace.default && ace.type.eql?("mask")
|
|
74
|
+
return true
|
|
75
|
+
end
|
|
76
|
+
end
|
|
77
|
+
false
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
def has_default?
|
|
81
|
+
!get_default_ace.nil?
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
def has_default_user?
|
|
85
|
+
@aces.each do |ace|
|
|
86
|
+
if ace.default && ace.type.eql?("user") && ace.name.eql?("")
|
|
87
|
+
return true
|
|
88
|
+
end
|
|
89
|
+
end
|
|
90
|
+
@additional.each do |ace|
|
|
91
|
+
if ace.default && ace.type.eql?("user") && ace.name.eql?("")
|
|
92
|
+
return true
|
|
93
|
+
end
|
|
94
|
+
end
|
|
95
|
+
false
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
def has_default_group?
|
|
99
|
+
!get_default_group_ace.nil?
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
#format [default:][user|group|mask|other]:[name]:(r|-)(w|-)(x|-) (or nil if not present)
|
|
103
|
+
def get_default_group_ace
|
|
104
|
+
@aces.each do |ace|
|
|
105
|
+
if ace.default && ace.type.eql?("group") && ace.name.eql?("")
|
|
106
|
+
return ace.get_ace
|
|
107
|
+
end
|
|
108
|
+
end
|
|
109
|
+
@additional.each do |ace|
|
|
110
|
+
if ace.default && ace.type.eql?("group") && ace.name.eql?("")
|
|
111
|
+
return ace.get_ace
|
|
112
|
+
end
|
|
113
|
+
end
|
|
114
|
+
nil
|
|
115
|
+
end
|
|
116
|
+
|
|
117
|
+
def has_default_other?
|
|
118
|
+
@aces.each do |ace|
|
|
119
|
+
if ace.default && ace.type.eql?("other")
|
|
120
|
+
return true
|
|
121
|
+
end
|
|
122
|
+
end
|
|
123
|
+
@additional.each do |ace|
|
|
124
|
+
if ace.default && ace.type.eql?("other")
|
|
125
|
+
return true
|
|
126
|
+
end
|
|
127
|
+
end
|
|
128
|
+
false
|
|
129
|
+
end
|
|
130
|
+
|
|
131
|
+
def has_default_named?
|
|
132
|
+
@aces.each do |ace|
|
|
133
|
+
if ace.default && !ace.name.eql?("")
|
|
134
|
+
return true
|
|
135
|
+
end
|
|
136
|
+
end
|
|
137
|
+
@additional.each do |ace|
|
|
138
|
+
if ace.default && !ace.name.eql?("")
|
|
139
|
+
return true
|
|
140
|
+
end
|
|
141
|
+
end
|
|
142
|
+
false
|
|
143
|
+
end
|
|
144
|
+
|
|
145
|
+
def has_default_mask?
|
|
146
|
+
@aces.each do |ace|
|
|
147
|
+
if ace.default && ace.type.eql?("mask")
|
|
148
|
+
return true
|
|
149
|
+
end
|
|
150
|
+
end
|
|
151
|
+
@additional.each do |ace|
|
|
152
|
+
if ace.default && ace.type.eql?("mask")
|
|
153
|
+
return true
|
|
154
|
+
end
|
|
155
|
+
end
|
|
156
|
+
false
|
|
157
|
+
end
|
|
158
|
+
end
|
|
159
|
+
|
|
160
|
+
end
|
|
161
|
+
end
|
|
162
|
+
end
|
|
163
|
+
end
|