Class: Nodes

Inherits:
Application show all
Defined in:
app/controllers/nodes.rb

Instance Method Summary collapse

Methods inherited from Application

#access_denied, #append_tree, #bad_request?, #binary?, #build_tree, #can_edit_admin?, #cleanup_session, #conflict?, #convert_newline_to_br, #determine_name, #forbidden?, #format_exception, #is_admin?, #is_last_admin?, #list_available_recipes_for, #load_cookbook_segment, #load_environments, #load_session_user, #login_required, #logout_and_redirect_to_login, #not_found?, #redirect_back_or_default, #require_admin, #segment_files, #show_plain_file, #store_location, #str_to_bool, #syntax_highlight

Instance Method Details

#createObject



93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
# File 'app/controllers/nodes.rb', line 93

def create
  begin
    @node = Chef::Node.new
    @node.name params[:name]
    @node.chef_environment params[:chef_environment]
    @node.normal_attrs = Chef::JSONCompat.from_json(params[:attributes])
    @node.run_list.reset!(params[:for_node] ? params[:for_node] : [])
    raise ArgumentError, "Node name cannot be blank" if (params[:name].nil? || params[:name].length==0)
    @node.create
    redirect(url(:nodes), :message => { :notice => "Created Node #{@node.name}" })
  rescue => e
    Chef::Log.error("#{e}\n#{e.backtrace.join("\n")}")
    @node.normal_attrs = Chef::JSONCompat.from_json(params[:attributes])
    @available_recipes = list_available_recipes_for(@node.chef_environment)
    @available_roles = Chef::Role.list.keys.sort
    @node.run_list params[:for_node]
    @run_list = @node.run_list
    @_message = { :error => "Exception raised creating node, #{e.message.length <= 150 ? e.message : "please check logs for details"}" }
    render :new
  end
end

#destroyObject



135
136
137
138
139
140
141
142
143
144
145
146
# File 'app/controllers/nodes.rb', line 135

def destroy
  begin
    @node = Chef::Node.load(params[:id])
    @node.destroy
    redirect(absolute_url(:nodes), {:message => { :notice => "Node #{params[:id]} deleted successfully" }, :permanent => true})
  rescue => e
    Chef::Log.error("#{e}\n#{e.backtrace.join("\n")}")
    @node_list = Chef::Node.list()
    @_message = {:error => "Could not delete the node"}
    render :index
  end
end

#editObject



74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
# File 'app/controllers/nodes.rb', line 74

def edit
  begin
    @node = Chef::Node.load(params[:id])
    @env = @node.chef_environment
    @available_recipes = list_available_recipes_for(@node.chef_environment)
    @available_roles = Chef::Role.list.keys.sort
    @run_list = @node.run_list
    render
  rescue => e
    Chef::Log.error("#{e}\n#{e.backtrace.join("\n")}")
    @node = Chef::Node.new
    @available_recipes = []
    @available_roles = []
    @run_list = []
    @_message = {:error => "Could not load node #{params[:id]}"}
    render
  end
end

#indexObject



30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
# File 'app/controllers/nodes.rb', line 30

def index
  begin
    if session[:environment]
      node_hash = Chef::Node.list_by_environment(session[:environment])
    else
      node_hash = Chef::Node.list
    end
    @node_list = node_hash.keys.sort
  rescue => e
    Chef::Log.error("#{e}\n#{e.backtrace.join("\n")}")
    @_message = {:error => "Could not list nodes"}
    @node_hash = {}
  end
  render
end

#newObject



57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
# File 'app/controllers/nodes.rb', line 57

def new
  begin
    @node = Chef::Node.new
    @node.chef_environment(session[:environment] || "_default")
    @available_recipes = list_available_recipes_for(@node.chef_environment)
    @available_roles = Chef::Role.list.keys.sort
    @run_list = @node.run_list
    @env = session[:environment]
    render
  rescue => e
    Chef::Log.error("#{e}\n#{e.backtrace.join("\n")}")
    @node_list = Chef::Node.list()
    @_message = {:error => "Could not load available recipes, roles, or the run list"}
    render :index
  end
end

#showObject



46
47
48
49
50
51
52
53
54
55
# File 'app/controllers/nodes.rb', line 46

def show
  begin
    @node =Chef::Node.load(params[:id])
  rescue => e
    Chef::Log.error("#{e}\n#{e.backtrace.join("\n")}")
    @_message = {:error => "Could not load node #{params[:id]}"}
    @node = Chef::Node.new
  end
  render
end

#updateObject



115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
# File 'app/controllers/nodes.rb', line 115

def update
  begin
    @node = Chef::Node.load(params[:id])
    @node.chef_environment(params[:chef_environment])
    @node.run_list.reset!(params[:for_node] ? params[:for_node] : [])
    @node.normal_attrs = Chef::JSONCompat.from_json(params[:attributes])
    @node.save
    @_message = { :notice => "Updated Node" }
    render :show
  rescue => e
    Chef::Log.error("#{e}\n#{e.backtrace.join("\n")}")
    @available_recipes = list_available_recipes_for(@node.chef_environment)
    @available_roles = Chef::Role.list.keys.sort
    @run_list = Chef::RunList.new
    @run_list.reset!(params[:for_node])
    @_message = { :error => "Exception raised updating node, #{e.message.length <= 150 ? e.message : "please check logs for details"}" }
    render :edit
  end
end