Class: BetweenMeals::Knife
- Inherits:
-
Object
- Object
- BetweenMeals::Knife
- Includes:
- Util
- Defined in:
- lib/between_meals/knife.rb
Overview
Knife does not have a usable API for using it as a lib This could be possibly refactored to touch its internals instead of shelling out
Instance Attribute Summary collapse
-
#cookbook_dirs ⇒ Object
Returns the value of attribute cookbook_dirs.
Instance Method Summary collapse
- #berks_cookbook_upload(cookbooks) ⇒ Object
- #berks_cookbook_upload_all ⇒ Object
- #cookbook_delete(cookbooks) ⇒ Object
- #cookbook_upload(cookbooks) ⇒ Object
- #cookbook_upload_all ⇒ Object
- #databag_delete(databags) ⇒ Object
- #databag_upload(databags) ⇒ Object
- #databag_upload_all ⇒ Object
-
#initialize(opts = {}) ⇒ Knife
constructor
A new instance of Knife.
- #role_delete(roles) ⇒ Object
- #role_upload(roles) ⇒ Object
- #role_upload_all ⇒ Object
- #write_user_config ⇒ Object
Methods included from Util
Constructor Details
#initialize(opts = {}) ⇒ Knife
Returns a new instance of Knife.
31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
# File 'lib/between_meals/knife.rb', line 31 def initialize(opts = {}) @logger = opts[:logger] || nil @user = opts[:user] || ENV['USER'] @home = opts[:home] || ENV['HOME'] # make sure people can pass in false :) @ssl = opts[:ssl].nil? ? true : opts[:ssl] @host = opts[:host] || 'localhost' @port = opts[:port] || 4000 @config = opts[:config] || "#{@home}/.chef/knife-#{@user}-taste-tester.rb" @knife = opts[:bin] || 'knife' @berks = opts[:berks_bin] || 'berks' @berks_config = opts[:berks_config] @pem = opts[:pem] || "#{@home}/.chef/#{@user}-taste-tester.pem" @role_dir = opts[:role_dir] @role_type = opts[:role_type] || 'rb' @cookbook_dirs = opts[:cookbook_dirs] @databag_dir = opts[:databag_dir] @checksum_dir = opts[:checksum_dir] @client_key = File.("#{@home}/.chef/#{@user}-taste-tester.pem") end |
Instance Attribute Details
#cookbook_dirs ⇒ Object
Returns the value of attribute cookbook_dirs.
29 30 31 |
# File 'lib/between_meals/knife.rb', line 29 def cookbook_dirs @cookbook_dirs end |
Instance Method Details
#berks_cookbook_upload(cookbooks) ⇒ Object
106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 |
# File 'lib/between_meals/knife.rb', line 106 def berks_cookbook_upload(cookbooks) # cookbooks: array # cookbook_paths: array if @berks_config berks_config = '--config=' + @berks_config end if cookbooks.any? @cookbook_dirs.each do |path| cookbooks.each do |cb| next unless File.exists?("#{path}/#{cb}") @logger.warn("Running berkshelf on cookbook: #{cb}") exec!("cd #{path}/#{cb} && #{@berks} install #{berks_config} && " + "#{@berks} upload #{berks_config}", @logger) end end end end |
#berks_cookbook_upload_all ⇒ Object
85 86 87 88 89 90 91 92 93 94 95 96 97 |
# File 'lib/between_meals/knife.rb', line 85 def berks_cookbook_upload_all if @berks_config berks_config = '--config=' + @berks_config end @cookbook_dirs.each do |path| cookbooks = Dir["#{path}/*"].select { |o| File.directory?(o) } cookbooks.each do |cb| @logger.warn("Running berkshelf on cookbook: #{cb}") exec!("cd #{cb} && #{@berks} install #{berks_config} && " + "#{@berks} upload #{berks_config}", @logger) end end end |
#cookbook_delete(cookbooks) ⇒ Object
125 126 127 128 129 130 131 132 |
# File 'lib/between_meals/knife.rb', line 125 def cookbook_delete(cookbooks) if cookbooks.any? cookbooks.each do |cookbook| exec!("#{@knife} cookbook delete #{cookbook.name}" + " --purge -a --yes -c #{@config}", @logger) end end end |
#cookbook_upload(cookbooks) ⇒ Object
99 100 101 102 103 104 |
# File 'lib/between_meals/knife.rb', line 99 def cookbook_upload(cookbooks) if cookbooks.any? cookbooks = cookbooks.map(&:name).join(' ') exec!("#{@knife} cookbook upload #{cookbooks} -c #{@config}", @logger) end end |
#cookbook_upload_all ⇒ Object
81 82 83 |
# File 'lib/between_meals/knife.rb', line 81 def cookbook_upload_all exec!("#{@knife} cookbook upload -a -c #{@config}", @logger) end |
#databag_delete(databags) ⇒ Object
159 160 161 162 163 164 165 166 167 168 169 |
# File 'lib/between_meals/knife.rb', line 159 def databag_delete(databags) if databags.any? databags.group_by(&:name).each do |dbname, dbs| dbs.each do |db| exec!("#{@knife} data bag delete #{dbname} #{db.item}" + " --yes -c #{@config}", @logger) end delete_databag_if_empty(dbname) end end end |
#databag_upload(databags) ⇒ Object
144 145 146 147 148 149 150 151 152 153 154 155 156 157 |
# File 'lib/between_meals/knife.rb', line 144 def databag_upload(databags) if databags.any? databags.group_by(&:name).each do |dbname, dbs| create_databag_if_missing(dbname) dbitems = dbs.map do |x| File.join(@databag_dir, dbname, "#{x.item}.json") end.join(' ') exec!( "#{@knife} data bag from file #{dbname} #{dbitems} -c #{@config}", @logger, ) end end end |
#databag_upload_all ⇒ Object
134 135 136 137 138 139 140 141 142 |
# File 'lib/between_meals/knife.rb', line 134 def databag_upload_all glob = File.join(@databag_dir, '*', '*.json') items = Dir.glob(glob).map do |file| BetweenMeals::Changes::Databag.new( { :status => :modified, :path => file }, @databag_dir ) end databag_upload(items) end |
#role_delete(roles) ⇒ Object
71 72 73 74 75 76 77 78 79 |
# File 'lib/between_meals/knife.rb', line 71 def role_delete(roles) if roles.any? roles.each do |role| exec!( "#{@knife} role delete #{role.name} --yes -c #{@config}", @logger ) end end end |
#role_upload(roles) ⇒ Object
62 63 64 65 66 67 68 69 |
# File 'lib/between_meals/knife.rb', line 62 def role_upload(roles) if roles.any? roles = roles.map do |x| File.join(@role_dir, "#{x.name}.#{@role_type}") end.join(' ') exec!("#{@knife} role from file #{roles} -c #{@config}", @logger) end end |
#role_upload_all ⇒ Object
55 56 57 58 59 60 |
# File 'lib/between_meals/knife.rb', line 55 def role_upload_all if File.exists?(@role_dir) roles = File.join(@role_dir, "*.#{@role_type}") exec!("#{@knife} role from file #{roles} -c #{@config}", @logger) end end |
#write_user_config ⇒ Object
171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 |
# File 'lib/between_meals/knife.rb', line 171 def write_user_config scheme = @ssl ? 'https' : 'http' cfg = <<-BLOCK user = ENV['USER'] log_level :info log_location STDOUT node_name user chef_server_url "#{scheme}://#{@host}:#{@port}" ssl_verify_mode :verify_none cache_type 'BasicFile' client_key '#{@client_key}' cache_options(:path => File.expand_path("#{@checksum_dir}")) cookbook_path [ BLOCK @cookbook_dirs.each do |dir| cfg << " \"#{dir}\",\n" end cfg << "]\n" unless File.directory?(File.dirname(@config)) Dir.mkdir(File.dirname(@config), 0o755) end if !File.exists?(@config) || ::Digest::MD5.hexdigest(cfg) != ::Digest::MD5.hexdigest(File.read(@config)) @logger.info("Generating #{@config}") File.write(@config, cfg) end # Won't work with shorter keys pem = <<-BLOCK -----BEGIN PRIVATE KEY----- MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCs4Ih8+R/2hcYS tccwJHd0cXHcUibC2wGYmRwf1fKxXLADvfuLRVBHOI5Hgd/ZXF70dowC5mDQ03gr ouk8e7RL72MCKzPuG2V92sh/FnyKhkNsHCOEKaRRiP9lHVbZkS9LEotCKF7eOkL0 SVkGWx8pVZzrOFmhZgHaOFJ2/2t1irUTRFqTikrRsP2KvnhHdDlnnbUumZWxSuEN oN6aSAQEOkKbEOLSn/EIMzEb2jtks7L7wkRErajH094jGoZbQvLiwRHDeM0C9uG7 2sdQ45BG9EQOCdBzy1We5keqtJbXBcpwuBa0d1nQZIsGxnDb88+Kmh9h6k9/WmYN zEQEeSSdAgMBAAECggEATFWQru4p6ObEwTo2y9EuVeJJzmkP6HZfzAu/WWdVFG/C 4MQgsCxY+DnGyVhViVq6KuO1iwpCsbLOmyYCKszMncMESs7czUSXmezjHwrEzz3d w3zhSdhBUCdX7kP4N3VeFp4Hk5zT1viO2+MPRjkyF0RQV6S4HwY1xy+baiP6RRnS dGhUYsdz6fjxSkYEQy3/xHm9VLT6ZDV4pN2aA+LOFeveHKcnOjKFCBy4WzkO6fvj 6H3jghxsHXoL7loCHfi9WX3xKjeXG/NjGbUfTH8P7IldUPha+ru/e8W/P+jjE1os VkScWt08Vu6iTl1EkYeFxOMtSDZxeXNnDkPI0iDQgQKBgQDUMFYncQcZ4uLIfoZq B+Lx7WJGlIwulOdobnraTd5lsrBHj1sC1+/f4cBSpJwUij2l3GdmmnOpuFAof5eu mrBGu++5jy+0eIeT5O2d30O8GOBryJ+oAKI2/BPVCmM8d986wl5Esauycb++O7UO RhpZFOCKbFvlNjhg+CdlvHSl7QKBgQDQkkvpnE//yWmhCPg27n7w3bTg5QPNrzTO pF2iwvLK4XjRceTeW3P4f42HONzJNnmt5TexM9NbdE9g/exA5uNt59ZB5FeFiKAu NmVXbmswPX6R/dlyidqzz1guGrL04e0dZehHZBNDr5Sio8IBjMWrpDIxjDJqEwUa 4qCu4e6jcQKBgQDN0FTAzRFmOnxenNsj3aJzpx27+DpAtI4A7aicNwuQ+VGjF5nf mDRDpGU3xBLgmXZSewaQrx+hb/XQUnJ+Ge0BrylHg2tyUbav7U3N49F/kWGdKmwy OOsfCkLyUbEP5fXQuNdXKj6wR0UE8EUeI0FLRsTFf3VjTsRAynLsa295wQKBgAo3 QDSfDWQP73aNw+qc3+bYVSW20erfLAz7DAMO3WmGha5sj7M8c3+2b64x4M6SNn+H /KRXT4DpP4IWrd238WfOtTXhA1BtErtwuqH/rIxeVra74kyz59xqyXzond9UuZJ5 DVmB01e7X+Jfdv8wb/YqQrMelNGRQOzCMPCf7FphAoGAbUh5HzNF2aciQJGA6Qk8 zvgEHqbS0/QkJGOZ+UifPRanTDuGYQkPdHHOER4UghbM+Kz5rZbBicJ3bCyNOsah IAMAEpsWX2s2A6phgMCx7kH6wMmoZn3hb7Thh9+PfR8Jtp2/7k+ibCeF4gEWUCs5 6wX4GR84dwyhG80yd4TP8Qo= -----END PRIVATE KEY----- BLOCK unless File.directory?(File.dirname(@pem)) Dir.mkdir(File.dirname(@pem), 0o755) end unless File.exists?(@pem) @logger.info("Generating #{@pem}") File.write(@pem, pem) end end |