summaryrefslogtreecommitdiff
path: root/lib/leap_cli/commands/facts.rb
diff options
context:
space:
mode:
Diffstat (limited to 'lib/leap_cli/commands/facts.rb')
-rw-r--r--lib/leap_cli/commands/facts.rb100
1 files changed, 0 insertions, 100 deletions
diff --git a/lib/leap_cli/commands/facts.rb b/lib/leap_cli/commands/facts.rb
deleted file mode 100644
index 11329cc..0000000
--- a/lib/leap_cli/commands/facts.rb
+++ /dev/null
@@ -1,100 +0,0 @@
-#
-# Gather facter facts
-#
-
-module LeapCli; module Commands
-
- desc 'Gather information on nodes.'
- command :facts do |facts|
- facts.desc 'Query servers to update facts.json.'
- facts.long_desc "Queries every node included in FILTER and saves the important information to facts.json"
- facts.arg_name 'FILTER'
- facts.command :update do |update|
- update.action do |global_options,options,args|
- update_facts(global_options, options, args)
- end
- end
- end
-
- protected
-
- def facter_cmd
- 'facter --json ' + Leap::Platform.facts.join(' ')
- end
-
- def remove_node_facts(name)
- if file_exists?(:facts)
- update_facts_file({name => nil})
- end
- end
-
- def update_node_facts(name, facts)
- update_facts_file({name => facts})
- end
-
- def rename_node_facts(old_name, new_name)
- if file_exists?(:facts)
- facts = JSON.parse(read_file(:facts) || {})
- facts[new_name] = facts[old_name]
- facts[old_name] = nil
- update_facts_file(facts, true)
- end
- end
-
- #
- # if overwrite = true, then ignore existing facts.json.
- #
- def update_facts_file(new_facts, overwrite=false)
- replace_file!(:facts) do |content|
- if overwrite || content.nil? || content.empty?
- old_facts = {}
- else
- old_facts = manager.facts
- end
- facts = old_facts.merge(new_facts)
- facts.each do |name, value|
- if value.is_a? String
- if value == ""
- value = nil
- else
- value = JSON.parse(value) rescue JSON::ParserError
- end
- end
- if value.is_a? Hash
- value.delete_if {|key,v| v.nil?}
- end
- facts[name] = value
- end
- facts.delete_if do |name, value|
- value.nil? || value.empty?
- end
- if facts.empty?
- "{}\n"
- else
- JSON.sorted_generate(facts) + "\n"
- end
- end
- end
-
- private
-
- def update_facts(global_options, options, args)
- nodes = manager.filter(args, :local => false, :disabled => false)
- new_facts = {}
- ssh_connect(nodes) do |ssh|
- ssh.leap.run_with_progress(facter_cmd) do |response|
- node = manager.node(response[:host])
- if node
- new_facts[node.name] = response[:data].strip
- else
- log :warning, 'Could not find node for hostname %s' % response[:host]
- end
- end
- end
- # only overwrite the entire facts file if and only if we are gathering facts
- # for all nodes in all environments.
- overwrite_existing = args.empty? && LeapCli.leapfile.environment.nil?
- update_facts_file(new_facts, overwrite_existing)
- end
-
-end; end \ No newline at end of file