chef_stash 0.1.1
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.
- checksums.yaml +7 -0
- data/.gitattributes +17 -0
- data/.gitignore +193 -0
- data/Gemfile +3 -0
- data/LICENSE +201 -0
- data/README.md +85 -0
- data/Rakefile +46 -0
- data/chef_stash.gemspec +52 -0
- data/lib/chef_stash/core_ext/hash.rb +33 -0
- data/lib/chef_stash/core_ext/numeric.rb +50 -0
- data/lib/chef_stash/disk_store.rb +169 -0
- data/lib/chef_stash/memoizable.rb +44 -0
- data/lib/chef_stash/os.rb +45 -0
- data/lib/chef_stash/rash.rb +195 -0
- data/lib/chef_stash/time_cache.rb +355 -0
- data/lib/chef_stash/utils.rb +97 -0
- data/lib/chef_stash/version.rb +42 -0
- data/lib/chef_stash.rb +125 -0
- data/rash.rb +59 -0
- data/repl.rb +147 -0
- metadata +220 -0
data/repl.rb
ADDED
@@ -0,0 +1,147 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
lib = File.expand_path('../lib', __FILE__)
|
4
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
5
|
+
|
6
|
+
require 'chef_stash'
|
7
|
+
require 'inifile'
|
8
|
+
require 'securerandom'
|
9
|
+
require 'tempfile'
|
10
|
+
require 'open-uri'
|
11
|
+
|
12
|
+
# Return a cleanly join URI/URL segments into a cleanly normalized URL that
|
13
|
+
# the libraries can use when constructing URIs. URI.join is pure evil.
|
14
|
+
#
|
15
|
+
# @param [Array<String>] paths the list of parts to join
|
16
|
+
#
|
17
|
+
# @return [String<URI>] nicely joined URI/URL, squeaky clean and normalized
|
18
|
+
def uri_join(*paths)
|
19
|
+
return nil if paths.length == 0
|
20
|
+
leadingslash = paths[0][0] == '/' ? '/' : ''
|
21
|
+
trailingslash = paths[-1][-1] == '/' ? '/' : ''
|
22
|
+
paths.map! { |path| path.sub(/^\/+/, '').sub(/\/+$/, '') }
|
23
|
+
leadingslash + paths.join('/') + trailingslash
|
24
|
+
end
|
25
|
+
|
26
|
+
# Return a hash from an INI file with normalized keys (down-case
|
27
|
+
# and symbolized).
|
28
|
+
#
|
29
|
+
# @param [URI] file
|
30
|
+
# the ini file
|
31
|
+
#
|
32
|
+
# @return [Hash]
|
33
|
+
def inihash(file)
|
34
|
+
require 'inifile' unless defined?(IniFile)
|
35
|
+
Tempfile.open(SecureRandom.hex(3)) do |f|
|
36
|
+
f.write(URI.parse(file).read)
|
37
|
+
f.close
|
38
|
+
regkeys_fix IniFile.load(f.path).to_h.compact.recursively_normalize_keys
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
# Initializes a new repository hash or load an existing one.
|
43
|
+
#
|
44
|
+
# @param [String, Symbol] key
|
45
|
+
# name of the key
|
46
|
+
#
|
47
|
+
# @return [Hoodie::ChefStash]
|
48
|
+
def rash(url = 'http://winini.mudbox.dev', path = 'packages_3.0')
|
49
|
+
require 'chef_stash' unless defined?(ChefStash)
|
50
|
+
@rash ||= ChefStash::Rash.new(url, path)
|
51
|
+
end
|
52
|
+
|
53
|
+
# Shortcut to return cache path, if you pass in a file it will return the
|
54
|
+
# file with the cache path.
|
55
|
+
#
|
56
|
+
# @example
|
57
|
+
# file_cache_path
|
58
|
+
# => "/var/chef/cache/"
|
59
|
+
#
|
60
|
+
# file_cache_path 'patch.tar.gz'
|
61
|
+
# => "/var/chef/cache/patch.tar.gz"
|
62
|
+
#
|
63
|
+
# file_cache_path "#{node[:name]}-backup.tar.gz"
|
64
|
+
# => "/var/chef/cache/c20d24209cc8-backup.tar.gz"
|
65
|
+
#
|
66
|
+
# @param [String] args
|
67
|
+
# name of file to return path with file
|
68
|
+
#
|
69
|
+
# @return [String]
|
70
|
+
def file_cache_path(*args)
|
71
|
+
if args.nil?
|
72
|
+
Chef::Config[:file_cache_path]
|
73
|
+
else
|
74
|
+
::File.join(Chef::Config[:file_cache_path], args)
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
# Initializes a new key store or loads an existing one. Data will persist
|
79
|
+
# between Chef invocations.
|
80
|
+
#
|
81
|
+
# @param key [Symbol, String] representing the key
|
82
|
+
#
|
83
|
+
# @return [Hash, Array, String] value for key
|
84
|
+
def stash
|
85
|
+
require 'chef_stash' unless defined?(ChefStash)
|
86
|
+
@stash ||= ChefStash.new
|
87
|
+
end
|
88
|
+
|
89
|
+
# Returns a new inihash hash replacing :regkeys hash section, and returning
|
90
|
+
# an array of hashes, with key/value pairs.
|
91
|
+
#
|
92
|
+
# @example replace the regkeys hash and return a new regkeys array of hashes
|
93
|
+
# inihash = {
|
94
|
+
# regkeys: {
|
95
|
+
# key1: 'a_path[my_key]',
|
96
|
+
# key2: 'the_path[to_key]',
|
97
|
+
# value1: 'cool_value',
|
98
|
+
# value2: 'cooler_value'
|
99
|
+
# }
|
100
|
+
# }
|
101
|
+
# regkeys_fix(inihash) Like a good neighbor regkey_fix has your back
|
102
|
+
# => { regkeys = [
|
103
|
+
# {
|
104
|
+
# data: 'cool_value',
|
105
|
+
# name: 'my_key',
|
106
|
+
# path: 'HKLM/SOFTWARE/KaiserPermanente/a_path',
|
107
|
+
# type: :string
|
108
|
+
# },
|
109
|
+
# {
|
110
|
+
# data: 'cooler_value',
|
111
|
+
# name: 'to_key',
|
112
|
+
# path: 'HKLM/SOFTWARE/KaiserPermanente/the_path',
|
113
|
+
# type: :string
|
114
|
+
# }
|
115
|
+
# ]
|
116
|
+
# }
|
117
|
+
#
|
118
|
+
# @param [Hash]
|
119
|
+
# replaces the value of :regkeys
|
120
|
+
#
|
121
|
+
# @return [Array<Hash{Symbol => String}>]
|
122
|
+
# new inihash hash, replacing the regkeys hash with an array of hashes
|
123
|
+
# with key/value pairs, all other key/value pairs are unchanged
|
124
|
+
def regkeys_fix(hash)
|
125
|
+
return hash unless hash.has_key?(:regkeys)
|
126
|
+
regkeys = []
|
127
|
+
hash[:regkeys].each do |key|
|
128
|
+
char, i = key[0].to_s.scan(/\d+|\D+/)
|
129
|
+
next unless char == 'key'
|
130
|
+
path, name = key[1].scan(/([^\[]+)/)
|
131
|
+
data = hash[:regkeys]["value#{i}".to_sym]
|
132
|
+
nowtime = Time.now.strftime('%Y:%m:%d:%I:%M:%S')
|
133
|
+
regkeys << {
|
134
|
+
path: 'HKLM\SOFTWARE\KaiserPermanente\\' + path[0],
|
135
|
+
type: :string,
|
136
|
+
name: name[0].gsub(']', ''),
|
137
|
+
data: (data == 'tstamp') ? nowtime : data
|
138
|
+
}
|
139
|
+
end
|
140
|
+
hash[:regkeys] = regkeys
|
141
|
+
hash
|
142
|
+
end
|
143
|
+
|
144
|
+
require 'pry'
|
145
|
+
binding.pry
|
146
|
+
|
147
|
+
|
metadata
ADDED
@@ -0,0 +1,220 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: chef_stash
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Stefano Harding
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2015-04-20 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: anemone
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 0.7.2
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 0.7.2
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: hitimes
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rake
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '10.4'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '10.4'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: yard
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0.8'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0.8'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: pry
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ">="
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: rspec
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - "~>"
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '3.2'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - "~>"
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '3.2'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: fuubar
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - "~>"
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '2.0'
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - "~>"
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '2.0'
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: simplecov
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - "~>"
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '0.9'
|
118
|
+
type: :development
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - "~>"
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '0.9'
|
125
|
+
- !ruby/object:Gem::Dependency
|
126
|
+
name: inch
|
127
|
+
requirement: !ruby/object:Gem::Requirement
|
128
|
+
requirements:
|
129
|
+
- - ">="
|
130
|
+
- !ruby/object:Gem::Version
|
131
|
+
version: '0'
|
132
|
+
type: :development
|
133
|
+
prerelease: false
|
134
|
+
version_requirements: !ruby/object:Gem::Requirement
|
135
|
+
requirements:
|
136
|
+
- - ">="
|
137
|
+
- !ruby/object:Gem::Version
|
138
|
+
version: '0'
|
139
|
+
- !ruby/object:Gem::Dependency
|
140
|
+
name: yardstick
|
141
|
+
requirement: !ruby/object:Gem::Requirement
|
142
|
+
requirements:
|
143
|
+
- - ">="
|
144
|
+
- !ruby/object:Gem::Version
|
145
|
+
version: '0'
|
146
|
+
type: :development
|
147
|
+
prerelease: false
|
148
|
+
version_requirements: !ruby/object:Gem::Requirement
|
149
|
+
requirements:
|
150
|
+
- - ">="
|
151
|
+
- !ruby/object:Gem::Version
|
152
|
+
version: '0'
|
153
|
+
- !ruby/object:Gem::Dependency
|
154
|
+
name: rubocop
|
155
|
+
requirement: !ruby/object:Gem::Requirement
|
156
|
+
requirements:
|
157
|
+
- - ">="
|
158
|
+
- !ruby/object:Gem::Version
|
159
|
+
version: '0'
|
160
|
+
type: :development
|
161
|
+
prerelease: false
|
162
|
+
version_requirements: !ruby/object:Gem::Requirement
|
163
|
+
requirements:
|
164
|
+
- - ">="
|
165
|
+
- !ruby/object:Gem::Version
|
166
|
+
version: '0'
|
167
|
+
description: Chef Key/value stash cache hash objects store.
|
168
|
+
email:
|
169
|
+
- riddopic@gmail.com
|
170
|
+
executables: []
|
171
|
+
extensions: []
|
172
|
+
extra_rdoc_files:
|
173
|
+
- LICENSE
|
174
|
+
- README.md
|
175
|
+
files:
|
176
|
+
- ".gitattributes"
|
177
|
+
- ".gitignore"
|
178
|
+
- Gemfile
|
179
|
+
- LICENSE
|
180
|
+
- README.md
|
181
|
+
- Rakefile
|
182
|
+
- chef_stash.gemspec
|
183
|
+
- lib/chef_stash.rb
|
184
|
+
- lib/chef_stash/core_ext/hash.rb
|
185
|
+
- lib/chef_stash/core_ext/numeric.rb
|
186
|
+
- lib/chef_stash/disk_store.rb
|
187
|
+
- lib/chef_stash/memoizable.rb
|
188
|
+
- lib/chef_stash/os.rb
|
189
|
+
- lib/chef_stash/rash.rb
|
190
|
+
- lib/chef_stash/time_cache.rb
|
191
|
+
- lib/chef_stash/utils.rb
|
192
|
+
- lib/chef_stash/version.rb
|
193
|
+
- rash.rb
|
194
|
+
- repl.rb
|
195
|
+
homepage: https://github.com/riddopic/chef_stash
|
196
|
+
licenses:
|
197
|
+
- Apache 2.0
|
198
|
+
metadata: {}
|
199
|
+
post_install_message:
|
200
|
+
rdoc_options: []
|
201
|
+
require_paths:
|
202
|
+
- lib
|
203
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
204
|
+
requirements:
|
205
|
+
- - ">="
|
206
|
+
- !ruby/object:Gem::Version
|
207
|
+
version: '0'
|
208
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
209
|
+
requirements:
|
210
|
+
- - ">="
|
211
|
+
- !ruby/object:Gem::Version
|
212
|
+
version: '0'
|
213
|
+
requirements: []
|
214
|
+
rubyforge_project:
|
215
|
+
rubygems_version: 2.4.4
|
216
|
+
signing_key:
|
217
|
+
specification_version: 4
|
218
|
+
summary: Chef Key/value stash cache hash objects store.
|
219
|
+
test_files: []
|
220
|
+
has_rdoc:
|