class KnifeTopo::TopoDelete

knife topo delete

Public Instance Methods

confirm_and_delete_nodes() click to toggle source
# File lib/chef/knife/topo_delete.rb, line 67
def confirm_and_delete_nodes
  confirm("Do you want to delete topology #{@topo_name} - " \
    'this does not delete nodes')
  @topo['nodes'].each do |node|
    remove_node_from_topology(node['name'])
  end if @topo['nodes']
end
delete_topo() click to toggle source
# File lib/chef/knife/topo_delete.rb, line 75
def delete_topo
  @topo.destroy(topo_bag_name, @topo_name)
  ui.info "Deleted topology #{@topo_name}"
end
remove_node_from_topology(node_name) click to toggle source

Remove the topo name attribute from all nodes, so topo search knows they are not in the topology

# File lib/chef/knife/topo_delete.rb, line 82
def remove_node_from_topology(node_name)
  # load then update and save the node
  node = Chef::Node.load(node_name)

  if node['topo'] && node['topo']['name'] == @topo_name
    node.rm('topo', 'name')
    ui.info "Removing node #{node.name} from topology"
    node.save
  end
  node

rescue Net::HTTPServerException => e
  raise unless e.to_s =~ /^404/
  # Node has not been created
end
run() click to toggle source
# File lib/chef/knife/topo_delete.rb, line 42
def run
  validate_args
  config[:disable_editing] = true

  # remove each node
  @topo = load_topo_from_server(@topo_name)
  unless @topo
    ui.info "Topology #{topo_bag_name}/#{@topo_name} does not " \
      'exist on server'
    exit(0)
  end

  confirm_and_delete_nodes
  delete_topo
end
validate_args() click to toggle source
# File lib/chef/knife/topo_delete.rb, line 58
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