fog-sakuracloud 1.0.1 → 1.1.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
  SHA1:
3
- metadata.gz: 7acfddc20f9f0289fe48cc2f51d47b7730c03e52
4
- data.tar.gz: 242cf21c04095f166e0369e8b138bdfab30cd4f9
3
+ metadata.gz: 2a76f70a4a79d0560762658616131d59e11a8dd2
4
+ data.tar.gz: f85a8f58dc6ef37c10ea7115be964b677f64a44e
5
5
  SHA512:
6
- metadata.gz: 86b5ae14cb0dfc1d7a33652a86d0b9c677e6b59bc3a4f5de7f8251f894e02cc936139d83e183803d96085d842819f271a50c8a99286867453eb051dd14bbe71e
7
- data.tar.gz: d8f8fe74132e2ad30ac4e3b66988132575fd2f537ee1bb6645874577276f998680a2eaeb41631212551a494d3fe044a71412047e6c451fd20d92a50219a47295
6
+ metadata.gz: d8a5575a01d508477e6a460aa85af7bee10175b0feba5f8a37605ccea86ef1bc09cf1e3fcd2433351b8204ab3097f81f0487791770c8f0a383823868b1bfb59a
7
+ data.tar.gz: 96a97d8528df9158fb97811b7515d6617efa5bb11eaa3382d9976772821a059eea41712ea7249cce512ee402c367c9d992e38e3e43381afefd6b0d16e84c7e27
@@ -1,8 +1,12 @@
1
1
  # Changelog of fog-sakuracloud
2
2
 
3
- ## v1.0.0
3
+ ## v1.1.0
4
4
 
5
- - Issue:6 Depends only fog-core.
5
+ - Feature: Support Install Script.
6
+
7
+ ## v1.0.1
8
+
9
+ - #11 Using Relative paths.
6
10
 
7
11
  ## v0.1.2
8
12
 
@@ -21,8 +21,13 @@ module Fog
21
21
  SAKURACLOUD_API_ZONE = "is1b" unless defined? SAKURACLOUD_API_ZONE
22
22
  SAKURACLOUD_API_ENDPOINT = "/cloud/zone/#{SAKURACLOUD_API_ZONE}/api/cloud/#{SAKURACLOUD_API_VERSION}/"
23
23
 
24
+ # Miscs
25
+ ## Startup Script
26
+ autoload :Script, File.expand_path('../sakuracloud/script', __FILE__)
27
+
24
28
  service(:compute, 'Compute')
25
- service(:volume, 'Volume')
29
+ service(:volume, 'Volume')
26
30
  service(:network, 'Network')
31
+ service(:script, 'Script')
27
32
  end
28
33
  end
@@ -48,6 +48,7 @@ module Fog
48
48
  disk_attached?(server, disk.id)
49
49
  Fog::Logger.warning("Modifing disk")
50
50
  volume.configure_disk(disk.id, options[:sshkey])
51
+ volume.register_note_to_disk(disk.id, options[:startup_script]) if options[:startup_script]
51
52
  disk
52
53
  end
53
54
 
@@ -0,0 +1,39 @@
1
+ require 'fog/core/model'
2
+
3
+ module Fog
4
+ module SakuraCloud
5
+ class Script
6
+ class Note < Fog::Model
7
+ identity :id, :aliases => 'ID'
8
+ attribute :name, :aliases => 'Name'
9
+ attribute :note_class, :aliases => 'Class'
10
+ attribute :scope, :aliases => 'Scope'
11
+ attribute :content, :aliases => 'Content'
12
+ attribute :description, :aliases => 'Description'
13
+ attribute :remark, :aliases => 'Remark'
14
+ attribute :availability, :aliases => 'Availability'
15
+ attribute :icon, :aliases => 'Icon'
16
+
17
+
18
+ def delete
19
+ service.delete_note(identity)
20
+ true
21
+ end
22
+ alias_method :destroy, :delete
23
+
24
+ def save
25
+ requires :name, :content
26
+ if identity
27
+ Fog::Logger.warning("Update Note #{identity}")
28
+ data = service.modify_note(@attributes).body["Note"]
29
+ else
30
+ Fog::Logger.warning("Create New Note")
31
+ data = service.create_note(@attributes).body["Note"]
32
+ end
33
+ merge_attributes(data)
34
+ true
35
+ end
36
+ end
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,27 @@
1
+ require 'fog/core/collection'
2
+ require 'fog/sakuracloud/models/script/note'
3
+
4
+ module Fog
5
+ module SakuraCloud
6
+ class Script
7
+ class Notes < Fog::Collection
8
+ model Fog::SakuraCloud::Script::Note
9
+
10
+ def all
11
+ load service.list_notes.body['Notes']
12
+ end
13
+
14
+ def get(id)
15
+ all.find { |f| f.id == id }
16
+ rescue Fog::Errors::NotFound
17
+ nil
18
+ end
19
+
20
+ def delete(id)
21
+ service.delete_note(id)
22
+ true
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
@@ -42,6 +42,14 @@ module Fog
42
42
  service.associate_ip_to_disk(@attributes[:id], subnet )
43
43
  true
44
44
  end
45
+
46
+ def register_script(notes)
47
+ note_ids = []
48
+ note_ids << notes
49
+ requires :id
50
+ service.register_note_to_disk(@attributes[:id], note_ids.flatten )
51
+ true
52
+ end
45
53
  end
46
54
  end
47
55
  end
@@ -0,0 +1,52 @@
1
+ # coding: utf-8
2
+
3
+ module Fog
4
+ module SakuraCloud
5
+ class Script
6
+ class Real
7
+ def create_note(options)
8
+ body = {
9
+ "Note" => {
10
+ "Name" => options[:name],
11
+ "Content" => options[:content]
12
+ }
13
+ }
14
+
15
+ request(
16
+ :headers => {
17
+ 'Authorization' => "Basic #{@auth_encord}"
18
+ },
19
+ :expects => 201,
20
+ :method => 'POST',
21
+ :path => "#{Fog::SakuraCloud::SAKURACLOUD_API_ENDPOINT}/note",
22
+ :body => Fog::JSON.encode(body)
23
+ )
24
+ end
25
+ end # Real
26
+
27
+ class Mock
28
+ def create_note(options)
29
+ response = Excon::Response.new
30
+ response.status = 201
31
+ response.body = {
32
+ "Note"=>
33
+ {"ID"=>"112700759852",
34
+ "Name"=>"foobar",
35
+ "Class"=>"shell",
36
+ "Scope"=>"user",
37
+ "Content"=>"#!/bin/bash",
38
+ "Description"=>"",
39
+ "Remark"=>nil,
40
+ "Availability"=>"available",
41
+ "CreatedAt"=>"2015-09-05T20:32:12+09:00",
42
+ "ModifiedAt"=>"2015-09-05T20:32:12+09:00",
43
+ "Icon"=>nil,
44
+ "Tags"=>[]},
45
+ "Success"=>true,
46
+ "is_ok"=>true}
47
+ response
48
+ end
49
+ end
50
+ end
51
+ end
52
+ end
@@ -0,0 +1,45 @@
1
+ # coding: utf-8
2
+
3
+ module Fog
4
+ module SakuraCloud
5
+ class Script
6
+ class Real
7
+ def delete_note( id )
8
+ request(
9
+ :headers => {
10
+ 'Authorization' => "Basic #{@auth_encord}"
11
+ },
12
+ :expects => [200],
13
+ :method => 'DELETE',
14
+ :path => "#{Fog::SakuraCloud::SAKURACLOUD_API_ENDPOINT}/note/#{id}"
15
+ )
16
+ end
17
+ end # Real
18
+
19
+ class Mock
20
+ def delete_note( id )
21
+ response = Excon::Response.new
22
+ response.status = 200
23
+ response.body = {
24
+ "Note"=>
25
+ {"ID"=>"112700759822",
26
+ "Name"=>"hogehoge2",
27
+ "Class"=>"shell",
28
+ "Scope"=>"user",
29
+ "Content"=>"",
30
+ "Description"=>"",
31
+ "Remark"=>nil,
32
+ "Availability"=>"available",
33
+ "CreatedAt"=>"2015-09-05T20:04:24+09:00",
34
+ "ModifiedAt"=>"2015-09-05T20:04:24+09:00",
35
+ "Icon"=>nil,
36
+ "Tags"=>[]},
37
+ "Success"=>true,
38
+ "is_ok"=>true
39
+ }
40
+ response
41
+ end
42
+ end
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,39 @@
1
+ # coding: utf-8
2
+
3
+ module Fog
4
+ module SakuraCloud
5
+ class Script
6
+ class Real
7
+ def list_notes(options = {})
8
+ request(
9
+ :headers => {
10
+ 'Authorization' => "Basic #{@auth_encord}"
11
+ },
12
+ :method => 'GET',
13
+ :path => "#{Fog::SakuraCloud::SAKURACLOUD_API_ENDPOINT}/note"
14
+ )
15
+ end
16
+ end
17
+
18
+ class Mock
19
+ def list_notes(options = {})
20
+ response = Excon::Response.new
21
+ response.status = 200
22
+ response.body = {
23
+ "Internet"=>[
24
+ {"Index"=>0,
25
+ "ID"=>"112600707538",
26
+ "Switch"=>{
27
+ "ID"=>"112600707539",
28
+ "Name"=>"router2"
29
+ }
30
+ }
31
+ ],
32
+ "is_ok"=>true
33
+ }
34
+ response
35
+ end
36
+ end
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,53 @@
1
+ # coding: utf-8
2
+
3
+ module Fog
4
+ module SakuraCloud
5
+ class Script
6
+ class Real
7
+ def modify_note( options )
8
+ body = {
9
+ "Note" => {
10
+ "Name" => options[:name],
11
+ "Content" => options[:content]
12
+ }
13
+ }
14
+
15
+ request(
16
+ :headers => {
17
+ 'Authorization' => "Basic #{@auth_encord}"
18
+ },
19
+ :expects => [200],
20
+ :method => 'PUT',
21
+ :path => "#{Fog::SakuraCloud::SAKURACLOUD_API_ENDPOINT}/note/#{options[:id]}",
22
+ :body => Fog::JSON.encode(body)
23
+ )
24
+ end
25
+ end # Real
26
+
27
+ class Mock
28
+ def modify_note( options )
29
+ response = Excon::Response.new
30
+ response.status = 200
31
+ response.body = {
32
+ "Note"=>
33
+ {"ID"=>"112700759822",
34
+ "Name"=>"hogehoge2",
35
+ "Class"=>"shell",
36
+ "Scope"=>"user",
37
+ "Content"=>"",
38
+ "Description"=>"",
39
+ "Remark"=>nil,
40
+ "Availability"=>"available",
41
+ "CreatedAt"=>"2015-09-05T20:04:24+09:00",
42
+ "ModifiedAt"=>"2015-09-05T20:04:24+09:00",
43
+ "Icon"=>nil,
44
+ "Tags"=>[]},
45
+ "Success"=>true,
46
+ "is_ok"=>true
47
+ }
48
+ response
49
+ end
50
+ end
51
+ end
52
+ end
53
+ end
@@ -25,8 +25,7 @@ module Fog
25
25
  def configure_disk( disk_id, sshkey_id )
26
26
  response = Excon::Response.new
27
27
  response.status = 200
28
- response.body = {
29
- }
28
+ response.body = {"Success"=>true, "is_ok"=>true}
30
29
  response
31
30
  end
32
31
  end
@@ -0,0 +1,35 @@
1
+ # coding: utf-8
2
+
3
+ module Fog
4
+ module Volume
5
+ class SakuraCloud
6
+ class Real
7
+ def register_note_to_disk( disk_id, notes )
8
+ body = {
9
+ "Notes" => notes.map {|note| { "ID" => note }}
10
+ }
11
+
12
+ request(
13
+ :headers => {
14
+ 'Authorization' => "Basic #{@auth_encord}"
15
+ },
16
+ :expects => [200],
17
+ :method => 'PUT',
18
+ :path => "#{Fog::SakuraCloud::SAKURACLOUD_API_ENDPOINT}/disk/#{disk_id.to_s}/config",
19
+ :body => Fog::JSON.encode(body)
20
+ )
21
+ end
22
+ end # Real
23
+
24
+ class Mock
25
+ def register_note_to_disk( disk_id, notes )
26
+ response = Excon::Response.new
27
+ response.status = 200
28
+ response.body = {
29
+ }
30
+ response
31
+ end
32
+ end
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,76 @@
1
+ module Fog
2
+ module SakuraCloud
3
+ class Script < Fog::Service
4
+ requires :sakuracloud_api_token
5
+ requires :sakuracloud_api_token_secret
6
+
7
+ recognizes :sakuracloud_api_url
8
+
9
+ model_path 'fog/sakuracloud/models/script'
10
+ model :note
11
+ collection :notes
12
+
13
+ request_path 'fog/sakuracloud/requests/script'
14
+ request :list_notes
15
+ request :create_note
16
+ request :modify_note
17
+ request :delete_note
18
+
19
+ class Real
20
+ def initialize(options = {})
21
+ @auth_encord = Base64.strict_encode64([
22
+ options[:sakuracloud_api_token],
23
+ options[:sakuracloud_api_token_secret]
24
+ ].join(':'))
25
+ Fog.credentials[:sakuracloud_api_token] = options[:sakuracloud_api_token]
26
+ Fog.credentials[:sakuracloud_api_token_secret] = options[:sakuracloud_api_token_secret]
27
+
28
+ @sakuracloud_api_url = options[:sakuracloud_api_url] || 'https://secure.sakura.ad.jp'
29
+
30
+ @connection = Fog::Core::Connection.new(@sakuracloud_api_url)
31
+ end
32
+
33
+ def request(params)
34
+ response = parse @connection.request(params)
35
+ response
36
+ end
37
+
38
+ private
39
+ def parse(response)
40
+ return response if response.body.empty?
41
+ response.body = Fog::JSON.decode(response.body)
42
+ response
43
+ end
44
+ end
45
+
46
+ class Mock
47
+ def self.data
48
+ @data ||= Hash.new do |hash, key|
49
+ hash[key] = {
50
+ :notes => []
51
+ }
52
+ end
53
+ end
54
+
55
+ def self.reset
56
+ @data = nil
57
+ end
58
+
59
+ def initialize(options={})
60
+ @sakuracloud_api_token = options[:sakuracloud_api_token]
61
+ @sakuracloud_api_token_secret = options[:sakuracloud_api_token_secret]
62
+ end
63
+
64
+ def data
65
+ self.class.data[@sakuracloud_api_token]
66
+ self.class.data[@sakuracloud_api_token_secret]
67
+ end
68
+
69
+ def reset_data
70
+ self.class.data.delete(@sakuracloud_api_token)
71
+ self.class.data.delete(@sakuracloud_api_token_secret)
72
+ end
73
+ end
74
+ end
75
+ end
76
+ end
@@ -1,5 +1,5 @@
1
1
  module Fog
2
2
  module Sakuracloud
3
- VERSION = "1.0.1"
3
+ VERSION = "1.1.0"
4
4
  end
5
5
  end
@@ -20,6 +20,7 @@ module Fog
20
20
  request :create_disk
21
21
  request :configure_disk
22
22
  request :associate_ip_to_disk
23
+ request :register_note_to_disk
23
24
  request :attach_disk
24
25
  request :delete_disk
25
26
  request :list_archives
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fog-sakuracloud
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.1
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - sawanoboly
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-04-04 00:00:00.000000000 Z
11
+ date: 2015-09-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: fog-core
@@ -225,6 +225,8 @@ files:
225
225
  - lib/fog/sakuracloud/models/network/routers.rb
226
226
  - lib/fog/sakuracloud/models/network/switch.rb
227
227
  - lib/fog/sakuracloud/models/network/switches.rb
228
+ - lib/fog/sakuracloud/models/script/note.rb
229
+ - lib/fog/sakuracloud/models/script/notes.rb
228
230
  - lib/fog/sakuracloud/models/volume/archive.rb
229
231
  - lib/fog/sakuracloud/models/volume/archives.rb
230
232
  - lib/fog/sakuracloud/models/volume/disk.rb
@@ -246,6 +248,10 @@ files:
246
248
  - lib/fog/sakuracloud/requests/network/delete_switch.rb
247
249
  - lib/fog/sakuracloud/requests/network/list_routers.rb
248
250
  - lib/fog/sakuracloud/requests/network/list_switches.rb
251
+ - lib/fog/sakuracloud/requests/script/create_note.rb
252
+ - lib/fog/sakuracloud/requests/script/delete_note.rb
253
+ - lib/fog/sakuracloud/requests/script/list_notes.rb
254
+ - lib/fog/sakuracloud/requests/script/modify_note.rb
249
255
  - lib/fog/sakuracloud/requests/volume/associate_ip_to_disk.rb
250
256
  - lib/fog/sakuracloud/requests/volume/attach_disk.rb
251
257
  - lib/fog/sakuracloud/requests/volume/configure_disk.rb
@@ -254,6 +260,8 @@ files:
254
260
  - lib/fog/sakuracloud/requests/volume/list_archives.rb
255
261
  - lib/fog/sakuracloud/requests/volume/list_disks.rb
256
262
  - lib/fog/sakuracloud/requests/volume/list_plans.rb
263
+ - lib/fog/sakuracloud/requests/volume/register_note_to_disk.rb
264
+ - lib/fog/sakuracloud/script.rb
257
265
  - lib/fog/sakuracloud/version.rb
258
266
  - lib/fog/sakuracloud/volume.rb
259
267
  - tests/helper.rb
@@ -286,7 +294,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
286
294
  version: '0'
287
295
  requirements: []
288
296
  rubyforge_project:
289
- rubygems_version: 2.4.6
297
+ rubygems_version: 2.4.8
290
298
  signing_key:
291
299
  specification_version: 4
292
300
  summary: Module for the 'fog' gem to support Sakura no Cloud