knife-block 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +17 -0
- data/Gemfile +4 -0
- data/LICENSE +22 -0
- data/README.md +53 -0
- data/Rakefile +11 -0
- data/knife-block.gemspec +17 -0
- data/lib/chef/knife/block.rb +118 -0
- data/lib/knife-block.rb +0 -0
- data/lib/knife-block/version.rb +5 -0
- data/test/unit/knifeblock_test.rb +16 -0
- metadata +57 -0
data/.gitignore
ADDED
data/Gemfile
ADDED
data/LICENSE
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
Copyright (c) 2012 proffalken
|
2
|
+
|
3
|
+
MIT License
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
6
|
+
a copy of this software and associated documentation files (the
|
7
|
+
"Software"), to deal in the Software without restriction, including
|
8
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
9
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
10
|
+
permit persons to whom the Software is furnished to do so, subject to
|
11
|
+
the following conditions:
|
12
|
+
|
13
|
+
The above copyright notice and this permission notice shall be
|
14
|
+
included in all copies or substantial portions of the Software.
|
15
|
+
|
16
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
17
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
18
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
19
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
20
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
21
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
22
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,53 @@
|
|
1
|
+
# Knife Block
|
2
|
+
|
3
|
+
Green and Secure IT Limited often have a need to work with multiple chef servers at the same time, be it due to testing/development/live scenarios or purely through working for a number of clients at once.
|
4
|
+
|
5
|
+
The knife block plugin has been created to enable the use of multiple knife.rb files against multiple chef servers.
|
6
|
+
|
7
|
+
The premise is that you have a "block" in which you store all your "knives" and you can choose the one best suited to the task.
|
8
|
+
|
9
|
+
## Installation
|
10
|
+
|
11
|
+
gem install knife-block
|
12
|
+
|
13
|
+
### How does it work?
|
14
|
+
|
15
|
+
Knife looks for knife.rb in ~/.chef - all this script does is create a symlink from the required configuration to knife.rb so that knife can act on the appropriate server.
|
16
|
+
|
17
|
+
Create a knife-<service_name>.rb configuration file in your ~/.chef directory for each Chef server that you wish to connect to.
|
18
|
+
|
19
|
+
**Please note - this script will check to see if knife.rb exists and whether it is a symlink or not.**
|
20
|
+
|
21
|
+
**If knife.rb is *not* a symlink, the program will exit immediately and tell you what to do.**
|
22
|
+
|
23
|
+
#### List all available servers
|
24
|
+
(This command will also tell you which server is currently selected)
|
25
|
+
|
26
|
+
knife block list
|
27
|
+
|
28
|
+
The available chef servers are:
|
29
|
+
* local-testing [ Currently Selected ]
|
30
|
+
* opscode-hosted-chef
|
31
|
+
|
32
|
+
#### Change to a new server
|
33
|
+
knife block use <server_name>
|
34
|
+
|
35
|
+
You are asking to change from local-testing to opscode-hosted-chef. Are you sure? (Y/N) y
|
36
|
+
The knife configuration has been updated to use opscode-hosted-chef
|
37
|
+
|
38
|
+
#### Create a new server
|
39
|
+
(Launches "knife configure" and creates $HOME/.chef/knife-<friendlyname>.rb)
|
40
|
+
|
41
|
+
knife block new <friendlyname>
|
42
|
+
|
43
|
+
|
44
|
+
|
45
|
+
These knife plugins are supplied without any warranty or guarantees regarding suitability for purpose.
|
46
|
+
|
47
|
+
The code requires far more tests than the simple one that currently exists.
|
48
|
+
|
49
|
+
Having said all of that, it works for us!
|
50
|
+
|
51
|
+
Copyright: Green and Secure IT Limited 2012
|
52
|
+
|
53
|
+
License: Apache 2 (http://apache.org/licenses/LICENSE-2.0.html)
|
data/Rakefile
ADDED
data/knife-block.gemspec
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
require File.expand_path('../lib/knife-block/version', __FILE__)
|
3
|
+
|
4
|
+
Gem::Specification.new do |gem|
|
5
|
+
gem.authors = ["proffalken"]
|
6
|
+
gem.email = ["theprofessor@threedrunkensysadsonthe.net"]
|
7
|
+
gem.description = %q{Create and manage knife.rb files for OpsCodes' Chef}
|
8
|
+
gem.summary = %q{Create and manage knife.rb files for OpsCodes' Chef}
|
9
|
+
gem.homepage = ""
|
10
|
+
|
11
|
+
gem.files = `git ls-files`.split($\)
|
12
|
+
gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
|
13
|
+
gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
|
14
|
+
gem.name = "knife-block"
|
15
|
+
gem.require_paths = ["lib"]
|
16
|
+
gem.version = Knife::Block::VERSION
|
17
|
+
end
|
@@ -0,0 +1,118 @@
|
|
1
|
+
# knife-block - a plugin to enable the use of multiple knife configuration files
|
2
|
+
# to allow interaction with multiple knife servers in an easy and consistent manner
|
3
|
+
#
|
4
|
+
# Based on a bash script by Kristian Van Der Vliet (vanders@liqwyd.com)
|
5
|
+
#
|
6
|
+
# Copyright (c) Matthew Macdonald-Wallace / Green and Secure IT Limited 2012
|
7
|
+
#
|
8
|
+
module GreenAndSecure
|
9
|
+
class Block < Chef::Knife
|
10
|
+
banner "knife block"
|
11
|
+
def run
|
12
|
+
puts 'Did you mean to run "knife block list" instead?'
|
13
|
+
puts 'Running "knife block list" for you now'
|
14
|
+
list = GreenAndSecure::BlockList.new
|
15
|
+
list.run
|
16
|
+
end
|
17
|
+
end
|
18
|
+
class BlockList < Chef::Knife
|
19
|
+
|
20
|
+
banner "knife block list"
|
21
|
+
|
22
|
+
# list the available environments
|
23
|
+
def run
|
24
|
+
chef_path = Dir.home + "/.chef"
|
25
|
+
## get the list of available environments by searching ~/.chef for knife.rb files
|
26
|
+
file_list = Dir.glob(chef_path+"/knife-*.rb")
|
27
|
+
current_server = ""
|
28
|
+
if File.exists?(chef_path+"/knife.rb") then
|
29
|
+
if !File.symlink?(chef_path+"/knife.rb") then
|
30
|
+
puts "#{chef_path}/knife.rb is NOT a symlink."
|
31
|
+
puts "Please copy the file to #{chef_path}/knife-<servername>.rb and re-run this command."
|
32
|
+
exit 3
|
33
|
+
end
|
34
|
+
current_server = File.readlink(chef_path+"/knife.rb").split('-')[1 .. -1].join('-').split('.')[0]
|
35
|
+
end
|
36
|
+
servers = []
|
37
|
+
file_list.each do | fn |
|
38
|
+
servers << fn.split('-')[1 .. -1].join('-').split('.')[0]
|
39
|
+
end
|
40
|
+
puts "The available chef servers are:"
|
41
|
+
servers.each do |server|
|
42
|
+
if server == current_server then
|
43
|
+
puts "\t* #{server} [ Currently Selected ]"
|
44
|
+
else
|
45
|
+
puts "\t* #{server}"
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
class BlockUse < Chef::Knife
|
51
|
+
|
52
|
+
banner "knife block use SERVERNAME"
|
53
|
+
|
54
|
+
def run
|
55
|
+
unless name_args.size == 1
|
56
|
+
puts "Please specify a server"
|
57
|
+
server_list = GreenAndSecure::BlockList.new
|
58
|
+
server_list.run
|
59
|
+
exit 1
|
60
|
+
end
|
61
|
+
chef_path = Dir.home + "/.chef"
|
62
|
+
current_server = ""
|
63
|
+
if File.exists?(chef_path+"/knife.rb") then
|
64
|
+
if !File.symlink?(chef_path+"/knife.rb") then
|
65
|
+
puts "#{chef_path}/knife.rb is NOT a symlink."
|
66
|
+
puts "Please copy the file to #{chef_path}/knife-<servername>.rb and re-run this command."
|
67
|
+
exit 3
|
68
|
+
end
|
69
|
+
current_server = File.readlink(chef_path+"/knife.rb").split('-')[1 .. -1].join('-').split('.')[0]
|
70
|
+
end
|
71
|
+
new_server = name_args.first
|
72
|
+
ui.confirm("You are asking to change from #{current_server} to #{new_server}. Are you sure")
|
73
|
+
if File.exists?(chef_path+"/knife.rb")
|
74
|
+
File.unlink(chef_path+"/knife.rb")
|
75
|
+
end
|
76
|
+
File.symlink(chef_path+"/knife-#{new_server}.rb",chef_path+"/knife.rb")
|
77
|
+
if File.exists?(chef_path+"/knife.rb") then
|
78
|
+
current_server = File.readlink(chef_path+"/knife.rb").split('-')[1 .. -1].join('-').split('.')[0]
|
79
|
+
end
|
80
|
+
puts "The knife configuration has been updated to use #{current_server}"
|
81
|
+
end
|
82
|
+
end
|
83
|
+
class BlockNew < Chef::Knife
|
84
|
+
banner "knife block new SERVERNAME"
|
85
|
+
def run
|
86
|
+
chef_path = Dir.home + "/.chef"
|
87
|
+
puts "This will create a new knife configuration file for you to use with knife-block"
|
88
|
+
unless name_args.size == 1
|
89
|
+
@config_name = ui.ask_question("Please provide a friendly name for the new configuration file: ")
|
90
|
+
end
|
91
|
+
@chef_server = ui.ask_question("Please enter the url to your Chef Server (http://chef.domain.com:4000): ")
|
92
|
+
require 'ohai'
|
93
|
+
require 'chef/knife/configure'
|
94
|
+
if File.exists?(chef_path+"/knife.rb") then
|
95
|
+
if !File.symlink?(chef_path+"/knife.rb") then
|
96
|
+
puts "#{chef_path}/knife.rb already exists!"
|
97
|
+
puts "Please copy the file to #{chef_path}/knife-<servername>.rb and re-run this command."
|
98
|
+
exit 3
|
99
|
+
end
|
100
|
+
end
|
101
|
+
knife_config = Chef::Knife::Configure.new
|
102
|
+
knife_config.config[:config_file] = "#{chef_path}/knife-#{@config_name}.rb"
|
103
|
+
knife_config.config[:chef_server_url] = @chef_server
|
104
|
+
knife_config.run
|
105
|
+
puts "#{chef_path}/knife-#{@config_name}.rb has been sucessfully created"
|
106
|
+
GreenAndSecure::BlockList.new.run
|
107
|
+
ui.confirm("Would you like to switch to it now? ")
|
108
|
+
if File.exists?(chef_path+"/knife.rb")
|
109
|
+
File.unlink(chef_path+"/knife.rb")
|
110
|
+
end
|
111
|
+
File.symlink(chef_path+"/knife-#{@config_name}.rb",chef_path+"/knife.rb")
|
112
|
+
if File.exists?(chef_path+"/knife.rb") then
|
113
|
+
current_server = File.readlink(chef_path+"/knife.rb").split('-')[1 .. -1].join('-').split('.')[0]
|
114
|
+
end
|
115
|
+
puts "The knife configuration has been updated to use #{current_server}"
|
116
|
+
end
|
117
|
+
end
|
118
|
+
end
|
data/lib/knife-block.rb
ADDED
File without changes
|
@@ -0,0 +1,16 @@
|
|
1
|
+
# Tests for knifeblock
|
2
|
+
#
|
3
|
+
# Copyright (c) 2012 Green and Secure IT Limited / Matthew Macdonald-Wallace
|
4
|
+
|
5
|
+
require 'chef/knife'
|
6
|
+
require './lib/chef/knife/block'
|
7
|
+
require 'test/unit'
|
8
|
+
|
9
|
+
class TestKnifeBlock < Test::Unit::TestCase
|
10
|
+
|
11
|
+
def test_list_file
|
12
|
+
chef_path = "#{ENV['WORKSPACE']}/.chef/"
|
13
|
+
knifeblock = GreenAndSecure::BlockList.new
|
14
|
+
assert(!File.symlink?(chef_path+"/knife.rb"), "Knife.rb was not a symlink")
|
15
|
+
end
|
16
|
+
end
|
metadata
ADDED
@@ -0,0 +1,57 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: knife-block
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- proffalken
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2012-03-26 00:00:00.000000000Z
|
13
|
+
dependencies: []
|
14
|
+
description: Create and manage knife.rb files for OpsCodes' Chef
|
15
|
+
email:
|
16
|
+
- theprofessor@threedrunkensysadsonthe.net
|
17
|
+
executables: []
|
18
|
+
extensions: []
|
19
|
+
extra_rdoc_files: []
|
20
|
+
files:
|
21
|
+
- .gitignore
|
22
|
+
- Gemfile
|
23
|
+
- LICENSE
|
24
|
+
- README.md
|
25
|
+
- Rakefile
|
26
|
+
- knife-block.gemspec
|
27
|
+
- lib/chef/knife/block.rb
|
28
|
+
- lib/knife-block.rb
|
29
|
+
- lib/knife-block/version.rb
|
30
|
+
- test/unit/knifeblock_test.rb
|
31
|
+
homepage: ''
|
32
|
+
licenses: []
|
33
|
+
post_install_message:
|
34
|
+
rdoc_options: []
|
35
|
+
require_paths:
|
36
|
+
- lib
|
37
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
38
|
+
none: false
|
39
|
+
requirements:
|
40
|
+
- - ! '>='
|
41
|
+
- !ruby/object:Gem::Version
|
42
|
+
version: '0'
|
43
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
44
|
+
none: false
|
45
|
+
requirements:
|
46
|
+
- - ! '>='
|
47
|
+
- !ruby/object:Gem::Version
|
48
|
+
version: '0'
|
49
|
+
requirements: []
|
50
|
+
rubyforge_project:
|
51
|
+
rubygems_version: 1.8.10
|
52
|
+
signing_key:
|
53
|
+
specification_version: 3
|
54
|
+
summary: Create and manage knife.rb files for OpsCodes' Chef
|
55
|
+
test_files:
|
56
|
+
- test/unit/knifeblock_test.rb
|
57
|
+
has_rdoc:
|