knife-github 0.0.7 → 0.0.8

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.
@@ -0,0 +1,138 @@
1
+ #
2
+ # Author:: Ian Southam (<isoutham@schubergphilis.com>)
3
+ # Copyright:: Copyright (c) 2013 Sander Botman.
4
+ # License:: Apache License, Version 2.0
5
+ #
6
+ # Licensed under the Apache License, Version 2.0 (the "License");
7
+ # you may not use this file except in compliance with the License.
8
+ # You may obtain a copy of the License at
9
+ #
10
+ # http://www.apache.org/licenses/LICENSE-2.0
11
+ #
12
+ # Unless required by applicable law or agreed to in writing, software
13
+ # distributed under the License is distributed on an "AS IS" BASIS,
14
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
+ # See the License for the specific language governing permissions and
16
+ # limitations under the License.
17
+ #
18
+
19
+ require 'chef/knife'
20
+
21
+ class Chef
22
+ class Knife
23
+
24
+ # Pin a specific cookbook version to an environment
25
+ #
26
+ # Not specifically a github function but, sits nicely in with
27
+ # download, deploy and so on
28
+ # In some respects does duplicate some functionality that can be found
29
+ # in spork but, I want a single set of tools that would help people
30
+ # to get quickly up to speed with using chef in an industrialised environment
31
+ class GithubPin < Knife
32
+ deps do
33
+ require 'chef/knife/github_base'
34
+ require 'chef/knife/core/object_loader'
35
+ require "json"
36
+ include Chef::Knife::GithubBase
37
+ end
38
+
39
+ banner "knife github pin COOKBOOK [version] [environment]"
40
+ category "github"
41
+
42
+ def run
43
+ # The run method. The entry point into the class
44
+
45
+ # validate base options from base module.
46
+ validate_base_options
47
+
48
+ # Display information if debug mode is on.
49
+ display_debug_info
50
+
51
+ cookbook_version = nil
52
+ @cookbook_name = name_args.first unless name_args.empty?
53
+ @version = nil
54
+ @env = nil
55
+
56
+ if @cookbook_name.empty?
57
+ Chef::Log.error("You must specify a cookbook name to use this module")
58
+ end
59
+
60
+ # Parameter 2 can be a version or an environment (if version is not given) or nothing
61
+ arg1 = name_args[1] unless name_args[1].nil?
62
+ arg2 = name_args[2] unless name_args[2].nil?
63
+
64
+ if(!arg1.nil? && !arg2.nil?)
65
+ # we have a version and an environment
66
+ @version = arg1
67
+ @env = arg2
68
+ end
69
+ if(!arg1.nil? && arg2.nil?)
70
+ # we have a version or an environment
71
+ if Mixlib::Versioning.parse(arg1).nil?
72
+ @env = arg1
73
+ end
74
+ end
75
+ # If we have no version go and get it from the cookbook in the user's cookbooks path
76
+ if @version.nil?
77
+ unless @version = get_cookbook_version()
78
+ ui.error('Could not get the version of the cookbook');
79
+ exit 1;
80
+ end
81
+ end
82
+
83
+ @envs = list_environments()
84
+ if @env.nil?
85
+ ask_which_environment()
86
+ end
87
+ ui.confirm("Pin version #{@version} of cookbook #{@cookbook_name} in Environment #{@env}")
88
+ if @envs[@env].cookbook_versions.has_key?(@cookbook_name)
89
+ cval = @envs[@env].cookbook_versions[@cookbook_name]
90
+ if cval == @version
91
+ ui.error "#{@cookbook_name} is already pinned to version #{cval}. Nothibg to do!"
92
+ exit 1
93
+ end
94
+ end
95
+ @envs[@env].cookbook_versions[@cookbook_name] = @version
96
+ ui.info "Set version to #{@version} for environment #{@env}"
97
+ if ! File.directory? @github_tmp
98
+ Dir.mkdir(@github_tmp)
99
+ Chef::Log.debug("Creating temporary directory #{@github_tmp}")
100
+ end
101
+ File.open("#{@github_tmp}/#{@env}.json", 'w') {|f| f.write JSON.pretty_generate(@envs[@env]) }
102
+ Chef::Log.debug( "Json written to #{@github_tmp}/#{@env}.json" )
103
+
104
+ # Finally do the upload
105
+ args = ['environment', "from_file", "#{@github_tmp}/#{@env}.json" ]
106
+ upload = Chef::Knife::EnvironmentFromFile.new(args)
107
+ upload.run
108
+
109
+ end
110
+
111
+ def list_environments()
112
+ response = Hash.new
113
+ Chef::Search::Query.new.search(:environment) do |e|
114
+ response[e.name] = e unless e.nil?
115
+ end
116
+ response.delete('_default') if response.has_key?('_default');
117
+ response
118
+ end
119
+
120
+ def ask_which_environment
121
+ question = "Which environment do you wish to pin?\n"
122
+ valid_responses = {}
123
+ @envs.keys.each_with_index do |e, index|
124
+ valid_responses[(index + 1).to_s] = e
125
+ question << "#{index + 1}. #{e}\n"
126
+ end
127
+ question += "\n"
128
+ response = ask_question(question).strip
129
+ unless @env = valid_responses[response]
130
+ ui.error("'#{response}' is not a valid value.")
131
+ exit(1)
132
+ end
133
+ @env
134
+ end
135
+
136
+ end
137
+ end
138
+ end
@@ -1,6 +1,6 @@
1
1
  module Knife
2
2
  module Github
3
- VERSION = "0.0.7"
3
+ VERSION = "0.0.8"
4
4
  MAJOR, MINOR, TINY = VERSION.split('.')
5
5
  end
6
6
  end
metadata CHANGED
@@ -1,15 +1,16 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: knife-github
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.7
4
+ version: 0.0.8
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
8
8
  - Sander Botman
9
+ - Ian Southam
9
10
  autorequire:
10
11
  bindir: bin
11
12
  cert_chain: []
12
- date: 2013-10-30 00:00:00.000000000 Z
13
+ date: 2013-11-17 00:00:00.000000000 Z
13
14
  dependencies:
14
15
  - !ruby/object:Gem::Dependency
15
16
  name: mixlib-versioning
@@ -27,9 +28,26 @@ dependencies:
27
28
  - - ! '>='
28
29
  - !ruby/object:Gem::Version
29
30
  version: 1.0.0
30
- description: Github interaction support for Chef's Knife Command
31
+ - !ruby/object:Gem::Dependency
32
+ name: chef
33
+ requirement: !ruby/object:Gem::Requirement
34
+ none: false
35
+ requirements:
36
+ - - ! '>='
37
+ - !ruby/object:Gem::Version
38
+ version: 10.0.0
39
+ type: :runtime
40
+ prerelease: false
41
+ version_requirements: !ruby/object:Gem::Requirement
42
+ none: false
43
+ requirements:
44
+ - - ! '>='
45
+ - !ruby/object:Gem::Version
46
+ version: 10.0.0
47
+ description: Github interaction support for chef's knife cli tool
31
48
  email:
32
49
  - sbotman@schubergphilis.com
50
+ - isoutham@schubergphilis.com
33
51
  executables: []
34
52
  extensions: []
35
53
  extra_rdoc_files:
@@ -73,13 +91,17 @@ files:
73
91
  - lib/chef/knife/github_cleanup.rb
74
92
  - lib/chef/knife/github_clone.rb
75
93
  - lib/chef/knife/github_compare.rb
94
+ - lib/chef/knife/github_config.rb
95
+ - lib/chef/knife/github_create.rb
76
96
  - lib/chef/knife/github_deploy.rb
77
97
  - lib/chef/knife/github_diff.rb
78
98
  - lib/chef/knife/github_list.rb
99
+ - lib/chef/knife/github_pin.rb
79
100
  - lib/chef/knife/github_search.rb
80
101
  - lib/knife-github/version.rb
81
102
  homepage: https://github.com/schubergphilis/knife-github
82
- licenses: []
103
+ licenses:
104
+ - Apache 2.0
83
105
  post_install_message:
84
106
  rdoc_options: []
85
107
  require_paths:
@@ -101,6 +123,6 @@ rubyforge_project:
101
123
  rubygems_version: 1.8.25
102
124
  signing_key:
103
125
  specification_version: 3
104
- summary: Github interaction support for Chef's Knife Command
126
+ summary: Github interaction support for chef's knife cli tool
105
127
  test_files: []
106
128
  has_rdoc: false