Skip to content

Instantly share code, notes, and snippets.

@merqlove
Last active August 29, 2015 14:05
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 merqlove/c8d963ef882b090a20c3 to your computer and use it in GitHub Desktop.
Save merqlove/c8d963ef882b090a20c3 to your computer and use it in GitHub Desktop.
AngularJS service to work with Chef DataBags via Knife CLI.
'use strict';
class DataBagService
_exec = {}
_tmp = {}
_fs = {}
_knife = ''
constructor: (@$q) ->
console.log 'DataBagService: constructor called'
_exec = require('child_process').exec
_tmp = require('tmp')
_fs = require('fs')
this.setKnifePath()
setKnifePath:(path) ->
_knife = path || 'RBENV_VERSION=2.0.0-p353 knife'
getDataBagItem: (client, data_bag, item) ->
return {} unless client && data_bag && item
deferred = @$q.defer()
_exec "#{_knife} data bag show #{data_bag} #{item} "+
authString(client), (err, stdout, stderr) ->
if err
deferred.resolve(false)
throw err
else
deferred.resolve(JSON.parse(stdout))
return deferred.promise
putDataBagItem: (client, data_bag, item) ->
return {} unless client && data_bag && item
deferred = @$q.defer()
_tmp.file {postfix: '.json'}, (err, path, fd) ->
if (err)
_tmp.setGracefulCleanup()
deferred.resolve(false)
throw err
_fs.writeFileSync path, JSON.stringify(item)
_exec "#{_knife} data bag from file #{data_bag} #{path} "+
authString(client), (err, stdout, stderr) ->
if err
deferred.resolve(false)
throw err
else
deferred.resolve(true)
return deferred.promise
userName = (user) ->
user.replace('-validator','')
authString = (client) ->
"-u #{client.user} "+
"-k #{process.env.HOME}/.chef/#{client.user}.pem "+
"--server-url #{client.base} "+
"--secret-file #{secretFile(client.user)} "+
"-F json"
secretFile = (name) ->
"#{process.env.HOME}/.chef/#{userName(name)}_secret "
angular.module('app.services')
.service 'DataBagService', [ '$q', DataBagService ]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment