knife-openstack 0.10.0 → 1.0.0.rc1
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/.gitignore +22 -0
- data/.travis.yml +6 -0
- data/CHANGELOG.md +20 -22
- data/Gemfile +11 -1
- data/README.md +6 -4
- data/Rakefile +33 -0
- data/knife-openstack.gemspec +7 -8
- data/lib/chef/knife/cloud/openstack_server_create_options.rb +75 -0
- data/lib/chef/knife/cloud/openstack_service.rb +62 -0
- data/lib/chef/knife/cloud/openstack_service_options.rb +50 -0
- data/lib/chef/knife/openstack_flavor_list.rb +37 -51
- data/lib/chef/knife/openstack_group_list.rb +38 -45
- data/lib/chef/knife/openstack_helpers.rb +30 -0
- data/lib/chef/knife/openstack_image_list.rb +42 -59
- data/lib/chef/knife/openstack_network_list.rb +25 -21
- data/lib/chef/knife/openstack_server_create.rb +166 -452
- data/lib/chef/knife/openstack_server_delete.rb +26 -106
- data/lib/chef/knife/openstack_server_list.rb +37 -59
- data/lib/chef/knife/openstack_server_show.rb +57 -0
- data/lib/knife-openstack/version.rb +1 -1
- data/spec/functional/flavor_list_func_spec.rb +45 -0
- data/spec/functional/group_list_func_spec.rb +67 -0
- data/spec/functional/image_list_func_spec.rb +51 -0
- data/spec/functional/network_list_func_spec.rb +44 -0
- data/spec/functional/server_create_func_spec.rb +118 -0
- data/spec/functional/server_delete_func_spec.rb +84 -0
- data/spec/functional/server_list_func_spec.rb +95 -0
- data/spec/functional/server_show_func_spec.rb +46 -0
- data/spec/integration/cleanup.rb +91 -0
- data/spec/integration/config/environment.yml.sample +13 -0
- data/spec/integration/openstack_spec.rb +618 -0
- data/spec/spec_helper.rb +126 -0
- data/spec/unit/openstack_flavor_list_spec.rb +30 -0
- data/spec/unit/openstack_group_list_spec.rb +43 -0
- data/spec/unit/openstack_image_list_spec.rb +32 -0
- data/spec/unit/openstack_network_list_spec.rb +39 -0
- data/spec/unit/openstack_server_create_spec.rb +344 -182
- data/spec/unit/openstack_server_delete_spec.rb +43 -0
- data/spec/unit/openstack_server_list_spec.rb +32 -0
- data/spec/unit/openstack_server_show_spec.rb +42 -0
- data/spec/unit/openstack_service_spec.rb +89 -0
- data/spec/unit/validate_spec.rb +55 -0
- metadata +95 -51
- data/lib/chef/knife/openstack_base.rb +0 -182
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 13492963594dd97e5007238a36319adbe3b86135
|
4
|
+
data.tar.gz: 95480b2805c8ff46602929ee7f240d35a7447aa7
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 4eb2ee6abd59a5836b33bd8fa692b858e3708afbec35b44759ef04679e7fb97ad4bd9d6531282d8747670448a148641e1431c28de3b7e0ccb73745fafe56e40e
|
7
|
+
data.tar.gz: d0b82f89495c66b4efda371a08bd5b40d7e4292cf24abcb74c734e01c79182cf776d2b161a319285883b9b6757a031875270325d069fcace8373b2053bfddebc
|
data/.gitignore
CHANGED
@@ -2,4 +2,26 @@
|
|
2
2
|
.bundle
|
3
3
|
.rvmrc
|
4
4
|
Gemfile.lock
|
5
|
+
.autotest
|
6
|
+
coverage
|
7
|
+
.DS_Store
|
8
|
+
pkg
|
9
|
+
*/tags
|
10
|
+
|
11
|
+
# ignore some common Bundler 'binstubs' directory names
|
12
|
+
# http://gembundler.com/man/bundle-exec.1.html
|
13
|
+
b/
|
14
|
+
binstubs/
|
15
|
+
|
16
|
+
# RVM and RBENV ruby version files
|
17
|
+
.rbenv-version
|
18
|
+
.rvmrc
|
19
|
+
|
20
|
+
# Documentation
|
21
|
+
_site/*
|
22
|
+
.yardoc/
|
23
|
+
doc/
|
5
24
|
pkg/*
|
25
|
+
|
26
|
+
#keys
|
27
|
+
*.pem
|
data/.travis.yml
ADDED
data/CHANGELOG.md
CHANGED
@@ -1,36 +1,18 @@
|
|
1
|
-
## v0.10.0
|
2
|
-
DONE
|
3
|
-
* KNIFE-368 Ability to specify metadata during OpenStack server create
|
4
|
-
* KNIFE-423 Add ability for knife-openstack to specify network IDs to attach
|
5
|
-
* KNIFE-428 Added Availability zone to knife openstack
|
6
|
-
* KNIFE-467 --no-network fails to find first network IP address
|
7
|
-
* KNIFE-471 Explicitly define NIC for private network when creating server
|
8
|
-
* KNIFE-474 knife openstack group list throws a fog deprecation warning
|
9
|
-
* KNIFE-475 json-attributes option wasnt actually getting passed to bootstrap
|
10
|
-
* KNIFE-477 Delete openstack instance by name
|
11
|
-
* KNIFE-478 Generated SSH password not passed to bootstrap
|
12
|
-
* add support for working with names instead of ids, updated listing accordingly
|
13
1
|
|
14
|
-
|
15
|
-
* KNIFE-462 missing user_data throws stack
|
16
|
-
|
17
|
-
## v0.9.0
|
18
|
-
* KNIFE-231 added ability to specify arbitrary bootstrap network ID
|
19
|
-
* KNIFE-264 Add support for --json-attributes
|
20
|
-
* KNIFE-277 knife openstack "ERROR: No IP address available for bootstrapping."
|
2
|
+
* Implementation using knife-cloud gem
|
21
3
|
* KNIFE-310 "knife openstack server list" will fail with boot from volume instances
|
22
|
-
* KNIFE-435 Support user data for OpenStack server create
|
23
|
-
* KNIFE-436 Support fixed network type for OpenStack server create
|
24
|
-
* https://github.com/opscode/chef-rfc/pull/7/ create/delete enhancements
|
25
4
|
|
26
5
|
## v0.8.1
|
6
|
+
|
27
7
|
* KNIFE-296 knife-windows overrides -i, -p, -P and -x options with winrm values
|
28
8
|
* KNIFE-304 enable setting the ssh port for knife-openstack
|
29
9
|
|
30
10
|
## v0.8.0
|
11
|
+
|
31
12
|
* KNIFE-221 Windows bootstrapping (winrm-based) support for knife-openstack (Chirag Jog)
|
32
13
|
|
33
14
|
## v0.7.1
|
15
|
+
|
34
16
|
* KNIFE-261 file permissions fixed
|
35
17
|
|
36
18
|
## v0.7.0
|
@@ -76,3 +58,19 @@ DONE
|
|
76
58
|
|
77
59
|
## V0.5.2
|
78
60
|
* initial Cactus release using EC2 API
|
61
|
+
|
62
|
+
# BACKLOG/ISSUES #
|
63
|
+
This is a list of missing(?) features and open questions currently under development consideration:
|
64
|
+
|
65
|
+
* Basic availability zones support (Jarek Zmudzinski) NEED TESTING ACCESS FOR AVAILABILITY ZONES
|
66
|
+
* purge only works when names match up with clients
|
67
|
+
* `knife openstack floating list|associate|release NODE` with --floating-ip-pool also
|
68
|
+
* KNIFE-229 Allow specifying the name of the pool when using floating IPs
|
69
|
+
* attempt to allocate a floating ipaddress if none if free, currently missing in Fog
|
70
|
+
* KNIFE-76 take either the flavor ID or the flavor name
|
71
|
+
* take either the image ID or the image name (similar for KNIFE-76)
|
72
|
+
* KNIFE-86 server create with expired password hangs
|
73
|
+
* KNIFE-231 added ability to specify arbitrary network ID
|
74
|
+
* assumption of only single floating IP (and fog uses the last as the public_ip_address)
|
75
|
+
* probably other places public network is assumed that could cause issues
|
76
|
+
* fog is putting the original public IP address into the private_ip_address method when you get a floating_ip, this is wrong. Remove KNIFE-248 code once fixed.
|
data/Gemfile
CHANGED
@@ -1,4 +1,14 @@
|
|
1
|
-
source "
|
1
|
+
source "https://rubygems.org"
|
2
2
|
|
3
3
|
# Specify your gem's dependencies in knife-openstack.gemspec
|
4
4
|
gemspec
|
5
|
+
|
6
|
+
group :development do
|
7
|
+
gem 'rspec', '>= 2.7.0'
|
8
|
+
gem 'guard-rspec'
|
9
|
+
gem 'rspec_junit_formatter'
|
10
|
+
gem 'rake'
|
11
|
+
gem 'mixlib-shellout'
|
12
|
+
gem 'knife-cloud', :git => 'https://github.com/opscode/knife-cloud.git'
|
13
|
+
gem 'knife-windows', :git => 'https://github.com/opscode/knife-windows.git'
|
14
|
+
end
|
data/README.md
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
[](https://travis-ci.org/opscode/knife-openstack)
|
2
|
+
|
1
3
|
Knife OpenStack
|
2
4
|
===============
|
3
5
|
|
@@ -27,9 +29,9 @@ In order to communicate with an OpenStack API you will need to tell Knife your O
|
|
27
29
|
knife[:openstack_password] = "Your OpenStack Dashboard password"
|
28
30
|
knife[:openstack_tenant] = "Your OpenStack tenant name"
|
29
31
|
|
30
|
-
If your knife.rb file will be checked into a SCM system (ie readable by others) you may want to read the values from environment variables:
|
32
|
+
If your knife.rb file will be checked into a SCM system (ie readable by others) you may want to read the values from environment variables. For example, using the conventions of [OpenStack's RC file](http://docs.openstack.org/user-guide/content/cli_openrc.html) (note the `openstack_auth_url`):
|
31
33
|
|
32
|
-
knife[:openstack_auth_url] = "#{ENV['OS_AUTH_URL']}"
|
34
|
+
knife[:openstack_auth_url] = "#{ENV['OS_AUTH_URL']}/tokens"
|
33
35
|
knife[:openstack_username] = "#{ENV['OS_USERNAME']}"
|
34
36
|
knife[:openstack_password] = "#{ENV['OS_PASSWORD']}"
|
35
37
|
knife[:openstack_tenant] = "#{ENV['OS_TENANT_NAME']}"
|
@@ -56,7 +58,7 @@ Additionally the following options may be set in your `knife.rb`:
|
|
56
58
|
|
57
59
|
# Working with Floating IPs #
|
58
60
|
|
59
|
-
To use a floating IP address while bootstrapping nodes, use the `-a` or `--floating-ip` option.
|
61
|
+
To use a floating IP address while bootstrapping nodes, use the `-a` or `--openstack-floating-ip` option.
|
60
62
|
|
61
63
|
# Working with Windows Images #
|
62
64
|
|
@@ -108,7 +110,7 @@ Provides a list of the security groups available to the currently configured Ope
|
|
108
110
|
knife openstack network list
|
109
111
|
--------------------
|
110
112
|
|
111
|
-
Lists the networks available to the currently configured OpenStack account. This data may be useful when choosing your networks to pass to the `knife openstack server create` subcommand. This command is only available with OpenStack deployments using the Neutron network service (not nova-network). Please see `knife openstack server
|
113
|
+
Lists the networks available to the currently configured OpenStack account. This data may be useful when choosing your networks to pass to the `knife openstack server create` subcommand. This command is only available with OpenStack deployments using the Neutron network service (not nova-network). Please see `knife openstack server create --help` for all of the supported options.
|
112
114
|
|
113
115
|
# License #
|
114
116
|
|
data/Rakefile
CHANGED
@@ -1,2 +1,35 @@
|
|
1
|
+
# Author:: Kaustubh Deorukhkar (<kaustubh@clogeny.com>)
|
2
|
+
# Copyright:: Copyright (c) 2013 Chef Software, Inc.
|
3
|
+
|
1
4
|
require 'bundler'
|
2
5
|
Bundler::GemHelper.install_tasks
|
6
|
+
|
7
|
+
require 'rubygems'
|
8
|
+
require 'rubygems/package_task'
|
9
|
+
|
10
|
+
task :default => :all
|
11
|
+
task :all => [:spec, :uninstall, :install]
|
12
|
+
|
13
|
+
# Packaging
|
14
|
+
GEM_NAME = "knife-openstack"
|
15
|
+
require File.dirname(__FILE__) + '/lib/knife-openstack/version'
|
16
|
+
spec = eval(File.read("knife-openstack.gemspec"))
|
17
|
+
Gem::PackageTask.new(spec) do |pkg|
|
18
|
+
pkg.gem_spec = spec
|
19
|
+
end
|
20
|
+
|
21
|
+
desc "uninstall #{GEM_NAME}-#{Knife::OpenStack::VERSION}.gem from system..."
|
22
|
+
task :uninstall do
|
23
|
+
sh %{gem uninstall #{GEM_NAME} -x -v #{Knife::OpenStack::VERSION} }
|
24
|
+
end
|
25
|
+
|
26
|
+
# rspec
|
27
|
+
begin
|
28
|
+
require 'rspec/core/rake_task'
|
29
|
+
desc "Run all specs in spec directory"
|
30
|
+
RSpec::Core::RakeTask.new(:spec) do |t|
|
31
|
+
t.pattern = 'spec/unit/**/*_spec.rb'
|
32
|
+
end
|
33
|
+
rescue LoadError
|
34
|
+
STDERR.puts "\n*** RSpec not available. (sudo) gem install rspec to run unit tests. ***\n\n"
|
35
|
+
end
|
data/knife-openstack.gemspec
CHANGED
@@ -8,21 +8,20 @@ Gem::Specification.new do |s|
|
|
8
8
|
s.platform = Gem::Platform::RUBY
|
9
9
|
s.has_rdoc = true
|
10
10
|
s.extra_rdoc_files = ["README.md", "LICENSE" ]
|
11
|
-
s.authors = ["
|
12
|
-
s.email = ["
|
11
|
+
s.authors = ["Clogeny"]
|
12
|
+
s.email = ["contact@clogeny.com"]
|
13
13
|
s.homepage = "https://github.com/opscode/knife-openstack"
|
14
14
|
s.summary = %q{OpenStack Compute Support for Chef's Knife Command}
|
15
|
-
s.description = s
|
15
|
+
s.description = %q{OpenStack Compute Support for Chef's Knife Command using knife-cloud gem}
|
16
16
|
|
17
17
|
s.files = `git ls-files`.split("\n")
|
18
18
|
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
19
19
|
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
20
20
|
s.require_paths = ["lib"]
|
21
21
|
|
22
|
-
s.add_dependency "fog", "
|
23
|
-
s.add_dependency "chef", ">=
|
24
|
-
s.add_dependency "knife-
|
22
|
+
s.add_dependency "fog", "~> 1.23"
|
23
|
+
s.add_dependency "chef", ">= 11"
|
24
|
+
s.add_dependency "knife-cloud", "~> 1.0"
|
25
25
|
|
26
|
-
%w(rspec-core rspec-expectations rspec-mocks rspec_junit_formatter).each { |gem| s.add_development_dependency gem }
|
27
|
-
s.require_paths = ["lib"]
|
26
|
+
%w(rake rspec-core rspec-expectations rspec-mocks rspec_junit_formatter).each { |gem| s.add_development_dependency gem }
|
28
27
|
end
|
@@ -0,0 +1,75 @@
|
|
1
|
+
|
2
|
+
require 'chef/knife/cloud/server/create_options'
|
3
|
+
|
4
|
+
class Chef
|
5
|
+
class Knife
|
6
|
+
class Cloud
|
7
|
+
module OpenstackServerCreateOptions
|
8
|
+
def self.included(includer)
|
9
|
+
includer.class_eval do
|
10
|
+
include ServerCreateOptions
|
11
|
+
|
12
|
+
# Openstack Server create params.
|
13
|
+
option :private_network,
|
14
|
+
:long => "--openstack-private-network",
|
15
|
+
:description => "Use the private IP for bootstrapping rather than the public IP",
|
16
|
+
:boolean => true,
|
17
|
+
:default => false
|
18
|
+
|
19
|
+
option :openstack_floating_ip,
|
20
|
+
:short => "-a [IP]",
|
21
|
+
:long => "--openstack-floating-ip [IP]",
|
22
|
+
:default => "-1",
|
23
|
+
:description => "Request to associate a floating IP address to the new OpenStack node. Assumes IPs have been allocated to the project. Specific IP is optional."
|
24
|
+
|
25
|
+
option :openstack_security_groups,
|
26
|
+
:short => "-G X,Y,Z",
|
27
|
+
:long => "--openstack-groups X,Y,Z",
|
28
|
+
:description => "The security groups for this server",
|
29
|
+
:default => ["default"],
|
30
|
+
:proc => Proc.new { |groups| groups.split(',') }
|
31
|
+
|
32
|
+
option :openstack_ssh_key_id,
|
33
|
+
:short => "-S KEY",
|
34
|
+
:long => "--openstack-ssh-key-id KEY",
|
35
|
+
:description => "The OpenStack SSH keypair id",
|
36
|
+
:proc => Proc.new { |key| Chef::Config[:knife][:openstack_ssh_key_id] = key }
|
37
|
+
|
38
|
+
option :user_data,
|
39
|
+
:long => "--user-data USER_DATA",
|
40
|
+
:description => "The file path containing user data information for this server",
|
41
|
+
:proc => Proc.new { |user_data| open(user_data) { |f| f.read } }
|
42
|
+
|
43
|
+
option :bootstrap_network,
|
44
|
+
:long => '--bootstrap-network NAME',
|
45
|
+
:default => 'public',
|
46
|
+
:description => "Specify network for bootstrapping. Default is 'public'."
|
47
|
+
|
48
|
+
option :network,
|
49
|
+
:long => "--no-network",
|
50
|
+
:boolean => true,
|
51
|
+
:default => true,
|
52
|
+
:description => "Use first available network for bootstrapping if 'public' and 'private' are unavailable."
|
53
|
+
|
54
|
+
option :network_ids,
|
55
|
+
:long => "--network-ids NETWORK_ID_1,NETWORK_ID_2,NETWORK_ID_3",
|
56
|
+
:description => "Comma separated list of the UUID(s) of the network(s) for the server to attach",
|
57
|
+
:proc => Proc.new { |networks| networks.split(',') }
|
58
|
+
|
59
|
+
option :availability_zone,
|
60
|
+
:short => "-Z ZONE_NAME",
|
61
|
+
:long => "--availability-zone ZONE_NAME",
|
62
|
+
:description => "The availability zone for this server",
|
63
|
+
:proc => Proc.new { |z| Chef::Config[:knife][:availability_zone] = z }
|
64
|
+
|
65
|
+
option :metadata,
|
66
|
+
:short => "-M X=1",
|
67
|
+
:long => "--metadata X=1",
|
68
|
+
:description => "Metadata information for this server (may pass multiple times)",
|
69
|
+
:proc => Proc.new { |data| Chef::Config[:knife][:metadata] ||= {}; Chef::Config[:knife][:metadata].merge!({data.split('=')[0]=>data.split('=')[1]})}
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
@@ -0,0 +1,62 @@
|
|
1
|
+
#
|
2
|
+
# Author:: Siddheshwar More (<siddheshwar.more@clogeny.com>)
|
3
|
+
# Author:: Kaustubh Deorukhkar (<kaustubh@clogeny.com>)
|
4
|
+
# Copyright:: Copyright (c) 2013 Chef Software, Inc.
|
5
|
+
#
|
6
|
+
|
7
|
+
require 'chef/knife/cloud/fog/service'
|
8
|
+
|
9
|
+
class Chef
|
10
|
+
class Knife
|
11
|
+
class Cloud
|
12
|
+
class OpenstackService < FogService
|
13
|
+
|
14
|
+
def initialize(options = {})
|
15
|
+
Chef::Log.debug("openstack_username #{Chef::Config[:knife][:openstack_username]}")
|
16
|
+
Chef::Log.debug("openstack_auth_url #{Chef::Config[:knife][:openstack_auth_url]}")
|
17
|
+
Chef::Log.debug("openstack_tenant #{Chef::Config[:knife][:openstack_tenant]}")
|
18
|
+
Chef::Log.debug("openstack_endpoint_type #{Chef::Config[:knife][:openstack_endpoint_type] || 'publicURL' }")
|
19
|
+
Chef::Log.debug("openstack_insecure #{Chef::Config[:knife][:openstack_insecure].to_s}")
|
20
|
+
|
21
|
+
super(options.merge({
|
22
|
+
:auth_params => {
|
23
|
+
:provider => 'OpenStack',
|
24
|
+
:openstack_username => Chef::Config[:knife][:openstack_username],
|
25
|
+
:openstack_api_key => Chef::Config[:knife][:openstack_password],
|
26
|
+
:openstack_auth_url => Chef::Config[:knife][:openstack_auth_url],
|
27
|
+
:openstack_endpoint_type => Chef::Config[:knife][:openstack_endpoint_type],
|
28
|
+
:openstack_tenant => Chef::Config[:knife][:openstack_tenant],
|
29
|
+
:connection_options => {
|
30
|
+
:ssl_verify_peer => !Chef::Config[:knife][:openstack_insecure]
|
31
|
+
}
|
32
|
+
}}))
|
33
|
+
end
|
34
|
+
|
35
|
+
# add alternate user defined api_endpoint value.
|
36
|
+
def add_api_endpoint
|
37
|
+
@auth_params.merge!({:openstack_auth_url => Chef::Config[:knife][:api_endpoint]}) unless Chef::Config[:knife][:api_endpoint].nil?
|
38
|
+
end
|
39
|
+
|
40
|
+
def get_server(search_term)
|
41
|
+
begin
|
42
|
+
if server = connection.servers.get(search_term)
|
43
|
+
return server
|
44
|
+
end
|
45
|
+
|
46
|
+
if servers = connection.servers.all(:name => search_term)
|
47
|
+
if servers.length > 1
|
48
|
+
error_message = "Multiple server matches found for '#{search_term}', use an instance_id to be more specific."
|
49
|
+
ui.fatal(error_message)
|
50
|
+
raise CloudExceptions::ValidationError, error_message
|
51
|
+
else
|
52
|
+
servers.first
|
53
|
+
end
|
54
|
+
end
|
55
|
+
rescue Excon::Errors::BadRequest => e
|
56
|
+
handle_excon_exception(CloudExceptions::KnifeCloudError, e)
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
@@ -0,0 +1,50 @@
|
|
1
|
+
require 'chef/knife/cloud/fog/options'
|
2
|
+
class Chef
|
3
|
+
class Knife
|
4
|
+
class Cloud
|
5
|
+
module OpenstackServiceOptions
|
6
|
+
|
7
|
+
def self.included(includer)
|
8
|
+
includer.class_eval do
|
9
|
+
include FogOptions
|
10
|
+
# Openstack Connection params.
|
11
|
+
option :openstack_username,
|
12
|
+
:short => "-A USERNAME",
|
13
|
+
:long => "--openstack-username KEY",
|
14
|
+
:description => "Your OpenStack Username",
|
15
|
+
:proc => Proc.new { |key| Chef::Config[:knife][:openstack_username] = key }
|
16
|
+
|
17
|
+
option :openstack_password,
|
18
|
+
:short => "-K SECRET",
|
19
|
+
:long => "--openstack-password SECRET",
|
20
|
+
:description => "Your OpenStack Password",
|
21
|
+
:proc => Proc.new { |key| Chef::Config[:knife][:openstack_password] = key }
|
22
|
+
|
23
|
+
option :openstack_tenant,
|
24
|
+
:short => "-T NAME",
|
25
|
+
:long => "--openstack-tenant NAME",
|
26
|
+
:description => "Your OpenStack Tenant NAME",
|
27
|
+
:proc => Proc.new { |key| Chef::Config[:knife][:openstack_tenant] = key }
|
28
|
+
|
29
|
+
option :openstack_auth_url,
|
30
|
+
:long => "--openstack-api-endpoint ENDPOINT",
|
31
|
+
:description => "Your OpenStack API endpoint",
|
32
|
+
:proc => Proc.new { |endpoint| Chef::Config[:knife][:openstack_auth_url] = endpoint }
|
33
|
+
|
34
|
+
option :openstack_endpoint_type,
|
35
|
+
:long => "--openstack-endpoint-type ENDPOINT_TYPE",
|
36
|
+
:description => "OpenStack endpoint type to use (publicURL, internalURL, adminURL)",
|
37
|
+
:proc => Proc.new { |type| Chef::Config[:knife][:openstack_endpoint_type] = type }
|
38
|
+
|
39
|
+
option :openstack_insecure,
|
40
|
+
:long => "--insecure",
|
41
|
+
:description => "Ignore SSL certificate on the Auth URL",
|
42
|
+
:boolean => true,
|
43
|
+
:default => false,
|
44
|
+
:proc => Proc.new { |key| Chef::Config[:knife][:openstack_insecure] = key }
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
@@ -1,58 +1,44 @@
|
|
1
|
-
#
|
2
|
-
#
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
# Licensed under the Apache License, Version 2.0 (the "License");
|
8
|
-
# you may not use this file except in compliance with the License.
|
9
|
-
# You may obtain a copy of the License at
|
10
|
-
#
|
11
|
-
# http://www.apache.org/licenses/LICENSE-2.0
|
12
|
-
#
|
13
|
-
# Unless required by applicable law or agreed to in writing, software
|
14
|
-
# distributed under the License is distributed on an "AS IS" BASIS,
|
15
|
-
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
16
|
-
# See the License for the specific language governing permissions and
|
17
|
-
# limitations under the License.
|
18
|
-
#
|
19
|
-
|
20
|
-
require 'chef/knife/openstack_base'
|
1
|
+
# Author:: Prabhu Das (<prabhu.das@clogeny.com>)
|
2
|
+
# Copyright:: Copyright (c) 2014 Chef Software, Inc.
|
3
|
+
|
4
|
+
require 'chef/knife/cloud/list_resource_command'
|
5
|
+
require 'chef/knife/openstack_helpers'
|
6
|
+
require 'chef/knife/cloud/openstack_service_options'
|
21
7
|
|
22
8
|
class Chef
|
23
9
|
class Knife
|
24
|
-
class
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
flavor_list << flavor.vcpus.to_s
|
46
|
-
flavor_list << "#{flavor.ram.to_s} MB"
|
47
|
-
flavor_list << "#{flavor.disk.to_s} GB"
|
48
|
-
end
|
49
|
-
rescue Excon::Errors::BadRequest => e
|
50
|
-
response = Chef::JSONCompat.from_json(e.response.body)
|
51
|
-
ui.fatal("Unknown server error (#{response['badRequest']['code']}): #{response['badRequest']['message']}")
|
52
|
-
raise e
|
10
|
+
class Cloud
|
11
|
+
class OpenstackFlavorList < ResourceListCommand
|
12
|
+
include OpenstackHelpers
|
13
|
+
include OpenstackServiceOptions
|
14
|
+
|
15
|
+
banner "knife openstack flavor list (options)"
|
16
|
+
|
17
|
+
def before_exec_command
|
18
|
+
#set columns_with_info map
|
19
|
+
@columns_with_info = [
|
20
|
+
{:label => 'Name', :key => 'name'},
|
21
|
+
{:label => 'ID', :key => 'id'},
|
22
|
+
{:label => 'Virtual CPUs', :key => 'vcpus'},
|
23
|
+
{:label => 'RAM', :key => 'ram', :value_callback => method(:ram_in_mb)},
|
24
|
+
{:label => 'Disk', :key => 'disk', :value_callback => method(:disk_in_gb)}
|
25
|
+
]
|
26
|
+
@sort_by_field = "name"
|
27
|
+
end
|
28
|
+
|
29
|
+
def query_resource
|
30
|
+
@service.list_resource_configurations
|
53
31
|
end
|
54
|
-
|
32
|
+
|
33
|
+
def ram_in_mb(ram)
|
34
|
+
"#{ram} MB"
|
35
|
+
end
|
36
|
+
|
37
|
+
def disk_in_gb(disk)
|
38
|
+
"#{disk} GB"
|
39
|
+
end
|
40
|
+
|
55
41
|
end
|
56
42
|
end
|
57
43
|
end
|
58
|
-
end
|
44
|
+
end
|