def main
vardir = Puppet[:vardir]
confdir = Puppet[:confdir]
certname = Puppet[:certname]
require 'puppet/util/network_device/config'
devices = Puppet::Util::NetworkDevice::Config.devices
if devices.empty?
Puppet.err "No device found in #{Puppet[:deviceconfig]}"
exit(1)
end
returns = devices.collect do |devicename,device|
begin
device_url = URI.parse(device.url)
scheme = "#{device_url.scheme}://" if device_url.scheme
port = ":#{device_url.port}" if device_url.port
Puppet.info "starting applying configuration to #{device.name} at #{scheme}#{device_url.host}#{port}#{device_url.path}"
Puppet[:confdir] = ::File.join(Puppet[:devicedir], device.name)
Puppet[:vardir] = ::File.join(Puppet[:devicedir], device.name)
Puppet[:certname] = device.name
Puppet.settings.use :main, :agent, :ssl
Puppet::Util::NetworkDevice.init(device)
setup_host
require 'puppet/configurer'
configurer = Puppet::Configurer.new
configurer.run(:network_device => true, :pluginsync => Puppet[:pluginsync])
rescue => detail
Puppet.log_exception(detail)
1
ensure
Puppet[:vardir] = vardir
Puppet[:confdir] = confdir
Puppet[:certname] = certname
Puppet::SSL::Host.reset
end
end
if ! returns or returns.compact.empty?
exit(1)
elsif options[:detailed_exitcodes]
exit(returns.compact.reduce(:|))
elsif returns.include? 1
exit(1)
else
exit(0)
end
end