Class: HammerCliBluecat::BluecatCommand::SyncNetworkCommand
- Inherits:
-
HammerCLI::AbstractCommand
- Object
- HammerCLI::AbstractCommand
- HammerCliBluecat::BluecatCommand::SyncNetworkCommand
- Includes:
- HammerCliBluecat
- Defined in:
- lib/hammer_cli_bluecat.rb
Constant Summary
Constants included from HammerCliBluecat
Instance Method Summary collapse
- #add_to_catalog(entry) ⇒ Object
-
#bluecat_to_foreman_catalog(network) ⇒ Object
Foreman response from Bluecat into a unit of work.
-
#execute ⇒ Object
TODO: Consider tftp_id as an option instead of magik-ing it.
-
#has_changed(network) ⇒ Object
Stub to determine whether an update is required.
- #process_catalog ⇒ Object
Methods included from HammerCliBluecat
#bluecat, #domain_ids, #foreman, #tftp_id
Instance Method Details
#add_to_catalog(entry) ⇒ Object
102 103 104 |
# File 'lib/hammer_cli_bluecat.rb', line 102 def add_to_catalog(entry) @catalog[entry[:resource][:network]] = entry end |
#bluecat_to_foreman_catalog(network) ⇒ Object
Foreman response from Bluecat into a unit of work.
74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 |
# File 'lib/hammer_cli_bluecat.rb', line 74 def bluecat_to_foreman_catalog(network) cidr = NetAddr::CIDR.create(network[:ip_range]) if network[:name] name = "#{network[:name]} (#{network[:ip_range]})" else name = network[:ip_range] end { :id => nil, :action => 'create', :resource => { :name => name, :network_type => 'IPv4', :network => cidr.network, :mask => cidr.wildcard_mask, :gateway => cidr.nth(1), :dns_primary => '152.1.14.14', :dns_secondary => '152.1.14.21', :ipam => 'None', :domain_ids => @domain_ids, :tftp_id => @tftp_id, :boot_mode => 'DHCP' } } end |
#execute ⇒ Object
TODO: Consider tftp_id as an option instead of magik-ing it.
14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
# File 'lib/hammer_cli_bluecat.rb', line 14 def execute # Get current domain identifiers... @domain_ids = domain_ids @tftp_id = tftp_id @catalog = {} # Build a list of subnet resources from Bluecat... bluecat do |client| client.ip4_networks(38537).map { |network| bluecat_to_foreman_catalog network } .each { |entry| add_to_catalog entry } end # Gather current Foreman subnets subnet_networks = foreman.resource(:subnets).call(:index, :per_page => 9999)['results'].map do |s| { :id => s['id'], :network => s['network'], } end # Mark catalog entries for update or deletion subnet_networks.each do |network| if @catalog.has_key?(network[:network]) if has_changed network @catalog[network[:network]][:action] = 'update' @catalog[network[:network]][:id] = network[:id] end else @catalog[network[:network]] = { :id => network[:id], :action => 'delete' } end end process_catalog HammerCLI::EX_OK end |
#has_changed(network) ⇒ Object
Stub to determine whether an update is required
69 70 71 |
# File 'lib/hammer_cli_bluecat.rb', line 69 def has_changed(network) true end |
#process_catalog ⇒ Object
53 54 55 56 57 58 59 60 61 62 63 64 65 66 |
# File 'lib/hammer_cli_bluecat.rb', line 53 def process_catalog @catalog.each do |network, entry| case entry[:action] when 'create' puts "Creating #{entry}.\n" foreman.resource(:subnets).call(:create, { :subnet => entry[:resource] }) when 'update' puts "Updating #{entry}.\n" foreman.resource(:subnets).call(:update, { :id => entry[:id], :subnet => entry[:resource] }) when 'delete' puts "#{entry} marked for deletion, skipping.\n" end end end |