crowbar/crowbar-core

View on GitHub
chef/cookbooks/provisioner/recipes/dhcp_update.rb

Summary

Maintainability
A
0 mins
Test Coverage
admin_ip = Barclamp::Inventory.get_network_by_type(node, "admin").address

dns_config = Barclamp::Config.load("core", "dns")
dns_servers = dns_config["servers"] || []
dns_servers = [admin_ip] if dns_servers.empty?

domain_name = node[:dns].nil? ? node[:domain] : (node[:dns][:domain] || node[:domain])

admin_net = Barclamp::Inventory.get_network_definition(node, "admin")
lease_time = node[:provisioner][:dhcp]["lease-time"]

pool_opts = {
  "dhcp" => ["allow unknown-clients",
             "default-lease-time #{lease_time}",
             "max-lease-time #{lease_time}",
             'if exists dhcp-parameter-request-list {
       # Always send the PXELINUX options (specified in hexadecimal)
       option dhcp-parameter-request-list = concat(option dhcp-parameter-request-list,d0,d1,d2,d3);
     }',
             'if option arch = 00:06 {
       filename = "discovery/ia32/efi/bootia32.efi";
     } else if option arch = 00:07 {
       filename = "discovery/x86_64/efi/default/boot/bootx64.efi";
     } else if option arch = 00:09 {
       filename = "discovery/x86_64/efi/default/boot/bootx64.efi";
     } else if option arch = 00:0b {
       filename = "discovery/aarch64/efi/default/boot/bootaa64.efi";
     } else if option arch = 00:0e {
       option path-prefix "discovery/ppc64le/bios/";
       filename = "";
     } else {
       filename = "discovery/x86_64/bios/pxelinux.0";
     }',
             "next-server #{admin_ip}"],
  "host" => ["deny unknown-clients"]
}

dhcp_subnet admin_net["subnet"] do
  action :add
  network admin_net
  pools ["dhcp","host"]
  pool_options pool_opts
  options [
    "server-identifier #{admin_ip}",
    "option domain-name \"#{domain_name}\"",
    "option domain-name-servers #{dns_servers.join(", ")}"
  ]
end