Class: SwiftClient
- Inherits:
-
Object
- Object
- SwiftClient
- Defined in:
- lib/swift_client.rb
Overview
- Author
-
Murali Raju (<[email protected]>)
- Copyright
-
Copyright © 2011 Murali Raju.
- License
-
Apache License, Version 2.0
Licensed under the Apache License, Version 2.0 (the “License”); you may not use this file except in compliance with the License. You may obtain a copy of the License at
www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an “AS IS” BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
Instance Method Summary collapse
- #create_container_no_cdn(prefix) ⇒ Object
- #create_containers_no_cdn(prefix, number_of) ⇒ Object
- #create_objects(path_to_local_files, container) ⇒ Object
- #delete_container(prefix) ⇒ Object
- #delete_containers ⇒ Object
- #delete_objects(container) ⇒ Object
- #generate_json_output ⇒ Object
-
#initialize(type, auth_json) ⇒ SwiftClient
constructor
A new instance of SwiftClient.
- #list_containers ⇒ Object
- #list_objects(container_name) ⇒ Object
Constructor Details
#initialize(type, auth_json) ⇒ SwiftClient
Returns a new instance of SwiftClient.
20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 |
# File 'lib/swift_client.rb', line 20 def initialize(type, auth_json) auth_config = File.read(Dir.home + "/.swift-manager/authentication/#{auth_json}.json") @auth_params = JSON.parse(auth_config) case type when 's3' provider = @auth_params["provider"] aws_secret_access_key = @auth_params["keys"]["secret_access_key"] aws_access_key_id = @auth_params["keys"]["access_key_id"] begin puts 'Connecting to OpenStack Swift: S3 middleware...'.color(:green) puts '' @connection = Fog::Storage.new( :provider => provider, :aws_secret_access_key => aws_secret_access_key, :aws_access_key_id => aws_access_key_id ) rescue Exception => e raise 'Unable to connect to OpenStack Swift: S3 middleware. Check authentication information or if the service is running' end when 'swift' provider = @auth_params["provider"] swift_api_key = @auth_params["keys"]["secret_access_key"] swift_username = @auth_params["keys"]["access_key_id"] swift_auth_ip = @auth_params["url_ip"] begin Excon.defaults[:ssl_verify_peer] = false #SSL verify error on Mac OS X puts 'Connecting to OpenStack Swift...'.color(:green) puts '' @connection = Fog::Storage.new({ :provider => provider, :rackspace_username => swift_username, :rackspace_api_key => swift_api_key, :rackspace_auth_url => "#{swift_auth_ip}:8080/auth/v1.0"}) @cdn_connection = Fog::CDN.new({ :provider => provider, :rackspace_username => swift_username, :rackspace_api_key => swift_api_key, :rackspace_auth_url => "#{swift_auth_ip}:8080/auth/v1.0"}) rescue Exception => e raise 'Unable to connect to OpenStack Swift. Check authentication information or if the service is running.' end end end |
Instance Method Details
#create_container_no_cdn(prefix) ⇒ Object
71 72 73 74 75 76 77 78 79 80 |
# File 'lib/swift_client.rb', line 71 def create_container_no_cdn(prefix) @connection.directories.create( :key => "#{prefix}-#{Time.now.to_i}", # globally unique name :public => false, :cdn => "" ) sleep 1 list_containers puts '' end |
#create_containers_no_cdn(prefix, number_of) ⇒ Object
82 83 84 85 86 87 88 89 90 91 92 |
# File 'lib/swift_client.rb', line 82 def create_containers_no_cdn(prefix, number_of) start_time = Time.now.to_f @count = 1 number_of.times do create_container_no_cdn(prefix) end_time = Time.now.to_f time_elapsed = end_time - start_time puts "Time elapsed to create #{@count} containers: #{time_elapsed} seconds".bright @count += 1 end end |
#create_objects(path_to_local_files, container) ⇒ Object
125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 |
# File 'lib/swift_client.rb', line 125 def create_objects(path_to_local_files, container) directory = @connection.directories.get(container) files = Dir[path_to_local_files] for file in files do name = File.basename(file) begin unless directory.files.head(name) directory.files.create(:key => name, :body => open(file)) puts "Uploading file #{name} to #{container}".bright else puts "File #{name} already exists. Please delete file and try again".bright end rescue Exception => e raise "Container #{container} does not exist. Please check and try again" end end puts '' puts 'Creating objects complete'.color(:green) puts '' end |
#delete_container(prefix) ⇒ Object
94 95 96 97 98 99 100 101 102 103 |
# File 'lib/swift_client.rb', line 94 def delete_container(prefix) begin puts "Deleting container #{prefix}...".color(:green) @connection.directories.get(prefix).destroy puts '' rescue Exception => e #Fog related bugs...tbd #raise 'Delete files first or check if the container lists using \'swift-manager list storage -t swift -f <auth> -i container\'' end end |
#delete_containers ⇒ Object
105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 |
# File 'lib/swift_client.rb', line 105 def delete_containers containers_json = @connection.directories.to_json containers = JSON.parse(containers_json) container_names = [] containers.length.times do |i| container_names << containers[i]['key'] end start_time = Time.now.to_f container_names.each do |container| delete_files(container) delete_container(container) end_time = Time.now.to_f @time_elapsed = end_time - start_time end puts '' puts "Time elapsed to delete #{containers.length} containers: #{@time_elapsed} seconds".bright puts '' end |
#delete_objects(container) ⇒ Object
151 152 153 154 155 156 157 158 159 160 |
# File 'lib/swift_client.rb', line 151 def delete_objects(container) directory = @connection.directories.get(container) files = directory.files files.each do |f| f.destroy end puts '' puts "*Deleting all files in container #{container}".bright end |
#generate_json_output ⇒ Object
162 163 164 165 166 167 168 169 |
# File 'lib/swift_client.rb', line 162 def generate_json_output container_json_path = Dir.home + "/.swift-manager/shell/container.json" files_json_path = Dir.home + "/.swift-manager/shell/files.json" File.open(container_json_path, "w") do |f| f << @connection.directories.to_json end end |
#list_containers ⇒ Object
67 68 69 |
# File 'lib/swift_client.rb', line 67 def list_containers @connection.directories.table end |
#list_objects(container_name) ⇒ Object
147 148 149 |
# File 'lib/swift_client.rb', line 147 def list_objects(container_name) @connection.directories.get(container_name).files.table([:key, :last_modified, :content_length]) end |