iravat 0.1.0
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/Rakefile +54 -0
- data/lib/awsconf/aws_config.xml +28 -0
- data/lib/awsconf/ir_aws_config_manager.rb +62 -0
- data/lib/ec2/ir_ec2.rb +190 -0
- data/lib/iravat.rb +28 -0
- data/lib/logger/ir_log_initializer.rb +29 -0
- data/lib/logger/ir_logger.rb +104 -0
- data/lib/logger/log4r_config.xml +59 -0
- data/lib/s3/ir_s3.rb +100 -0
- metadata +134 -0
data/Rakefile
ADDED
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
require 'rubygems'
|
|
2
|
+
require 'bundler'
|
|
3
|
+
begin
|
|
4
|
+
Bundler.setup(:default, :development)
|
|
5
|
+
rescue Bundler::BundlerError => e
|
|
6
|
+
$stderr.puts e.message
|
|
7
|
+
$stderr.puts "Run `bundle install` to install missing gems"
|
|
8
|
+
exit e.status_code
|
|
9
|
+
end
|
|
10
|
+
require 'rake'
|
|
11
|
+
|
|
12
|
+
require 'jeweler'
|
|
13
|
+
Jeweler::Tasks.new do |gem|
|
|
14
|
+
# gem is a Gem::Specification... see http://docs.rubygems.org/read/chapter/20 for more options
|
|
15
|
+
gem.name = "iravat"
|
|
16
|
+
gem.homepage = "http://github.com/aloksrivastava78/iravat"
|
|
17
|
+
gem.license = "MIT"
|
|
18
|
+
gem.summary = %Q{Access to AWS }
|
|
19
|
+
gem.description = %Q{Access to AWS}
|
|
20
|
+
gem.email = "alok@chipmonk.in"
|
|
21
|
+
gem.authors = ["alok"]
|
|
22
|
+
gem.files =%w(Rakefile) + Dir.glob("lib/**/*")
|
|
23
|
+
gem.require_path = 'lib'
|
|
24
|
+
# Include your dependencies below. Runtime dependencies are required when using your gem,
|
|
25
|
+
# and development dependencies are only needed for development (ie running rake tasks, tests, etc)
|
|
26
|
+
# gem.add_runtime_dependency 'jabber4r', '> 0.1'
|
|
27
|
+
end
|
|
28
|
+
Jeweler::RubygemsDotOrgTasks.new
|
|
29
|
+
|
|
30
|
+
require 'rake/testtask'
|
|
31
|
+
Rake::TestTask.new(:test) do |test|
|
|
32
|
+
test.libs << 'lib' << 'test'
|
|
33
|
+
test.pattern = 'test/**/test_*.rb'
|
|
34
|
+
test.verbose = true
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
require 'rcov/rcovtask'
|
|
38
|
+
Rcov::RcovTask.new do |test|
|
|
39
|
+
test.libs << 'test'
|
|
40
|
+
test.pattern = 'test/**/test_*.rb'
|
|
41
|
+
test.verbose = true
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
task :default => :test
|
|
45
|
+
|
|
46
|
+
require 'rake/rdoctask'
|
|
47
|
+
Rake::RDocTask.new do |rdoc|
|
|
48
|
+
version = File.exist?('VERSION') ? File.read('VERSION') : ""
|
|
49
|
+
|
|
50
|
+
rdoc.rdoc_dir = 'rdoc'
|
|
51
|
+
rdoc.title = "iravat #{version}"
|
|
52
|
+
rdoc.rdoc_files.include('README*')
|
|
53
|
+
rdoc.rdoc_files.include('lib/**/*.rb')
|
|
54
|
+
end
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
<ChipMonkAWSConfigs>
|
|
2
|
+
|
|
3
|
+
<AWSAccessKey>
|
|
4
|
+
<AWSAccessKey>AKIAI3PFX46PLS7Q2FSQ</AWSAccessKey>
|
|
5
|
+
<AWSAccessSecretKey>myfR2IcfGWLO3gLEDvLuQFEqq5x3kpS+vXzIIvqJ</AWSAccessSecretKey>
|
|
6
|
+
</AWSAccessKey>
|
|
7
|
+
|
|
8
|
+
<S3>
|
|
9
|
+
<Server>s3.amazonaws.com</Server>
|
|
10
|
+
<Port>443</Port>
|
|
11
|
+
<Protocol>https</Protocol>
|
|
12
|
+
<MultiThread>false</MultiThread>
|
|
13
|
+
<NamePrefix>ChipMonk</NamePrefix>
|
|
14
|
+
<NameSuffix>S3</NameSuffix>
|
|
15
|
+
<Delimeter>-</Delimeter>
|
|
16
|
+
</S3>
|
|
17
|
+
|
|
18
|
+
<EC2>
|
|
19
|
+
<NamePrefix>ChipMonk></NamePrefix>
|
|
20
|
+
<NameSuffix>S3</NameSuffix>
|
|
21
|
+
</EC2>
|
|
22
|
+
|
|
23
|
+
<LogFile>
|
|
24
|
+
<FileName>log.txt</FileName>
|
|
25
|
+
</LogFile>
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
</ChipMonkAWSConfigs>
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
module Iravat
|
|
2
|
+
|
|
3
|
+
#require './ir_module'
|
|
4
|
+
|
|
5
|
+
class IrAwsConfigManager
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
#Constructor: takes default configuration from preconfigured path unless changed
|
|
9
|
+
# by caller.
|
|
10
|
+
|
|
11
|
+
def initialize(confXMLPath=IRAVAT_AWS_CONFIG_XML_PATH)
|
|
12
|
+
$ir_logger=IrLogger.new(IRAVAT_AWS_CONFIG_LOGGER)
|
|
13
|
+
$logger=$ir_logger.getLog4rLogger()
|
|
14
|
+
@confXMLPath=confXMLPath
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
def loadConfigurationFile()
|
|
19
|
+
begin
|
|
20
|
+
@xmlDom = Nokogiri::XML(File.open(@confXMLPath).read)
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
if(@xmlDom.nil?)
|
|
24
|
+
#$log.error("XML DOM is null")
|
|
25
|
+
$logger.error("AWS XML parsing resulted in error. Document is null.")
|
|
26
|
+
end
|
|
27
|
+
rescue Nokogiri::XML::SyntaxError
|
|
28
|
+
# $log.error("Exception raised while parsing XML file")
|
|
29
|
+
$logger.error("Exception raised while parsing XML file")
|
|
30
|
+
return
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def getPathFromXML(path)
|
|
35
|
+
nodeSet= @xmlDom.xpath(path)
|
|
36
|
+
if(nodeSet.nil?)
|
|
37
|
+
$logger.error("Nothing present in path:" + path)
|
|
38
|
+
return ""
|
|
39
|
+
end
|
|
40
|
+
#TODO Add multi node
|
|
41
|
+
if(nodeSet.length() != 1)
|
|
42
|
+
$logger.error("Bad XML configuration file:" + @confXMLPath + " for path " + path)
|
|
43
|
+
return ""
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
return nodeSet[0].text
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
if __FILE__ == $0
|
|
52
|
+
#Unit tester hack
|
|
53
|
+
#require './ir_log_initializer.rb'
|
|
54
|
+
#li = IrLogInitializer.new
|
|
55
|
+
#li.init()
|
|
56
|
+
########################
|
|
57
|
+
instance = IrAwsConfigManager.new(IRAVAT_AWS_CONFIG_XML_PATH)
|
|
58
|
+
instance.loadConfigurationFile()
|
|
59
|
+
$logger.info(instance.getPathFromXML("/ChipMonkAWSConfigs/AWSAccessKey/AWSAccessKeyID"))
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
end
|
data/lib/ec2/ir_ec2.rb
ADDED
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
module Iravat
|
|
2
|
+
|
|
3
|
+
#require './ir_module'
|
|
4
|
+
|
|
5
|
+
class IrEC2
|
|
6
|
+
|
|
7
|
+
def initialize()
|
|
8
|
+
@logger = IrLogger.new(self.class.name).getLog4rLogger()
|
|
9
|
+
awsConfig=IrAwsConfigManager.new(IRAVAT_AWS_CONFIG_XML_PATH)
|
|
10
|
+
awsConfig.loadConfigurationFile()
|
|
11
|
+
@awsKeyID=awsConfig.getPathFromXML("/ChipMonkAWSConfigs/AWSAccessKey/AWSAccessKey")
|
|
12
|
+
@awsSecretKey=awsConfig.getPathFromXML("/ChipMonkAWSConfigs/AWSAccessKey/AWSAccessSecretKey")
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
#common error handler for RightScale Lib
|
|
17
|
+
def error_ec2 (err)
|
|
18
|
+
err.errors.each do |e|
|
|
19
|
+
@logger.error(err.errors)
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
def connectToAWS()
|
|
25
|
+
begin
|
|
26
|
+
@ec2 = RightAws::Ec2.new(@awsKeyID,@awsSecretKey)
|
|
27
|
+
if(@ec2.nil?)
|
|
28
|
+
@logger.error("Failed to create an access to EC2")
|
|
29
|
+
return false
|
|
30
|
+
end
|
|
31
|
+
return true
|
|
32
|
+
rescue RightAws::AwsError=>err
|
|
33
|
+
self.error_ec2(err)
|
|
34
|
+
return false
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
def getKey()
|
|
40
|
+
begin
|
|
41
|
+
key = @ec2.describe_key_pairs()[0][:aws_key_name]
|
|
42
|
+
if(key.nil?)
|
|
43
|
+
@logger.error("No Key pair existing")
|
|
44
|
+
end
|
|
45
|
+
return key
|
|
46
|
+
rescue RightAws::AwsError=>err
|
|
47
|
+
self.error_ec2(err)
|
|
48
|
+
return nil
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
def getSecurityGroup()
|
|
54
|
+
begin
|
|
55
|
+
securityGroup = @ec2.describe_key_pairs()[0]
|
|
56
|
+
if(securityGroup.nil?)
|
|
57
|
+
@logger.error("No security group created")
|
|
58
|
+
end
|
|
59
|
+
return securityGroup
|
|
60
|
+
rescue RightAws::AwsError=>err
|
|
61
|
+
self.error_ec2(err)
|
|
62
|
+
return nil
|
|
63
|
+
end
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
|
|
67
|
+
def printAllActiveImages()
|
|
68
|
+
begin
|
|
69
|
+
awsInstances=@ec2.describe_instances
|
|
70
|
+
#Loop on all instance
|
|
71
|
+
awsInstances.each do |awsInstance|
|
|
72
|
+
@logger.info("============================================")
|
|
73
|
+
@logger.info("AWS Instance ID:" + awsInstance[:aws_instance_id])
|
|
74
|
+
@logger.info("AWS Image ID:" + awsInstance[:aws_image_id])
|
|
75
|
+
@logger.info("AWS State:" + awsInstance[:aws_state])
|
|
76
|
+
if( awsInstance[:aws_state] == "running")
|
|
77
|
+
@logger.info("IP Address:" + awsInstance[:ip_address])
|
|
78
|
+
@logger.info("DNS Name:" + awsInstance[:dns_name])
|
|
79
|
+
@logger.info("AWS Instance Type:" + awsInstance[:aws_instance_type])
|
|
80
|
+
@logger.info("AWS Private DNS Name:" + awsInstance[:private_dns_name])
|
|
81
|
+
@logger.info("AWS Instance Launch Time:" + awsInstance[:aws_launch_time])
|
|
82
|
+
@logger.info("AWS Availability Zone:" + awsInstance[:aws_availability_zone])
|
|
83
|
+
|
|
84
|
+
blockDevicesMapped=awsInstance[:block_device_mappings]
|
|
85
|
+
|
|
86
|
+
blockDevicesMapped.each do |blockDevice|
|
|
87
|
+
@logger.info(" -----------------------------------------------")
|
|
88
|
+
@logger.info(" EBS Device Name:" + blockDevice[:device_name])
|
|
89
|
+
@logger.info(" EBS Device ID:" + blockDevice[:ebs_volume_id])
|
|
90
|
+
@logger.info(" EBS Device Attach Time:" + blockDevice[:ebs_attach_time])
|
|
91
|
+
@logger.info(" -----------------------------------------------")
|
|
92
|
+
end
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
@logger.info("============================================")
|
|
96
|
+
end
|
|
97
|
+
rescue RightAws::AwsError=>err
|
|
98
|
+
self.error_ec2(err)
|
|
99
|
+
return nil
|
|
100
|
+
end
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
|
|
104
|
+
def createNewInstance(imageID,instanceType, availablilityZone, userCookieData)
|
|
105
|
+
#run_instances(image_id, min_count, max_count, group_ids, key_name, user_data='', addressing_type = nil,
|
|
106
|
+
#instance_type = nil, kernel_id = nil, ramdisk_id = nil, availability_zone = nil, monitoring_enabled = nil,
|
|
107
|
+
#subnet_id = nil, disable_api_termination = nil, instance_initiated_shutdown_behavior = nil, block_device_mappings = nil,
|
|
108
|
+
#placement_group_name = nil, client_token = nil)
|
|
109
|
+
begin
|
|
110
|
+
responseDetails=@ec2.run_instances(imageID,
|
|
111
|
+
1,
|
|
112
|
+
1,
|
|
113
|
+
self.getSecurityGroup()[:aws_group_name],
|
|
114
|
+
self.getKey(),
|
|
115
|
+
userCookieData,
|
|
116
|
+
nil,
|
|
117
|
+
instanceType,
|
|
118
|
+
nil,
|
|
119
|
+
nil,
|
|
120
|
+
availablilityZone)[0]
|
|
121
|
+
|
|
122
|
+
|
|
123
|
+
|
|
124
|
+
@logger.debug("============================================")
|
|
125
|
+
@logger.debug("AMI instance launched")
|
|
126
|
+
@logger.debug("Instance ID:" + responseDetails[:aws_instance_id])
|
|
127
|
+
@logger.debug("Instance State:" + responseDetails[:aws_state])
|
|
128
|
+
@logger.debug("Instance Type:" + responseDetails[:aws_instance_type])
|
|
129
|
+
@logger.debug("Availability Zone:" + responseDetails[:aws_availability_zone])
|
|
130
|
+
@logger.debug ("============================================")
|
|
131
|
+
rescue RightAws::AwsError=>err
|
|
132
|
+
self.error_ec2(err)
|
|
133
|
+
return nil
|
|
134
|
+
end
|
|
135
|
+
return responseDetails[:aws_instance_id]
|
|
136
|
+
|
|
137
|
+
end
|
|
138
|
+
|
|
139
|
+
|
|
140
|
+
def rebootInstance(instanceID)
|
|
141
|
+
begin
|
|
142
|
+
response=@ec2.reboot_instances(instanceID)
|
|
143
|
+
if(response == false)
|
|
144
|
+
@logger.debug("AMI instance id " + instanceID + "failed to reboot")
|
|
145
|
+
else
|
|
146
|
+
@logger.debug("AMI instance id " + instanceID + "rebooted successfully")
|
|
147
|
+
end
|
|
148
|
+
rescue RightAws::AwsError=>err
|
|
149
|
+
self.error_ec2(err)
|
|
150
|
+
return nil
|
|
151
|
+
end
|
|
152
|
+
end
|
|
153
|
+
|
|
154
|
+
def terminateInstance(instanceID)
|
|
155
|
+
begin
|
|
156
|
+
instanceIDArr=[instanceID]
|
|
157
|
+
responseDetails=@ec2.terminate_instances(instanceIDArr)
|
|
158
|
+
@logger.debug("============================================")
|
|
159
|
+
@logger.debug("AMI instance terminated")
|
|
160
|
+
@logger.debug("Instance ID:" + responseDetails[0][:aws_instance_id])
|
|
161
|
+
@logger.debug("Current State Code:" + responseDetails[0][:aws_current_state_code].to_s())
|
|
162
|
+
@logger.debug("Current State Name:" + responseDetails[0][:aws_current_state_name])
|
|
163
|
+
@logger.debug("Previous State Code:" + responseDetails[0][:aws_prev_state_code].to_s())
|
|
164
|
+
@logger.debug("Previous State Name:" + responseDetails[0][:aws_prev_state_name])
|
|
165
|
+
@logger.debug("============================================")
|
|
166
|
+
rescue RightAws::AwsError=>err
|
|
167
|
+
self.error_ec2(err)
|
|
168
|
+
return nil
|
|
169
|
+
end
|
|
170
|
+
end
|
|
171
|
+
end
|
|
172
|
+
|
|
173
|
+
if __FILE__ == $0
|
|
174
|
+
#require './ir_log_initializer.rb'
|
|
175
|
+
#li = IrLogInitializer.new
|
|
176
|
+
#li.init()
|
|
177
|
+
#$ir_logger=IrLogger.new("AnotherLogger")
|
|
178
|
+
#@logger=$ir_logger.getLog4rLogger()
|
|
179
|
+
ec2Manager=IrEC2.new
|
|
180
|
+
if(ec2Manager.connectToAWS() == true)
|
|
181
|
+
ec2Manager.printAllActiveImages()
|
|
182
|
+
instanceID=ec2Manager.createNewInstance("ami-00d62369", "t1.micro","us-east-1b","Sudhanshu-Started")
|
|
183
|
+
ec2Manager.terminateInstance(instanceID)
|
|
184
|
+
ec2Manager.printAllActiveImages()
|
|
185
|
+
end
|
|
186
|
+
|
|
187
|
+
|
|
188
|
+
end
|
|
189
|
+
|
|
190
|
+
end
|
data/lib/iravat.rb
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
require 'right_aws'
|
|
2
|
+
require 'logger'
|
|
3
|
+
require 'rubygems'
|
|
4
|
+
require 'nokogiri'
|
|
5
|
+
require 'log4r'
|
|
6
|
+
require 'log4r/configurator'
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
$:.unshift(File.dirname(__FILE__))
|
|
10
|
+
require 'logger/ir_logger'
|
|
11
|
+
require 'logger/ir_log_initializer'
|
|
12
|
+
require 'awsconf/ir_aws_config_manager'
|
|
13
|
+
require 's3/ir_s3'
|
|
14
|
+
require 'ec2/ir_ec2'
|
|
15
|
+
|
|
16
|
+
module Iravat
|
|
17
|
+
|
|
18
|
+
IRAVAT_RIGHT_SCALE_LOGGER = 'RightScaleLogger'
|
|
19
|
+
IRAVAT_LOGGER_DEFAULT_LOGGER = 'MasterLogger'
|
|
20
|
+
IRAVAT_AWS_CONFIG_LOGGER = 'AWSConfig'
|
|
21
|
+
|
|
22
|
+
IRAVAT_LOG_CONFIG_XML = File.expand_path(File.dirname(__FILE__)) +'/' + 'logger/log4r_config.xml'
|
|
23
|
+
IRAVAT_LOG_PATH = './'
|
|
24
|
+
|
|
25
|
+
IRAVAT_LOG_FILE = File.expand_path(File.dirname(__FILE__)) + '/' + 'logger/my_configfile.log'
|
|
26
|
+
|
|
27
|
+
IRAVAT_AWS_CONFIG_XML_PATH = File.expand_path(File.dirname(__FILE__)) + '/' + 'awsconf/aws_config.xml'
|
|
28
|
+
end
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
module Iravat
|
|
2
|
+
|
|
3
|
+
#require './ir_module'
|
|
4
|
+
|
|
5
|
+
class IrLogInitializer
|
|
6
|
+
|
|
7
|
+
include Log4r
|
|
8
|
+
|
|
9
|
+
def self.init()
|
|
10
|
+
begin
|
|
11
|
+
Configurator['logpath'] = IRAVAT_LOG_PATH # was './logs'
|
|
12
|
+
Configurator.load_xml_file(IRAVAT_LOG_CONFIG_XML)
|
|
13
|
+
rescue Log4r::ConfigError => e
|
|
14
|
+
puts "Error in configuration log4r ==== " + e.message
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
if __FILE__ == $0
|
|
22
|
+
#li = IrLogInitializer.new
|
|
23
|
+
#li.init()
|
|
24
|
+
IrLogInitializer::init()
|
|
25
|
+
log =Log4r::Logger["MainLogger"]
|
|
26
|
+
log.fatal("hi")
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
end
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
module Iravat
|
|
2
|
+
|
|
3
|
+
#require './ir_module'
|
|
4
|
+
|
|
5
|
+
class IrLogger
|
|
6
|
+
|
|
7
|
+
def initialize(loggerType = IRAVAT_LOGGER_DEFAULT_LOGGER)
|
|
8
|
+
IrLogInitializer::init()
|
|
9
|
+
@module_logger =Log4r::Logger[loggerType]
|
|
10
|
+
|
|
11
|
+
if( @module_logger.nil?)
|
|
12
|
+
print( " == Unable to initiate logging for module " + loggerType + "==== Falling back to MasterLogger <log4r_config.xml>\n")
|
|
13
|
+
@module_logger =Log4r::Logger[IRAVAT_LOGGER_DEFAULT_LOGGER]
|
|
14
|
+
if (@module_logger.nil? )
|
|
15
|
+
#Falling to default Ruby Logger
|
|
16
|
+
@module_logger = Logger.new(IRAVAT_LOG_FILE)
|
|
17
|
+
@module_logger.warn("Unable to initiate logging for module MasterLogger\n")
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
def getLog4rLogger()
|
|
24
|
+
return @module_logger
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
def trace(message)
|
|
29
|
+
if( @module_logger.nil?)
|
|
30
|
+
print("TRACE:" + message + "\n")
|
|
31
|
+
else
|
|
32
|
+
@module_logger.trace(message)
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
def debug(message)
|
|
38
|
+
if( @module_logger.nil?)
|
|
39
|
+
print("DEBUG:" + message + "\n")
|
|
40
|
+
else
|
|
41
|
+
@module_logger.debug(message)
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
def info(message)
|
|
47
|
+
if( @module_logger.nil?)
|
|
48
|
+
print("INFO:" + message + "\n")
|
|
49
|
+
else
|
|
50
|
+
@module_logger.info(message)
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
def warn(message)
|
|
56
|
+
if( @module_logger.nil?)
|
|
57
|
+
print("WARN:" + message + "\n")
|
|
58
|
+
else
|
|
59
|
+
@module_logger.warn(message)
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
def error(message)
|
|
65
|
+
if( @module_logger.nil?)
|
|
66
|
+
print("ERROR:" + message + "\n")
|
|
67
|
+
else
|
|
68
|
+
@module_logger.error(message)
|
|
69
|
+
end
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
|
|
73
|
+
def fatal(message)
|
|
74
|
+
if( @module_logger.nil?)
|
|
75
|
+
print("FATAL:" + message + "\n")
|
|
76
|
+
else
|
|
77
|
+
@module_logger.error(message)
|
|
78
|
+
end
|
|
79
|
+
end
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
|
|
83
|
+
if __FILE__ == $0
|
|
84
|
+
require './ir_log_initializer.rb'
|
|
85
|
+
#call only once
|
|
86
|
+
#li = IrLogInitializer.new
|
|
87
|
+
#li.init()
|
|
88
|
+
#IrLogInitializer::init()
|
|
89
|
+
########################
|
|
90
|
+
|
|
91
|
+
#call on head of file
|
|
92
|
+
log = IrLogger.new("AnotherLogger")
|
|
93
|
+
############
|
|
94
|
+
|
|
95
|
+
|
|
96
|
+
log.debug("Hi debug")
|
|
97
|
+
log.info("Hi info")
|
|
98
|
+
log.warn("Hi warn")
|
|
99
|
+
log.error("Hi error")
|
|
100
|
+
log.fatal("Hi fatal")
|
|
101
|
+
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
end
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
|
|
2
|
+
<log4r_config>
|
|
3
|
+
|
|
4
|
+
<pre_config>
|
|
5
|
+
<custom_levels>DEBUG, INFO, WARN, ERROR, FATAL</custom_levels>
|
|
6
|
+
<global level="ALL"/>
|
|
7
|
+
</pre_config>
|
|
8
|
+
|
|
9
|
+
<outputter name="console" type="StdoutOutputter" level="DEBUG" >
|
|
10
|
+
<formatter type="Log4r::PatternFormatter">
|
|
11
|
+
<pattern>=>[%5l %d] %C: %M [%t]</pattern>
|
|
12
|
+
</formatter>
|
|
13
|
+
</outputter>
|
|
14
|
+
|
|
15
|
+
<outputter name="file_outputter" type="FileOutputter">
|
|
16
|
+
<filename>/var/log/chipmonk/iravat/logs.txt</filename>
|
|
17
|
+
<formatter type="Log4r::PatternFormatter">
|
|
18
|
+
<pattern>=>[%5l %d] %C: %M [%t]</pattern>
|
|
19
|
+
</formatter>
|
|
20
|
+
</outputter>
|
|
21
|
+
|
|
22
|
+
<logger name="MasterLogger"
|
|
23
|
+
level="ALL" additive="false" trace="true">
|
|
24
|
+
<outputter>file_outputter</outputter>
|
|
25
|
+
</logger>
|
|
26
|
+
|
|
27
|
+
<logger name="S3Logger"
|
|
28
|
+
level="ALL" additive="false" trace="true">
|
|
29
|
+
<outputter>console</outputter>
|
|
30
|
+
<outputter>file_outputter</outputter>
|
|
31
|
+
</logger>
|
|
32
|
+
|
|
33
|
+
<logger name="Ec2Logger"
|
|
34
|
+
level="ALL" additive="false" trace="true">
|
|
35
|
+
<outputter>console</outputter>
|
|
36
|
+
<outputter>file_outputter</outputter>
|
|
37
|
+
</logger>
|
|
38
|
+
|
|
39
|
+
<logger name="AWSConfig"
|
|
40
|
+
level="ALL" additive="false" trace="true">
|
|
41
|
+
<outputter>console</outputter>
|
|
42
|
+
<outputter>file_outputter</outputter>
|
|
43
|
+
</logger>
|
|
44
|
+
|
|
45
|
+
<logger name="RightScaleLogger"
|
|
46
|
+
level="ALL" additive="false" trace="true">
|
|
47
|
+
<outputter>console</outputter>
|
|
48
|
+
<outputter>file_outputter</outputter>
|
|
49
|
+
</logger>
|
|
50
|
+
</log4r_config>
|
|
51
|
+
W, [2011-04-20T15:23:41.665759 #9565] WARN -- : Unable to initiate logging for module MasterLogger
|
|
52
|
+
|
|
53
|
+
W, [2011-04-20T15:23:41.665927 #9565] WARN -- : Unable to initiate logging for module MasterLogger
|
|
54
|
+
|
|
55
|
+
W, [2011-04-20T15:23:41.666407 #9565] WARN -- : Unable to initiate logging for module MasterLogger
|
|
56
|
+
|
|
57
|
+
I, [2011-04-20T15:23:41.666576 #9565] INFO -- : New RightAws::S3Interface using shared connections mode
|
|
58
|
+
I, [2011-04-20T15:23:41.667076 #9565] INFO -- : Opening new HTTPS connection to s3.amazonaws.com:443
|
|
59
|
+
I, [2011-04-20T15:23:43.238456 #9565] INFO -- : New RightAws::S3Interface using shared connections mode
|
data/lib/s3/ir_s3.rb
ADDED
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
module Iravat
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
class IrS3
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
def load_config()
|
|
8
|
+
@config = IrAwsConfigManager.new(IRAVAT_AWS_CONFIG_XML_PATH)
|
|
9
|
+
@config.loadConfigurationFile()
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
def get_config(xpath)
|
|
14
|
+
@config.getPathFromXML(xpath)
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
def initialize()
|
|
19
|
+
@logger = IrLogger.new(self.class.name).getLog4rLogger()
|
|
20
|
+
|
|
21
|
+
self.load_config()
|
|
22
|
+
|
|
23
|
+
@aws_access_key_id = self.get_config('/ChipMonkAWSConfigs/AWSAccessKey/AWSAccessKey')
|
|
24
|
+
@aws_secret_access_key = self.get_config('/ChipMonkAWSConfigs/AWSAccessKey/AWSAccessSecretKey')
|
|
25
|
+
|
|
26
|
+
@s3config = {:server => self.get_config('/ChipMonkAWSConfigs/S3/Server'), # Amazon service host: 's3.amazonaws.com'(default)
|
|
27
|
+
:port => self.get_config('/ChipMonkAWSConfigs/S3/Port'), # Amazon service port: 80 or 443(default)
|
|
28
|
+
:protocol => self.get_config('/ChipMonkAWSConfigs/S3/Protocol'), # Amazon service protocol: 'http' or 'https'(default)
|
|
29
|
+
:multi_thread => self.get_config('/ChipMonkAWSConfigs/S3/MultiThread'), # Multi-threaded (connection per each thread):
|
|
30
|
+
:logger => IrLogger.new(IRAVAT_RIGHT_SCALE_LOGGER).getLog4rLogger(),} # Defaults to Stdout
|
|
31
|
+
|
|
32
|
+
@name_prefix = self.get_config('/ChipMonkAWSConfigs/S3/NamePrefix')
|
|
33
|
+
@name_suffix = self.get_config('/ChipMonkAWSConfigs/S3/NameSuffix')
|
|
34
|
+
@delimeter = self.get_config('/ChipMonkAWSConfigs/S3/Delimeter')
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
#common error handler for RightScale Lib
|
|
39
|
+
def error_aws (aws,err)
|
|
40
|
+
err.errors.each do |e|
|
|
41
|
+
@logger.error( "#### System Error #### " + err.errors)
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
def list_s3_bucket()
|
|
47
|
+
s3 = RightAws::S3.new(@aws_access_key_id, @aws_secret_access_key,@s3config)
|
|
48
|
+
|
|
49
|
+
my_bucket_names = s3.buckets.map { |b| b.name}
|
|
50
|
+
@logger.info("Buckets on S3: #{my_bucket_names.join(', ')}")
|
|
51
|
+
|
|
52
|
+
rescue RightAws::AwsError=>err
|
|
53
|
+
self.error_aws(s3,err)
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
def create_s3_bucket(username)
|
|
58
|
+
s3 = RightAws::S3.new(@aws_access_key_id, @aws_secret_access_key,@s3config)
|
|
59
|
+
|
|
60
|
+
bucketname = @name_prefix+@delimeter+username+@delimeter+@name_suffix
|
|
61
|
+
|
|
62
|
+
@logger.info(bucketname)
|
|
63
|
+
|
|
64
|
+
bucket = s3.bucket(bucketname, true)
|
|
65
|
+
rescue RightAws::AwsError=>err
|
|
66
|
+
self.error_aws(s3,err)
|
|
67
|
+
|
|
68
|
+
# keymap=bucket.keys.map{|key| key.name}
|
|
69
|
+
# puts "File list : #{keymap.join(', ')}"
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
|
|
73
|
+
def delete_s3_bucket(bucketname)
|
|
74
|
+
s3 = RightAws::S3.new(@aws_access_key_id, @aws_secret_access_key,@s3config)
|
|
75
|
+
bucket = s3.bucket(bucketname)
|
|
76
|
+
if( bucket.nil?)
|
|
77
|
+
raise "No Bucket Exist"
|
|
78
|
+
end
|
|
79
|
+
#clear objects from bucket
|
|
80
|
+
bucket.clear()
|
|
81
|
+
bucket.delete(:force=>false)
|
|
82
|
+
rescue RightAws::AwsError=>err
|
|
83
|
+
self.error_aws(s3,err)
|
|
84
|
+
|
|
85
|
+
#Handling the RuntimeError
|
|
86
|
+
rescue => e
|
|
87
|
+
@logger.warn(e.message)
|
|
88
|
+
end
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
|
|
92
|
+
if __FILE__ == $0
|
|
93
|
+
ir = IrS3.new
|
|
94
|
+
|
|
95
|
+
ir.create_s3_bucket("alok")
|
|
96
|
+
ir.list_s3_bucket()
|
|
97
|
+
#ir.delete_s3_bucket("iravattest")
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
end
|
metadata
ADDED
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
|
2
|
+
name: iravat
|
|
3
|
+
version: !ruby/object:Gem::Version
|
|
4
|
+
hash: 27
|
|
5
|
+
prerelease: false
|
|
6
|
+
segments:
|
|
7
|
+
- 0
|
|
8
|
+
- 1
|
|
9
|
+
- 0
|
|
10
|
+
version: 0.1.0
|
|
11
|
+
platform: ruby
|
|
12
|
+
authors:
|
|
13
|
+
- alok
|
|
14
|
+
autorequire:
|
|
15
|
+
bindir: bin
|
|
16
|
+
cert_chain: []
|
|
17
|
+
|
|
18
|
+
date: 2011-04-23 00:00:00 +05:30
|
|
19
|
+
default_executable:
|
|
20
|
+
dependencies:
|
|
21
|
+
- !ruby/object:Gem::Dependency
|
|
22
|
+
type: :development
|
|
23
|
+
prerelease: false
|
|
24
|
+
name: shoulda
|
|
25
|
+
version_requirements: &id001 !ruby/object:Gem::Requirement
|
|
26
|
+
none: false
|
|
27
|
+
requirements:
|
|
28
|
+
- - ">="
|
|
29
|
+
- !ruby/object:Gem::Version
|
|
30
|
+
hash: 3
|
|
31
|
+
segments:
|
|
32
|
+
- 0
|
|
33
|
+
version: "0"
|
|
34
|
+
requirement: *id001
|
|
35
|
+
- !ruby/object:Gem::Dependency
|
|
36
|
+
type: :development
|
|
37
|
+
prerelease: false
|
|
38
|
+
name: bundler
|
|
39
|
+
version_requirements: &id002 !ruby/object:Gem::Requirement
|
|
40
|
+
none: false
|
|
41
|
+
requirements:
|
|
42
|
+
- - ~>
|
|
43
|
+
- !ruby/object:Gem::Version
|
|
44
|
+
hash: 23
|
|
45
|
+
segments:
|
|
46
|
+
- 1
|
|
47
|
+
- 0
|
|
48
|
+
- 0
|
|
49
|
+
version: 1.0.0
|
|
50
|
+
requirement: *id002
|
|
51
|
+
- !ruby/object:Gem::Dependency
|
|
52
|
+
type: :development
|
|
53
|
+
prerelease: false
|
|
54
|
+
name: jeweler
|
|
55
|
+
version_requirements: &id003 !ruby/object:Gem::Requirement
|
|
56
|
+
none: false
|
|
57
|
+
requirements:
|
|
58
|
+
- - ~>
|
|
59
|
+
- !ruby/object:Gem::Version
|
|
60
|
+
hash: 7
|
|
61
|
+
segments:
|
|
62
|
+
- 1
|
|
63
|
+
- 5
|
|
64
|
+
- 2
|
|
65
|
+
version: 1.5.2
|
|
66
|
+
requirement: *id003
|
|
67
|
+
- !ruby/object:Gem::Dependency
|
|
68
|
+
type: :development
|
|
69
|
+
prerelease: false
|
|
70
|
+
name: rcov
|
|
71
|
+
version_requirements: &id004 !ruby/object:Gem::Requirement
|
|
72
|
+
none: false
|
|
73
|
+
requirements:
|
|
74
|
+
- - ">="
|
|
75
|
+
- !ruby/object:Gem::Version
|
|
76
|
+
hash: 3
|
|
77
|
+
segments:
|
|
78
|
+
- 0
|
|
79
|
+
version: "0"
|
|
80
|
+
requirement: *id004
|
|
81
|
+
description: Access to AWS
|
|
82
|
+
email: alok@chipmonk.in
|
|
83
|
+
executables: []
|
|
84
|
+
|
|
85
|
+
extensions: []
|
|
86
|
+
|
|
87
|
+
extra_rdoc_files: []
|
|
88
|
+
|
|
89
|
+
files:
|
|
90
|
+
- Rakefile
|
|
91
|
+
- lib/awsconf/aws_config.xml
|
|
92
|
+
- lib/awsconf/ir_aws_config_manager.rb
|
|
93
|
+
- lib/ec2/ir_ec2.rb
|
|
94
|
+
- lib/iravat.rb
|
|
95
|
+
- lib/logger/ir_log_initializer.rb
|
|
96
|
+
- lib/logger/ir_logger.rb
|
|
97
|
+
- lib/logger/log4r_config.xml
|
|
98
|
+
- lib/s3/ir_s3.rb
|
|
99
|
+
has_rdoc: true
|
|
100
|
+
homepage: http://github.com/aloksrivastava78/iravat
|
|
101
|
+
licenses:
|
|
102
|
+
- MIT
|
|
103
|
+
post_install_message:
|
|
104
|
+
rdoc_options: []
|
|
105
|
+
|
|
106
|
+
require_paths:
|
|
107
|
+
- lib
|
|
108
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
|
109
|
+
none: false
|
|
110
|
+
requirements:
|
|
111
|
+
- - ">="
|
|
112
|
+
- !ruby/object:Gem::Version
|
|
113
|
+
hash: 3
|
|
114
|
+
segments:
|
|
115
|
+
- 0
|
|
116
|
+
version: "0"
|
|
117
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
118
|
+
none: false
|
|
119
|
+
requirements:
|
|
120
|
+
- - ">="
|
|
121
|
+
- !ruby/object:Gem::Version
|
|
122
|
+
hash: 3
|
|
123
|
+
segments:
|
|
124
|
+
- 0
|
|
125
|
+
version: "0"
|
|
126
|
+
requirements: []
|
|
127
|
+
|
|
128
|
+
rubyforge_project:
|
|
129
|
+
rubygems_version: 1.3.7
|
|
130
|
+
signing_key:
|
|
131
|
+
specification_version: 3
|
|
132
|
+
summary: Access to AWS
|
|
133
|
+
test_files: []
|
|
134
|
+
|