class KnifeTopo::TopoBootstrap
knife topo bootstrap
Attributes
msgs[RW]
results[RW]
Public Class Methods
new(args)
click to toggle source
Calls superclass method
# File lib/chef/knife/topo_bootstrap.rb, line 67 def initialize(args) super @bootstrap_args = initialize_cmd_args(args, name_args, ['bootstrap', '']) @results = { bootstrapped: [], skipped: [], skipped_ssh: [], existed: [], failed: [] } @msgs = bootstrap_msgs @bootstrap = true # All called commands need to accept union of options Chef::Knife::Bootstrap.options = options end
Public Instance Methods
bootstrap_msgs()
click to toggle source
# File lib/chef/knife/topo_bootstrap.rb, line 54 def bootstrap_msgs { bootstrapped: 'Bootstrapped %{num} nodes [ %{list} ]', skipped: 'Unexpected error', skipped_ssh: 'Did not bootstrap %{num} nodes [ %{list} ] ' \ 'because they do not have an ssh_host', existed: 'Did not bootstrap %{num} nodes [ %{list} ] because '\ "they already exist.\n"\ "Specify --overwrite to re-bootstrap existing nodes. \n", failed: '%{num} nodes [ %{list} ] failed to bootstrap due to errors' } end
node_bootstrap(node_data)
click to toggle source
rubocop:disable Metrics/MethodLength
# File lib/chef/knife/topo_bootstrap.rb, line 104 def node_bootstrap(node_data) node_name = node_data['name'] state = :skipped_ssh if node_data['ssh_host'] exists = resource_exists?("nodes/#{node_name}") if config[:overwrite] || !exists success = run_bootstrap(node_data, @bootstrap_args, exists) state = success ? :bootstrapped : :failed else state = :existed end end @results[state] << node_name success end
report()
click to toggle source
Report is used by create, update and bootstrap commands
# File lib/chef/knife/topo_bootstrap.rb, line 122 def report if @topo['nodes'].empty? ui.info 'No nodes found' else report_msg(:bootstrapped, :info, false) if @bootstrap report_msg(:skipped, :info, true) report_msg(:skipped_ssh, :info, true) report_msg(:existed, :info, true) report_msg(:failed, :warn, true) if @bootstrap end ui.info("Topology: #{@topo.display_info}") end
report_msg(state, level, only_non_zero = true)
click to toggle source
# File lib/chef/knife/topo_bootstrap.rb, line 135 def report_msg(state, level, only_non_zero = true) nodes = @results[state] return if only_non_zero && nodes.empty? ui.send(level, @msgs[state] % { num: nodes.length, list: nodes.join(', ') }) end
run()
click to toggle source
# File lib/chef/knife/topo_bootstrap.rb, line 80 def run validate_args # load and bootstrap each node that has a ssh_host @topo = load_topo_from_server_or_exit(@topo_name) @processor = KnifeTopo::Processor.for_topo(@topo) nodes = @processor.generate_nodes nodes.each do |node_data| node_bootstrap(node_data) end report end
validate_args()
click to toggle source
# File lib/chef/knife/topo_bootstrap.rb, line 94 def validate_args unless @name_args[0] show_usage ui.fatal('You must specify the name of a topology') exit 1 end @topo_name = @name_args[0] end