bagboy 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/MIT-LICENSE +20 -0
- data/Rakefile +34 -0
- data/app/assets/javascripts/bagboy/application.js +16 -0
- data/app/assets/javascripts/bagboy/form.coffee +4 -0
- data/app/assets/javascripts/bagboy/foundation.min.js +10 -0
- data/app/assets/javascripts/bagboy/jquery.js +26 -0
- data/app/assets/javascripts/bagboy/modernizr.js +8 -0
- data/app/assets/javascripts/bagboy/pages.coffee +3 -0
- data/app/assets/javascripts/bagboy/sessions.js +2 -0
- data/app/assets/javascripts/bagboy/users.js +2 -0
- data/app/assets/stylesheets/bagboy/application.scss +18 -0
- data/app/assets/stylesheets/bagboy/foundation.css +5263 -0
- data/app/assets/stylesheets/bagboy/normalize.css +423 -0
- data/app/assets/stylesheets/bagboy/pages.scss +20 -0
- data/app/controllers/bagboy/application_controller.rb +36 -0
- data/app/controllers/bagboy/data_bag_items_controller.rb +50 -0
- data/app/controllers/bagboy/data_bag_template_items_controller.rb +25 -0
- data/app/controllers/bagboy/data_bag_templates_controller.rb +16 -0
- data/app/controllers/bagboy/data_bags_controller.rb +40 -0
- data/app/controllers/bagboy/pages_controller.rb +20 -0
- data/app/controllers/bagboy/sessions_controller.rb +27 -0
- data/app/controllers/bagboy/users_controller.rb +58 -0
- data/app/helpers/bagboy/application_helper.rb +4 -0
- data/app/helpers/bagboy/pages_helper.rb +4 -0
- data/app/helpers/bagboy/sessions_helper.rb +4 -0
- data/app/helpers/bagboy/users_helper.rb +4 -0
- data/app/models/bagboy/template.rb +33 -0
- data/app/models/bagboy/user.rb +9 -0
- data/app/views/bagboy/data_bag_items/_form.html.haml +20 -0
- data/app/views/bagboy/data_bag_items/edit.html.haml +18 -0
- data/app/views/bagboy/data_bag_items/index.html.haml +29 -0
- data/app/views/bagboy/data_bag_items/new.html.haml +22 -0
- data/app/views/bagboy/data_bag_templates/show.html.haml +45 -0
- data/app/views/bagboy/data_bags/_form.html.haml +10 -0
- data/app/views/bagboy/data_bags/index.html.haml +23 -0
- data/app/views/bagboy/data_bags/new.html.haml +10 -0
- data/app/views/bagboy/data_bags/show.html.haml +32 -0
- data/app/views/bagboy/pages/index.html.haml +29 -0
- data/app/views/bagboy/sessions/new.html.haml +17 -0
- data/app/views/bagboy/users/_form.html.haml +15 -0
- data/app/views/bagboy/users/edit.html.haml +13 -0
- data/app/views/bagboy/users/index.html.haml +27 -0
- data/app/views/bagboy/users/new.html.haml +10 -0
- data/app/views/bagboy/users/show.html.haml +11 -0
- data/app/views/layouts/bagboy/_form_errors.html.haml +7 -0
- data/app/views/layouts/bagboy/_header.html.haml +51 -0
- data/app/views/layouts/bagboy/application.html.haml +20 -0
- data/config/initializers/gems.rb +1 -0
- data/config/routes.rb +37 -0
- data/db/migrate/20140506101012_create_bagboy_users.rb +10 -0
- data/db/migrate/20140507134332_create_bagboy_templates.rb +9 -0
- data/lib/bagboy.rb +21 -0
- data/lib/bagboy/chef/data_bags/bag.rb +74 -0
- data/lib/bagboy/chef/data_bags/item.rb +100 -0
- data/lib/bagboy/chef/data_bags_helper.rb +48 -0
- data/lib/bagboy/chef/knife.rb +39 -0
- data/lib/bagboy/core/file_helper.rb +25 -0
- data/lib/bagboy/core/scm/base.rb +17 -0
- data/lib/bagboy/core/scm/git.rb +33 -0
- data/lib/bagboy/core/scm/none.rb +19 -0
- data/lib/bagboy/core/scm_helper.rb +37 -0
- data/lib/bagboy/engine.rb +14 -0
- data/lib/bagboy/version.rb +3 -0
- data/lib/tasks/bagboy_tasks.rake +4 -0
- metadata +304 -0
@@ -0,0 +1,50 @@
|
|
1
|
+
require_dependency "bagboy/application_controller"
|
2
|
+
|
3
|
+
module Bagboy
|
4
|
+
class DataBagItemsController < ApplicationController
|
5
|
+
|
6
|
+
def index
|
7
|
+
@bag = @bag_helper.data_bag( params[:bag] )
|
8
|
+
@item = @bag.item( params[:item] )
|
9
|
+
|
10
|
+
render :index
|
11
|
+
end
|
12
|
+
|
13
|
+
def edit
|
14
|
+
@bag = @bag_helper.data_bag( params[:bag] )
|
15
|
+
@item = @bag.item( params[:item] )
|
16
|
+
@template = Template::find_or_create_by({data_bag_name: @bag.name})
|
17
|
+
|
18
|
+
render :edit
|
19
|
+
end
|
20
|
+
|
21
|
+
def update
|
22
|
+
@bag = @bag_helper.data_bag( params[:bag] )
|
23
|
+
@item = @bag.item( params[:item] )
|
24
|
+
@template = Template::find_or_create_by({data_bag_name: @bag.name})
|
25
|
+
|
26
|
+
@item.update params[:data_bag_template_item].permit!, @template.parsed_data
|
27
|
+
|
28
|
+
redirect_to data_bag_items_path({bag: @bag.name, item: @item.name})
|
29
|
+
end
|
30
|
+
|
31
|
+
def new
|
32
|
+
@bag = @bag_helper.data_bag( params[:bag] )
|
33
|
+
@item = Chef::DataBags::Item.new
|
34
|
+
@template = Template::find_or_create_by({data_bag_name: @bag.name})
|
35
|
+
|
36
|
+
render :new
|
37
|
+
end
|
38
|
+
|
39
|
+
def create
|
40
|
+
@bag = @bag_helper.data_bag( params[:bag] )
|
41
|
+
@item = @bag.item params[:data_bag_template_item][:name]
|
42
|
+
@template = Template::find_or_create_by({data_bag_name: @bag.name})
|
43
|
+
|
44
|
+
@item.update params[:data_bag_template_item_data].permit!, @template.parsed_data
|
45
|
+
|
46
|
+
redirect_to data_bag_items_path({bag: @bag.name, item: @item.name})
|
47
|
+
end
|
48
|
+
|
49
|
+
end
|
50
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
require_dependency "bagboy/application_controller"
|
2
|
+
|
3
|
+
module Bagboy
|
4
|
+
class DataBagTemplateItemsController < ApplicationController
|
5
|
+
|
6
|
+
def create
|
7
|
+
bag = @bag_helper.data_bag params[:bag]
|
8
|
+
template = Template::find_or_create_by({data_bag_name: bag.name})
|
9
|
+
|
10
|
+
template.item( params[:data_bag_template_item][:name], params[:data_bag_template_item][:type] )
|
11
|
+
|
12
|
+
redirect_to data_bag_template_path( bag.name )
|
13
|
+
end
|
14
|
+
|
15
|
+
def delete
|
16
|
+
bag = @bag_helper.data_bag params[:bag]
|
17
|
+
template = Template::find_or_create_by({data_bag_name: bag.name})
|
18
|
+
|
19
|
+
template.delete_item( params[:data_bag_template_item][:name] )
|
20
|
+
|
21
|
+
redirect_to data_bag_template_path( bag.name )
|
22
|
+
end
|
23
|
+
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
require_dependency "bagboy/application_controller"
|
2
|
+
|
3
|
+
module Bagboy
|
4
|
+
class DataBagTemplatesController < ApplicationController
|
5
|
+
|
6
|
+
def show
|
7
|
+
@bag = @bag_helper.data_bag( params[:bag] )
|
8
|
+
@template = Template::find_or_create_by({data_bag_name: @bag.name})
|
9
|
+
render :show
|
10
|
+
end
|
11
|
+
|
12
|
+
def edit
|
13
|
+
render :edit
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
require_dependency "bagboy/application_controller"
|
2
|
+
|
3
|
+
module Bagboy
|
4
|
+
class DataBagsController < ApplicationController
|
5
|
+
|
6
|
+
def index
|
7
|
+
render :index
|
8
|
+
end
|
9
|
+
|
10
|
+
def show
|
11
|
+
@bag = @bag_helper.data_bag params[:bag]
|
12
|
+
@items = @bag.items
|
13
|
+
render :show
|
14
|
+
end
|
15
|
+
|
16
|
+
def new
|
17
|
+
@bag = Bagboy::Chef::DataBags::Bag.new
|
18
|
+
render :new
|
19
|
+
end
|
20
|
+
|
21
|
+
def create
|
22
|
+
opts = data_bag_params
|
23
|
+
opts[:path] = @bag_helper.data_bag_directory( opts[:name] )
|
24
|
+
@bag = Bagboy::Chef::DataBags::Bag.new( opts )
|
25
|
+
|
26
|
+
if @bag.create
|
27
|
+
redirect_to data_bags_path
|
28
|
+
else
|
29
|
+
render :new
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
private
|
34
|
+
|
35
|
+
def data_bag_params
|
36
|
+
params.require(:data_bag).permit(:name, :path)
|
37
|
+
end
|
38
|
+
|
39
|
+
end
|
40
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
require_dependency "bagboy/application_controller"
|
2
|
+
|
3
|
+
module Bagboy
|
4
|
+
class PagesController < ApplicationController
|
5
|
+
|
6
|
+
def index
|
7
|
+
render :index
|
8
|
+
end
|
9
|
+
|
10
|
+
def update
|
11
|
+
if @scm.pull
|
12
|
+
flash = { success: 'You have successfully updated your chef-repo' }
|
13
|
+
else
|
14
|
+
flash = { error: 'Something went wrong' }
|
15
|
+
end
|
16
|
+
redirect_to request.referer, flash: flash
|
17
|
+
end
|
18
|
+
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
require_dependency "bagboy/application_controller"
|
2
|
+
|
3
|
+
module Bagboy
|
4
|
+
class SessionsController < ApplicationController
|
5
|
+
|
6
|
+
def new
|
7
|
+
render 'new'
|
8
|
+
end
|
9
|
+
|
10
|
+
def create
|
11
|
+
user = Bagboy::User.find_by_email(params[:email])
|
12
|
+
if user && user.authenticate(params[:password])
|
13
|
+
session[:user_id] = user.id
|
14
|
+
redirect_to root_url, flash: {success: 'You have successfuly logged in!'}
|
15
|
+
else
|
16
|
+
flash.now.alert = 'Invalid email or password'
|
17
|
+
render "new"
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
def destroy
|
22
|
+
session[:user_id] = nil
|
23
|
+
redirect_to root_url, flash: { success: 'You have successfuly logged out!'}
|
24
|
+
end
|
25
|
+
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,58 @@
|
|
1
|
+
require_dependency "bagboy/application_controller"
|
2
|
+
|
3
|
+
module Bagboy
|
4
|
+
class UsersController < ApplicationController
|
5
|
+
|
6
|
+
def show
|
7
|
+
@user = Bagboy::User.find(params[:id])
|
8
|
+
render :show
|
9
|
+
end
|
10
|
+
|
11
|
+
def index
|
12
|
+
@users = Bagboy::User.all
|
13
|
+
render :index
|
14
|
+
end
|
15
|
+
|
16
|
+
def new
|
17
|
+
@user = Bagboy::User.new
|
18
|
+
render :new
|
19
|
+
end
|
20
|
+
|
21
|
+
def create
|
22
|
+
@user = Bagboy::User.new(user_params)
|
23
|
+
if @user.save
|
24
|
+
redirect_to users_path, flash: { success: "You have succesfully created #{@user.email}"}
|
25
|
+
else
|
26
|
+
render 'new'
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
def edit
|
31
|
+
@user = Bagboy::User.find(params[:id])
|
32
|
+
render :edit
|
33
|
+
end
|
34
|
+
|
35
|
+
def update
|
36
|
+
@user = Bagboy::User.find(params[:id])
|
37
|
+
@user.update_attributes( user_params )
|
38
|
+
if ( @user.save )
|
39
|
+
redirect_to user_path( @user.id ), flash: { success: "You have succesfully updated #{@user.email}!"}
|
40
|
+
else
|
41
|
+
render :edit
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
def delete
|
46
|
+
@user = Bagboy::User.find(params[:id])
|
47
|
+
@user.delete
|
48
|
+
redirect_to users_path, flash: { success: "#{@user.email} successfuly deleted!"}
|
49
|
+
end
|
50
|
+
|
51
|
+
private
|
52
|
+
|
53
|
+
def user_params
|
54
|
+
params.require(:user).permit(:email, :password, :password_confirmation)
|
55
|
+
end
|
56
|
+
|
57
|
+
end
|
58
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
module Bagboy
|
2
|
+
class Template < ActiveRecord::Base
|
3
|
+
|
4
|
+
before_save :check_id
|
5
|
+
|
6
|
+
def check_id
|
7
|
+
data = parsed_data
|
8
|
+
data['id'] = 'text' if data['id'] == nil
|
9
|
+
self.data = data.to_json
|
10
|
+
end
|
11
|
+
|
12
|
+
def parsed_data
|
13
|
+
self.data ||= '{}'
|
14
|
+
JSON.parse( self.data )
|
15
|
+
end
|
16
|
+
|
17
|
+
def item ( key, value )
|
18
|
+
data = parsed_data
|
19
|
+
data[key.downcase] = value
|
20
|
+
data = Hash[data.sort_by { |key, value| key }]
|
21
|
+
self.data = data.to_json
|
22
|
+
save
|
23
|
+
end
|
24
|
+
|
25
|
+
def delete_item ( key )
|
26
|
+
data = parsed_data
|
27
|
+
data.delete key
|
28
|
+
self.data = data.to_json
|
29
|
+
save
|
30
|
+
end
|
31
|
+
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
- template.parsed_data.each do |key, value|
|
2
|
+
.row
|
3
|
+
.large-2.columns
|
4
|
+
%label.right.inline{ for: "#{namespace}_#{key}" }= key
|
5
|
+
.large-10.columns
|
6
|
+
- if value == 'text'
|
7
|
+
%input{ type: 'text', id: "#{namespace}_#{key}", name: "#{namespace}[#{key}]", placeholder: '', value: item.data[key] || '' }
|
8
|
+
- elsif value == 'password'
|
9
|
+
%input{ type: 'text', id: "#{namespace}_#{key}", name: "#{namespace}[#{key}]", placeholder: '', value: '' }
|
10
|
+
%span.secondary.label{ style: 'margin-bottom: 1em'} Leave blank to not change password
|
11
|
+
- elsif value == 'array'
|
12
|
+
- @item.data[key].to_a.each do |data_item|
|
13
|
+
%input{ type: 'text', id: "#{namespace}_#{key}", name: "#{namespace}[#{key}][]", placeholder: '', value: data_item || '' }
|
14
|
+
%div{id: "array_#{key}"}
|
15
|
+
- div_id = "#array_#{key}"
|
16
|
+
- id = "#{namespace}_#{key}"
|
17
|
+
- name = "#{namespace}[#{key}][]"
|
18
|
+
%a.button.tiny.success{ href: '#', id: "array_button_#{key}", onclick: "addElement('#{div_id}','#{id}','#{name}')" }
|
19
|
+
%i.fa.fa-plus
|
20
|
+
Add Item
|
@@ -0,0 +1,18 @@
|
|
1
|
+
%h1= "Editing #{@item.name}"
|
2
|
+
|
3
|
+
.button-bar
|
4
|
+
%ul.button-group
|
5
|
+
%li
|
6
|
+
%a.button.tiny{href: data_bag_items_path({bag: @bag.name, item: @item.name})}= "Back to #{@item.name}"
|
7
|
+
%ul.button-group
|
8
|
+
%li
|
9
|
+
%a.button.tiny{href: data_bag_path(@bag.name)}= "Back to #{@bag.name}"
|
10
|
+
|
11
|
+
%hr
|
12
|
+
|
13
|
+
%form{ action: update_data_bag_item_path({bag: @bag.name, item: @item.name}), method: 'post' }
|
14
|
+
= render 'form', template: @template, item: @item, namespace: 'data_bag_template_item'
|
15
|
+
.row
|
16
|
+
.large-2.columns
|
17
|
+
.large-10.columns
|
18
|
+
%button.button.small{ type: 'submit' } Submit
|
@@ -0,0 +1,29 @@
|
|
1
|
+
%h1= "Item: #{@item.name}"
|
2
|
+
%h3.subheader= "From #{@bag.name} data bag"
|
3
|
+
|
4
|
+
.button-bar
|
5
|
+
%ul.button-group
|
6
|
+
%li
|
7
|
+
%a.button.tiny{href: edit_data_bag_item_path({bag: @bag.name, item: @item.name})} Edit
|
8
|
+
%ul.button-group
|
9
|
+
%li
|
10
|
+
%a.button.tiny{href: data_bag_path(@bag.name)}= "Back to #{@bag.name}"
|
11
|
+
|
12
|
+
%hr
|
13
|
+
|
14
|
+
%table
|
15
|
+
%thead
|
16
|
+
%tr
|
17
|
+
%th{ width: '200' } Key
|
18
|
+
%th Value
|
19
|
+
%tbody
|
20
|
+
- @item.data.each do |key, value|
|
21
|
+
%tr
|
22
|
+
%td= key
|
23
|
+
%td
|
24
|
+
- if value.kind_of?(Array)
|
25
|
+
%ul
|
26
|
+
- value.each do |value_item|
|
27
|
+
%li= value_item
|
28
|
+
- else
|
29
|
+
= value
|
@@ -0,0 +1,22 @@
|
|
1
|
+
%h1 New Item
|
2
|
+
|
3
|
+
.button-bar
|
4
|
+
%ul.button-group
|
5
|
+
%li
|
6
|
+
%a.button.tiny{href: data_bag_path(@bag.name)}= "Back to #{@bag.name}"
|
7
|
+
|
8
|
+
%hr
|
9
|
+
|
10
|
+
%form{ action: create_data_bag_item_path({bag: @bag.name}), method: 'post' }
|
11
|
+
.row
|
12
|
+
.large-2.columns
|
13
|
+
%label.right.inline{ for: "data_bag_template_item" } Name
|
14
|
+
.large-10.columns
|
15
|
+
%input{ type: 'text', id: "data_bag_template_item", name: "data_bag_template_item[name]"}
|
16
|
+
%hr
|
17
|
+
= render 'form', template: @template, item: @item, namespace: 'data_bag_template_item_data'
|
18
|
+
|
19
|
+
.row
|
20
|
+
.large-2.columns
|
21
|
+
.large-10.columns
|
22
|
+
%button.button.small{ type: 'submit' } Submit
|
@@ -0,0 +1,45 @@
|
|
1
|
+
%h1= "Template for #{@bag.name}"
|
2
|
+
|
3
|
+
%hr
|
4
|
+
|
5
|
+
- unless @template.parsed_data.empty?
|
6
|
+
%table
|
7
|
+
%thead
|
8
|
+
%tr
|
9
|
+
%td Field Name
|
10
|
+
%td Field Type
|
11
|
+
%td
|
12
|
+
%tbody
|
13
|
+
- @template.parsed_data.each do |key, value|
|
14
|
+
%tr
|
15
|
+
%td= key
|
16
|
+
%td= value
|
17
|
+
%td
|
18
|
+
%form.tabled{ action: delete_data_bag_template_item_path, method: 'post' }
|
19
|
+
%input{ type: 'hidden', name: 'data_bag_template_item[name]', value: key }
|
20
|
+
%button.button.alert.tiny{ type: 'submit' } Delete
|
21
|
+
- else
|
22
|
+
No Fields
|
23
|
+
|
24
|
+
%hr
|
25
|
+
|
26
|
+
%h3 New Field
|
27
|
+
%form{ action: create_data_bag_template_item_path, method: 'post' }
|
28
|
+
.row
|
29
|
+
.large-2.columns
|
30
|
+
%label.right.inline{ for: 'data_bag_template_item_name' } Name
|
31
|
+
.large-10.columns
|
32
|
+
%input{ type: 'text', id: 'data_bag_template_item_name', name: 'data_bag_template_item[name]', placeholder: 'Name' }
|
33
|
+
.row
|
34
|
+
.large-2.columns
|
35
|
+
%label.right.inline{ for: 'data_bag_template_item_type' } Type
|
36
|
+
.large-10.columns
|
37
|
+
%select{ id: 'data_bag_template_item_type', name: 'data_bag_template_item[type]'}
|
38
|
+
%option{value: "text"} Text
|
39
|
+
%option{value: "array"} Array
|
40
|
+
%option{value: "password"} Password
|
41
|
+
|
42
|
+
.row
|
43
|
+
.large-2.columns
|
44
|
+
.large-10.columns
|
45
|
+
%button.button.small{ type: 'submit' } Submit
|