vagrant-cloudcenter 0.2.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.
- checksums.yaml +7 -0
- data/README.md +143 -0
- data/lib/vagrant-cloudcenter/action/deploy.rb +146 -0
- data/lib/vagrant-cloudcenter/action/is_created.rb +88 -0
- data/lib/vagrant-cloudcenter/action/is_stopped.rb +97 -0
- data/lib/vagrant-cloudcenter/action/read_ssh_info.rb +90 -0
- data/lib/vagrant-cloudcenter/action/read_state.rb +28 -0
- data/lib/vagrant-cloudcenter/action/start_instance.rb +137 -0
- data/lib/vagrant-cloudcenter/action/stop_instance.rb +129 -0
- data/lib/vagrant-cloudcenter/action/terminate_instance.rb +131 -0
- data/lib/vagrant-cloudcenter/action.rb +229 -0
- data/lib/vagrant-cloudcenter/command/app.rb +74 -0
- data/lib/vagrant-cloudcenter/command/catalog.rb +117 -0
- data/lib/vagrant-cloudcenter/command/init.rb +50 -0
- data/lib/vagrant-cloudcenter/command/jobs.rb +121 -0
- data/lib/vagrant-cloudcenter/command/root.rb +94 -0
- data/lib/vagrant-cloudcenter/command/sync.rb +29 -0
- data/lib/vagrant-cloudcenter/config.rb +36 -0
- data/lib/vagrant-cloudcenter/errors.rb +40 -0
- data/lib/vagrant-cloudcenter/plugin.rb +74 -0
- data/lib/vagrant-cloudcenter/provider.rb +51 -0
- data/lib/vagrant-cloudcenter/util/timer.rb +17 -0
- data/lib/vagrant-cloudcenter/version.rb +3 -0
- data/lib/vagrant-cloudcenter.rb +18 -0
- data/locales/en.yml +33 -0
- metadata +137 -0
@@ -0,0 +1,117 @@
|
|
1
|
+
module VagrantPlugins
|
2
|
+
module Cloudcenter
|
3
|
+
module Command
|
4
|
+
class Catalog < Vagrant.plugin("2", :command)
|
5
|
+
def self.synopsis
|
6
|
+
"Retrieve available catalog items"
|
7
|
+
end
|
8
|
+
|
9
|
+
def execute
|
10
|
+
|
11
|
+
access_key = ""
|
12
|
+
username = ""
|
13
|
+
host_ip = ""
|
14
|
+
|
15
|
+
if File.exists?("VagrantFile")
|
16
|
+
File.readlines("VagrantFile").grep(/cloudcenter.access_key/) do |line|
|
17
|
+
unless line.empty?
|
18
|
+
access_key = line.scan(/["']([^"']*)["']/)[0][0]
|
19
|
+
end
|
20
|
+
end
|
21
|
+
File.readlines("VagrantFile").grep(/cloudcenter.username/) do |line|
|
22
|
+
unless line.empty?
|
23
|
+
username = line.scan(/["']([^"']*)["']/)[0][0]
|
24
|
+
|
25
|
+
end
|
26
|
+
end
|
27
|
+
File.readlines("VagrantFile").grep(/cloudcenter.host_ip/) do |line|
|
28
|
+
unless line.empty?
|
29
|
+
host_ip = line.scan(/["']([^"']*)["']/)[0][0]
|
30
|
+
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
if access_key.empty?
|
36
|
+
access_key = ENV["access_key"]
|
37
|
+
end
|
38
|
+
if username.empty?
|
39
|
+
username = ENV["username"]
|
40
|
+
end
|
41
|
+
if host_ip.empty?
|
42
|
+
host_ip = ENV["host_ip"]
|
43
|
+
end
|
44
|
+
|
45
|
+
if access_key.nil?
|
46
|
+
puts "Access Key missing. Please enter into VagrantFile or environmental variable 'export access_key= '"
|
47
|
+
end
|
48
|
+
if username.nil?
|
49
|
+
puts "Username missing. Please enter into VagrantFile or environmental variable 'export username= '"
|
50
|
+
end
|
51
|
+
if host_ip.nil?
|
52
|
+
puts "Host IP missing. Please enter into VagrantFile or environmental variable 'export host_ip= '"
|
53
|
+
end
|
54
|
+
|
55
|
+
if !(access_key.nil? or username.nil? or host_ip.nil?)
|
56
|
+
begin
|
57
|
+
|
58
|
+
encoded = URI.encode("https://#{username}:#{access_key}@#{host_ip}/v1/apps");
|
59
|
+
|
60
|
+
catalog = JSON.parse(RestClient::Request.execute(
|
61
|
+
:method => :get,
|
62
|
+
:url => encoded,
|
63
|
+
:verify_ssl => false,
|
64
|
+
:content_type => "json",
|
65
|
+
:accept => "json"
|
66
|
+
));
|
67
|
+
|
68
|
+
catalogs = catalog["apps"]
|
69
|
+
|
70
|
+
|
71
|
+
# build table with data returned from above function
|
72
|
+
|
73
|
+
table = Text::Table.new
|
74
|
+
table.head = ["ID", "Name", "Versions", "Category"]
|
75
|
+
puts "\n"
|
76
|
+
|
77
|
+
#for each item in returned list, display certain attributes in the table
|
78
|
+
catalogs.each do |row|
|
79
|
+
id = row["serviceTierId"]
|
80
|
+
appName = row["name"]
|
81
|
+
description = row["description"]
|
82
|
+
versions = row["versions"]
|
83
|
+
category = row["category"]
|
84
|
+
|
85
|
+
table.rows << ["#{id}","#{appName}", "#{versions}", "#{category}"]
|
86
|
+
end
|
87
|
+
|
88
|
+
puts table
|
89
|
+
|
90
|
+
puts"\n"
|
91
|
+
|
92
|
+
rescue => e
|
93
|
+
|
94
|
+
if e.inspect == "Timed out connecting to server"
|
95
|
+
puts "\n#ConnectionError - Unable to connnect to CloudCenter Manager \n"
|
96
|
+
exit
|
97
|
+
else
|
98
|
+
error = JSON.parse(e.response)
|
99
|
+
code = error["errors"][0]["code"]
|
100
|
+
|
101
|
+
puts "\n Error code: #{error['errors'][0]['code']}\n"
|
102
|
+
puts "\n #{error['errors'][0]['message']}\n\n"
|
103
|
+
|
104
|
+
exit
|
105
|
+
end
|
106
|
+
end
|
107
|
+
end
|
108
|
+
|
109
|
+
0
|
110
|
+
|
111
|
+
|
112
|
+
|
113
|
+
end
|
114
|
+
end
|
115
|
+
end
|
116
|
+
end
|
117
|
+
end
|
@@ -0,0 +1,50 @@
|
|
1
|
+
module VagrantPlugins
|
2
|
+
module Cloudcenter
|
3
|
+
module Command
|
4
|
+
class Init < Vagrant.plugin("2", :command)
|
5
|
+
def self.synopsis
|
6
|
+
"Create inital Vagrant file"
|
7
|
+
end
|
8
|
+
|
9
|
+
# This will build the Vagrantfile and insert the attributes required
|
10
|
+
|
11
|
+
|
12
|
+
def createInitFile()
|
13
|
+
|
14
|
+
script = File.open("Vagrantfile", "w")
|
15
|
+
|
16
|
+
script.puts "# -*- mode: ruby -*-
|
17
|
+
# vi: set ft=ruby :
|
18
|
+
|
19
|
+
Vagrant.configure(2) do |config|
|
20
|
+
|
21
|
+
config.vm.box = 'cloudcenter'
|
22
|
+
|
23
|
+
config.ssh.private_key_path = ['/Users/MYUSERNAME/.ssh/id_rsa','/Users/MYUSERNAME/.vagrant.d/insecure_private_key']
|
24
|
+
config.ssh.insert_key = false
|
25
|
+
|
26
|
+
config.vm.provider :cloudcenter do |cloudcenter|
|
27
|
+
cloudcenter.username = 'my_username'
|
28
|
+
cloudcenter.access_key = 'my_access_key'
|
29
|
+
cloudcenter.host_ip = 'cloudcenter_host_ip_address'
|
30
|
+
cloudcenter.deployment_config = 'sample_deployment_config.json'
|
31
|
+
end
|
32
|
+
|
33
|
+
config.vm.synced_folder '.', '/opt/my_files/', type: 'rsync'
|
34
|
+
|
35
|
+
end"
|
36
|
+
script.close
|
37
|
+
|
38
|
+
end
|
39
|
+
|
40
|
+
|
41
|
+
|
42
|
+
def execute
|
43
|
+
|
44
|
+
createInitFile()
|
45
|
+
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
@@ -0,0 +1,121 @@
|
|
1
|
+
module VagrantPlugins
|
2
|
+
module Cloudcenter
|
3
|
+
module Command
|
4
|
+
class Jobs < Vagrant.plugin("2", :command)
|
5
|
+
def self.synopsis
|
6
|
+
"Retrieve available jobs"
|
7
|
+
end
|
8
|
+
|
9
|
+
def execute
|
10
|
+
|
11
|
+
access_key = ""
|
12
|
+
username = ""
|
13
|
+
host_ip = ""
|
14
|
+
|
15
|
+
|
16
|
+
if File.exists?("VagrantFile")
|
17
|
+
File.readlines("VagrantFile").grep(/cloudcenter.access_key/) do |line|
|
18
|
+
unless line.empty?
|
19
|
+
access_key = line.scan(/["']([^"']*)["']/)[0][0]
|
20
|
+
end
|
21
|
+
end
|
22
|
+
File.readlines("VagrantFile").grep(/cloudcenter.username/) do |line|
|
23
|
+
unless line.empty?
|
24
|
+
username = line.scan(/["']([^"']*)["']/)[0][0]
|
25
|
+
|
26
|
+
end
|
27
|
+
end
|
28
|
+
File.readlines("VagrantFile").grep(/cloudcenter.host_ip/) do |line|
|
29
|
+
unless line.empty?
|
30
|
+
host_ip = line.scan(/["']([^"']*)["']/)[0][0]
|
31
|
+
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
if access_key.empty?
|
37
|
+
access_key = ENV["access_key"]
|
38
|
+
end
|
39
|
+
if username.empty?
|
40
|
+
username = ENV["username"]
|
41
|
+
end
|
42
|
+
if host_ip.empty?
|
43
|
+
host_ip = ENV["host_ip"]
|
44
|
+
end
|
45
|
+
|
46
|
+
|
47
|
+
if access_key.nil?
|
48
|
+
puts "Access Key missing. Please enter into VagrantFile or environmental variable 'export access_key= '"
|
49
|
+
end
|
50
|
+
if username.nil?
|
51
|
+
puts "Username missing. Please enter into VagrantFile or environmental variable 'export username= '"
|
52
|
+
end
|
53
|
+
if host_ip.nil?
|
54
|
+
puts "Host IP missing. Please enter into VagrantFile or environmental variable 'export host_ip= '"
|
55
|
+
end
|
56
|
+
|
57
|
+
if !(access_key.nil? or username.nil? or host_ip.nil?)
|
58
|
+
begin
|
59
|
+
|
60
|
+
encoded = URI.encode("https://#{username}:#{access_key}@#{host_ip}/v2/jobs");
|
61
|
+
|
62
|
+
catalog = JSON.parse(RestClient::Request.execute(
|
63
|
+
:method => :get,
|
64
|
+
:url => encoded,
|
65
|
+
:verify_ssl => false,
|
66
|
+
:content_type => "json",
|
67
|
+
:accept => "json"
|
68
|
+
));
|
69
|
+
|
70
|
+
catalogs = catalog["jobs"]
|
71
|
+
|
72
|
+
|
73
|
+
# build table with data returned from above function
|
74
|
+
|
75
|
+
table = Text::Table.new
|
76
|
+
table.head = ["ID", "Name", "Family", "Owner","Hours","Status"]
|
77
|
+
puts "\n"
|
78
|
+
|
79
|
+
#for each item in returned list, display certain attributes in the table
|
80
|
+
catalogs.each do |row|
|
81
|
+
id = row["id"]
|
82
|
+
appName = row["name"]
|
83
|
+
family = row["cloudFamily"]
|
84
|
+
owner = row["ownerEmailAddress"]
|
85
|
+
hours = row["nodeHours"]
|
86
|
+
status = row["status"]
|
87
|
+
statusMessage = row["jobStatusMessage"]
|
88
|
+
|
89
|
+
table.rows << ["#{id}","#{appName}", "#{family}", "#{owner}", "#{hours}", "#{status}"]
|
90
|
+
end
|
91
|
+
|
92
|
+
puts table
|
93
|
+
|
94
|
+
puts"\n"
|
95
|
+
|
96
|
+
rescue => e
|
97
|
+
|
98
|
+
if e.inspect == "Timed out connecting to server"
|
99
|
+
puts "\n#ConnectionError - Unable to connnect to CloudCenter Manager \n"
|
100
|
+
exit
|
101
|
+
else
|
102
|
+
error = JSON.parse(e.response)
|
103
|
+
code = error["errors"][0]["code"]
|
104
|
+
|
105
|
+
puts "\n Error code: #{error['errors'][0]['code']}\n"
|
106
|
+
puts "\n #{error['errors'][0]['message']}\n\n"
|
107
|
+
|
108
|
+
exit
|
109
|
+
end
|
110
|
+
end
|
111
|
+
end
|
112
|
+
|
113
|
+
0
|
114
|
+
|
115
|
+
|
116
|
+
|
117
|
+
end
|
118
|
+
end
|
119
|
+
end
|
120
|
+
end
|
121
|
+
end
|
@@ -0,0 +1,94 @@
|
|
1
|
+
require 'vagrant-cloudcenter/action'
|
2
|
+
require 'highline/import'
|
3
|
+
require 'colorize'
|
4
|
+
require 'json'
|
5
|
+
require 'text-table'
|
6
|
+
require 'rest-client'
|
7
|
+
|
8
|
+
module VagrantPlugins
|
9
|
+
module Cloudcenter
|
10
|
+
module Command
|
11
|
+
class Root < Vagrant.plugin("2", :command)
|
12
|
+
def self.synopsis
|
13
|
+
"deploy a new environment using Cisco CloudCenter"
|
14
|
+
end
|
15
|
+
|
16
|
+
def initialize(argv, env)
|
17
|
+
@main_args, @sub_command, @sub_args = split_main_and_subcommand(argv)
|
18
|
+
|
19
|
+
@subcommands = Vagrant::Registry.new
|
20
|
+
@subcommands.register(:catalog) do
|
21
|
+
require File.expand_path("../catalog", __FILE__)
|
22
|
+
Catalog
|
23
|
+
end
|
24
|
+
@subcommands.register(:app) do
|
25
|
+
require File.expand_path("../app", __FILE__)
|
26
|
+
App
|
27
|
+
end
|
28
|
+
@subcommands.register(:jobs) do
|
29
|
+
require File.expand_path("../jobs", __FILE__)
|
30
|
+
Jobs
|
31
|
+
end
|
32
|
+
@subcommands.register(:init) do
|
33
|
+
require File.expand_path("../init", __FILE__)
|
34
|
+
Init
|
35
|
+
end
|
36
|
+
@subcommands.register(:sync) do
|
37
|
+
require File.expand_path("../sync", __FILE__)
|
38
|
+
Sync
|
39
|
+
end
|
40
|
+
|
41
|
+
super(argv, env)
|
42
|
+
end
|
43
|
+
|
44
|
+
def execute
|
45
|
+
if @main_args.include?("-h") || @main_args.include?("--help")
|
46
|
+
# Print the help for all the commands.
|
47
|
+
return help
|
48
|
+
end
|
49
|
+
|
50
|
+
command_class = @subcommands.get(@sub_command.to_sym) if @sub_command
|
51
|
+
return help if !command_class || !@sub_command
|
52
|
+
@logger.debug("Invoking command class: #{command_class} #{@sub_args.inspect}")
|
53
|
+
|
54
|
+
# Initialize and execute the command class
|
55
|
+
command_class.new(@sub_args, @env).execute
|
56
|
+
end
|
57
|
+
|
58
|
+
def help
|
59
|
+
opts = OptionParser.new do |opts|
|
60
|
+
opts.banner = "Usage: vagrant cloudcenter <subcommand> [<args>]"
|
61
|
+
opts.separator ""
|
62
|
+
opts.separator "Available subcommands:\n"
|
63
|
+
|
64
|
+
# Add the available subcommands as separators in order to print them
|
65
|
+
# out as well.
|
66
|
+
keys = []
|
67
|
+
commands = {}
|
68
|
+
longest = 0
|
69
|
+
|
70
|
+
@subcommands.each do |key, data|
|
71
|
+
|
72
|
+
keys << key
|
73
|
+
commands[key] = data.synopsis
|
74
|
+
longest = key.length if key.length > longest
|
75
|
+
|
76
|
+
end
|
77
|
+
|
78
|
+
keys.sort.each do |key|
|
79
|
+
key.to_sym
|
80
|
+
synopsis = commands[key].to_str
|
81
|
+
command = key.to_s
|
82
|
+
opts.separator " #{command.ljust(longest+2)} #{synopsis}"
|
83
|
+
end
|
84
|
+
|
85
|
+
opts.separator ""
|
86
|
+
opts.separator "For help on any individual subcommand run `vagrant cloudcenter <subcommand> -h`"
|
87
|
+
end
|
88
|
+
|
89
|
+
@env.ui.info(opts.help, :prefix => false)
|
90
|
+
end
|
91
|
+
end
|
92
|
+
end
|
93
|
+
end
|
94
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
require "pathname"
|
2
|
+
require "vagrant/action/builder"
|
3
|
+
|
4
|
+
|
5
|
+
module VagrantPlugins
|
6
|
+
module Cloudcenter
|
7
|
+
module Command
|
8
|
+
|
9
|
+
include Vagrant::Action::Builtin
|
10
|
+
|
11
|
+
class Sync < Vagrant.plugin("2", :command)
|
12
|
+
|
13
|
+
def self.synopsis
|
14
|
+
"Sync files from host to guest"
|
15
|
+
end
|
16
|
+
|
17
|
+
def execute
|
18
|
+
|
19
|
+
with_target_vms() do |machine|
|
20
|
+
machine.action(:sync)
|
21
|
+
end
|
22
|
+
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
require "vagrant"
|
2
|
+
|
3
|
+
module VagrantPlugins
|
4
|
+
module Cloudcenter
|
5
|
+
class Config < Vagrant.plugin("2", :config)
|
6
|
+
# The access key ID for accessing Cloudcenter.
|
7
|
+
#
|
8
|
+
# @return [String]
|
9
|
+
attr_accessor :access_key
|
10
|
+
|
11
|
+
# The Catalog Name for the VM to be provisioned from
|
12
|
+
#
|
13
|
+
# @return [String]
|
14
|
+
attr_accessor :host_ip
|
15
|
+
|
16
|
+
# Comment to use when provisioning the VM
|
17
|
+
#
|
18
|
+
# @return [String]
|
19
|
+
attr_accessor :username
|
20
|
+
|
21
|
+
# JSON config representing the environment to be deployed
|
22
|
+
#
|
23
|
+
# @return [String]
|
24
|
+
attr_accessor :deployment_config
|
25
|
+
|
26
|
+
|
27
|
+
def initialize()
|
28
|
+
@access_key = UNSET_VALUE
|
29
|
+
@host_ip = UNSET_VALUE
|
30
|
+
@host_port = UNSET_VALUE
|
31
|
+
@username = UNSET_VALUE
|
32
|
+
@deployment_config = UNSET_VALUE
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
require "vagrant"
|
2
|
+
|
3
|
+
module VagrantPlugins
|
4
|
+
module Cloudcenter
|
5
|
+
module Errors
|
6
|
+
class VagrantCloudcenterError < Vagrant::Errors::VagrantError
|
7
|
+
error_namespace("vagrant_cloudcenter.errors")
|
8
|
+
end
|
9
|
+
|
10
|
+
class FogError < VagrantAWSError
|
11
|
+
error_key(:fog_error)
|
12
|
+
end
|
13
|
+
|
14
|
+
class InternalFogError < VagrantAWSError
|
15
|
+
error_key(:internal_fog_error)
|
16
|
+
end
|
17
|
+
|
18
|
+
class InstanceReadyTimeout < VagrantAWSError
|
19
|
+
error_key(:instance_ready_timeout)
|
20
|
+
end
|
21
|
+
|
22
|
+
class InstancePackageError < VagrantAWSError
|
23
|
+
error_key(:instance_package_error)
|
24
|
+
end
|
25
|
+
|
26
|
+
class InstancePackageTimeout < VagrantAWSError
|
27
|
+
error_key(:instance_package_timeout)
|
28
|
+
end
|
29
|
+
|
30
|
+
class RsyncError < VagrantAWSError
|
31
|
+
error_key(:rsync_error)
|
32
|
+
end
|
33
|
+
|
34
|
+
class MkdirError < VagrantAWSError
|
35
|
+
error_key(:mkdir_error)
|
36
|
+
end
|
37
|
+
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
@@ -0,0 +1,74 @@
|
|
1
|
+
begin
|
2
|
+
require "vagrant"
|
3
|
+
rescue LoadError
|
4
|
+
raise "The Vagrant CloudCenter plugin must be run within Vagrant."
|
5
|
+
end
|
6
|
+
|
7
|
+
module VagrantPlugins
|
8
|
+
module Cloudcenter
|
9
|
+
class Plugin < Vagrant.plugin("2")
|
10
|
+
name "vagrant-cloudcenter"
|
11
|
+
description <<-DESC
|
12
|
+
This plugin installs a provider that allows Vagrant to manage
|
13
|
+
machines in Cisco Cloud Center
|
14
|
+
DESC
|
15
|
+
|
16
|
+
config(:cloudcenter, :provider) do
|
17
|
+
require_relative "config"
|
18
|
+
Config
|
19
|
+
end
|
20
|
+
|
21
|
+
provider(:cloudcenter) do
|
22
|
+
# Setup logging and i18n
|
23
|
+
setup_logging
|
24
|
+
setup_i18n
|
25
|
+
|
26
|
+
# Return the provider
|
27
|
+
require_relative "provider"
|
28
|
+
Provider
|
29
|
+
end
|
30
|
+
|
31
|
+
command('cloudcenter') do
|
32
|
+
require_relative "command/root"
|
33
|
+
Command::Root
|
34
|
+
end
|
35
|
+
|
36
|
+
|
37
|
+
|
38
|
+
# This initializes the internationalization strings.
|
39
|
+
def self.setup_i18n
|
40
|
+
I18n.load_path << File.expand_path("../../../locales/en.yml", __FILE__)
|
41
|
+
I18n.reload!
|
42
|
+
end
|
43
|
+
|
44
|
+
# This sets up our log level to be whatever VAGRANT_LOG is.
|
45
|
+
def self.setup_logging
|
46
|
+
require "log4r"
|
47
|
+
|
48
|
+
level = nil
|
49
|
+
begin
|
50
|
+
level = Log4r.const_get(ENV["VAGRANT_LOG"].upcase)
|
51
|
+
rescue NameError
|
52
|
+
# This means that the logging constant wasn't found,
|
53
|
+
# which is fine. We just keep `level` as `nil`. But
|
54
|
+
# we tell the user.
|
55
|
+
level = nil
|
56
|
+
end
|
57
|
+
|
58
|
+
# Some constants, such as "true" resolve to booleans, so the
|
59
|
+
# above error checking doesn't catch it. This will check to make
|
60
|
+
# sure that the log level is an integer, as Log4r requires.
|
61
|
+
level = nil if !level.is_a?(Integer)
|
62
|
+
|
63
|
+
# Set the logging level on all "vagrant" namespaced
|
64
|
+
# logs as long as we have a valid level.
|
65
|
+
if level
|
66
|
+
logger = Log4r::Logger.new("cloudcenter")
|
67
|
+
logger.outputters = Log4r::Outputter.stderr
|
68
|
+
logger.level = level
|
69
|
+
logger = nil
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
require "log4r"
|
2
|
+
require "vagrant"
|
3
|
+
require "vagrant-cloudcenter/action"
|
4
|
+
|
5
|
+
module VagrantPlugins
|
6
|
+
module Cloudcenter
|
7
|
+
class Provider < Vagrant.plugin("2", :provider)
|
8
|
+
def initialize(machine)
|
9
|
+
@machine = machine
|
10
|
+
end
|
11
|
+
|
12
|
+
def action(name)
|
13
|
+
# Attempt to get the action method from the Action class if it
|
14
|
+
# exists, otherwise return nil to show that we don't support the
|
15
|
+
# given action.
|
16
|
+
action_method = "action_#{name}"
|
17
|
+
return Action.send(action_method) if Action.respond_to?(action_method)
|
18
|
+
nil
|
19
|
+
end
|
20
|
+
|
21
|
+
def ssh_info
|
22
|
+
# Run a custom action called "read_ssh_info" which does what it
|
23
|
+
# says and puts the resulting SSH info into the `:machine_ssh_info`
|
24
|
+
# key in the environment.
|
25
|
+
env = @machine.action("read_ssh_info")
|
26
|
+
env[:machine_ssh_info]
|
27
|
+
end
|
28
|
+
|
29
|
+
def state
|
30
|
+
# Run a custom action we define called "read_state" which does
|
31
|
+
# what it says. It puts the state in the `:machine_state_id`
|
32
|
+
# key in the environment.
|
33
|
+
env = @machine.action("read_state")
|
34
|
+
|
35
|
+
state_id = env[:machine_state_id]
|
36
|
+
|
37
|
+
# Get the short and long description
|
38
|
+
short = I18n.t("cloudcenter.states.short_#{state_id}")
|
39
|
+
long = I18n.t("cloudcenter.states.long_#{state_id}")
|
40
|
+
|
41
|
+
# Return the MachineState object
|
42
|
+
Vagrant::MachineState.new(state_id, short, long)
|
43
|
+
end
|
44
|
+
|
45
|
+
def to_s
|
46
|
+
id = @machine.id.nil? ? "new" : @machine.id
|
47
|
+
"cloudcenter (#{id})"
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module VagrantPlugins
|
2
|
+
module Cloudcenter
|
3
|
+
module Util
|
4
|
+
class Timer
|
5
|
+
# A basic utility method that times the execution of the given
|
6
|
+
# block and returns it.
|
7
|
+
def self.time
|
8
|
+
start_time = Time.now.to_f
|
9
|
+
yield
|
10
|
+
end_time = Time.now.to_f
|
11
|
+
|
12
|
+
end_time - start_time
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
require "pathname"
|
2
|
+
|
3
|
+
require 'vagrant-cloudcenter/plugin'
|
4
|
+
|
5
|
+
module VagrantPlugins
|
6
|
+
module Cloudcenter
|
7
|
+
lib_path = Pathname.new(File.expand_path("../vagrant-cloudcenter", __FILE__))
|
8
|
+
autoload :Action, lib_path.join("action")
|
9
|
+
autoload :Errors, lib_path.join("errors")
|
10
|
+
|
11
|
+
# This returns the path to the source of this plugin.
|
12
|
+
#
|
13
|
+
# @return [Pathname]
|
14
|
+
def self.source_root
|
15
|
+
@source_root ||= Pathname.new(File.expand_path("../../", __FILE__))
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
data/locales/en.yml
ADDED
@@ -0,0 +1,33 @@
|
|
1
|
+
en:
|
2
|
+
cloudcenter:
|
3
|
+
already_created:
|
4
|
+
The machine is already created.
|
5
|
+
already_running:
|
6
|
+
The machine is already running.
|
7
|
+
already_stopped:
|
8
|
+
The machine is already stopped.
|
9
|
+
deploying:
|
10
|
+
VM is currently being deployed.
|
11
|
+
not_created:
|
12
|
+
Instance is not created. Please run `vagrant up` first.
|
13
|
+
waiting_for_ssh:
|
14
|
+
Waiting for SSH to become available...
|
15
|
+
ready:
|
16
|
+
Machine is booted and ready for use!
|
17
|
+
starting:
|
18
|
+
Starting the instance...
|
19
|
+
stopped:
|
20
|
+
Machine is now stopped...
|
21
|
+
terminated:
|
22
|
+
Machine has been removed...
|
23
|
+
stopping:
|
24
|
+
Stopping the instance...
|
25
|
+
terminating:
|
26
|
+
Terminating the instance...
|
27
|
+
waiting_for_ready:
|
28
|
+
Waiting for instance to become "ready"...
|
29
|
+
waiting_for_ssh:
|
30
|
+
Waiting for SSH to become available...
|
31
|
+
will_not_destroy: |-
|
32
|
+
The instance '%{name}' will not be destroyed, since the confirmation
|
33
|
+
was declined.
|