Skip to content

Instantly share code, notes, and snippets.

@smith
Created February 14, 2014 03:29
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save smith/8995300 to your computer and use it in GitHub Desktop.
Save smith/8995300 to your computer and use it in GitHub Desktop.
Starter extractor example
#!/usr/bin/env ruby
#
# As a possible replacement for a Chef Starter kit, we could download a single
# "bundle" that contains the user's custom knife.rb and keys and use a command
# to install it in ~/.chef. This is a prototype of such a command.
#
# The script takes a filename (we'll call it starter.rb) as an argument. The
# file consists of the following:
#
# * A knife.rb
# * __END__ (Ruby ignores everything after __END__)
# * A delimiter string
# * A validation key
# * Another delimeter string
# * A user private key
#
# The script takes these and writes out the knife.rb and the user and validation
# keys based on the settings in the knife.rb.
#
# A more robust version would write these out to ~/.chef or a configurable
# location and ensure existing files aren't overwritten.
#
# Run it with `./extractor starter.rb`
#
require 'mixlib/config'
extractor = Object.new.extend(Mixlib::Config)
file = ARGV[0]
knife_rb, validation_key, user_key = open(file).read.split('==========')
extractor.from_file(file)
open('knife.rb', 'w').write(knife_rb.lstrip)
open("#{extractor.validation_client_name}.pem", 'w').write(validation_key.lstrip)
open("#{extractor.node_name}.pem", 'w').write(user_key.lstrip)
# See http://docs.opscode.com/config_rb_knife.html for more information on knife configuration options
current_dir = File.dirname(__FILE__)
log_level :info
log_location STDOUT
node_name "applejack"
client_key "#{current_dir}/applejack.pem"
validation_client_name "ponyville-validator"
validation_key "#{current_dir}/ponyville-validator.pem"
chef_server_url "https://api.opscode.piab/organizations/ponyville"
cache_type 'BasicFile'
cache_options( :path => "#{ENV['HOME']}/.chef/checksums" )
cookbook_path ["#{current_dir}/../cookbooks"]
__END__
==========
-----BEGIN RSA PRIVATE KEY-----
MIIEpAIBAAKCAQEA5L7frg9AjeGDT0lX8dSJdFBvbHWo8qjmLTmXyqet1llbeUiE
QWO6WSlJaYwZnCYbl7hFc65cAm7xyEdx7a2u9DeISdAlBMaQrYlNhEEAUfD/6V4Y
70klF5Etq1n9ippOl+8kbMa3jgL5ACf9M+JQuquYvelX/AatcUX51NEsz0sEZGL3
E3ZKXnj02/fiEOa7Dls4r21cs5tnRDG7OIJEJMhRRZAQhrp6Sw2lE59mE3xsuxYz
pKGR/WWnW6ukIuYibAZhpsD0StDKYKm2E6RuLbajI+0F580DKamn7sYRsvEccQSE
IFJ8lfn6XIQZSdw+GZqVsa9pXrwOAC9xE8q2JwIDAQABAoIBAQCKHaILhBQTVw4l
CoD6eL1CKOsOTwDi/A53UiYP7Czvlua/lYSdwuyat24nN7ui5/OTKWVuEuJlab29
kz38J/nSZdF52B7yAj8LOTM/3sulrmGm8/UUTlMCJtuvcdfAH6nC3VdeAqKEMdFN
QdgFwunBvKiuSr2gZBvHoFvYHzDyPBIZdzo1naTaIDkPW8GWhG6zgJ4oDHjFRoUw
k+jkdDoubvQgyNsb92bX/aHG5zS1f2qvyEl489IAIwOsJn3N5i1nlwwTydTQ/3q+
33cnrBNHaXwAxfjSSCLdpBIwyOr4HARs2Pr4m6E12KM30h6CQuZIZ0D7AGsV4ZUu
MTpKtJ0pAoGBAPoBV2DVqzWmXc3Ji6EJzPS0eduwvDmeXPJkc0lEiXvYMMAXl8UY
OMdIKPKWjdVg9izNTrtgJMM2unnMjgFHTzERYldEVRQrD1OEweQ3B1oe6Dnqzq1y
CiX1IA3ETT3PoAzBFEXbW3zg2AXOVeJorhP/8wpnGJdYvrusJFSsZ7ZzAoGBAOo7
B651EZMlNjTVxglWZvqhb6WJyuY4fL9Kar2+96VrIG4FKT/JtW3/9ar8sLVG9Qe/
VeyKS/h8BLIxe7oocIaPGRzZYYo7K8pP0O5QMAmFxFDsJV4RO9PiYHHwsXZXKfuU
z0hsKlj4EoTYd143rGDtIPIyvYuqumOSFrAh9uB9AoGAeNPRITHjT0iaqWyxGSGd
dt8Kzgy6y7YoAdZeiZigQcSYux4r8cvlFRtg/u2YmvoDwF9xn8m1ustmkJs2PpPy
SCq4tqiF3ft5qsnM07lsyjeJ0QQU42rsULAJz92B30/LcJ6YZ7K+orogbZ3tkEE7
cNsQ4YQ2NF9lv1pRLMMuVNUCgYACKYtXm/MOlbBbaoHKgkavF6BtOclquKjGJ0y2
9bVZjJSfD2MjGJyZKFy/OFf1RHNsn+KOLXSoFZUBhB1tSYRIabfEoWkaGpO76WK3
YHwhCmAWkyeBJ82Slitnwd4Rhpp3nRcQxxbY/WlGWq03bHIl7up38en4CRpxYt7c
v2OFDQKBgQCgVqBxBHZjg1SMCe5gLsESilQJfLi2hc25HmiwH2+RfJdA1bj6YJXq
m/Fi6Wq5k9sNikmzPbY32O+9VSyYv5WnE1DmIOkiI6Tp689HEr7cW0Yw6Y5uc6uP
+gtqfdw8sWMYzSLvrj7t0HcFisWVY3U4nWp1moF5EYBjILKo8bv/xQ==
-----END RSA PRIVATE KEY-----
==========
-----BEGIN RSA PRIVATE KEY-----
MIIEowIBAAKCAQEAtmt5fVO8hu+SnFo39qLs5jzofS5BSWZsiP3zaugQWh1Yl6SD
EIgYkdkhMAg9gTME12d8PCxRh2T5vbw6a8sHB+t0f52TJrlaMjb9e34U4h9NtrE2
0Jj6Rhw//Gs/oInt1FF/B6NM9g4QjERm1RWBvx2l3A0J3SSjRM4lnSXqNDCDvykN
XnOHMrtdVTJlDMGy2KoiMNx3T61iefFFP/eBCxNJ6bTeCmxwxN7LEoIBojmXRhky
iwbFvT+AQI4SDMBNJgrP0aPhTPdA9yxjUlfnhm8j8OLzK/ko2g+/fg7DpQ/DhDGc
62xsQ2MKVKLaNfW8vla5w/+F1tAFgepYf8MOLwIDAQABAoIBAEmNkkHnVpft12a1
teT7kpvPKUr4MJjg9JhUFSchBR7gwEz8p2AuEAIW05vjZrFGmggkkOJOWF1IaK6J
S+EUzvPxi1q9dYzipayjoZd+ofr+9j3YvKplVFyanW4w7EnV85Btf9Pbk3eO+jsk
hXYbouIlmS/eDgEd+bsPh/kSRZne2xZB5s/6eFwe3Yh8+r8Y51/6Bo8GBwIMdyVj
BkUv7ip6noUW9EYw+HtRJa1QFxuhDstgVhPfDRP5TGjPI1DXTKC1taZ+FQma5rEU
y8oiKCTbk9+MO6K/ZsfvLvRU8VFtlnUlcDT2YQ4F4lO6YJC2j27mBEtLfDGymz42
nB2bKgkCgYEA6oKTs5Z7a7cnVLmJuc4m40b2XpTOUVfdutniEEHfVmwqEhTtZJZ+
PGuQgn1q3l6SXuIQ8WXq44bsxXqxl9iNJpMbVe+stAISg3AaRI1Wq3fYrzYcu+qg
hFdsj/1DtJUQx/DGQDSTYI/6Bm5F34scsJWTAIDBLJ69DY7ry10LwqUCgYEAxyLm
ss2uprXCz0Wxr5ztsez3kFTkifb2ts60WTaSgp7nRVa6CK99Gka1dWdCehROre22
xBpB4THaex9/QpsY/TT9WHU0B9BBnUbxSh0J0LdQJQHroNo4JQZ9Gpn9/bBNB1lf
Ab3xfOOeBgGAZ5OieYeuY6iFm3FrB/v3d2JpGUMCgYEArSG56dwvQlb1spdIFuUb
0K+TNECoEWXNTSWOwHHhcOxqIu9QU/LHP9Qp3Cy7uXAYn/RGjfGweEokg6cRdglq
LBBvHgLUfhEJmgApZHL0iaLxVmmczR9rYkko3SUd1zQ2L2aS9tPZ+nBRJm5DJ8aM
Z9IFtVlZRJfs+xWI/5qyFAECgYBeAZHastJSDNgMNSBugKyNJAqybgD9SEKrheUJ
gIOlehI/X3OvCfkK4HplE/wD2XZTETcIWETlZD15hiLzdHhVgCBhE+MeFSgEcSsT
C6ZIi2EgN0new2VhxTBl0HBgxEt4vq3lCp/njyRYPXk6bC11JaIjlbiM6vvV5xKp
nyFyNQKBgHGsccB3rIFPrK/QONJ8UnbDjYawBdGLPn1ODxfOIt8JxuzN2BpwvpWn
D9rfkblaUarz454xzLAMVgWWoUi6GqWVoUmZW9/p6qhB3Dg6PRMLtaAzXsKDsU37
zplu22DP/kM+lsT203CJjVxZluWWXOj4/m9UORSNLEkygifHdkyh
-----END RSA PRIVATE KEY-----
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment