Class: Nucleon::Action::Node::Fact

Inherits:
Object
  • Object
show all
Defined in:
lib/nucleon/action/node/fact.rb

Direct Known Subclasses

Facts

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.describe(action = :fact, weight = 570) ⇒ Object


Info



10
11
12
# File 'lib/nucleon/action/node/fact.rb', line 10

def self.describe(action = :fact, weight = 570)
  describe_base(:node, action, weight, nil, nil, :node_fact)
end

Instance Method Details

#argumentsObject




36
37
38
# File 'lib/nucleon/action/node/fact.rb', line 36

def arguments
  [ :name, :value ]
end

#configure(aggregate = false) ⇒ Object


Settings



17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# File 'lib/nucleon/action/node/fact.rb', line 17

def configure(aggregate = false)
  super() do
    codes :fact_save_failed
    
    unless aggregate
      register_str :name, nil
      register_str :value
    
      register_bool :delete      
    
      register_translator :input_format
    end
    
    register_translator :format, :json
  end
end

#delete_node_fact(node, name, remote = nil) ⇒ Object




80
81
82
83
84
85
86
87
88
89
90
91
# File 'lib/nucleon/action/node/fact.rb', line 80

def delete_node_fact(node, name, remote = nil)
  remote_text = remote ? "#{remote}" : "LOCAL ONLY"
  
  node.delete_facts(name)
          
  if node.save({ :remote => remote, :message => "Deleting fact #{name} from #{node.plugin_provider} #{node.plugin_name}" })
    success("Fact #{name} deleted (#{remote_text})", { :i18n => false })
  else
    error("Fact #{name} deletion could not be saved", { :i18n => false })
    myself.status = code.fact_save_failed  
  end  
end

#executeObject


Operations



43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
# File 'lib/nucleon/action/node/fact.rb', line 43

def execute
  super do |node|
    ensure_node(node) do
      if ! settings[:name] || settings[:name].empty?
        render_node_facts(node)
      else
        if settings.delete(:delete, false)
          delete_node_fact(node, settings[:name], sanitize_remote(network, settings[:net_remote]))                
        elsif settings[:value] && ! settings[:value].empty?
          set_node_fact(node, settings[:name], settings[:value], sanitize_remote(network, settings[:net_remote]))
        else
          render_node_fact(node, settings[:name])
        end
      end
    end
  end
end

#render_node_fact(node, name) ⇒ Object




72
73
74
75
76
# File 'lib/nucleon/action/node/fact.rb', line 72

def render_node_fact(node, name)
  format        = settings[:format]
  myself.result = node.fact(name)    
  render result, :format => format 
end

#render_node_facts(node) ⇒ Object


Sub operations



64
65
66
67
68
# File 'lib/nucleon/action/node/fact.rb', line 64

def render_node_facts(node)
  format        = settings[:format]
  myself.result = node.facts        
  render result, :format => format  
end

#render_providerObject


Output



118
119
120
# File 'lib/nucleon/action/node/fact.rb', line 118

def render_provider
  :node_fact
end

#set_node_fact(node, name, value, remote = nil) ⇒ Object




95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
# File 'lib/nucleon/action/node/fact.rb', line 95

def set_node_fact(node, name, value, remote = nil)
  remote_text  = remote ? "#{remote}" : "LOCAL ONLY"
  input_format = settings[:input_format]
  
  value        = Util::Data.value(render(value, { 
    :format => input_format, 
    :silent => true 
  })) if input_format
          
  myself.result = value           
  node.create_facts({ name => value })    
          
  if node.save({ :remote => remote, :message => "Saving fact #{name} to #{node.plugin_provider} #{node.plugin_name}" })
    success("Fact #{name} saved (#{remote_text})", { :i18n => false })
  else
    error("New fact #{name} could not be saved", { :i18n => false })
    myself.status = code.fact_save_failed  
  end  
end