right_agent 0.5.1
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/LICENSE +20 -0
- data/README.rdoc +78 -0
- data/Rakefile +86 -0
- data/lib/right_agent.rb +66 -0
- data/lib/right_agent/actor.rb +163 -0
- data/lib/right_agent/actor_registry.rb +76 -0
- data/lib/right_agent/actors/agent_manager.rb +189 -0
- data/lib/right_agent/agent.rb +735 -0
- data/lib/right_agent/agent_config.rb +403 -0
- data/lib/right_agent/agent_identity.rb +209 -0
- data/lib/right_agent/agent_tags_manager.rb +213 -0
- data/lib/right_agent/audit_formatter.rb +107 -0
- data/lib/right_agent/broker_client.rb +683 -0
- data/lib/right_agent/command.rb +30 -0
- data/lib/right_agent/command/agent_manager_commands.rb +134 -0
- data/lib/right_agent/command/command_client.rb +136 -0
- data/lib/right_agent/command/command_constants.rb +42 -0
- data/lib/right_agent/command/command_io.rb +128 -0
- data/lib/right_agent/command/command_parser.rb +87 -0
- data/lib/right_agent/command/command_runner.rb +105 -0
- data/lib/right_agent/command/command_serializer.rb +63 -0
- data/lib/right_agent/console.rb +65 -0
- data/lib/right_agent/core_payload_types.rb +42 -0
- data/lib/right_agent/core_payload_types/cookbook.rb +61 -0
- data/lib/right_agent/core_payload_types/cookbook_position.rb +46 -0
- data/lib/right_agent/core_payload_types/cookbook_repository.rb +116 -0
- data/lib/right_agent/core_payload_types/cookbook_sequence.rb +70 -0
- data/lib/right_agent/core_payload_types/dev_repositories.rb +90 -0
- data/lib/right_agent/core_payload_types/event_categories.rb +38 -0
- data/lib/right_agent/core_payload_types/executable_bundle.rb +138 -0
- data/lib/right_agent/core_payload_types/login_policy.rb +72 -0
- data/lib/right_agent/core_payload_types/login_user.rb +62 -0
- data/lib/right_agent/core_payload_types/planned_volume.rb +94 -0
- data/lib/right_agent/core_payload_types/recipe_instantiation.rb +60 -0
- data/lib/right_agent/core_payload_types/repositories_bundle.rb +50 -0
- data/lib/right_agent/core_payload_types/right_script_attachment.rb +95 -0
- data/lib/right_agent/core_payload_types/right_script_instantiation.rb +73 -0
- data/lib/right_agent/core_payload_types/secure_document.rb +66 -0
- data/lib/right_agent/core_payload_types/secure_document_location.rb +63 -0
- data/lib/right_agent/core_payload_types/software_repository_instantiation.rb +61 -0
- data/lib/right_agent/daemonize.rb +35 -0
- data/lib/right_agent/dispatcher.rb +348 -0
- data/lib/right_agent/enrollment_result.rb +217 -0
- data/lib/right_agent/exceptions.rb +30 -0
- data/lib/right_agent/ha_broker_client.rb +1278 -0
- data/lib/right_agent/idempotent_request.rb +140 -0
- data/lib/right_agent/log.rb +418 -0
- data/lib/right_agent/monkey_patches.rb +29 -0
- data/lib/right_agent/monkey_patches/amqp_patch.rb +274 -0
- data/lib/right_agent/monkey_patches/ruby_patch.rb +49 -0
- data/lib/right_agent/monkey_patches/ruby_patch/array_patch.rb +29 -0
- data/lib/right_agent/monkey_patches/ruby_patch/darwin_patch.rb +24 -0
- data/lib/right_agent/monkey_patches/ruby_patch/linux_patch.rb +24 -0
- data/lib/right_agent/monkey_patches/ruby_patch/linux_patch/file_patch.rb +30 -0
- data/lib/right_agent/monkey_patches/ruby_patch/object_patch.rb +49 -0
- data/lib/right_agent/monkey_patches/ruby_patch/singleton_patch.rb +46 -0
- data/lib/right_agent/monkey_patches/ruby_patch/string_patch.rb +107 -0
- data/lib/right_agent/monkey_patches/ruby_patch/windows_patch.rb +32 -0
- data/lib/right_agent/monkey_patches/ruby_patch/windows_patch/file_patch.rb +90 -0
- data/lib/right_agent/monkey_patches/ruby_patch/windows_patch/process_patch.rb +63 -0
- data/lib/right_agent/monkey_patches/ruby_patch/windows_patch/stdio_patch.rb +27 -0
- data/lib/right_agent/monkey_patches/ruby_patch/windows_patch/time_patch.rb +55 -0
- data/lib/right_agent/monkey_patches/ruby_patch/windows_patch/win32ole_patch.rb +34 -0
- data/lib/right_agent/multiplexer.rb +91 -0
- data/lib/right_agent/operation_result.rb +270 -0
- data/lib/right_agent/packets.rb +637 -0
- data/lib/right_agent/payload_formatter.rb +104 -0
- data/lib/right_agent/pid_file.rb +159 -0
- data/lib/right_agent/platform.rb +319 -0
- data/lib/right_agent/platform/darwin.rb +227 -0
- data/lib/right_agent/platform/linux.rb +268 -0
- data/lib/right_agent/platform/windows.rb +1204 -0
- data/lib/right_agent/scripts/agent_controller.rb +522 -0
- data/lib/right_agent/scripts/agent_deployer.rb +379 -0
- data/lib/right_agent/scripts/common_parser.rb +153 -0
- data/lib/right_agent/scripts/log_level_manager.rb +193 -0
- data/lib/right_agent/scripts/stats_manager.rb +256 -0
- data/lib/right_agent/scripts/usage.rb +58 -0
- data/lib/right_agent/secure_identity.rb +92 -0
- data/lib/right_agent/security.rb +32 -0
- data/lib/right_agent/security/cached_certificate_store_proxy.rb +63 -0
- data/lib/right_agent/security/certificate.rb +102 -0
- data/lib/right_agent/security/certificate_cache.rb +89 -0
- data/lib/right_agent/security/distinguished_name.rb +56 -0
- data/lib/right_agent/security/encrypted_document.rb +84 -0
- data/lib/right_agent/security/rsa_key_pair.rb +76 -0
- data/lib/right_agent/security/signature.rb +86 -0
- data/lib/right_agent/security/static_certificate_store.rb +69 -0
- data/lib/right_agent/sender.rb +937 -0
- data/lib/right_agent/serialize.rb +29 -0
- data/lib/right_agent/serialize/message_pack.rb +102 -0
- data/lib/right_agent/serialize/secure_serializer.rb +131 -0
- data/lib/right_agent/serialize/secure_serializer_initializer.rb +47 -0
- data/lib/right_agent/serialize/serializable.rb +135 -0
- data/lib/right_agent/serialize/serializer.rb +149 -0
- data/lib/right_agent/stats_helper.rb +731 -0
- data/lib/right_agent/subprocess.rb +38 -0
- data/lib/right_agent/tracer.rb +124 -0
- data/right_agent.gemspec +60 -0
- data/spec/actor_registry_spec.rb +81 -0
- data/spec/actor_spec.rb +99 -0
- data/spec/agent_config_spec.rb +226 -0
- data/spec/agent_identity_spec.rb +75 -0
- data/spec/agent_spec.rb +571 -0
- data/spec/broker_client_spec.rb +961 -0
- data/spec/command/agent_manager_commands_spec.rb +51 -0
- data/spec/command/command_io_spec.rb +93 -0
- data/spec/command/command_parser_spec.rb +79 -0
- data/spec/command/command_runner_spec.rb +72 -0
- data/spec/command/command_serializer_spec.rb +51 -0
- data/spec/core_payload_types/dev_repositories_spec.rb +64 -0
- data/spec/core_payload_types/executable_bundle_spec.rb +59 -0
- data/spec/core_payload_types/login_user_spec.rb +98 -0
- data/spec/core_payload_types/right_script_attachment_spec.rb +65 -0
- data/spec/core_payload_types/spec_helper.rb +23 -0
- data/spec/dispatcher_spec.rb +372 -0
- data/spec/enrollment_result_spec.rb +53 -0
- data/spec/ha_broker_client_spec.rb +1673 -0
- data/spec/idempotent_request_spec.rb +136 -0
- data/spec/log_spec.rb +177 -0
- data/spec/monkey_patches/amqp_patch_spec.rb +100 -0
- data/spec/monkey_patches/eventmachine_spec.rb +62 -0
- data/spec/monkey_patches/string_patch_spec.rb +99 -0
- data/spec/multiplexer_spec.rb +48 -0
- data/spec/operation_result_spec.rb +171 -0
- data/spec/packets_spec.rb +418 -0
- data/spec/platform/platform_spec.rb +60 -0
- data/spec/results_mock.rb +45 -0
- data/spec/secure_identity_spec.rb +50 -0
- data/spec/security/cached_certificate_store_proxy_spec.rb +56 -0
- data/spec/security/certificate_cache_spec.rb +71 -0
- data/spec/security/certificate_spec.rb +49 -0
- data/spec/security/distinguished_name_spec.rb +46 -0
- data/spec/security/encrypted_document_spec.rb +55 -0
- data/spec/security/rsa_key_pair_spec.rb +55 -0
- data/spec/security/signature_spec.rb +66 -0
- data/spec/security/static_certificate_store_spec.rb +52 -0
- data/spec/sender_spec.rb +887 -0
- data/spec/serialize/message_pack_spec.rb +131 -0
- data/spec/serialize/secure_serializer_spec.rb +102 -0
- data/spec/serialize/serializable_spec.rb +90 -0
- data/spec/serialize/serializer_spec.rb +174 -0
- data/spec/spec.opts +2 -0
- data/spec/spec_helper.rb +77 -0
- data/spec/stats_helper_spec.rb +681 -0
- data/spec/tracer_spec.rb +114 -0
- metadata +320 -0
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Copyright (c) 2009-2011 RightScale Inc
|
|
3
|
+
#
|
|
4
|
+
# Permission is hereby granted, free of charge, to any person obtaining
|
|
5
|
+
# a copy of this software and associated documentation files (the
|
|
6
|
+
# "Software"), to deal in the Software without restriction, including
|
|
7
|
+
# without limitation the rights to use, copy, modify, merge, publish,
|
|
8
|
+
# distribute, sublicense, and/or sell copies of the Software, and to
|
|
9
|
+
# permit persons to whom the Software is furnished to do so, subject to
|
|
10
|
+
# the following conditions:
|
|
11
|
+
#
|
|
12
|
+
# The above copyright notice and this permission notice shall be
|
|
13
|
+
# included in all copies or substantial portions of the Software.
|
|
14
|
+
#
|
|
15
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
16
|
+
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
17
|
+
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
18
|
+
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
|
19
|
+
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
|
20
|
+
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
|
21
|
+
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
22
|
+
#
|
|
23
|
+
|
|
24
|
+
module RightScale
|
|
25
|
+
|
|
26
|
+
# List of authorized users for Managed Login feature
|
|
27
|
+
class LoginPolicy
|
|
28
|
+
PUBLIC_KEY_REGEXP = /(.*)?(ssh-[a-z]{1,3})\s+(\S+)\s*(.*)?$/
|
|
29
|
+
|
|
30
|
+
include Serializable
|
|
31
|
+
|
|
32
|
+
attr_accessor :audit_id, :created_at, :exclusive, :users
|
|
33
|
+
|
|
34
|
+
# Initialize fields from given arguments
|
|
35
|
+
def initialize(*args)
|
|
36
|
+
@audit_id = args[0]
|
|
37
|
+
@created_at = Time.at( (args[1]||Time.now).to_i )
|
|
38
|
+
@exclusive = args[2] || false
|
|
39
|
+
@users = args[3] || []
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
# Array of serialized fields given to constructor
|
|
43
|
+
def serialized_members
|
|
44
|
+
[ @audit_id, @created_at.to_i, @exclusive, @users ]
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
# Utility method to parse an SSH2-format public key and return a 4-tuple consisting
|
|
48
|
+
# of its constituent parts:
|
|
49
|
+
# * leading comment (optional)
|
|
50
|
+
# * algorithm (ssh-rsa or ssh-dsa)
|
|
51
|
+
# * public key material, as a base64 string
|
|
52
|
+
# * trailing comment or email (optional)
|
|
53
|
+
#
|
|
54
|
+
# === Parameters
|
|
55
|
+
# str(String):: the unparsed public key
|
|
56
|
+
#
|
|
57
|
+
# === Return
|
|
58
|
+
# components (Array|nil):: a 4-tuple of key components, or nil if the key was not a valid public key
|
|
59
|
+
#
|
|
60
|
+
def self.parse_public_key(str)
|
|
61
|
+
match = PUBLIC_KEY_REGEXP.match(str)
|
|
62
|
+
|
|
63
|
+
if match
|
|
64
|
+
#Return a nice array of strings with no leading/trailing whitespace, and empty
|
|
65
|
+
#strings transformed into nil
|
|
66
|
+
return match[1..4].map { |x| x.strip! ; x.empty? ? nil : x }
|
|
67
|
+
else
|
|
68
|
+
return nil
|
|
69
|
+
end
|
|
70
|
+
end
|
|
71
|
+
end
|
|
72
|
+
end
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Copyright (c) 2009-2011 RightScale Inc
|
|
3
|
+
#
|
|
4
|
+
# Permission is hereby granted, free of charge, to any person obtaining
|
|
5
|
+
# a copy of this software and associated documentation files (the
|
|
6
|
+
# "Software"), to deal in the Software without restriction, including
|
|
7
|
+
# without limitation the rights to use, copy, modify, merge, publish,
|
|
8
|
+
# distribute, sublicense, and/or sell copies of the Software, and to
|
|
9
|
+
# permit persons to whom the Software is furnished to do so, subject to
|
|
10
|
+
# the following conditions:
|
|
11
|
+
#
|
|
12
|
+
# The above copyright notice and this permission notice shall be
|
|
13
|
+
# included in all copies or substantial portions of the Software.
|
|
14
|
+
#
|
|
15
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
16
|
+
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
17
|
+
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
18
|
+
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
|
19
|
+
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
|
20
|
+
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
|
21
|
+
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
22
|
+
#
|
|
23
|
+
|
|
24
|
+
module RightScale
|
|
25
|
+
|
|
26
|
+
# Authorized user for the Managed Login feature
|
|
27
|
+
class LoginUser
|
|
28
|
+
|
|
29
|
+
include Serializable
|
|
30
|
+
|
|
31
|
+
attr_accessor :uuid, :username, :public_key, :public_keys, :common_name, :superuser, :expires_at
|
|
32
|
+
|
|
33
|
+
# Initialize fields from given arguments
|
|
34
|
+
def initialize(*args)
|
|
35
|
+
@uuid = args[0]
|
|
36
|
+
@username = args[1]
|
|
37
|
+
@public_key = args[2]
|
|
38
|
+
@common_name = args[3] || ''
|
|
39
|
+
@superuser = args[4] || false
|
|
40
|
+
@expires_at = Time.at(args[5]) if args[5] && (args[5] != 0) # nil -> 0 because of expires_at.to_i below
|
|
41
|
+
@public_keys = args[6]
|
|
42
|
+
|
|
43
|
+
# we now expect an array of public_keys to be passed while supporting the
|
|
44
|
+
# singular public_key as a legacy member. when serialized back from a
|
|
45
|
+
# legacy LoginUser record, the singular value may be set while the plural
|
|
46
|
+
# is nil.
|
|
47
|
+
if @public_keys
|
|
48
|
+
raise ArgumentError, "Expected public_keys (seventh argument) to be an array" unless @public_keys.is_a?(Array)
|
|
49
|
+
@public_key = @public_keys.first
|
|
50
|
+
else
|
|
51
|
+
raise ArgumentError, "Expected public_key (third argument) to be a string" unless @public_key.is_a?(String)
|
|
52
|
+
@public_keys = [@public_key]
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
# Array of serialized fields given to constructor
|
|
57
|
+
def serialized_members
|
|
58
|
+
[ @uuid, @username, @public_key, @common_name, @superuser, @expires_at.to_i, @public_keys ]
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
end
|
|
62
|
+
end
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Copyright (c) 2011 RightScale Inc
|
|
3
|
+
#
|
|
4
|
+
# Permission is hereby granted, free of charge, to any person obtaining
|
|
5
|
+
# a copy of this software and associated documentation files (the
|
|
6
|
+
# "Software"), to deal in the Software without restriction, including
|
|
7
|
+
# without limitation the rights to use, copy, modify, merge, publish,
|
|
8
|
+
# distribute, sublicense, and/or sell copies of the Software, and to
|
|
9
|
+
# permit persons to whom the Software is furnished to do so, subject to
|
|
10
|
+
# the following conditions:
|
|
11
|
+
#
|
|
12
|
+
# The above copyright notice and this permission notice shall be
|
|
13
|
+
# included in all copies or substantial portions of the Software.
|
|
14
|
+
#
|
|
15
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
16
|
+
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
17
|
+
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
18
|
+
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
|
19
|
+
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
|
20
|
+
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
|
21
|
+
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
22
|
+
#
|
|
23
|
+
|
|
24
|
+
module RightScale
|
|
25
|
+
|
|
26
|
+
# Represents any details of a planned volume which are needed by the instance
|
|
27
|
+
# for volume management purposes. A planned volume is a blank, snapshotted or
|
|
28
|
+
# existing volume which is associated with a server at launch time. It could
|
|
29
|
+
# also represent a volume which is planned dynamically by the instance itself
|
|
30
|
+
# as part of a script and which is then guaranteed to be properly managed if
|
|
31
|
+
# the instance is stopped/started.
|
|
32
|
+
class PlannedVolume
|
|
33
|
+
|
|
34
|
+
include Serializable
|
|
35
|
+
|
|
36
|
+
# (String) cloud-specific unique identifier for volume (relative to account
|
|
37
|
+
# or global)
|
|
38
|
+
attr_accessor :volume_id
|
|
39
|
+
|
|
40
|
+
# (String) cloud-agnostic current known status of the volume. must be nil or
|
|
41
|
+
# else one of the following:
|
|
42
|
+
# 'pending', 'attached', 'attaching', 'detached', 'detaching', 'deleted'
|
|
43
|
+
attr_accessor :volume_status
|
|
44
|
+
|
|
45
|
+
# (String) cloud-specific device name for volume (relative to instance)
|
|
46
|
+
attr_accessor :device_name
|
|
47
|
+
|
|
48
|
+
# (Array of String) instance platform-specific mount point(s) for the
|
|
49
|
+
# physical or virtual disk (which could have multiple partitions) associated
|
|
50
|
+
# with the planned volume. not all partitions are formatted and/or have a
|
|
51
|
+
# file system which is compatible with the instance's platform so only valid
|
|
52
|
+
# partitions are associated with mount points.
|
|
53
|
+
attr_accessor :mount_points
|
|
54
|
+
|
|
55
|
+
def initialize(*args)
|
|
56
|
+
@volume_id = args[0] if args.size > 0
|
|
57
|
+
@device_name = args[1] if args.size > 1
|
|
58
|
+
@mount_points = args[2] if args.size > 2
|
|
59
|
+
@volume_status = args[3] if args.size > 3
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
# Array of serialized fields given to constructor
|
|
63
|
+
def serialized_members
|
|
64
|
+
[ @volume_id, @device_name, @mount_points, @volume_status ]
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
# Determines if this object is valid.
|
|
68
|
+
#
|
|
69
|
+
# === Return
|
|
70
|
+
# result(Boolean):: true if this object is valid, false if required fields are nil or empty
|
|
71
|
+
def is_valid?
|
|
72
|
+
result = false == is_blank?(@volume_id) &&
|
|
73
|
+
false == is_blank?(@device_name) &&
|
|
74
|
+
false == is_blank?(@volume_status) &&
|
|
75
|
+
false == is_blank?(@mount_points) &&
|
|
76
|
+
nil == @mount_points.find { |mount_point| is_blank?(mount_point) }
|
|
77
|
+
return result
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
private
|
|
81
|
+
|
|
82
|
+
# Determines if the given value is nil or empty.
|
|
83
|
+
#
|
|
84
|
+
# === Parameters
|
|
85
|
+
# value(Object):: any value
|
|
86
|
+
#
|
|
87
|
+
# === Return
|
|
88
|
+
# true if value is nil or empty
|
|
89
|
+
def is_blank?(value)
|
|
90
|
+
value.nil? || value.empty?
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
end
|
|
94
|
+
end
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Copyright (c) 2009-2011 RightScale Inc
|
|
3
|
+
#
|
|
4
|
+
# Permission is hereby granted, free of charge, to any person obtaining
|
|
5
|
+
# a copy of this software and associated documentation files (the
|
|
6
|
+
# "Software"), to deal in the Software without restriction, including
|
|
7
|
+
# without limitation the rights to use, copy, modify, merge, publish,
|
|
8
|
+
# distribute, sublicense, and/or sell copies of the Software, and to
|
|
9
|
+
# permit persons to whom the Software is furnished to do so, subject to
|
|
10
|
+
# the following conditions:
|
|
11
|
+
#
|
|
12
|
+
# The above copyright notice and this permission notice shall be
|
|
13
|
+
# included in all copies or substantial portions of the Software.
|
|
14
|
+
#
|
|
15
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
16
|
+
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
17
|
+
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
18
|
+
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
|
19
|
+
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
|
20
|
+
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
|
21
|
+
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
22
|
+
#
|
|
23
|
+
|
|
24
|
+
module RightScale
|
|
25
|
+
|
|
26
|
+
# Recipe with json
|
|
27
|
+
class RecipeInstantiation
|
|
28
|
+
|
|
29
|
+
include Serializable
|
|
30
|
+
|
|
31
|
+
# (String) Recipe nickname
|
|
32
|
+
attr_accessor :nickname
|
|
33
|
+
|
|
34
|
+
# (Hash) Recipe override attributes (JSON string for RightLink v5.0)
|
|
35
|
+
attr_accessor :attributes
|
|
36
|
+
|
|
37
|
+
# (Integer) Recipe id
|
|
38
|
+
attr_accessor :id
|
|
39
|
+
|
|
40
|
+
# (Boolean) Whether recipe inputs are ready
|
|
41
|
+
attr_accessor :ready
|
|
42
|
+
|
|
43
|
+
# (Array of SecureDocumentLocation) attributes that must be resolved by the instance
|
|
44
|
+
attr_accessor :external_inputs
|
|
45
|
+
|
|
46
|
+
def initialize(*args)
|
|
47
|
+
@nickname = args[0] if args.size > 0
|
|
48
|
+
@attributes = args[1] if args.size > 1
|
|
49
|
+
@id = args[2] if args.size > 2
|
|
50
|
+
@ready = args[3] if args.size > 3
|
|
51
|
+
@external_inputs = args[4] if args.size > 4
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
# Array of serialized fields given to constructor
|
|
55
|
+
def serialized_members
|
|
56
|
+
[ @nickname, @attributes, @id, @ready, @external_inputs ]
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
end
|
|
60
|
+
end
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Copyright (c) 2009-2011 RightScale Inc
|
|
3
|
+
#
|
|
4
|
+
# Permission is hereby granted, free of charge, to any person obtaining
|
|
5
|
+
# a copy of this software and associated documentation files (the
|
|
6
|
+
# "Software"), to deal in the Software without restriction, including
|
|
7
|
+
# without limitation the rights to use, copy, modify, merge, publish,
|
|
8
|
+
# distribute, sublicense, and/or sell copies of the Software, and to
|
|
9
|
+
# permit persons to whom the Software is furnished to do so, subject to
|
|
10
|
+
# the following conditions:
|
|
11
|
+
#
|
|
12
|
+
# The above copyright notice and this permission notice shall be
|
|
13
|
+
# included in all copies or substantial portions of the Software.
|
|
14
|
+
#
|
|
15
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
16
|
+
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
17
|
+
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
18
|
+
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
|
19
|
+
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
|
20
|
+
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
|
21
|
+
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
22
|
+
#
|
|
23
|
+
|
|
24
|
+
module RightScale
|
|
25
|
+
|
|
26
|
+
# Software repositories together with audit id
|
|
27
|
+
# The instance agent can use the audit created by the core agent to audit messages
|
|
28
|
+
# associated with the processing of the software repositories
|
|
29
|
+
class RepositoriesBundle
|
|
30
|
+
|
|
31
|
+
include Serializable
|
|
32
|
+
|
|
33
|
+
# (Array) Repositories instantiations
|
|
34
|
+
attr_accessor :repositories
|
|
35
|
+
|
|
36
|
+
# (Integer) ID of corresponding audit entry
|
|
37
|
+
attr_accessor :audit_id
|
|
38
|
+
|
|
39
|
+
def initialize(*args)
|
|
40
|
+
@repositories = args[0]
|
|
41
|
+
@audit_id = args[1]
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
# Array of serialized fields given to constructor
|
|
45
|
+
def serialized_members
|
|
46
|
+
[ @repositories, @audit_id ]
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
end
|
|
50
|
+
end
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Copyright (c) 2009-2011 RightScale Inc
|
|
3
|
+
#
|
|
4
|
+
# Permission is hereby granted, free of charge, to any person obtaining
|
|
5
|
+
# a copy of this software and associated documentation files (the
|
|
6
|
+
# "Software"), to deal in the Software without restriction, including
|
|
7
|
+
# without limitation the rights to use, copy, modify, merge, publish,
|
|
8
|
+
# distribute, sublicense, and/or sell copies of the Software, and to
|
|
9
|
+
# permit persons to whom the Software is furnished to do so, subject to
|
|
10
|
+
# the following conditions:
|
|
11
|
+
#
|
|
12
|
+
# The above copyright notice and this permission notice shall be
|
|
13
|
+
# included in all copies or substantial portions of the Software.
|
|
14
|
+
#
|
|
15
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
16
|
+
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
17
|
+
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
18
|
+
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
|
19
|
+
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
|
20
|
+
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
|
21
|
+
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
22
|
+
#
|
|
23
|
+
|
|
24
|
+
require 'digest/sha1'
|
|
25
|
+
require 'uri'
|
|
26
|
+
|
|
27
|
+
module RightScale
|
|
28
|
+
|
|
29
|
+
# RightScript attachment
|
|
30
|
+
class RightScriptAttachment
|
|
31
|
+
|
|
32
|
+
include Serializable
|
|
33
|
+
|
|
34
|
+
# (String) S3 attachment URL
|
|
35
|
+
attr_accessor :url
|
|
36
|
+
|
|
37
|
+
# (String) Attachment file name
|
|
38
|
+
attr_accessor :file_name
|
|
39
|
+
|
|
40
|
+
# (String) Cache identifier
|
|
41
|
+
attr_accessor :etag
|
|
42
|
+
|
|
43
|
+
# (Binary string) Repose token for attachment
|
|
44
|
+
attr_accessor :token
|
|
45
|
+
|
|
46
|
+
# (String) Content digest
|
|
47
|
+
attr_accessor :digest
|
|
48
|
+
|
|
49
|
+
def initialize(*args)
|
|
50
|
+
@url = args[0] if args.size > 0
|
|
51
|
+
@file_name = args[1] if args.size > 1
|
|
52
|
+
@etag = args[2] if args.size > 2
|
|
53
|
+
@token = args[3] if args.size > 3
|
|
54
|
+
@digest = args[4] if args.size > 4
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
# Array of serialized fields given to constructor
|
|
58
|
+
def serialized_members
|
|
59
|
+
[ @url, @file_name, @etag, @token, @digest ]
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
# Return the Repose hash for this attachment.
|
|
63
|
+
def to_hash
|
|
64
|
+
RightScriptAttachment.hash_for(@url, @file_name, @etag)
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
# Fill out the session cookie appropriately for this attachment.
|
|
68
|
+
def fill_out(session)
|
|
69
|
+
session['scope'] = "attachments"
|
|
70
|
+
if @digest
|
|
71
|
+
session['resource'] = @digest
|
|
72
|
+
else
|
|
73
|
+
session['resource'] = to_hash
|
|
74
|
+
session['url'] = @url
|
|
75
|
+
session['etag'] = @etag
|
|
76
|
+
end
|
|
77
|
+
@token = session.to_s
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
# Return the Repose hash for the given URL/filename/ETag triple.
|
|
81
|
+
#
|
|
82
|
+
# === Parameters
|
|
83
|
+
# url(String):: URL to request
|
|
84
|
+
# filename(String):: local filename
|
|
85
|
+
# etag(String):: expected ETag
|
|
86
|
+
#
|
|
87
|
+
# === Return
|
|
88
|
+
# String:: hashed token suitable for communicating to Repose
|
|
89
|
+
def self.hash_for(url, filename, etag)
|
|
90
|
+
uri = URI::parse(url).dup
|
|
91
|
+
uri.query = nil
|
|
92
|
+
Digest::SHA1.hexdigest("#{uri}\000#{etag}")
|
|
93
|
+
end
|
|
94
|
+
end
|
|
95
|
+
end
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Copyright (c) 2009-2011 RightScale Inc
|
|
3
|
+
#
|
|
4
|
+
# Permission is hereby granted, free of charge, to any person obtaining
|
|
5
|
+
# a copy of this software and associated documentation files (the
|
|
6
|
+
# "Software"), to deal in the Software without restriction, including
|
|
7
|
+
# without limitation the rights to use, copy, modify, merge, publish,
|
|
8
|
+
# distribute, sublicense, and/or sell copies of the Software, and to
|
|
9
|
+
# permit persons to whom the Software is furnished to do so, subject to
|
|
10
|
+
# the following conditions:
|
|
11
|
+
#
|
|
12
|
+
# The above copyright notice and this permission notice shall be
|
|
13
|
+
# included in all copies or substantial portions of the Software.
|
|
14
|
+
#
|
|
15
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
16
|
+
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
17
|
+
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
18
|
+
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
|
19
|
+
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
|
20
|
+
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
|
21
|
+
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
22
|
+
#
|
|
23
|
+
|
|
24
|
+
module RightScale
|
|
25
|
+
|
|
26
|
+
# RightScript with parameters and attachments
|
|
27
|
+
class RightScriptInstantiation
|
|
28
|
+
|
|
29
|
+
include Serializable
|
|
30
|
+
|
|
31
|
+
# (String) RightScript name
|
|
32
|
+
attr_accessor :nickname
|
|
33
|
+
|
|
34
|
+
# (String) RightScript source
|
|
35
|
+
attr_accessor :source
|
|
36
|
+
|
|
37
|
+
# (Hash) RightScript parameters
|
|
38
|
+
# Hash of parameters names with associated value
|
|
39
|
+
attr_accessor :parameters
|
|
40
|
+
|
|
41
|
+
# (Array) RightScript attachments URLs, array of RightScriptAttachment
|
|
42
|
+
attr_accessor :attachments
|
|
43
|
+
|
|
44
|
+
# (Array) RightScripts required packages
|
|
45
|
+
attr_accessor :packages
|
|
46
|
+
|
|
47
|
+
# (Integer) RightScript id
|
|
48
|
+
attr_accessor :id
|
|
49
|
+
|
|
50
|
+
# (Boolean) Whether script inputs are ready
|
|
51
|
+
attr_accessor :ready
|
|
52
|
+
|
|
53
|
+
# (Array of SecureDocumentLocation) attributes that must be resolved by the instance
|
|
54
|
+
attr_accessor :external_inputs
|
|
55
|
+
|
|
56
|
+
def initialize(*args)
|
|
57
|
+
@nickname = args[0] if args.size > 0
|
|
58
|
+
@source = args[1] if args.size > 1
|
|
59
|
+
@parameters = args[2] if args.size > 2
|
|
60
|
+
@attachments = args[3] if args.size > 3
|
|
61
|
+
@packages = args[4] if args.size > 4
|
|
62
|
+
@id = args[5] if args.size > 5
|
|
63
|
+
@ready = args[6] if args.size > 6
|
|
64
|
+
@external_inputs = args[7] if args.size > 7
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
# Array of serialized fields given to constructor
|
|
68
|
+
def serialized_members
|
|
69
|
+
[ @nickname, @source, @parameters, @attachments, @packages, @id, @ready, @external_inputs ]
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
end
|
|
73
|
+
end
|