knife-block 0.1.1 → 0.2.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.travis.yml +16 -3
- data/Gemfile +3 -0
- data/README.md +11 -3
- data/Rakefile +11 -0
- data/assets/knife-block.png +0 -0
- data/knife-block.gemspec +7 -5
- data/lib/chef/knife/block.rb +21 -8
- data/lib/knife-block/version.rb +1 -1
- data/test/bin/chef_dk_install.sh +30 -0
- data/test/bin/tests.sh +36 -0
- data/test/unit/knifeblock_test.rb +5 -5
- metadata +34 -17
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 8125038f02b6706bb26ab1398318190de497b629
|
4
|
+
data.tar.gz: ca88ab7af3a2ed0432c277a063fba765d6593785
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: c23baa601cc3712904cbbb7b2125d29f6f73b5e0d82591f1b42d56da897b3e6c195df402f8323cc35bdd9e555b58e0d5ab28f4d80ba09429c855e9c8bce2817b
|
7
|
+
data.tar.gz: 29579dc6f087ceefa743c5321ba5762a4d4ce25883f0d891fdc3bc640b8aced7d35853a8390c8ea2233506b5e4582d9839321f9919cae380de8f309c124fc3e9
|
data/.travis.yml
CHANGED
@@ -1,4 +1,17 @@
|
|
1
1
|
language: ruby
|
2
|
-
|
3
|
-
|
4
|
-
|
2
|
+
before_install:
|
3
|
+
- sudo apt-get update -qq
|
4
|
+
- sudo apt-get install -y apt-transport-https
|
5
|
+
matrix:
|
6
|
+
include:
|
7
|
+
- rvm: "2.0"
|
8
|
+
- rvm: "2.1"
|
9
|
+
env: CHEF_DK=true
|
10
|
+
- rvm: "2.1"
|
11
|
+
env: CHEF_DK=false
|
12
|
+
- rvm: "2.2"
|
13
|
+
cache:
|
14
|
+
- bundler
|
15
|
+
- apt
|
16
|
+
script:
|
17
|
+
- ./test/bin/tests.sh $CHEF_DK
|
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -1,19 +1,25 @@
|
|
1
1
|
# Knife Block
|
2
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
3
|
The knife block plugin has been created to enable the use of multiple knife.rb files against multiple chef servers.
|
6
4
|
|
7
5
|
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
6
|
|
7
|
+
![Knife Block](/assets/knife-block.png)
|
8
|
+
|
9
9
|
## Requirements
|
10
10
|
|
11
11
|
At present, knife-block requires ruby 1.9.2 or above. This is owing to the use of "Dir.home()" to find a user's home directory.
|
12
12
|
|
13
13
|
## Installation
|
14
14
|
|
15
|
+
If you've installed Chef via rubygems, homebrew, etc, then install using
|
16
|
+
|
15
17
|
gem install knife-block
|
16
18
|
|
19
|
+
If you've installed Chef via ChefDK, then install using
|
20
|
+
|
21
|
+
chef gem install knife-block
|
22
|
+
|
17
23
|
### How does it work?
|
18
24
|
|
19
25
|
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.
|
@@ -55,6 +61,8 @@ The code requires far more tests than the simple one that currently exists.
|
|
55
61
|
|
56
62
|
Having said all of that, it works for us!
|
57
63
|
|
58
|
-
Copyright:
|
64
|
+
Copyright:
|
65
|
+
- Brandon Burton, 2015
|
66
|
+
- Green and Secure IT Limited, 2012 - 2015
|
59
67
|
|
60
68
|
License: Apache 2 (http://apache.org/licenses/LICENSE-2.0.html)
|
data/Rakefile
CHANGED
@@ -1,11 +1,22 @@
|
|
1
1
|
#!/usr/bin/env rake
|
2
2
|
require "bundler/gem_tasks"
|
3
3
|
require 'rake/testtask'
|
4
|
+
require 'rubocop/rake_task'
|
4
5
|
|
6
|
+
desc "Run rubocop"
|
7
|
+
task :rubocop do
|
8
|
+
puts "Running Rubocop checks"
|
9
|
+
RuboCop::RakeTask.new
|
10
|
+
puts "Rubocop Finished"
|
11
|
+
puts "==============="
|
12
|
+
end
|
5
13
|
|
6
14
|
desc "Run Unit Tests"
|
15
|
+
puts "Running Unit Tests"
|
7
16
|
Rake::TestTask.new("default") do |t|
|
8
17
|
t.pattern = "test/unit/*_test.rb"
|
9
18
|
t.verbose = true
|
10
19
|
t.warning = true
|
20
|
+
puts "Unit Tests finished"
|
21
|
+
puts "==================="
|
11
22
|
end
|
Binary file
|
data/knife-block.gemspec
CHANGED
@@ -2,11 +2,11 @@
|
|
2
2
|
require File.expand_path('../lib/knife-block/version', __FILE__)
|
3
3
|
|
4
4
|
Gem::Specification.new do |gem|
|
5
|
-
gem.authors = ["
|
6
|
-
gem.email = ["
|
7
|
-
gem.description = %q{Create and manage knife.rb files for
|
8
|
-
gem.summary = %q{Create and manage knife.rb files for
|
9
|
-
gem.homepage = "https://github.com/
|
5
|
+
gem.authors = ["solarce"]
|
6
|
+
gem.email = ["brandon@inatree.org"]
|
7
|
+
gem.description = %q{Create and manage knife.rb files for Chef}
|
8
|
+
gem.summary = %q{Create and manage knife.rb files for Chef}
|
9
|
+
gem.homepage = "https://github.com/knife-block/knife-block"
|
10
10
|
gem.license = "MIT"
|
11
11
|
|
12
12
|
gem.files = `git ls-files`.split($\)
|
@@ -15,4 +15,6 @@ Gem::Specification.new do |gem|
|
|
15
15
|
gem.name = "knife-block"
|
16
16
|
gem.require_paths = ["lib"]
|
17
17
|
gem.version = Knife::Block::VERSION
|
18
|
+
|
19
|
+
gem.add_dependency('test-unit', '~> 2.5')
|
18
20
|
end
|
data/lib/chef/knife/block.rb
CHANGED
@@ -11,12 +11,15 @@
|
|
11
11
|
class Chef
|
12
12
|
class Knife
|
13
13
|
def get_config_file
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
14
|
+
case
|
15
|
+
when GreenAndSecure.current_chef_version >= ::Gem::Version.new('12.0.0')
|
16
|
+
config[:config_file] ||= ::Chef::Knife.config_loader.config_location
|
17
|
+
when ((GreenAndSecure.current_chef_version < ::Gem::Version.new('12.0.0')) && \
|
18
|
+
(GreenAndSecure.current_chef_version >= ::Gem::Version.new('11.8.0')))
|
19
|
+
config[:config_file] ||= ::Chef::Knife.locate_config_file
|
20
|
+
when GreenAndSecure.current_chef_version >= ::Gem::Version.new('11.0.0')
|
21
|
+
locate_config_file
|
22
|
+
else
|
20
23
|
GreenAndSecure.locate_config_file config
|
21
24
|
end
|
22
25
|
|
@@ -76,7 +79,7 @@ module GreenAndSecure
|
|
76
79
|
if File.exists?(base+"/knife.rb") then
|
77
80
|
unless File.symlink?(base+"/knife.rb")
|
78
81
|
puts "#{base}/knife.rb is NOT a symlink."
|
79
|
-
puts "Please
|
82
|
+
puts "Please move the file to #{base}/knife-<servername>.rb and re-run this command."
|
80
83
|
exit 3
|
81
84
|
end
|
82
85
|
end
|
@@ -230,5 +233,15 @@ module GreenAndSecure
|
|
230
233
|
use.run
|
231
234
|
end
|
232
235
|
end
|
233
|
-
end
|
234
236
|
|
237
|
+
# Shows the currently selected knife block
|
238
|
+
class BlockShow < Chef::Knife
|
239
|
+
banner "knife block show"
|
240
|
+
|
241
|
+
def run
|
242
|
+
GreenAndSecure::check_block_setup
|
243
|
+
list = GreenAndSecure::BlockList.new
|
244
|
+
puts list.current_server
|
245
|
+
end
|
246
|
+
end
|
247
|
+
end
|
data/lib/knife-block/version.rb
CHANGED
@@ -0,0 +1,30 @@
|
|
1
|
+
#!/usr/bin/env bash
|
2
|
+
|
3
|
+
# helper script to install chefdk for testing on travis-ci
|
4
|
+
|
5
|
+
ubuntu_check(){
|
6
|
+
grep 'Ubuntu' /etc/issue
|
7
|
+
|
8
|
+
if [[ $? != 0 ]]; then
|
9
|
+
echo "This is only meant to run on Ubuntu!"
|
10
|
+
exit 1
|
11
|
+
fi
|
12
|
+
}
|
13
|
+
|
14
|
+
install_chefdk() {
|
15
|
+
ubuntu_check
|
16
|
+
|
17
|
+
curl -s https://packagecloud.io/gpg.key | sudo apt-key add -
|
18
|
+
echo "deb https://packagecloud.io/chef/stable/ubuntu/ precise main" \
|
19
|
+
| sudo tee -a /etc/apt/sources.list.d/chef.list
|
20
|
+
sudo apt-get update -qq
|
21
|
+
sudo apt-get install -yqq chefdk
|
22
|
+
chef verify > /dev/null 2>&1
|
23
|
+
chefdk_installed_correctly=$?
|
24
|
+
if [[ $chefdk_installed_correctly != 0 ]]; then
|
25
|
+
echo "ChefDK not installed correctly, failing"
|
26
|
+
exit 1
|
27
|
+
fi
|
28
|
+
eval "$(chef shell-init bash)"
|
29
|
+
}
|
30
|
+
|
data/test/bin/tests.sh
ADDED
@@ -0,0 +1,36 @@
|
|
1
|
+
#!/usr/bin/env bash
|
2
|
+
|
3
|
+
# Check if there is an argument for chefdk, if there is
|
4
|
+
# install chefdk and use it's ruby, otherwise use the
|
5
|
+
# one provided by travis-ci
|
6
|
+
|
7
|
+
if [[ -n $1 ]]; then
|
8
|
+
CHEF_DK_INSTALL=$1
|
9
|
+
if [[ $CHEF_DK_INSTALL == true ]]; then
|
10
|
+
source ./bin/chef_dk_install.sh
|
11
|
+
|
12
|
+
echo "Installing chefdk"
|
13
|
+
install_chefdk
|
14
|
+
fi
|
15
|
+
fi
|
16
|
+
|
17
|
+
# Run our tests
|
18
|
+
bundle install --jobs=3 --retry=3
|
19
|
+
bundle exec rake rubocop
|
20
|
+
bundle exec rake
|
21
|
+
|
22
|
+
mkdir ~/.chef
|
23
|
+
echo 1 > ~/.chef/knife-my-cool-server.rb
|
24
|
+
|
25
|
+
echo "Testing knife block list"
|
26
|
+
bundle exec knife block list > /tmp/knife_block_list.txt
|
27
|
+
echo "Output of knife block list"
|
28
|
+
cat /tmp/knife_block_list.txt
|
29
|
+
|
30
|
+
echo "Testing if knife block list worked as expected"
|
31
|
+
grep 'my-cool-server' /tmp/knife_block_list.txt
|
32
|
+
if [[ $? != 0 ]]
|
33
|
+
then
|
34
|
+
echo "No knife config found and it should have found it"
|
35
|
+
exit 1
|
36
|
+
fi
|
@@ -18,15 +18,15 @@ class TestGreenAndSecureModule < Test::Unit::TestCase
|
|
18
18
|
ENV['WORKSPACE'] ? (@chef_path ||= "#{ENV['WORKSPACE']}/.chef") : @chef_path = "#{ENV['HOME']}/.chef"
|
19
19
|
if ENV['TRAVIS']
|
20
20
|
@knife_ci = "#{@chef_path}/knife-ci.rb"
|
21
|
-
FileUtils.mkpath(@chef_path) unless File.
|
22
|
-
FileUtils.touch("#{@knife_ci}") unless File.
|
23
|
-
FileUtils.ln_s("#{@knife_ci}","#{@chef_path}/knife.rb") unless File.
|
21
|
+
FileUtils.mkpath(@chef_path) unless File.exist?(@chef_path)
|
22
|
+
FileUtils.touch("#{@knife_ci}") unless File.exist?("#{@knife_ci}")
|
23
|
+
FileUtils.ln_s("#{@knife_ci}","#{@chef_path}/knife.rb") unless File.exist?("#{@chef_path}/knife.rb")
|
24
24
|
end
|
25
25
|
end
|
26
26
|
|
27
27
|
def teardown
|
28
28
|
if ENV['TRAVIS']
|
29
|
-
FileUtils.remove_entry_secure(@chef_path, force = true) if File.
|
29
|
+
FileUtils.remove_entry_secure(@chef_path, force = true) if File.exist?(@chef_path)
|
30
30
|
end
|
31
31
|
end
|
32
32
|
|
@@ -35,7 +35,7 @@ class TestGreenAndSecureModule < Test::Unit::TestCase
|
|
35
35
|
end
|
36
36
|
|
37
37
|
def test_002_it_locates_a_knife_config
|
38
|
-
assert_match(/.*\/.chef\/knife
|
38
|
+
assert_match(/.*\/.chef\/knife.rb/,@green.chef_config_base+"/.chef/knife.rb", "FAIL: knife.rb not found!")
|
39
39
|
end
|
40
40
|
|
41
41
|
def test_003_knife_rb_is_a_symlink
|
metadata
CHANGED
@@ -1,58 +1,75 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: knife-block
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
5
|
-
prerelease:
|
4
|
+
version: 0.2.1
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
|
-
-
|
7
|
+
- solarce
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date:
|
13
|
-
dependencies:
|
14
|
-
|
11
|
+
date: 2015-03-19 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: test-unit
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '2.5'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '2.5'
|
27
|
+
description: Create and manage knife.rb files for Chef
|
15
28
|
email:
|
16
|
-
-
|
29
|
+
- brandon@inatree.org
|
17
30
|
executables: []
|
18
31
|
extensions: []
|
19
32
|
extra_rdoc_files: []
|
20
33
|
files:
|
21
|
-
- .gitignore
|
22
|
-
- .travis.yml
|
34
|
+
- ".gitignore"
|
35
|
+
- ".travis.yml"
|
23
36
|
- Gemfile
|
24
37
|
- LICENSE
|
25
38
|
- README.md
|
26
39
|
- Rakefile
|
40
|
+
- assets/knife-block.png
|
27
41
|
- knife-block.gemspec
|
28
42
|
- lib/chef/knife/block.rb
|
29
43
|
- lib/knife-block.rb
|
30
44
|
- lib/knife-block/version.rb
|
45
|
+
- test/bin/chef_dk_install.sh
|
46
|
+
- test/bin/tests.sh
|
31
47
|
- test/unit/knifeblock_test.rb
|
32
|
-
homepage: https://github.com/
|
48
|
+
homepage: https://github.com/knife-block/knife-block
|
33
49
|
licenses:
|
34
50
|
- MIT
|
51
|
+
metadata: {}
|
35
52
|
post_install_message:
|
36
53
|
rdoc_options: []
|
37
54
|
require_paths:
|
38
55
|
- lib
|
39
56
|
required_ruby_version: !ruby/object:Gem::Requirement
|
40
|
-
none: false
|
41
57
|
requirements:
|
42
|
-
- -
|
58
|
+
- - ">="
|
43
59
|
- !ruby/object:Gem::Version
|
44
60
|
version: '0'
|
45
61
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
46
|
-
none: false
|
47
62
|
requirements:
|
48
|
-
- -
|
63
|
+
- - ">="
|
49
64
|
- !ruby/object:Gem::Version
|
50
65
|
version: '0'
|
51
66
|
requirements: []
|
52
67
|
rubyforge_project:
|
53
|
-
rubygems_version:
|
68
|
+
rubygems_version: 2.4.6
|
54
69
|
signing_key:
|
55
|
-
specification_version:
|
56
|
-
summary: Create and manage knife.rb files for
|
70
|
+
specification_version: 4
|
71
|
+
summary: Create and manage knife.rb files for Chef
|
57
72
|
test_files:
|
73
|
+
- test/bin/chef_dk_install.sh
|
74
|
+
- test/bin/tests.sh
|
58
75
|
- test/unit/knifeblock_test.rb
|