knife-dwim 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore ADDED
@@ -0,0 +1,4 @@
1
+ *~
2
+ *.gem
3
+ .bundle
4
+ pkg/*
data/LICENSE ADDED
@@ -0,0 +1,24 @@
1
+ Copyright (c) 2010, Maciej Pasternacki <maciej@pasternacki.net>
2
+ All rights reserved.
3
+
4
+ Redistribution and use in source and binary forms, with or without
5
+ modification, are permitted provided that the following conditions are met:
6
+ * Redistributions of source code must retain the above copyright
7
+ notice, this list of conditions and the following disclaimer.
8
+ * Redistributions in binary form must reproduce the above copyright
9
+ notice, this list of conditions and the following disclaimer in the
10
+ documentation and/or other materials provided with the distribution.
11
+ * Neither the name of the copyright holder nor the
12
+ names of its contributors may be used to endorse or promote products
13
+ derived from this software without specific prior written permission.
14
+
15
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
16
+ ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
17
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
18
+ DISCLAIMED. IN NO EVENT SHALL MACIEJ PASTERNACKI BE LIABLE FOR ANY
19
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
20
+ (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
21
+ LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
22
+ ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
23
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
24
+ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
data/README.md ADDED
@@ -0,0 +1,12 @@
1
+ # knife-dwim
2
+
3
+ Knife plugin to save your mind from remembering whether it was "knife
4
+ cookbook upload", "knife data bag from file", or "knife role
5
+ whatever", and your fingers from typing all of this.
6
+
7
+ Just use `knife dwim path/to/file`, letting your shell autocomplete
8
+ the path for you, and have it uploaded to your Chef server correctly!
9
+
10
+ ## Usage
11
+
12
+ `knife dwim PATH [PATH [PATH [...]]]`
@@ -0,0 +1,23 @@
1
+ # -*- mode: ruby; encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "knife-dwim/version"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "knife-dwim"
7
+ s.version = KnifeDwim::VERSION
8
+ s.authors = ["Maciej Pasternacki"]
9
+ s.email = ["maciej@pasternacki.net"]
10
+ s.homepage = "https://github.com/mpasternacki/knife-dwim"
11
+ s.summary = %q{Upload file to Chef server correctly}
12
+ s.description = %q{Run a correct knife command to upload file to Chef server}
13
+ s.licenses = ['BSD']
14
+
15
+ s.rubyforge_project = "knife-dwim"
16
+
17
+ s.files = `git ls-files`.split("\n")
18
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
19
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
20
+ s.require_paths = ["lib"]
21
+
22
+ s.add_runtime_dependency "chef"
23
+ end
@@ -0,0 +1,69 @@
1
+ require 'pathname'
2
+
3
+ require 'chef/knife'
4
+
5
+ module KnifeDwim
6
+ class Dwim < Chef::Knife
7
+ banner "knife dwim [-n] FILE [FILE [FILE [...]]]"
8
+
9
+ def run_knife(cls, *args)
10
+ cls.load_deps
11
+ i = cls.new(args)
12
+ i.config = config
13
+ i.run
14
+ end
15
+
16
+ def run
17
+ if name_args.empty?
18
+ ui.error('File name or names required')
19
+ else
20
+ name_args.each do |f|
21
+ path = Pathname.
22
+ new(f).
23
+ expand_path
24
+
25
+ unless path.exist?
26
+ ui.error "Path #{path} does not exist."
27
+ next
28
+ end
29
+
30
+ done = false
31
+
32
+ Chef::Config[:cookbook_path].each do |cbp|
33
+ rel_path = path.relative_path_from(Pathname.new(cbp).expand_path)
34
+
35
+ if not rel_path.to_s[0..2] == '../'
36
+ # path is within a cookbook dir
37
+ run_knife(Chef::Knife::CookbookUpload, rel_path.to_s.sub(/\/.*/,''))
38
+ done = true
39
+ break
40
+ end
41
+ end
42
+
43
+ next if done
44
+
45
+ path = path.relative_path_from(Pathname.pwd)
46
+ if path.to_s[0..2] == '../'
47
+ ui.error "Path #{path.expand_path} is outside the repo."
48
+ next
49
+ end
50
+
51
+ case path.to_s
52
+ when /^roles\//
53
+ run_knife(Chef::Knife::RoleFromFile, path.basename)
54
+ when /^nodes\//
55
+ run_knife(Chef::Knife::NodeFromFile, path.basename)
56
+ when /^environments\//
57
+ run_knife(Chef::Knife::EnvironmentFromFile, path.basename)
58
+ when /^data.bags\/(\w+)\/.*\.ya?ml$/
59
+ run_knife(Chef::Knife::DataBagFromYaml, $1, path.basename)
60
+ when /^data.bags\/(\w+)\//
61
+ run_knife(Chef::Knife::DataBagFromYaml, $1, path.basename)
62
+ else
63
+ ui.error "Don't know what to do with #{pn}."
64
+ end
65
+ end
66
+ end
67
+ end
68
+ end
69
+ end
@@ -0,0 +1,3 @@
1
+ module KnifeDwim
2
+ VERSION = "0.1.0"
3
+ end
metadata ADDED
@@ -0,0 +1,63 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: knife-dwim
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Maciej Pasternacki
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-04-14 00:00:00.000000000Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: chef
16
+ requirement: &70145704872900 !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: *70145704872900
25
+ description: Run a correct knife command to upload file to Chef server
26
+ email:
27
+ - maciej@pasternacki.net
28
+ executables: []
29
+ extensions: []
30
+ extra_rdoc_files: []
31
+ files:
32
+ - .gitignore
33
+ - LICENSE
34
+ - README.md
35
+ - knife-dwim.gemspec
36
+ - lib/chef/knife/dwim.rb
37
+ - lib/knife-dwim/version.rb
38
+ homepage: https://github.com/mpasternacki/knife-dwim
39
+ licenses:
40
+ - BSD
41
+ post_install_message:
42
+ rdoc_options: []
43
+ require_paths:
44
+ - lib
45
+ required_ruby_version: !ruby/object:Gem::Requirement
46
+ none: false
47
+ requirements:
48
+ - - ! '>='
49
+ - !ruby/object:Gem::Version
50
+ version: '0'
51
+ required_rubygems_version: !ruby/object:Gem::Requirement
52
+ none: false
53
+ requirements:
54
+ - - ! '>='
55
+ - !ruby/object:Gem::Version
56
+ version: '0'
57
+ requirements: []
58
+ rubyforge_project: knife-dwim
59
+ rubygems_version: 1.8.10
60
+ signing_key:
61
+ specification_version: 3
62
+ summary: Upload file to Chef server correctly
63
+ test_files: []