This is a work in progress API shift as the data structure has changed and I'm cleaning the interface.
This commit is contained in:
@@ -1,10 +1,11 @@
|
||||
nodeprofiles:
|
||||
default:
|
||||
comment: ""
|
||||
comment: "Hello from the default profile"
|
||||
vnfs: ""
|
||||
kernel version: ""
|
||||
kernel args: crashkernel=no quiet
|
||||
|
||||
|
||||
control:
|
||||
localhost:
|
||||
comment: This is the first control system
|
||||
@@ -37,51 +38,40 @@ control:
|
||||
start command: service nfs start
|
||||
restart command: service nfs restart
|
||||
enable command: chkconfig nfs on
|
||||
nodegroups:
|
||||
default:
|
||||
comment: This is the default group
|
||||
domain name: cluster01
|
||||
profiles:
|
||||
- default
|
||||
nodes:
|
||||
n0000:
|
||||
hostname: n0000
|
||||
netdevs:
|
||||
eth0:
|
||||
type: ethernet
|
||||
hwaddr: 00:0c:29:23:8b:48
|
||||
ipaddr: 192.168.1.100
|
||||
netmask: 255.255.255.0
|
||||
gateway: 192.168.1.1
|
||||
ib0:
|
||||
type: infiniband
|
||||
hwaddr: aa:bb:cc:dd:ee:a0
|
||||
ipaddr: 192.168.10.100
|
||||
netmask: 255.255.255.0
|
||||
n0001:
|
||||
hostname: n0001
|
||||
ipmi ipaddr: x.x.x.x
|
||||
netdevs:
|
||||
eth0:
|
||||
hwaddr: aa:bb:cc:dd:ee:b0
|
||||
ipaddr: 192.168.1.101
|
||||
netmask: 255.255.255.0
|
||||
gateway: 192.168.1.1
|
||||
ib0:
|
||||
hwaddr: aa:bb:cc:dd:ee:b1
|
||||
ipaddr: 192.168.10.100
|
||||
netmask: 255.255.255.0
|
||||
group_1:
|
||||
comment: This is the group 1
|
||||
domain name: group1
|
||||
profiles:
|
||||
- default
|
||||
nodes:
|
||||
n0000:
|
||||
hostname: n0000
|
||||
netdevs:
|
||||
eth0:
|
||||
hwaddr: aa:bb:cc:dd:ee:c0
|
||||
ipaddr: 192.168.2.100
|
||||
netmask: 255.255.255.0
|
||||
gateway: 192.168.2.1
|
||||
|
||||
nodes:
|
||||
n0000.cluster01:
|
||||
profiles:
|
||||
- default
|
||||
netdevs:
|
||||
eth0:
|
||||
type: ethernet
|
||||
hwaddr: 00:0c:29:23:8b:48
|
||||
ipaddr: 192.168.1.100
|
||||
netmask: 255.255.255.0
|
||||
gateway: 192.168.1.1
|
||||
ib0:
|
||||
type: infiniband
|
||||
hwaddr: aa:bb:cc:dd:ee:a0
|
||||
ipaddr: 192.168.10.100
|
||||
netmask: 255.255.255.0
|
||||
n0001.cluster01:
|
||||
profiles:
|
||||
- default
|
||||
netdevs:
|
||||
eth0:
|
||||
hwaddr: aa:bb:cc:dd:ee:b0
|
||||
ipaddr: 192.168.1.101
|
||||
netmask: 255.255.255.0
|
||||
gateway: 192.168.1.1
|
||||
ib0:
|
||||
hwaddr: aa:bb:cc:dd:ee:b1
|
||||
ipaddr: 192.168.10.100
|
||||
netmask: 255.255.255.0
|
||||
n0000.cluster02:
|
||||
netdevs:
|
||||
eth0:
|
||||
hwaddr: aa:bb:cc:dd:ee:c0
|
||||
ipaddr: 192.168.2.100
|
||||
netmask: 255.255.255.0
|
||||
gateway: 192.168.1.1
|
||||
|
||||
@@ -41,7 +41,7 @@ func CobraRunE(cmd *cobra.Command, args []string) error {
|
||||
}
|
||||
|
||||
for _, node := range nodes {
|
||||
wwlog.Printf(wwlog.DEBUG, "evaluating node/kernel: %s/%s\n", node.Fqdn.Get(), node.KernelVersion.Get())
|
||||
wwlog.Printf(wwlog.DEBUG, "evaluating node/kernel: %s/%s\n", node.Id.Get(), node.KernelVersion.Get())
|
||||
if node.KernelVersion.Defined() == true {
|
||||
set[node.KernelVersion.Get()]++
|
||||
}
|
||||
|
||||
@@ -16,15 +16,95 @@ func CobraRunE(cmd *cobra.Command, args []string) error {
|
||||
}
|
||||
|
||||
for _, a := range args {
|
||||
err = nodeDB.AddNode(SetController, SetGroup, a)
|
||||
n, err := nodeDB.AddNode(a)
|
||||
if err != nil {
|
||||
wwlog.Printf(wwlog.ERROR, "%s\n", err)
|
||||
os.Exit(1)
|
||||
}
|
||||
fmt.Printf("Added node: %s\n", a)
|
||||
|
||||
if SetIpaddr != "" {
|
||||
if SetNetDev == "" {
|
||||
wwlog.Printf(wwlog.ERROR, "You must include the '--netdev' option\n")
|
||||
os.Exit(1)
|
||||
}
|
||||
|
||||
if _, ok := n.NetDevs[SetNetDev]; !ok {
|
||||
var netdev node.NetDevEntry
|
||||
n.NetDevs[SetNetDev] = &netdev
|
||||
}
|
||||
|
||||
wwlog.Printf(wwlog.VERBOSE, "Node: %s:%s, Setting Ipaddr to: %s\n", n.Id, SetNetDev, SetIpaddr)
|
||||
|
||||
n.NetDevs[SetNetDev].Ipaddr.Set(SetIpaddr)
|
||||
n.NetDevs[SetNetDev].Default.SetB(true)
|
||||
err := nodeDB.NodeUpdate(n)
|
||||
if err != nil {
|
||||
wwlog.Printf(wwlog.ERROR, "%s\n", err)
|
||||
os.Exit(1)
|
||||
}
|
||||
}
|
||||
if SetNetmask != "" {
|
||||
if SetNetDev == "" {
|
||||
wwlog.Printf(wwlog.ERROR, "You must include the '--netdev' option\n")
|
||||
os.Exit(1)
|
||||
}
|
||||
|
||||
if _, ok := n.NetDevs[SetNetDev]; !ok {
|
||||
wwlog.Printf(wwlog.ERROR, "Network Device doesn't exist: %s\n", SetNetDev)
|
||||
os.Exit(1)
|
||||
}
|
||||
wwlog.Printf(wwlog.VERBOSE, "Node: %s:%s, Setting netmask to: %s\n", n.Id, SetNetDev, SetNetmask)
|
||||
|
||||
n.NetDevs[SetNetDev].Netmask.Set(SetNetmask)
|
||||
err := nodeDB.NodeUpdate(n)
|
||||
if err != nil {
|
||||
wwlog.Printf(wwlog.ERROR, "%s\n", err)
|
||||
os.Exit(1)
|
||||
}
|
||||
}
|
||||
if SetGateway != "" {
|
||||
if SetNetDev == "" {
|
||||
wwlog.Printf(wwlog.ERROR, "You must include the '--netdev' option\n")
|
||||
os.Exit(1)
|
||||
}
|
||||
|
||||
if _, ok := n.NetDevs[SetNetDev]; !ok {
|
||||
wwlog.Printf(wwlog.ERROR, "Network Device doesn't exist: %s\n", SetNetDev)
|
||||
os.Exit(1)
|
||||
}
|
||||
wwlog.Printf(wwlog.VERBOSE, "Node: %s:%s, Setting gateway to: %s\n", n.Id, SetNetDev, SetGateway)
|
||||
|
||||
n.NetDevs[SetNetDev].Gateway.Set(SetGateway)
|
||||
err := nodeDB.NodeUpdate(n)
|
||||
if err != nil {
|
||||
wwlog.Printf(wwlog.ERROR, "%s\n", err)
|
||||
os.Exit(1)
|
||||
}
|
||||
}
|
||||
if SetHwaddr != "" {
|
||||
if SetNetDev == "" {
|
||||
wwlog.Printf(wwlog.ERROR, "You must include the '--netdev' option\n")
|
||||
os.Exit(1)
|
||||
}
|
||||
|
||||
if _, ok := n.NetDevs[SetNetDev]; !ok {
|
||||
wwlog.Printf(wwlog.ERROR, "Network Device doesn't exist: %s\n", SetNetDev)
|
||||
os.Exit(1)
|
||||
}
|
||||
wwlog.Printf(wwlog.VERBOSE, "Node: %s:%s, Setting HW address to: %s\n", n.Id, SetNetDev, SetHwaddr)
|
||||
|
||||
n.NetDevs[SetNetDev].Hwaddr.Set(SetHwaddr)
|
||||
err := nodeDB.NodeUpdate(n)
|
||||
if err != nil {
|
||||
wwlog.Printf(wwlog.ERROR, "%s\n", err)
|
||||
os.Exit(1)
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
nodeDB.Persist()
|
||||
|
||||
return nil
|
||||
}
|
||||
}
|
||||
|
||||
@@ -12,11 +12,22 @@ var (
|
||||
}
|
||||
SetGroup string
|
||||
SetController string
|
||||
SetNetDev string
|
||||
SetIpaddr string
|
||||
SetNetmask string
|
||||
SetGateway string
|
||||
SetHwaddr string
|
||||
)
|
||||
|
||||
func init() {
|
||||
baseCmd.PersistentFlags().StringVarP(&SetGroup, "group", "g", "default", "Group to add nodes to")
|
||||
baseCmd.PersistentFlags().StringVarP(&SetController, "controller", "c", "localhost", "Controller to add nodes to")
|
||||
baseCmd.PersistentFlags().StringVarP(&SetNetDev, "netdev", "n", "eth0", "Define the network device to configure")
|
||||
baseCmd.PersistentFlags().StringVarP(&SetIpaddr, "ipaddr", "I", "", "Set the node's network device IP address")
|
||||
baseCmd.PersistentFlags().StringVarP(&SetNetmask, "netmask", "M", "", "Set the node's network device netmask")
|
||||
baseCmd.PersistentFlags().StringVarP(&SetGateway, "gateway", "G", "", "Set the node's network device gateway")
|
||||
baseCmd.PersistentFlags().StringVarP(&SetHwaddr, "hwaddr", "H", "", "Set the node's network device HW address")
|
||||
|
||||
}
|
||||
|
||||
// GetRootCommand returns the root cobra.Command for the application.
|
||||
|
||||
@@ -21,11 +21,7 @@ func CobraRunE(cmd *cobra.Command, args []string) error {
|
||||
nodeList, err := nodeDB.SearchByNameList(args)
|
||||
|
||||
for _, n := range nodeList {
|
||||
if SetGroup != "" && SetGroup != n.Gid.Print() {
|
||||
wwlog.Printf(wwlog.DEBUG, "skipping node of different group: %s/%s\n", n.Gid, n.Id)
|
||||
continue
|
||||
}
|
||||
err := nodeDB.DelNode(n.Cid.Get(), n.Gid.Get(), n.Id.Get())
|
||||
err := nodeDB.DelNode(n.Id.Get())
|
||||
if err != nil {
|
||||
wwlog.Printf(wwlog.ERROR, "%s\n", err)
|
||||
} else {
|
||||
|
||||
@@ -31,9 +31,9 @@ func CobraRunE(cmd *cobra.Command, args []string) error {
|
||||
}
|
||||
|
||||
sort.Slice(nodes, func(i, j int) bool {
|
||||
if nodes[i].Gid.Get() < nodes[j].Gid.Get() {
|
||||
if nodes[i].DomainName.Get() < nodes[j].DomainName.Get() {
|
||||
return true
|
||||
} else if nodes[i].Gid.Get() == nodes[j].Gid.Get() {
|
||||
} else if nodes[i].DomainName.Get() == nodes[j].DomainName.Get() {
|
||||
if nodes[i].Id.Get() < nodes[j].Id.Get() {
|
||||
return true
|
||||
}
|
||||
@@ -44,28 +44,29 @@ func CobraRunE(cmd *cobra.Command, args []string) error {
|
||||
if ShowAll == true {
|
||||
for _, node := range nodes {
|
||||
fmt.Printf("################################################################################\n")
|
||||
fmt.Printf("%-20s %-18s %8s: %s\n", node.Fqdn.Get(), "Id", node.Id.Source(), node.Id.Print())
|
||||
fmt.Printf("%-20s %-18s %8s: %s\n", node.Fqdn.Get(), "Comment", node.Comment.Source(), node.Comment.Print())
|
||||
fmt.Printf("%-20s %-18s %8s: %s\n", node.Fqdn.Get(), "GroupName", node.Gid.Source(), node.Gid.Print())
|
||||
fmt.Printf("%-20s %-18s %8s: %s\n", node.Fqdn.Get(), "DomainName", node.DomainName.Source(), node.DomainName.Print())
|
||||
fmt.Printf("%-20s %-18s %8s: %s\n", node.Fqdn.Get(), "Profiles (Group)", "group", strings.Join(node.GroupProfiles, ","))
|
||||
fmt.Printf("%-20s %-18s %8s: %s\n", node.Fqdn.Get(), "Profiles (Node)", "node", strings.Join(node.Profiles, ","))
|
||||
fmt.Printf("%-20s %-18s %-12s %s\n", "NODE", "FIELD", "PROFILE", "VALUE")
|
||||
fmt.Printf("%-20s %-18s %-12s %s\n", node.Id.Get(), "Id", node.Id.Source(), node.Id.Print())
|
||||
fmt.Printf("%-20s %-18s %-12s %s\n", node.Id.Get(), "Comment", node.Comment.Source(), node.Comment.Print())
|
||||
fmt.Printf("%-20s %-18s %-12s %s\n", node.Id.Get(), "DomainName", node.DomainName.Source(), node.DomainName.Print())
|
||||
fmt.Printf("%-20s %-18s %-12s %s\n", node.Id.Get(), "Profiles", "--", strings.Join(node.Profiles, ","))
|
||||
|
||||
fmt.Printf("%-20s %-18s %8s: %s\n", node.Fqdn.Get(), "Vnfs", node.Vnfs.Source(), node.Vnfs.Print())
|
||||
fmt.Printf("%-20s %-18s %8s: %s\n", node.Fqdn.Get(), "KernelVersion", node.KernelVersion.Source(), node.KernelVersion.Print())
|
||||
fmt.Printf("%-20s %-18s %8s: %s\n", node.Fqdn.Get(), "KernelArgs", node.KernelArgs.Source(), node.KernelArgs.Print())
|
||||
fmt.Printf("%-20s %-18s %8s: %s\n", node.Fqdn.Get(), "RuntimeOverlay", node.RuntimeOverlay.Source(), node.RuntimeOverlay.Print())
|
||||
fmt.Printf("%-20s %-18s %8s: %s\n", node.Fqdn.Get(), "SystemOverlay", node.SystemOverlay.Source(), node.SystemOverlay.Print())
|
||||
fmt.Printf("%-20s %-18s %8s: %s\n", node.Fqdn.Get(), "Ipxe", node.Ipxe.Source(), node.Ipxe.Print())
|
||||
fmt.Printf("%-20s %-18s %8s: %s\n", node.Fqdn.Get(), "IpmiIpaddr", node.IpmiIpaddr.Source(), node.IpmiIpaddr.Print())
|
||||
fmt.Printf("%-20s %-18s %8s: %s\n", node.Fqdn.Get(), "IpmiNetmask", node.IpmiNetmask.Source(), node.IpmiNetmask.Print())
|
||||
fmt.Printf("%-20s %-18s %8s: %s\n", node.Fqdn.Get(), "IpmiUserName", node.IpmiUserName.Source(), node.IpmiUserName.Print())
|
||||
fmt.Printf("%-20s %-18s %-12s %s\n", node.Id.Get(), "Vnfs", node.Vnfs.Source(), node.Vnfs.Print())
|
||||
fmt.Printf("%-20s %-18s %-12s %s\n", node.Id.Get(), "KernelVersion", node.KernelVersion.Source(), node.KernelVersion.Print())
|
||||
fmt.Printf("%-20s %-18s %-12s %s\n", node.Id.Get(), "KernelArgs", node.KernelArgs.Source(), node.KernelArgs.Print())
|
||||
fmt.Printf("%-20s %-18s %-12s %s\n", node.Id.Get(), "RuntimeOverlay", node.RuntimeOverlay.Source(), node.RuntimeOverlay.Print())
|
||||
fmt.Printf("%-20s %-18s %-12s %s\n", node.Id.Get(), "SystemOverlay", node.SystemOverlay.Source(), node.SystemOverlay.Print())
|
||||
fmt.Printf("%-20s %-18s %-12s %s\n", node.Id.Get(), "Ipxe", node.Ipxe.Source(), node.Ipxe.Print())
|
||||
fmt.Printf("%-20s %-18s %-12s %s\n", node.Id.Get(), "IpmiIpaddr", node.IpmiIpaddr.Source(), node.IpmiIpaddr.Print())
|
||||
fmt.Printf("%-20s %-18s %-12s %s\n", node.Id.Get(), "IpmiNetmask", node.IpmiNetmask.Source(), node.IpmiNetmask.Print())
|
||||
fmt.Printf("%-20s %-18s %-12s %s\n", node.Id.Get(), "IpmiUserName", node.IpmiUserName.Source(), node.IpmiUserName.Print())
|
||||
|
||||
for name, netdev := range node.NetDevs {
|
||||
fmt.Printf("%-20s %-18s %8s: %s\n", node.Fqdn.Get(), name+":IPADDR", "node", netdev.Ipaddr)
|
||||
fmt.Printf("%-20s %-18s %8s: %s\n", node.Fqdn.Get(), name+":NETMASK", "node", netdev.Netmask)
|
||||
fmt.Printf("%-20s %-18s %8s: %s\n", node.Fqdn.Get(), name+":GATEWAY", "node", netdev.Gateway)
|
||||
fmt.Printf("%-20s %-18s %8s: %s\n", node.Fqdn.Get(), name+":HWADDR", "node", netdev.Hwaddr)
|
||||
fmt.Printf("%-20s %-18s %-12s %s\n", node.Id.Get(), name+":IPADDR", netdev.Ipaddr.Source(), netdev.Ipaddr.Get())
|
||||
fmt.Printf("%-20s %-18s %-12s %s\n", node.Id.Get(), name+":NETMASK", netdev.Netmask.Source(), netdev.Netmask.Get())
|
||||
fmt.Printf("%-20s %-18s %-12s %s\n", node.Id.Get(), name+":GATEWAY", netdev.Gateway.Source(), netdev.Gateway.Get())
|
||||
fmt.Printf("%-20s %-18s %-12s %s\n", node.Id.Get(), name+":HWADDR", netdev.Hwaddr.Source(), netdev.Hwaddr.Get())
|
||||
fmt.Printf("%-20s %-18s %-12s %s\n", node.Id.Get(), name+":TYPE", netdev.Type.Source(), netdev.Type.Get())
|
||||
|
||||
}
|
||||
|
||||
// v := reflect.ValueOf(node)
|
||||
@@ -83,10 +84,10 @@ func CobraRunE(cmd *cobra.Command, args []string) error {
|
||||
for _, node := range nodes {
|
||||
if len(node.NetDevs) > 0 {
|
||||
for name, dev := range node.NetDevs {
|
||||
fmt.Printf("%-22s %-6s %-18s %-15s %-15s\n", node.Fqdn.Get(), name, dev.Hwaddr, dev.Ipaddr, dev.Gateway)
|
||||
fmt.Printf("%-22s %-6s %-18s %-15s %-15s\n", node.Id.Get(), name, dev.Hwaddr, dev.Ipaddr, dev.Gateway)
|
||||
}
|
||||
} else {
|
||||
fmt.Printf("%-22s %-6s %-18s %-15s %-15s\n", node.Fqdn.Get(), "--", "--", "--", "--")
|
||||
fmt.Printf("%-22s %-6s %-18s %-15s %-15s\n", node.Id.Get(), "--", "--", "--", "--")
|
||||
}
|
||||
}
|
||||
|
||||
@@ -95,31 +96,30 @@ func CobraRunE(cmd *cobra.Command, args []string) error {
|
||||
fmt.Println(strings.Repeat("=", 80))
|
||||
|
||||
for _, node := range nodes {
|
||||
fmt.Printf("%-22s %-16s %-20s %-20s\n", node.Fqdn.Get(), node.IpmiIpaddr.Print(), node.IpmiUserName.Print(), node.IpmiPassword.Print())
|
||||
fmt.Printf("%-22s %-16s %-20s %-20s\n", node.Id.Get(), node.IpmiIpaddr.Print(), node.IpmiUserName.Print(), node.IpmiPassword.Print())
|
||||
}
|
||||
|
||||
} else if ShowLong == true {
|
||||
fmt.Printf("%-22s %-12s %-26s %-35s %s\n", "NODE NAME", "GROUP NAME", "KERNEL VERSION", "VNFS IMAGE", "OVERLAYS (S/R)")
|
||||
fmt.Printf("%-22s %-26s %-35s %s\n", "NODE NAME", "KERNEL VERSION", "VNFS IMAGE", "OVERLAYS (S/R)")
|
||||
fmt.Println(strings.Repeat("=", 120))
|
||||
|
||||
for _, node := range nodes {
|
||||
fmt.Printf("%-22s %-12s %-26s %-35s %s\n", node.Fqdn.Get(), node.Gid.Print(), node.KernelVersion.Print(), node.Vnfs.Print(), node.SystemOverlay.Print()+"/"+node.RuntimeOverlay.Print())
|
||||
fmt.Printf("%-22s %-26s %-35s %s\n", node.Id.Get(), node.KernelVersion.Print(), node.Vnfs.Print(), node.SystemOverlay.Print()+"/"+node.RuntimeOverlay.Print())
|
||||
}
|
||||
|
||||
} else {
|
||||
fmt.Printf("%-22s: %-25s %s\n", "NODE NAME", "PROFILES", "NETDEVS")
|
||||
fmt.Printf("%-22s %-26s %s\n", "NODE NAME", "PROFILES", "NETWORK")
|
||||
|
||||
for _, node := range nodes {
|
||||
var netdevs []string
|
||||
if len(node.NetDevs) > 0 {
|
||||
for name, dev := range node.NetDevs {
|
||||
netdevs = append(netdevs, fmt.Sprintf("%s[%s/%s]", name, dev.Ipaddr, dev.Netmask))
|
||||
netdevs = append(netdevs, fmt.Sprintf("%s:%s", name, dev.Ipaddr.Get()))
|
||||
}
|
||||
}
|
||||
sort.Strings(netdevs)
|
||||
|
||||
allProfiles := append(node.GroupProfiles, node.Profiles...)
|
||||
fmt.Printf("%-22s: %-25s %s\n", node.Fqdn.Get(), strings.Join(allProfiles, ","), strings.Join(netdevs, ", "))
|
||||
fmt.Printf("%-22s %-26s %s\n", node.Id.Get(), strings.Join(node.Profiles, ","), strings.Join(netdevs, ", "))
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -35,7 +35,7 @@ func CobraRunE(cmd *cobra.Command, args []string) error {
|
||||
for _, node := range nodeList {
|
||||
|
||||
if node.IpmiIpaddr.Get() == "" {
|
||||
wwlog.Printf(wwlog.ERROR, "%s: No IPMI IP address\n", node.HostName)
|
||||
wwlog.Printf(wwlog.ERROR, "%s: No IPMI IP address\n", node.Id.Get())
|
||||
continue
|
||||
}
|
||||
|
||||
@@ -49,12 +49,12 @@ func CobraRunE(cmd *cobra.Command, args []string) error {
|
||||
out, err := ipmiCmd.PowerOff()
|
||||
|
||||
if err != nil {
|
||||
wwlog.Printf(wwlog.ERROR, "%s: %s\n", node.HostName, out)
|
||||
wwlog.Printf(wwlog.ERROR, "%s: %s\n", node.Id.Get(), out)
|
||||
returnErr = err
|
||||
continue
|
||||
}
|
||||
|
||||
wwlog.Printf(wwlog.INFO, "%s: %s\n", node.HostName, out)
|
||||
wwlog.Printf(wwlog.INFO, "%s: %s\n", node.Id.Get(), out)
|
||||
}
|
||||
|
||||
return returnErr
|
||||
|
||||
@@ -37,7 +37,7 @@ func CobraRunE(cmd *cobra.Command, args []string) error {
|
||||
var powerCmd power.PowerOnInterface
|
||||
|
||||
if node.IpmiIpaddr.Get() == "" {
|
||||
wwlog.Printf(wwlog.ERROR, "%s: No IPMI IP address\n", node.HostName)
|
||||
wwlog.Printf(wwlog.ERROR, "%s: No IPMI IP address\n", node.Id.Get())
|
||||
continue
|
||||
}
|
||||
|
||||
@@ -53,12 +53,12 @@ func CobraRunE(cmd *cobra.Command, args []string) error {
|
||||
out, err := powerCmd.PowerOn()
|
||||
|
||||
if err != nil {
|
||||
wwlog.Printf(wwlog.ERROR, "%s: %s\n", node.HostName, out)
|
||||
wwlog.Printf(wwlog.ERROR, "%s: %s\n", node.Id.Get(), out)
|
||||
returnErr = err
|
||||
continue
|
||||
}
|
||||
|
||||
wwlog.Printf(wwlog.INFO, "%s: %s\n", node.HostName, out)
|
||||
wwlog.Printf(wwlog.INFO, "%s: %s\n", node.Id.Get(), out)
|
||||
}
|
||||
|
||||
return returnErr
|
||||
|
||||
@@ -35,7 +35,7 @@ func CobraRunE(cmd *cobra.Command, args []string) error {
|
||||
for _, node := range nodeList {
|
||||
|
||||
if node.IpmiIpaddr.Get() == "" {
|
||||
wwlog.Printf(wwlog.ERROR, "%s: No IPMI IP address\n", node.HostName)
|
||||
wwlog.Printf(wwlog.ERROR, "%s: No IPMI IP address\n", node.Id.Get())
|
||||
continue
|
||||
}
|
||||
|
||||
@@ -49,12 +49,12 @@ func CobraRunE(cmd *cobra.Command, args []string) error {
|
||||
out, err := ipmiCmd.PowerStatus()
|
||||
|
||||
if err != nil {
|
||||
wwlog.Printf(wwlog.ERROR, "%s: %s\n", node.HostName, out)
|
||||
wwlog.Printf(wwlog.ERROR, "%s: %s\n", node.Id.Get(), out)
|
||||
returnErr = err
|
||||
continue
|
||||
}
|
||||
|
||||
wwlog.Printf(wwlog.INFO, "%s: %s\n", node.HostName, out)
|
||||
wwlog.Printf(wwlog.INFO, "%s: %s\n", node.Id.Get(), out)
|
||||
}
|
||||
|
||||
return returnErr
|
||||
|
||||
@@ -44,12 +44,22 @@ func CobraRunE(cmd *cobra.Command, args []string) error {
|
||||
}
|
||||
|
||||
for _, n := range nodes {
|
||||
wwlog.Printf(wwlog.VERBOSE, "Evaluating node: %s\n", n.Fqdn.Get())
|
||||
wwlog.Printf(wwlog.VERBOSE, "Evaluating node: %s\n", n.Id.Get())
|
||||
|
||||
if SetComment != "" {
|
||||
wwlog.Printf(wwlog.VERBOSE, "Node: %s, Setting comment to: %s\n", n.Id.Get(), SetComment)
|
||||
|
||||
n.Comment.Set(SetComment)
|
||||
err := nodeDB.NodeUpdate(n)
|
||||
if err != nil {
|
||||
wwlog.Printf(wwlog.ERROR, "%s\n", err)
|
||||
os.Exit(1)
|
||||
}
|
||||
}
|
||||
if SetVnfs != "" {
|
||||
wwlog.Printf(wwlog.VERBOSE, "Node: %s, Setting vnfs to: %s\n", n.Fqdn.Get(), SetVnfs)
|
||||
wwlog.Printf(wwlog.VERBOSE, "Node: %s, Setting vnfs to: %s\n", n.Id.Get(), SetVnfs)
|
||||
|
||||
n.Vnfs.SetNode(SetVnfs)
|
||||
n.Vnfs.Set(SetVnfs)
|
||||
err := nodeDB.NodeUpdate(n)
|
||||
if err != nil {
|
||||
wwlog.Printf(wwlog.ERROR, "%s\n", err)
|
||||
@@ -57,9 +67,9 @@ func CobraRunE(cmd *cobra.Command, args []string) error {
|
||||
}
|
||||
}
|
||||
if SetKernel != "" {
|
||||
wwlog.Printf(wwlog.VERBOSE, "Node: %s, Setting kernel to: %s\n", n.Fqdn.Get(), SetKernel)
|
||||
wwlog.Printf(wwlog.VERBOSE, "Node: %s, Setting kernel to: %s\n", n.Id.Get(), SetKernel)
|
||||
|
||||
n.KernelVersion.SetNode(SetKernel)
|
||||
n.KernelVersion.Set(SetKernel)
|
||||
err := nodeDB.NodeUpdate(n)
|
||||
if err != nil {
|
||||
wwlog.Printf(wwlog.ERROR, "%s\n", err)
|
||||
@@ -67,9 +77,9 @@ func CobraRunE(cmd *cobra.Command, args []string) error {
|
||||
}
|
||||
}
|
||||
if SetDomainName != "" {
|
||||
wwlog.Printf(wwlog.VERBOSE, "Node: %s, Setting domain name to: %s\n", n.Fqdn.Get(), SetDomainName)
|
||||
wwlog.Printf(wwlog.VERBOSE, "Node: %s, Setting domain name to: %s\n", n.Id.Get(), SetDomainName)
|
||||
|
||||
n.DomainName.SetNode(SetDomainName)
|
||||
n.DomainName.Set(SetDomainName)
|
||||
err := nodeDB.NodeUpdate(n)
|
||||
if err != nil {
|
||||
wwlog.Printf(wwlog.ERROR, "%s\n", err)
|
||||
@@ -77,9 +87,9 @@ func CobraRunE(cmd *cobra.Command, args []string) error {
|
||||
}
|
||||
}
|
||||
if SetIpxe != "" {
|
||||
wwlog.Printf(wwlog.VERBOSE, "Node: %s, Setting iPXE template to: %s\n", n.Fqdn.Get(), SetIpxe)
|
||||
wwlog.Printf(wwlog.VERBOSE, "Node: %s, Setting iPXE template to: %s\n", n.Id.Get(), SetIpxe)
|
||||
|
||||
n.Ipxe.SetNode(SetIpxe)
|
||||
n.Ipxe.Set(SetIpxe)
|
||||
err := nodeDB.NodeUpdate(n)
|
||||
if err != nil {
|
||||
wwlog.Printf(wwlog.ERROR, "%s\n", err)
|
||||
@@ -87,9 +97,9 @@ func CobraRunE(cmd *cobra.Command, args []string) error {
|
||||
}
|
||||
}
|
||||
if SetRuntimeOverlay != "" {
|
||||
wwlog.Printf(wwlog.VERBOSE, "Node: %s, Setting runtime overlay to: %s\n", n.Fqdn.Get(), SetRuntimeOverlay)
|
||||
wwlog.Printf(wwlog.VERBOSE, "Node: %s, Setting runtime overlay to: %s\n", n.Id.Get(), SetRuntimeOverlay)
|
||||
|
||||
n.RuntimeOverlay.SetNode(SetRuntimeOverlay)
|
||||
n.RuntimeOverlay.Set(SetRuntimeOverlay)
|
||||
err := nodeDB.NodeUpdate(n)
|
||||
if err != nil {
|
||||
wwlog.Printf(wwlog.ERROR, "%s\n", err)
|
||||
@@ -97,19 +107,9 @@ func CobraRunE(cmd *cobra.Command, args []string) error {
|
||||
}
|
||||
}
|
||||
if SetSystemOverlay != "" {
|
||||
wwlog.Printf(wwlog.VERBOSE, "Node: %s, Setting system overlay to: %s\n", n.Fqdn.Get(), SetSystemOverlay)
|
||||
wwlog.Printf(wwlog.VERBOSE, "Node: %s, Setting system overlay to: %s\n", n.Id.Get(), SetSystemOverlay)
|
||||
|
||||
n.SystemOverlay.SetNode(SetSystemOverlay)
|
||||
err := nodeDB.NodeUpdate(n)
|
||||
if err != nil {
|
||||
wwlog.Printf(wwlog.ERROR, "%s\n", err)
|
||||
os.Exit(1)
|
||||
}
|
||||
}
|
||||
if SetHostname != "" {
|
||||
wwlog.Printf(wwlog.VERBOSE, "Node: %s, Setting hostname to: %s\n", n.Fqdn.Get(), SetHostname)
|
||||
|
||||
n.HostName.SetNode(SetHostname)
|
||||
n.SystemOverlay.Set(SetSystemOverlay)
|
||||
err := nodeDB.NodeUpdate(n)
|
||||
if err != nil {
|
||||
wwlog.Printf(wwlog.ERROR, "%s\n", err)
|
||||
@@ -117,9 +117,9 @@ func CobraRunE(cmd *cobra.Command, args []string) error {
|
||||
}
|
||||
}
|
||||
if SetIpmiIpaddr != "" {
|
||||
wwlog.Printf(wwlog.VERBOSE, "Node: %s, Setting IPMI IP address to: %s\n", n.Fqdn.Get(), SetIpmiIpaddr)
|
||||
wwlog.Printf(wwlog.VERBOSE, "Node: %s, Setting IPMI IP address to: %s\n", n.Id.Get(), SetIpmiIpaddr)
|
||||
|
||||
n.IpmiIpaddr.SetNode(SetIpmiIpaddr)
|
||||
n.IpmiIpaddr.Set(SetIpmiIpaddr)
|
||||
err := nodeDB.NodeUpdate(n)
|
||||
if err != nil {
|
||||
wwlog.Printf(wwlog.ERROR, "%s\n", err)
|
||||
@@ -127,9 +127,9 @@ func CobraRunE(cmd *cobra.Command, args []string) error {
|
||||
}
|
||||
}
|
||||
if SetIpmiNetmask != "" {
|
||||
wwlog.Printf(wwlog.VERBOSE, "Node: %s, Setting IPMI netmask to: %s\n", n.Fqdn.Get(), SetIpmiNetmask)
|
||||
wwlog.Printf(wwlog.VERBOSE, "Node: %s, Setting IPMI netmask to: %s\n", n.Id.Get(), SetIpmiNetmask)
|
||||
|
||||
n.IpmiNetmask.SetNode(SetIpmiNetmask)
|
||||
n.IpmiNetmask.Set(SetIpmiNetmask)
|
||||
err := nodeDB.NodeUpdate(n)
|
||||
if err != nil {
|
||||
wwlog.Printf(wwlog.ERROR, "%s\n", err)
|
||||
@@ -137,9 +137,9 @@ func CobraRunE(cmd *cobra.Command, args []string) error {
|
||||
}
|
||||
}
|
||||
if SetIpmiUsername != "" {
|
||||
wwlog.Printf(wwlog.VERBOSE, "Node: %s, Setting IPMI IP username to: %s\n", n.Fqdn.Get(), SetIpmiUsername)
|
||||
wwlog.Printf(wwlog.VERBOSE, "Node: %s, Setting IPMI IP username to: %s\n", n.Id.Get(), SetIpmiUsername)
|
||||
|
||||
n.IpmiUserName.SetNode(SetIpmiUsername)
|
||||
n.IpmiUserName.Set(SetIpmiUsername)
|
||||
err := nodeDB.NodeUpdate(n)
|
||||
if err != nil {
|
||||
wwlog.Printf(wwlog.ERROR, "%s\n", err)
|
||||
@@ -147,9 +147,9 @@ func CobraRunE(cmd *cobra.Command, args []string) error {
|
||||
}
|
||||
}
|
||||
if SetIpmiPassword != "" {
|
||||
wwlog.Printf(wwlog.VERBOSE, "Node: %s, Setting IPMI IP password to: %s\n", n.Fqdn.Get(), SetIpmiPassword)
|
||||
wwlog.Printf(wwlog.VERBOSE, "Node: %s, Setting IPMI IP password to: %s\n", n.Id.Get(), SetIpmiPassword)
|
||||
|
||||
n.IpmiPassword.SetNode(SetIpmiPassword)
|
||||
n.IpmiPassword.Set(SetIpmiPassword)
|
||||
err := nodeDB.NodeUpdate(n)
|
||||
if err != nil {
|
||||
wwlog.Printf(wwlog.ERROR, "%s\n", err)
|
||||
@@ -159,7 +159,7 @@ func CobraRunE(cmd *cobra.Command, args []string) error {
|
||||
|
||||
if len(SetAddProfile) > 0 {
|
||||
for _, p := range SetAddProfile {
|
||||
wwlog.Printf(wwlog.VERBOSE, "Node: %s, adding profile to '%s'\n", n.Fqdn, p)
|
||||
wwlog.Printf(wwlog.VERBOSE, "Node: %s, adding profile to '%s'\n", n.Id.Get(), p)
|
||||
n.Profiles = util.SliceAddUniqueElement(n.Profiles, p)
|
||||
}
|
||||
err := nodeDB.NodeUpdate(n)
|
||||
@@ -170,7 +170,7 @@ func CobraRunE(cmd *cobra.Command, args []string) error {
|
||||
}
|
||||
if len(SetDelProfile) > 0 {
|
||||
for _, p := range SetDelProfile {
|
||||
wwlog.Printf(wwlog.VERBOSE, "Node: %s, deleting profile from '%s'\n", n.Fqdn, p)
|
||||
wwlog.Printf(wwlog.VERBOSE, "Node: %s, deleting profile from '%s'\n", n.Id.Get(), p)
|
||||
n.Profiles = util.SliceRemoveElement(n.Profiles, p)
|
||||
}
|
||||
err := nodeDB.NodeUpdate(n)
|
||||
@@ -185,7 +185,7 @@ func CobraRunE(cmd *cobra.Command, args []string) error {
|
||||
wwlog.Printf(wwlog.ERROR, "You must include the '--netdev' option\n")
|
||||
os.Exit(1)
|
||||
}
|
||||
wwlog.Printf(wwlog.VERBOSE, "Node: %s, Deleting network device: %s\n", n.Fqdn, SetNetDev)
|
||||
wwlog.Printf(wwlog.VERBOSE, "Node: %s, Deleting network device: %s\n", n.Id.Get(), SetNetDev)
|
||||
|
||||
if _, ok := n.NetDevs[SetNetDev]; !ok {
|
||||
wwlog.Printf(wwlog.ERROR, "Network Device doesn't exist: %s\n", SetNetDev)
|
||||
@@ -209,9 +209,9 @@ func CobraRunE(cmd *cobra.Command, args []string) error {
|
||||
wwlog.Printf(wwlog.ERROR, "Network Device doesn't exist: %s\n", SetNetDev)
|
||||
os.Exit(1)
|
||||
}
|
||||
wwlog.Printf(wwlog.VERBOSE, "Node: %s:%s, Setting Ipaddr to: %s\n", n.Fqdn, SetNetDev, SetIpaddr)
|
||||
wwlog.Printf(wwlog.VERBOSE, "Node: %s:%s, Setting Ipaddr to: %s\n", n.Id.Get(), SetNetDev, SetIpaddr)
|
||||
|
||||
n.NetDevs[SetNetDev].Ipaddr = SetIpaddr
|
||||
n.NetDevs[SetNetDev].Ipaddr.Set(SetIpaddr)
|
||||
err := nodeDB.NodeUpdate(n)
|
||||
if err != nil {
|
||||
wwlog.Printf(wwlog.ERROR, "%s\n", err)
|
||||
@@ -228,9 +228,9 @@ func CobraRunE(cmd *cobra.Command, args []string) error {
|
||||
wwlog.Printf(wwlog.ERROR, "Network Device doesn't exist: %s\n", SetNetDev)
|
||||
os.Exit(1)
|
||||
}
|
||||
wwlog.Printf(wwlog.VERBOSE, "Node: %s:%s, Setting netmask to: %s\n", n.Fqdn, SetNetDev, SetNetmask)
|
||||
wwlog.Printf(wwlog.VERBOSE, "Node: %s:%s, Setting netmask to: %s\n", n.Id.Get(), SetNetDev, SetNetmask)
|
||||
|
||||
n.NetDevs[SetNetDev].Netmask = SetNetmask
|
||||
n.NetDevs[SetNetDev].Netmask.Set(SetNetmask)
|
||||
err := nodeDB.NodeUpdate(n)
|
||||
if err != nil {
|
||||
wwlog.Printf(wwlog.ERROR, "%s\n", err)
|
||||
@@ -247,9 +247,9 @@ func CobraRunE(cmd *cobra.Command, args []string) error {
|
||||
wwlog.Printf(wwlog.ERROR, "Network Device doesn't exist: %s\n", SetNetDev)
|
||||
os.Exit(1)
|
||||
}
|
||||
wwlog.Printf(wwlog.VERBOSE, "Node: %s:%s, Setting gateway to: %s\n", n.Fqdn, SetNetDev, SetGateway)
|
||||
wwlog.Printf(wwlog.VERBOSE, "Node: %s:%s, Setting gateway to: %s\n", n.Id.Get(), SetNetDev, SetGateway)
|
||||
|
||||
n.NetDevs[SetNetDev].Gateway = SetGateway
|
||||
n.NetDevs[SetNetDev].Gateway.Set(SetGateway)
|
||||
err := nodeDB.NodeUpdate(n)
|
||||
if err != nil {
|
||||
wwlog.Printf(wwlog.ERROR, "%s\n", err)
|
||||
@@ -266,9 +266,9 @@ func CobraRunE(cmd *cobra.Command, args []string) error {
|
||||
wwlog.Printf(wwlog.ERROR, "Network Device doesn't exist: %s\n", SetNetDev)
|
||||
os.Exit(1)
|
||||
}
|
||||
wwlog.Printf(wwlog.VERBOSE, "Node: %s:%s, Setting HW address to: %s\n", n.Fqdn, SetNetDev, SetHwaddr)
|
||||
wwlog.Printf(wwlog.VERBOSE, "Node: %s:%s, Setting HW address to: %s\n", n.Id.Get(), SetNetDev, SetHwaddr)
|
||||
|
||||
n.NetDevs[SetNetDev].Hwaddr = SetHwaddr
|
||||
n.NetDevs[SetNetDev].Hwaddr.Set(SetHwaddr)
|
||||
err := nodeDB.NodeUpdate(n)
|
||||
if err != nil {
|
||||
wwlog.Printf(wwlog.ERROR, "%s\n", err)
|
||||
|
||||
@@ -9,6 +9,7 @@ var (
|
||||
Long: "Set node configurations ",
|
||||
RunE: CobraRunE,
|
||||
}
|
||||
SetComment string
|
||||
SetVnfs string
|
||||
SetKernel string
|
||||
SetNetDev string
|
||||
@@ -21,7 +22,6 @@ var (
|
||||
SetIpxe string
|
||||
SetRuntimeOverlay string
|
||||
SetSystemOverlay string
|
||||
SetHostname string
|
||||
SetIpmiIpaddr string
|
||||
SetIpmiNetmask string
|
||||
SetIpmiUsername string
|
||||
@@ -33,13 +33,13 @@ var (
|
||||
)
|
||||
|
||||
func init() {
|
||||
baseCmd.PersistentFlags().StringVarP(&SetComment, "comment", "C", "", "Set a comment for this node")
|
||||
baseCmd.PersistentFlags().StringVarP(&SetVnfs, "vnfs", "V", "", "Set node Virtual Node File System (VNFS)")
|
||||
baseCmd.PersistentFlags().StringVarP(&SetKernel, "kernel", "K", "", "Set Kernel version for nodes")
|
||||
baseCmd.PersistentFlags().StringVarP(&SetDomainName, "domain", "D", "", "Set the node's domain name")
|
||||
baseCmd.PersistentFlags().StringVarP(&SetIpxe, "ipxe", "P", "", "Set the node's iPXE template name")
|
||||
baseCmd.PersistentFlags().StringVarP(&SetRuntimeOverlay, "runtime", "R", "", "Set the node's runtime overlay")
|
||||
baseCmd.PersistentFlags().StringVarP(&SetSystemOverlay, "system", "S", "", "Set the node's system overlay")
|
||||
baseCmd.PersistentFlags().StringVarP(&SetHostname, "hostname", "N", "", "Set the node's hostname")
|
||||
baseCmd.PersistentFlags().StringVar(&SetIpmiIpaddr, "ipmi", "", "Set the node's IPMI IP address")
|
||||
baseCmd.PersistentFlags().StringVar(&SetIpmiNetmask, "ipminetmask", "", "Set the node's IPMI netmask")
|
||||
baseCmd.PersistentFlags().StringVar(&SetIpmiUsername, "ipmiuser", "", "Set the node's IPMI username")
|
||||
@@ -48,12 +48,12 @@ func init() {
|
||||
baseCmd.PersistentFlags().StringSliceVarP(&SetAddProfile, "addprofile", "p", []string{}, "Add Profile(s) to node")
|
||||
baseCmd.PersistentFlags().StringSliceVarP(&SetDelProfile, "delprofile", "r", []string{}, "Remove Profile(s) to node")
|
||||
|
||||
baseCmd.PersistentFlags().StringVarP(&SetNetDev, "netdev", "n", "", "Define the network device to configure")
|
||||
baseCmd.PersistentFlags().StringVarP(&SetNetDev, "netdev", "n", "eth0", "Define the network device to configure")
|
||||
baseCmd.PersistentFlags().StringVarP(&SetIpaddr, "ipaddr", "I", "", "Set the node's network device IP address")
|
||||
baseCmd.PersistentFlags().StringVarP(&SetNetmask, "netmask", "M", "", "Set the node's network device netmask")
|
||||
baseCmd.PersistentFlags().StringVarP(&SetGateway, "gateway", "G", "", "Set the node's network device gateway")
|
||||
baseCmd.PersistentFlags().StringVarP(&SetHwaddr, "hwaddr", "H", "", "Set the node's network device HW address")
|
||||
baseCmd.PersistentFlags().BoolVar(&SetNetDevDel, "delete", false, "Delete the node's network device")
|
||||
baseCmd.PersistentFlags().BoolVar(&SetNetDevDel, "netdel", false, "Delete the node's network device")
|
||||
baseCmd.PersistentFlags().BoolVarP(&SetNodeAll, "all", "a", false, "Set all nodes")
|
||||
|
||||
baseCmd.PersistentFlags().BoolVarP(&SetYes, "yes", "y", false, "Set 'yes' to all questions asked")
|
||||
|
||||
@@ -15,7 +15,7 @@ func CobraRunE(cmd *cobra.Command, args []string) error {
|
||||
}
|
||||
|
||||
for _, p := range args {
|
||||
err = nodeDB.AddProfile(p)
|
||||
_, err := nodeDB.AddProfile(p)
|
||||
if err != nil {
|
||||
wwlog.Printf(wwlog.ERROR, "%s\n", err)
|
||||
os.Exit(1)
|
||||
@@ -25,4 +25,4 @@ func CobraRunE(cmd *cobra.Command, args []string) error {
|
||||
nodeDB.Persist()
|
||||
|
||||
return nil
|
||||
}
|
||||
}
|
||||
|
||||
@@ -15,7 +15,6 @@ func CobraRunE(cmd *cobra.Command, args []string) error {
|
||||
var numNodes int
|
||||
var numGroups int
|
||||
|
||||
|
||||
nodeDB, err := node.New()
|
||||
if err != nil {
|
||||
wwlog.Printf(wwlog.ERROR, "Failed to open node database: %s\n", err)
|
||||
@@ -27,12 +26,6 @@ func CobraRunE(cmd *cobra.Command, args []string) error {
|
||||
wwlog.Printf(wwlog.ERROR, "Could not load all nodes: %s\n", err)
|
||||
os.Exit(1)
|
||||
}
|
||||
groups, err := nodeDB.FindAllGroups()
|
||||
if err != nil {
|
||||
wwlog.Printf(wwlog.ERROR, "Could not load all groups: %s\n", err)
|
||||
os.Exit(1)
|
||||
}
|
||||
|
||||
|
||||
for _, p := range args {
|
||||
err := nodeDB.DelProfile(p)
|
||||
@@ -44,22 +37,12 @@ func CobraRunE(cmd *cobra.Command, args []string) error {
|
||||
for _, np := range n.Profiles {
|
||||
if np == p {
|
||||
numNodes++
|
||||
wwlog.Printf(wwlog.VERBOSE, "Removing profile from node %s: %s\n", n.Fqdn.Get(), p)
|
||||
wwlog.Printf(wwlog.VERBOSE, "Removing profile from node %s: %s\n", n.Id.Get(), p)
|
||||
n.Profiles = util.SliceRemoveElement(n.Profiles, p)
|
||||
nodeDB.NodeUpdate(n)
|
||||
}
|
||||
}
|
||||
}
|
||||
for _, g := range groups {
|
||||
for _, np := range g.Profiles {
|
||||
if np == p {
|
||||
numGroups++
|
||||
wwlog.Printf(wwlog.VERBOSE, "Removing profile from group %s: %s\n", g.Id, p)
|
||||
g.Profiles = util.SliceRemoveElement(g.Profiles, p)
|
||||
nodeDB.GroupUpdate(g)
|
||||
}
|
||||
}
|
||||
}
|
||||
count++
|
||||
}
|
||||
|
||||
|
||||
@@ -6,7 +6,6 @@ import (
|
||||
"github.com/hpcng/warewulf/internal/pkg/wwlog"
|
||||
"github.com/spf13/cobra"
|
||||
"os"
|
||||
"reflect"
|
||||
)
|
||||
|
||||
func CobraRunE(cmd *cobra.Command, args []string) error {
|
||||
@@ -23,14 +22,30 @@ func CobraRunE(cmd *cobra.Command, args []string) error {
|
||||
os.Exit(1)
|
||||
}
|
||||
|
||||
for _, group := range profiles {
|
||||
v := reflect.ValueOf(group)
|
||||
typeOfS := v.Type()
|
||||
for _, node := range profiles {
|
||||
fmt.Printf("################################################################################\n")
|
||||
for i := 0; i< v.NumField(); i++ {
|
||||
fmt.Printf("%-25s %s = %v\n", group.Id, typeOfS.Field(i).Name, v.Field(i).Interface())
|
||||
fmt.Printf("%-20s %-18s: %s\n", node.Id.Get(), "Id", node.Id.Print())
|
||||
fmt.Printf("%-20s %-18s: %s\n", node.Id.Get(), "Comment", node.Comment.Print())
|
||||
|
||||
fmt.Printf("%-20s %-18s: %s\n", node.Id.Get(), "Vnfs", node.Vnfs.Print())
|
||||
fmt.Printf("%-20s %-18s: %s\n", node.Id.Get(), "KernelVersion", node.KernelVersion.Print())
|
||||
fmt.Printf("%-20s %-18s: %s\n", node.Id.Get(), "KernelArgs", node.KernelArgs.Print())
|
||||
fmt.Printf("%-20s %-18s: %s\n", node.Id.Get(), "RuntimeOverlay", node.RuntimeOverlay.Print())
|
||||
fmt.Printf("%-20s %-18s: %s\n", node.Id.Get(), "SystemOverlay", node.SystemOverlay.Print())
|
||||
fmt.Printf("%-20s %-18s: %s\n", node.Id.Get(), "Ipxe", node.Ipxe.Print())
|
||||
fmt.Printf("%-20s %-18s: %s\n", node.Id.Get(), "IpmiIpaddr", node.IpmiIpaddr.Print())
|
||||
fmt.Printf("%-20s %-18s: %s\n", node.Id.Get(), "IpmiNetmask", node.IpmiNetmask.Print())
|
||||
fmt.Printf("%-20s %-18s: %s\n", node.Id.Get(), "IpmiUserName", node.IpmiUserName.Print())
|
||||
|
||||
for name, netdev := range node.NetDevs {
|
||||
fmt.Printf("%-20s %-18s: %s\n", node.Id.Get(), name+":IPADDR", netdev.Ipaddr.Get())
|
||||
fmt.Printf("%-20s %-18s: %s\n", node.Id.Get(), name+":NETMASK", netdev.Netmask.Get())
|
||||
fmt.Printf("%-20s %-18s: %s\n", node.Id.Get(), name+":GATEWAY", netdev.Gateway.Get())
|
||||
fmt.Printf("%-20s %-18s: %s\n", node.Id.Get(), name+":HWADDR", netdev.Hwaddr.Get())
|
||||
fmt.Printf("%-20s %-18s: %s\n", node.Id.Get(), name+":TYPE", netdev.Hwaddr.Get())
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
}
|
||||
|
||||
@@ -11,7 +11,7 @@ import (
|
||||
|
||||
func CobraRunE(cmd *cobra.Command, args []string) error {
|
||||
var err error
|
||||
var profiles []node.ProfileInfo
|
||||
var profiles []node.NodeInfo
|
||||
|
||||
nodeDB, err := node.New()
|
||||
if err != nil {
|
||||
@@ -19,29 +19,18 @@ func CobraRunE(cmd *cobra.Command, args []string) error {
|
||||
os.Exit(1)
|
||||
}
|
||||
|
||||
if err != nil {
|
||||
wwlog.Printf(wwlog.ERROR, "Cloud not get nodeList: %s\n", err)
|
||||
os.Exit(1)
|
||||
}
|
||||
|
||||
if len(args) == 0 {
|
||||
args = append(args, "default")
|
||||
}
|
||||
|
||||
if SetAll == true {
|
||||
var tmp []node.ProfileInfo
|
||||
tmp, err = nodeDB.FindAllProfiles()
|
||||
profiles, err = nodeDB.FindAllProfiles()
|
||||
if err != nil {
|
||||
wwlog.Printf(wwlog.ERROR, "%s\n", err)
|
||||
os.Exit(1)
|
||||
}
|
||||
|
||||
for _, p := range tmp {
|
||||
profiles = append(profiles, p)
|
||||
}
|
||||
|
||||
} else {
|
||||
var tmp []node.ProfileInfo
|
||||
var tmp []node.NodeInfo
|
||||
tmp, err = nodeDB.FindAllProfiles()
|
||||
if err != nil {
|
||||
wwlog.Printf(wwlog.ERROR, "%s\n", err)
|
||||
@@ -50,7 +39,7 @@ func CobraRunE(cmd *cobra.Command, args []string) error {
|
||||
|
||||
for _, a := range args {
|
||||
for _, p := range tmp {
|
||||
if p.Id == a {
|
||||
if p.Id.Get() == a {
|
||||
profiles = append(profiles, p)
|
||||
}
|
||||
}
|
||||
@@ -59,10 +48,20 @@ func CobraRunE(cmd *cobra.Command, args []string) error {
|
||||
|
||||
for _, p := range profiles {
|
||||
|
||||
if SetComment != "" {
|
||||
wwlog.Printf(wwlog.VERBOSE, "Profile: %s, Setting comment to: %s\n", p.Id, SetComment)
|
||||
|
||||
p.Comment.Set(SetComment)
|
||||
err := nodeDB.ProfileUpdate(p)
|
||||
if err != nil {
|
||||
wwlog.Printf(wwlog.ERROR, "%s\n", err)
|
||||
os.Exit(1)
|
||||
}
|
||||
}
|
||||
if SetDomainName != "" {
|
||||
wwlog.Printf(wwlog.VERBOSE, "Profile: %s, Setting domain name to: %s\n", p.Id, SetDomainName)
|
||||
|
||||
p.DomainName = SetDomainName
|
||||
p.DomainName.Set(SetDomainName)
|
||||
err := nodeDB.ProfileUpdate(p)
|
||||
if err != nil {
|
||||
wwlog.Printf(wwlog.ERROR, "%s\n", err)
|
||||
@@ -72,7 +71,7 @@ func CobraRunE(cmd *cobra.Command, args []string) error {
|
||||
if SetVnfs != "" {
|
||||
wwlog.Printf(wwlog.VERBOSE, "Profile: %s, Setting VNFS to: %s\n", p.Id, SetVnfs)
|
||||
|
||||
p.Vnfs = SetVnfs
|
||||
p.Vnfs.Set(SetVnfs)
|
||||
err := nodeDB.ProfileUpdate(p)
|
||||
if err != nil {
|
||||
wwlog.Printf(wwlog.ERROR, "%s\n", err)
|
||||
@@ -82,7 +81,7 @@ func CobraRunE(cmd *cobra.Command, args []string) error {
|
||||
if SetKernel != "" {
|
||||
wwlog.Printf(wwlog.VERBOSE, "Profile: %s, Setting Kernel version to: %s\n", p.Id, SetKernel)
|
||||
|
||||
p.KernelVersion = SetKernel
|
||||
p.KernelVersion.Set(SetKernel)
|
||||
err := nodeDB.ProfileUpdate(p)
|
||||
if err != nil {
|
||||
wwlog.Printf(wwlog.ERROR, "%s\n", err)
|
||||
@@ -92,7 +91,7 @@ func CobraRunE(cmd *cobra.Command, args []string) error {
|
||||
if SetIpxe != "" {
|
||||
wwlog.Printf(wwlog.VERBOSE, "Profile: %s, Setting iPXE template to: %s\n", p.Id, SetIpxe)
|
||||
|
||||
p.Ipxe = SetIpxe
|
||||
p.Ipxe.Set(SetIpxe)
|
||||
err := nodeDB.ProfileUpdate(p)
|
||||
if err != nil {
|
||||
wwlog.Printf(wwlog.ERROR, "%s\n", err)
|
||||
@@ -102,7 +101,7 @@ func CobraRunE(cmd *cobra.Command, args []string) error {
|
||||
if SetRuntimeOverlay != "" {
|
||||
wwlog.Printf(wwlog.VERBOSE, "Profile: %s, Setting runtime overlay to: %s\n", p.Id, SetRuntimeOverlay)
|
||||
|
||||
p.RuntimeOverlay = SetRuntimeOverlay
|
||||
p.RuntimeOverlay.Set(SetRuntimeOverlay)
|
||||
err := nodeDB.ProfileUpdate(p)
|
||||
if err != nil {
|
||||
wwlog.Printf(wwlog.ERROR, "%s\n", err)
|
||||
@@ -112,7 +111,7 @@ func CobraRunE(cmd *cobra.Command, args []string) error {
|
||||
if SetSystemOverlay != "" {
|
||||
wwlog.Printf(wwlog.VERBOSE, "Profile: %s, Setting system overlay to: %s\n", p.Id, SetSystemOverlay)
|
||||
|
||||
p.SystemOverlay = SetSystemOverlay
|
||||
p.SystemOverlay.Set(SetSystemOverlay)
|
||||
err := nodeDB.ProfileUpdate(p)
|
||||
if err != nil {
|
||||
wwlog.Printf(wwlog.ERROR, "%s\n", err)
|
||||
@@ -122,7 +121,7 @@ func CobraRunE(cmd *cobra.Command, args []string) error {
|
||||
if SetIpmiNetmask != "" {
|
||||
wwlog.Printf(wwlog.VERBOSE, "Profile: %s, Setting IPMI username to: %s\n", p.Id, SetIpmiNetmask)
|
||||
|
||||
p.IpmiNetmask = SetIpmiNetmask
|
||||
p.IpmiNetmask.Set(SetIpmiNetmask)
|
||||
err := nodeDB.ProfileUpdate(p)
|
||||
if err != nil {
|
||||
wwlog.Printf(wwlog.ERROR, "%s\n", err)
|
||||
@@ -132,7 +131,7 @@ func CobraRunE(cmd *cobra.Command, args []string) error {
|
||||
if SetIpmiUsername != "" {
|
||||
wwlog.Printf(wwlog.VERBOSE, "Profile: %s, Setting IPMI username to: %s\n", p.Id, SetIpmiUsername)
|
||||
|
||||
p.IpmiUserName = SetIpmiUsername
|
||||
p.IpmiUserName.Set(SetIpmiUsername)
|
||||
err := nodeDB.ProfileUpdate(p)
|
||||
if err != nil {
|
||||
wwlog.Printf(wwlog.ERROR, "%s\n", err)
|
||||
@@ -142,7 +141,7 @@ func CobraRunE(cmd *cobra.Command, args []string) error {
|
||||
if SetIpmiPassword != "" {
|
||||
wwlog.Printf(wwlog.VERBOSE, "Profile: %s, Setting IPMI username to: %s\n", p.Id, SetIpmiPassword)
|
||||
|
||||
p.IpmiPassword = SetIpmiPassword
|
||||
p.IpmiPassword.Set(SetIpmiPassword)
|
||||
err := nodeDB.ProfileUpdate(p)
|
||||
if err != nil {
|
||||
wwlog.Printf(wwlog.ERROR, "%s\n", err)
|
||||
|
||||
@@ -10,6 +10,7 @@ var (
|
||||
RunE: CobraRunE,
|
||||
}
|
||||
SetAll bool
|
||||
SetComment string
|
||||
SetVnfs string
|
||||
SetKernel string
|
||||
SetDomainName string
|
||||
@@ -22,6 +23,7 @@ var (
|
||||
)
|
||||
|
||||
func init() {
|
||||
baseCmd.PersistentFlags().StringVarP(&SetComment, "comment", "C", "", "Set a comment for this node")
|
||||
baseCmd.PersistentFlags().StringVarP(&SetVnfs, "vnfs", "V", "", "Set node Virtual Node File System (VNFS)")
|
||||
baseCmd.PersistentFlags().StringVarP(&SetKernel, "kernel", "K", "", "Set Kernel version for nodes")
|
||||
baseCmd.PersistentFlags().StringVarP(&SetDomainName, "domain", "D", "", "Set the node's domain name")
|
||||
|
||||
@@ -42,11 +42,11 @@ func CobraRunE(cmd *cobra.Command, args []string) error {
|
||||
vnfs_good = true
|
||||
} else {
|
||||
status = false
|
||||
wwlog.Printf(wwlog.VERBOSE, "VNFS not found: %s, %s\n", node.Fqdn.Get(), v.Source)
|
||||
wwlog.Printf(wwlog.VERBOSE, "VNFS not found: %s, %s\n", node.Id.Get(), v.Source)
|
||||
}
|
||||
} else {
|
||||
status = false
|
||||
wwlog.Printf(wwlog.VERBOSE, "Node Kernel not defined: %s\n", node.Fqdn.Get())
|
||||
wwlog.Printf(wwlog.VERBOSE, "Node Kernel not defined: %s\n", node.Id.Get())
|
||||
}
|
||||
|
||||
if node.KernelVersion.Get() != "" {
|
||||
@@ -54,44 +54,44 @@ func CobraRunE(cmd *cobra.Command, args []string) error {
|
||||
kernel_good = true
|
||||
} else {
|
||||
status = false
|
||||
wwlog.Printf(wwlog.VERBOSE, "Node Kernel not found: %s, %s\n", node.Fqdn.Get(), node.KernelVersion.Get())
|
||||
wwlog.Printf(wwlog.VERBOSE, "Node Kernel not found: %s, %s\n", node.Id.Get(), node.KernelVersion.Get())
|
||||
}
|
||||
if util.IsFile(config.KmodsImage(node.KernelVersion.Get())) == true {
|
||||
kmods_good = true
|
||||
} else {
|
||||
status = false
|
||||
wwlog.Printf(wwlog.VERBOSE, "Node Kmods not found: %s, %s\n", node.Fqdn.Get(), node.KernelVersion.Get())
|
||||
wwlog.Printf(wwlog.VERBOSE, "Node Kmods not found: %s, %s\n", node.Id.Get(), node.KernelVersion.Get())
|
||||
}
|
||||
} else {
|
||||
status = false
|
||||
wwlog.Printf(wwlog.VERBOSE, "Node Kernel version not defined: %s\n", node.Fqdn.Get())
|
||||
wwlog.Printf(wwlog.VERBOSE, "Node Kernel version not defined: %s\n", node.Id.Get())
|
||||
}
|
||||
|
||||
if node.SystemOverlay.Get() != "" {
|
||||
if util.IsFile(config.SystemOverlayImage(node.Fqdn.Get())) == true {
|
||||
if util.IsFile(config.SystemOverlayImage(node.Id.Get())) == true {
|
||||
systemo_good = true
|
||||
} else {
|
||||
status = false
|
||||
wwlog.Printf(wwlog.VERBOSE, "System Overlay not found: %s\n", config.SystemOverlayImage(node.Fqdn.Get()))
|
||||
wwlog.Printf(wwlog.VERBOSE, "System Overlay not found: %s\n", config.SystemOverlayImage(node.Id.Get()))
|
||||
}
|
||||
} else {
|
||||
status = false
|
||||
wwlog.Printf(wwlog.VERBOSE, "System Overlay not defined: %s\n", node.Fqdn.Get())
|
||||
wwlog.Printf(wwlog.VERBOSE, "System Overlay not defined: %s\n", node.Id.Get())
|
||||
}
|
||||
|
||||
if node.RuntimeOverlay.Get() != "" {
|
||||
if util.IsFile(config.RuntimeOverlayImage(node.Fqdn.Get())) == true {
|
||||
if util.IsFile(config.RuntimeOverlayImage(node.Id.Get())) == true {
|
||||
runtimeo_good = true
|
||||
} else {
|
||||
status = false
|
||||
wwlog.Printf(wwlog.VERBOSE, "Runtime Overlay not found: %s\n", config.RuntimeOverlaySource(node.Fqdn.Get()))
|
||||
wwlog.Printf(wwlog.VERBOSE, "Runtime Overlay not found: %s\n", config.RuntimeOverlaySource(node.Id.Get()))
|
||||
}
|
||||
} else {
|
||||
status = false
|
||||
wwlog.Printf(wwlog.VERBOSE, "Runtime Overlay not defined: %s\n", node.Fqdn.Get())
|
||||
wwlog.Printf(wwlog.VERBOSE, "Runtime Overlay not defined: %s\n", node.Id.Get())
|
||||
}
|
||||
|
||||
fmt.Printf("%-25s %-10t %-6t %-6t %-6t %-6t %-6t\n", node.Fqdn.Get(), status, vnfs_good, kernel_good, kmods_good, systemo_good, runtimeo_good)
|
||||
fmt.Printf("%-25s %-10t %-6t %-6t %-6t %-6t %-6t\n", node.Id.Get(), status, vnfs_good, kernel_good, kmods_good, systemo_good, runtimeo_good)
|
||||
}
|
||||
|
||||
return nil
|
||||
|
||||
@@ -1,14 +1,11 @@
|
||||
package wwctl
|
||||
|
||||
import (
|
||||
"github.com/hpcng/warewulf/internal/app/wwctl/controller"
|
||||
"github.com/hpcng/warewulf/internal/app/wwctl/group"
|
||||
"github.com/hpcng/warewulf/internal/app/wwctl/kernel"
|
||||
"github.com/hpcng/warewulf/internal/app/wwctl/node"
|
||||
"github.com/hpcng/warewulf/internal/app/wwctl/overlay"
|
||||
"github.com/hpcng/warewulf/internal/app/wwctl/profile"
|
||||
"github.com/hpcng/warewulf/internal/app/wwctl/ready"
|
||||
"github.com/hpcng/warewulf/internal/app/wwctl/service"
|
||||
"github.com/hpcng/warewulf/internal/app/wwctl/vnfs"
|
||||
|
||||
"github.com/hpcng/warewulf/internal/pkg/wwlog"
|
||||
@@ -33,13 +30,13 @@ func init() {
|
||||
//rootCmd.AddCommand(build.GetCommand())
|
||||
|
||||
rootCmd.AddCommand(overlay.GetCommand())
|
||||
rootCmd.AddCommand(controller.GetCommand())
|
||||
// rootCmd.AddCommand(controller.GetCommand())
|
||||
rootCmd.AddCommand(vnfs.GetCommand())
|
||||
rootCmd.AddCommand(node.GetCommand())
|
||||
rootCmd.AddCommand(kernel.GetCommand())
|
||||
rootCmd.AddCommand(group.GetCommand())
|
||||
// rootCmd.AddCommand(group.GetCommand())
|
||||
rootCmd.AddCommand(profile.GetCommand())
|
||||
rootCmd.AddCommand(service.GetCommand())
|
||||
// rootCmd.AddCommand(service.GetCommand())
|
||||
rootCmd.AddCommand(ready.GetCommand())
|
||||
|
||||
}
|
||||
|
||||
@@ -7,6 +7,7 @@ import (
|
||||
"gopkg.in/yaml.v2"
|
||||
"io/ioutil"
|
||||
"regexp"
|
||||
"strings"
|
||||
)
|
||||
|
||||
func New() (nodeYaml, error) {
|
||||
@@ -30,142 +31,104 @@ func New() (nodeYaml, error) {
|
||||
func (self *nodeYaml) FindAllNodes() ([]NodeInfo, error) {
|
||||
var ret []NodeInfo
|
||||
|
||||
for controllername, controller := range self.Controllers {
|
||||
for groupname, group := range controller.NodeGroups {
|
||||
for nodename, node := range group.Nodes {
|
||||
var n NodeInfo
|
||||
var allProfiles []string
|
||||
for nodename, node := range self.Nodes {
|
||||
var n NodeInfo
|
||||
|
||||
if node.Disabled == true || group.Disabled == true {
|
||||
wwlog.Printf(wwlog.VERBOSE, "Skipping disabled node: %s/%s\n", groupname, nodename)
|
||||
continue
|
||||
n.NetDevs = make(map[string]*NetDevEntry)
|
||||
n.SystemOverlay.Set("default")
|
||||
n.RuntimeOverlay.Set("default")
|
||||
n.Ipxe.Set("default")
|
||||
|
||||
fullname := strings.SplitN(nodename, ".", 2)
|
||||
if len(fullname) > 1 {
|
||||
n.DomainName.Set(fullname[1])
|
||||
}
|
||||
|
||||
if len(node.Profiles) == 0 {
|
||||
n.Profiles = []string{"default"}
|
||||
} else {
|
||||
n.Profiles = node.Profiles
|
||||
}
|
||||
|
||||
n.Id.Set(nodename)
|
||||
n.Comment.Set(node.Comment)
|
||||
n.Vnfs.Set(node.Vnfs)
|
||||
n.KernelVersion.Set(node.KernelVersion)
|
||||
n.KernelArgs.Set(node.KernelArgs)
|
||||
n.DomainName.Set(node.DomainName)
|
||||
n.Ipxe.Set(node.Ipxe)
|
||||
n.IpmiIpaddr.Set(node.IpmiIpaddr)
|
||||
n.IpmiNetmask.Set(node.IpmiNetmask)
|
||||
n.IpmiUserName.Set(node.IpmiUserName)
|
||||
n.IpmiPassword.Set(node.IpmiPassword)
|
||||
n.SystemOverlay.Set(node.SystemOverlay)
|
||||
n.RuntimeOverlay.Set(node.RuntimeOverlay)
|
||||
|
||||
for devname, netdev := range node.NetDevs {
|
||||
if _, ok := n.NetDevs[devname]; !ok {
|
||||
var netdev NetDevEntry
|
||||
n.NetDevs[devname] = &netdev
|
||||
}
|
||||
|
||||
n.NetDevs[devname].Ipaddr.Set(netdev.Ipaddr)
|
||||
n.NetDevs[devname].Netmask.Set(netdev.Netmask)
|
||||
n.NetDevs[devname].Hwaddr.Set(netdev.Hwaddr)
|
||||
n.NetDevs[devname].Gateway.Set(netdev.Gateway)
|
||||
n.NetDevs[devname].Type.Set(netdev.Type)
|
||||
n.NetDevs[devname].Default.SetB(netdev.Default)
|
||||
}
|
||||
|
||||
for _, p := range n.Profiles {
|
||||
if _, ok := self.NodeProfiles[p]; !ok {
|
||||
wwlog.Printf(wwlog.WARN, "Profile not found for node '%s': %s\n", nodename, p)
|
||||
continue
|
||||
}
|
||||
|
||||
wwlog.Printf(wwlog.VERBOSE, "Merging profile into node: %s <- %s\n", nodename, p)
|
||||
|
||||
pstring := fmt.Sprintf("%s", p)
|
||||
|
||||
n.Comment.SetAlt(self.NodeProfiles[p].Comment, pstring)
|
||||
n.DomainName.SetAlt(self.NodeProfiles[p].DomainName, pstring)
|
||||
n.Vnfs.SetAlt(self.NodeProfiles[p].Vnfs, pstring)
|
||||
n.KernelVersion.SetAlt(self.NodeProfiles[p].KernelVersion, pstring)
|
||||
n.KernelArgs.SetAlt(self.NodeProfiles[p].KernelArgs, pstring)
|
||||
n.Ipxe.SetAlt(self.NodeProfiles[p].Ipxe, pstring)
|
||||
n.IpmiIpaddr.SetAlt(self.NodeProfiles[p].IpmiIpaddr, pstring)
|
||||
n.IpmiNetmask.SetAlt(self.NodeProfiles[p].IpmiNetmask, pstring)
|
||||
n.IpmiUserName.SetAlt(self.NodeProfiles[p].IpmiUserName, pstring)
|
||||
n.IpmiPassword.SetAlt(self.NodeProfiles[p].IpmiPassword, pstring)
|
||||
n.SystemOverlay.SetAlt(self.NodeProfiles[p].SystemOverlay, pstring)
|
||||
n.RuntimeOverlay.SetAlt(self.NodeProfiles[p].RuntimeOverlay, pstring)
|
||||
|
||||
for devname, netdev := range self.NodeProfiles[p].NetDevs {
|
||||
if _, ok := n.NetDevs[devname]; !ok {
|
||||
var netdev NetDevEntry
|
||||
n.NetDevs[devname] = &netdev
|
||||
}
|
||||
|
||||
n.Id.SetNode(nodename)
|
||||
n.Gid.SetNode(groupname)
|
||||
n.Cid.SetNode(controllername)
|
||||
n.HostName.SetNode(node.Hostname)
|
||||
n.IpmiIpaddr.SetNode(node.IpmiIpaddr)
|
||||
n.IpmiNetmask.SetNode(node.IpmiNetmask)
|
||||
n.DomainName.SetNode(node.DomainName)
|
||||
n.Vnfs.SetNode(node.Vnfs)
|
||||
n.KernelVersion.SetNode(node.KernelVersion)
|
||||
n.KernelArgs.SetNode(node.KernelArgs)
|
||||
n.Ipxe.SetNode(node.Ipxe)
|
||||
n.IpmiUserName.SetNode(node.IpmiUserName)
|
||||
n.IpmiPassword.SetNode(node.IpmiPassword)
|
||||
n.SystemOverlay.SetNode(node.SystemOverlay)
|
||||
n.RuntimeOverlay.SetNode(node.RuntimeOverlay)
|
||||
|
||||
n.DomainName.SetGroup(group.DomainName)
|
||||
n.Vnfs.SetGroup(group.Vnfs)
|
||||
n.KernelVersion.SetGroup(group.KernelVersion)
|
||||
n.KernelArgs.SetGroup(group.KernelArgs)
|
||||
n.Ipxe.SetGroup(group.Ipxe)
|
||||
n.IpmiNetmask.SetGroup(group.IpmiNetmask)
|
||||
n.IpmiUserName.SetGroup(group.IpmiUserName)
|
||||
n.IpmiPassword.SetGroup(group.IpmiPassword)
|
||||
n.SystemOverlay.SetGroup(group.SystemOverlay)
|
||||
n.RuntimeOverlay.SetGroup(group.RuntimeOverlay)
|
||||
|
||||
n.RuntimeOverlay.SetDefault("default")
|
||||
n.SystemOverlay.SetDefault("default")
|
||||
n.Ipxe.SetDefault("default")
|
||||
n.KernelArgs.SetDefault("crashkernel=no quiet")
|
||||
|
||||
n.GroupProfiles = group.Profiles
|
||||
n.Profiles = node.Profiles
|
||||
|
||||
allProfiles = append(allProfiles, group.Profiles...)
|
||||
allProfiles = append(allProfiles, node.Profiles...)
|
||||
|
||||
for _, p := range allProfiles {
|
||||
if _, ok := self.NodeProfiles[p]; !ok {
|
||||
wwlog.Printf(wwlog.WARN, "Profile not found for node '%s': %s\n", nodename, p)
|
||||
continue
|
||||
}
|
||||
|
||||
n.DomainName.SetProfile(self.NodeProfiles[p].DomainName)
|
||||
n.Vnfs.SetProfile(self.NodeProfiles[p].Vnfs)
|
||||
n.KernelVersion.SetProfile(self.NodeProfiles[p].KernelVersion)
|
||||
n.KernelArgs.SetProfile(self.NodeProfiles[p].KernelArgs)
|
||||
n.Ipxe.SetProfile(self.NodeProfiles[p].Ipxe)
|
||||
n.IpmiNetmask.SetProfile(self.NodeProfiles[p].IpmiNetmask)
|
||||
n.IpmiUserName.SetProfile(self.NodeProfiles[p].IpmiUserName)
|
||||
n.IpmiPassword.SetProfile(self.NodeProfiles[p].IpmiPassword)
|
||||
n.SystemOverlay.SetProfile(self.NodeProfiles[p].SystemOverlay)
|
||||
n.RuntimeOverlay.SetProfile(self.NodeProfiles[p].RuntimeOverlay)
|
||||
}
|
||||
|
||||
if n.DomainName.Defined() == true {
|
||||
n.Fqdn.SetNode(node.Hostname + "." + n.DomainName.Get())
|
||||
} else {
|
||||
n.Fqdn.SetNode(node.Hostname)
|
||||
}
|
||||
|
||||
n.NetDevs = node.NetDevs
|
||||
|
||||
ret = append(ret, n)
|
||||
n.NetDevs[devname].Ipaddr.SetAlt(netdev.Ipaddr, pstring)
|
||||
n.NetDevs[devname].Netmask.SetAlt(netdev.Netmask, pstring)
|
||||
n.NetDevs[devname].Hwaddr.SetAlt(netdev.Hwaddr, pstring)
|
||||
n.NetDevs[devname].Gateway.SetAlt(netdev.Gateway, pstring)
|
||||
n.NetDevs[devname].Type.SetAlt(netdev.Type, pstring)
|
||||
n.NetDevs[devname].Default.SetAltB(netdev.Default, pstring)
|
||||
}
|
||||
}
|
||||
|
||||
ret = append(ret, n)
|
||||
|
||||
}
|
||||
|
||||
return ret, nil
|
||||
}
|
||||
|
||||
func (self *nodeYaml) FindAllGroups() ([]GroupInfo, error) {
|
||||
var ret []GroupInfo
|
||||
/*
|
||||
func (self *nodeYaml) FindAllControllers() ([]ControllerConf, error) {
|
||||
var ret []ControllerConf
|
||||
|
||||
for controllername, controller := range self.Controllers {
|
||||
for groupname, group := range controller.NodeGroups {
|
||||
var g GroupInfo
|
||||
|
||||
g.Id.SetGroup(groupname)
|
||||
g.Cid.SetGroup(controllername)
|
||||
g.DomainName.SetGroup(group.DomainName)
|
||||
g.Comment.SetGroup(group.Comment)
|
||||
g.Vnfs.SetGroup(group.Vnfs)
|
||||
g.KernelVersion.SetGroup(group.KernelVersion)
|
||||
g.KernelArgs.SetGroup(group.KernelArgs)
|
||||
g.IpmiNetmask.SetGroup(group.IpmiNetmask)
|
||||
g.IpmiPassword.SetGroup(group.IpmiPassword)
|
||||
g.IpmiUserName.SetGroup(group.IpmiUserName)
|
||||
g.SystemOverlay.SetGroup(group.SystemOverlay)
|
||||
g.RuntimeOverlay.SetGroup(group.RuntimeOverlay)
|
||||
|
||||
g.Profiles = group.Profiles
|
||||
|
||||
for _, p := range group.Profiles {
|
||||
if _, ok := self.NodeProfiles[p]; !ok {
|
||||
wwlog.Printf(wwlog.WARN, "Profile not found for group '%s': %s\n", groupname, p)
|
||||
continue
|
||||
}
|
||||
|
||||
g.DomainName.SetProfile(self.NodeProfiles[p].DomainName)
|
||||
g.Vnfs.SetProfile(self.NodeProfiles[p].Vnfs)
|
||||
g.KernelVersion.SetProfile(self.NodeProfiles[p].KernelVersion)
|
||||
g.KernelArgs.SetProfile(self.NodeProfiles[p].KernelArgs)
|
||||
g.Ipxe.SetProfile(self.NodeProfiles[p].Ipxe)
|
||||
g.IpmiNetmask.SetProfile(self.NodeProfiles[p].IpmiNetmask)
|
||||
g.IpmiUserName.SetProfile(self.NodeProfiles[p].IpmiUserName)
|
||||
g.IpmiPassword.SetProfile(self.NodeProfiles[p].IpmiPassword)
|
||||
g.SystemOverlay.SetProfile(self.NodeProfiles[p].SystemOverlay)
|
||||
g.RuntimeOverlay.SetProfile(self.NodeProfiles[p].RuntimeOverlay)
|
||||
}
|
||||
|
||||
// TODO: Validate or die on all inputs
|
||||
|
||||
ret = append(ret, g)
|
||||
}
|
||||
}
|
||||
return ret, nil
|
||||
}
|
||||
|
||||
func (self *nodeYaml) FindAllControllers() ([]ControllerInfo, error) {
|
||||
var ret []ControllerInfo
|
||||
|
||||
for controllername, controller := range self.Controllers {
|
||||
var c ControllerInfo
|
||||
var c ControllerConf
|
||||
|
||||
c.Id = controllername
|
||||
c.Ipaddr = controller.Ipaddr
|
||||
@@ -223,25 +186,39 @@ func (self *nodeYaml) FindAllControllers() ([]ControllerInfo, error) {
|
||||
}
|
||||
return ret, nil
|
||||
}
|
||||
*/
|
||||
|
||||
func (self *nodeYaml) FindAllProfiles() ([]ProfileInfo, error) {
|
||||
var ret []ProfileInfo
|
||||
func (self *nodeYaml) FindAllProfiles() ([]NodeInfo, error) {
|
||||
var ret []NodeInfo
|
||||
|
||||
for name, profile := range self.NodeProfiles {
|
||||
var p ProfileInfo
|
||||
var p NodeInfo
|
||||
|
||||
p.Id = name
|
||||
p.Comment = profile.Comment
|
||||
p.Vnfs = profile.Vnfs
|
||||
p.Ipxe = profile.Ipxe
|
||||
p.KernelVersion = profile.KernelVersion
|
||||
p.KernelArgs = profile.KernelArgs
|
||||
p.IpmiNetmask = profile.IpmiNetmask
|
||||
p.IpmiUserName = profile.IpmiUserName
|
||||
p.IpmiPassword = profile.IpmiPassword
|
||||
p.DomainName = profile.DomainName
|
||||
p.RuntimeOverlay = profile.RuntimeOverlay
|
||||
p.SystemOverlay = profile.SystemOverlay
|
||||
p.Id.Set(name)
|
||||
p.Comment.Set(profile.Comment)
|
||||
p.Vnfs.Set(profile.Vnfs)
|
||||
p.Ipxe.Set(profile.Ipxe)
|
||||
p.KernelVersion.Set(profile.KernelVersion)
|
||||
p.KernelArgs.Set(profile.KernelArgs)
|
||||
p.IpmiNetmask.Set(profile.IpmiNetmask)
|
||||
p.IpmiUserName.Set(profile.IpmiUserName)
|
||||
p.IpmiPassword.Set(profile.IpmiPassword)
|
||||
p.RuntimeOverlay.Set(profile.RuntimeOverlay)
|
||||
p.SystemOverlay.Set(profile.SystemOverlay)
|
||||
|
||||
for devname, netdev := range profile.NetDevs {
|
||||
if _, ok := p.NetDevs[devname]; !ok {
|
||||
var netdev NetDevEntry
|
||||
p.NetDevs[devname] = &netdev
|
||||
}
|
||||
|
||||
p.NetDevs[devname].Ipaddr.Set(netdev.Ipaddr)
|
||||
p.NetDevs[devname].Netmask.Set(netdev.Netmask)
|
||||
p.NetDevs[devname].Hwaddr.Set(netdev.Hwaddr)
|
||||
p.NetDevs[devname].Gateway.Set(netdev.Gateway)
|
||||
p.NetDevs[devname].Type.Set(netdev.Type)
|
||||
p.NetDevs[devname].Default.SetB(netdev.Default)
|
||||
}
|
||||
|
||||
// TODO: Validate or die on all inputs
|
||||
|
||||
@@ -257,7 +234,7 @@ func (self *nodeYaml) FindByHwaddr(hwa string) (NodeInfo, error) {
|
||||
|
||||
for _, node := range n {
|
||||
for _, dev := range node.NetDevs {
|
||||
if dev.Hwaddr == hwa {
|
||||
if dev.Hwaddr.Get() == hwa {
|
||||
return node, nil
|
||||
}
|
||||
}
|
||||
@@ -273,7 +250,7 @@ func (self *nodeYaml) FindByIpaddr(ipaddr string) (NodeInfo, error) {
|
||||
|
||||
for _, node := range n {
|
||||
for _, dev := range node.NetDevs {
|
||||
if dev.Ipaddr == ipaddr {
|
||||
if dev.Ipaddr.Get() == ipaddr {
|
||||
return node, nil
|
||||
}
|
||||
}
|
||||
@@ -288,7 +265,7 @@ func (nodes *nodeYaml) SearchByName(search string) ([]NodeInfo, error) {
|
||||
n, _ := nodes.FindAllNodes()
|
||||
|
||||
for _, node := range n {
|
||||
b, _ := regexp.MatchString(search, node.Fqdn.Get())
|
||||
b, _ := regexp.MatchString(search, node.Id.Get())
|
||||
if b == true {
|
||||
ret = append(ret, node)
|
||||
}
|
||||
@@ -304,7 +281,7 @@ func (nodes *nodeYaml) SearchByNameList(searchList []string) ([]NodeInfo, error)
|
||||
|
||||
for _, search := range searchList {
|
||||
for _, node := range n {
|
||||
b, _ := regexp.MatchString(search, node.Fqdn.Get())
|
||||
b, _ := regexp.MatchString(search, node.Id.Get())
|
||||
if b == true {
|
||||
ret = append(ret, node)
|
||||
}
|
||||
|
||||
@@ -11,22 +11,28 @@ import (
|
||||
******/
|
||||
|
||||
type nodeYaml struct {
|
||||
NodeProfiles map[string]*ProfileConf
|
||||
Controllers map[string]*ControllerConf `yaml:"control"`
|
||||
Controllers map[string]*ControllerConf `yaml:"controlers"`
|
||||
NodeProfiles map[string]*NodeConf
|
||||
Nodes map[string]*NodeConf
|
||||
}
|
||||
|
||||
type ProfileConf struct {
|
||||
Comment string `yaml:"comment"`
|
||||
Vnfs string `yaml:"vnfs,omitempty"`
|
||||
Ipxe string `yaml:"ipxe template,omitempty"`
|
||||
KernelVersion string `yaml:"kernel version,omitempty"`
|
||||
KernelArgs string `yaml:"kernel args,omitempty"`
|
||||
IpmiNetmask string `yaml:"ipmi netmask,omitempty"`
|
||||
IpmiUserName string `yaml:"ipmi username,omitempty"`
|
||||
IpmiPassword string `yaml:"ipmi password,omitempty"`
|
||||
DomainName string `yaml:"domain name,omitempty"`
|
||||
RuntimeOverlay string `yaml:"runtime overlay files,omitempty"`
|
||||
SystemOverlay string `yaml:"system overlay files,omitempty"`
|
||||
type NodeConf struct {
|
||||
Comment string `yaml:"comment,omitempty"`
|
||||
Disabled bool `yaml:"disabled,omitempty"`
|
||||
// Hostname string `yaml:"hostname,omitempty"`
|
||||
DomainName string `yaml:"domain name,omitempty"`
|
||||
Vnfs string `yaml:"vnfs,omitempty"`
|
||||
Ipxe string `yaml:"ipxe template,omitempty"`
|
||||
KernelVersion string `yaml:"kernel version,omitempty"`
|
||||
KernelArgs string `yaml:"kernel args,omitempty"`
|
||||
IpmiUserName string `yaml:"ipmi username,omitempty"`
|
||||
IpmiPassword string `yaml:"ipmi password,omitempty"`
|
||||
IpmiIpaddr string `yaml:"ipmi ipaddr,omitempty"`
|
||||
IpmiNetmask string `yaml:"ipmi netmask,omitempty"`
|
||||
RuntimeOverlay string `yaml:"runtime overlay files,omitempty"`
|
||||
SystemOverlay string `yaml:"system overlay files,omitempty"`
|
||||
Profiles []string `yaml:"profiles,omitempty"`
|
||||
NetDevs map[string]*NetDevs
|
||||
}
|
||||
|
||||
type ControllerConf struct {
|
||||
@@ -66,43 +72,6 @@ type ControllerConf struct {
|
||||
EnableCmd string `yaml:"enable command,omitempty"`
|
||||
} `yaml:"nfs,omitempty"`
|
||||
} `yaml:"services"`
|
||||
NodeGroups map[string]*GroupConf
|
||||
}
|
||||
|
||||
type GroupConf struct {
|
||||
Comment string `yaml:"comment"`
|
||||
Disabled bool `yaml:"disabled,omitempty"`
|
||||
DomainName string `yaml:"domain name"`
|
||||
Vnfs string `yaml:"vnfs,omitempty"`
|
||||
Ipxe string `yaml:"ipxe template,omitempty"`
|
||||
KernelVersion string `yaml:"kernel version,omitempty"`
|
||||
KernelArgs string `yaml:"kernel args,omitempty"`
|
||||
IpmiNetmask string `yaml:"ipmi netmask,omitempty"`
|
||||
IpmiUserName string `yaml:"ipmi username,omitempty"`
|
||||
IpmiPassword string `yaml:"ipmi password,omitempty"`
|
||||
RuntimeOverlay string `yaml:"runtime overlay files,omitempty"`
|
||||
SystemOverlay string `yaml:"system overlay files,omitempty"`
|
||||
Profiles []string `yaml:"profiles,omitempty"`
|
||||
Nodes map[string]*NodeConf
|
||||
}
|
||||
|
||||
type NodeConf struct {
|
||||
Comment string `yaml:"comment,omitempty"`
|
||||
Disabled bool `yaml:"disabled,omitempty"`
|
||||
Hostname string `yaml:"hostname,omitempty"`
|
||||
DomainName string `yaml:"domain name,omitempty"`
|
||||
Vnfs string `yaml:"vnfs,omitempty"`
|
||||
Ipxe string `yaml:"ipxe template,omitempty"`
|
||||
KernelVersion string `yaml:"kernel version,omitempty"`
|
||||
KernelArgs string `yaml:"kernel args,omitempty"`
|
||||
IpmiUserName string `yaml:"ipmi username,omitempty"`
|
||||
IpmiPassword string `yaml:"ipmi password,omitempty"`
|
||||
IpmiIpaddr string `yaml:"ipmi ipaddr,omitempty"`
|
||||
IpmiNetmask string `yaml:"ipmi netmask,omitempty"`
|
||||
RuntimeOverlay string `yaml:"runtime overlay files,omitempty"`
|
||||
SystemOverlay string `yaml:"system overlay files,omitempty"`
|
||||
Profiles []string `yaml:"profiles,omitempty"`
|
||||
NetDevs map[string]*NetDevs
|
||||
}
|
||||
|
||||
type NetDevs struct {
|
||||
@@ -115,24 +84,23 @@ type NetDevs struct {
|
||||
}
|
||||
|
||||
/******
|
||||
* Code internal data representations
|
||||
* Internal code data representations
|
||||
******/
|
||||
|
||||
type Entry struct {
|
||||
Node string
|
||||
Profile string
|
||||
Group string
|
||||
Controller string
|
||||
Default string
|
||||
value string
|
||||
altvalue string
|
||||
bool bool
|
||||
altbool bool
|
||||
from string
|
||||
}
|
||||
|
||||
type NodeInfo struct {
|
||||
Id Entry
|
||||
Gid Entry
|
||||
Cid Entry
|
||||
Comment Entry
|
||||
HostName Entry
|
||||
Fqdn Entry
|
||||
Id Entry
|
||||
Cid Entry
|
||||
Comment Entry
|
||||
// HostName Entry
|
||||
// Fqdn Entry
|
||||
DomainName Entry
|
||||
Vnfs Entry
|
||||
Ipxe Entry
|
||||
@@ -146,80 +114,16 @@ type NodeInfo struct {
|
||||
SystemOverlay Entry
|
||||
Profiles []string
|
||||
GroupProfiles []string
|
||||
NetDevs map[string]*NetDevs
|
||||
NetDevs map[string]*NetDevEntry
|
||||
}
|
||||
|
||||
type ControllerInfo struct {
|
||||
Id string
|
||||
Comment string
|
||||
Ipaddr string
|
||||
Fqdn string
|
||||
DomainName string
|
||||
Services struct {
|
||||
Warewulfd struct {
|
||||
Port string
|
||||
Secure bool
|
||||
StartCmd string
|
||||
RestartCmd string
|
||||
EnableCmd string
|
||||
}
|
||||
Dhcp struct {
|
||||
Enabled bool
|
||||
Template string
|
||||
RangeStart string
|
||||
RangeEnd string
|
||||
ConfigFile string
|
||||
StartCmd string
|
||||
RestartCmd string
|
||||
EnableCmd string
|
||||
}
|
||||
Tftp struct {
|
||||
Enabled bool
|
||||
TftpRoot string
|
||||
StartCmd string
|
||||
RestartCmd string
|
||||
EnableCmd string
|
||||
}
|
||||
Nfs struct {
|
||||
Enabled bool
|
||||
Exports []string
|
||||
StartCmd string
|
||||
RestartCmd string
|
||||
EnableCmd string
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
type GroupInfo struct {
|
||||
Id Entry
|
||||
Cid Entry
|
||||
Comment Entry
|
||||
Vnfs Entry
|
||||
Ipxe Entry
|
||||
KernelVersion Entry
|
||||
KernelArgs Entry
|
||||
IpmiNetmask Entry
|
||||
IpmiUserName Entry
|
||||
IpmiPassword Entry
|
||||
DomainName Entry
|
||||
RuntimeOverlay Entry
|
||||
SystemOverlay Entry
|
||||
Profiles []string
|
||||
}
|
||||
|
||||
type ProfileInfo struct {
|
||||
Id string
|
||||
Comment string
|
||||
Vnfs string
|
||||
Ipxe string
|
||||
KernelVersion string
|
||||
KernelArgs string
|
||||
IpmiNetmask string
|
||||
IpmiUserName string
|
||||
IpmiPassword string
|
||||
DomainName string
|
||||
RuntimeOverlay string
|
||||
SystemOverlay string
|
||||
type NetDevEntry struct {
|
||||
Type Entry `yaml:"type,omitempty"`
|
||||
Default Entry `yaml:"default"`
|
||||
Hwaddr Entry
|
||||
Ipaddr Entry
|
||||
Netmask Entry
|
||||
Gateway Entry `yaml:"gateway,omitempty"`
|
||||
}
|
||||
|
||||
const ConfigFile = "/etc/warewulf/nodes.conf"
|
||||
|
||||
@@ -1,135 +1,103 @@
|
||||
package node
|
||||
|
||||
import (
|
||||
"strings"
|
||||
)
|
||||
import "strings"
|
||||
|
||||
/**********
|
||||
*
|
||||
* Sets
|
||||
*
|
||||
*********/
|
||||
|
||||
func (self *Entry) Set(val string) {
|
||||
if val == "" {
|
||||
return
|
||||
}
|
||||
|
||||
if strings.ToUpper(val) == "DELETE" {
|
||||
self.value = ""
|
||||
} else {
|
||||
self.value = val
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
func (self *Entry) SetB(val bool) {
|
||||
self.bool = val
|
||||
return
|
||||
}
|
||||
|
||||
func (self *Entry) SetAlt(val string, from string) {
|
||||
if val == "" {
|
||||
return
|
||||
}
|
||||
|
||||
self.altvalue = val
|
||||
self.from = from
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
func (self *Entry) SetAltB(val bool, from string) {
|
||||
self.altbool = val
|
||||
self.from = from
|
||||
return
|
||||
}
|
||||
|
||||
/**********
|
||||
*
|
||||
* Gets
|
||||
*
|
||||
*********/
|
||||
|
||||
func (self *Entry) Get() string {
|
||||
if self.value != "" {
|
||||
return self.value
|
||||
}
|
||||
if self.altvalue != "" {
|
||||
return self.altvalue
|
||||
}
|
||||
return ""
|
||||
}
|
||||
|
||||
func (self *Entry) GetB() bool {
|
||||
return self.bool
|
||||
}
|
||||
|
||||
func (self *Entry) GetReal() string {
|
||||
return self.value
|
||||
}
|
||||
|
||||
func (self *Entry) GetRealB() bool {
|
||||
return self.bool
|
||||
}
|
||||
|
||||
/**********
|
||||
*
|
||||
* Misc
|
||||
*
|
||||
*********/
|
||||
|
||||
func (self *Entry) Print() string {
|
||||
if self.Node != "" {
|
||||
return self.Node
|
||||
if self.value != "" {
|
||||
return self.value
|
||||
}
|
||||
if self.Group != "" {
|
||||
return self.Group
|
||||
}
|
||||
if self.Profile != "" {
|
||||
return self.Profile
|
||||
}
|
||||
if self.Controller != "" {
|
||||
return self.Controller
|
||||
}
|
||||
if self.Default != "" {
|
||||
return self.Default
|
||||
if self.altvalue != "" {
|
||||
return self.altvalue
|
||||
}
|
||||
return "--"
|
||||
}
|
||||
|
||||
func (self *Entry) Source() string {
|
||||
if self.Node != "" {
|
||||
return "node"
|
||||
if self.from == "" {
|
||||
return "--"
|
||||
}
|
||||
if self.Group != "" {
|
||||
return "group"
|
||||
}
|
||||
if self.Profile != "" {
|
||||
return "profile"
|
||||
}
|
||||
if self.Controller != "" {
|
||||
return "controller"
|
||||
}
|
||||
if self.Default != "" {
|
||||
return "default"
|
||||
}
|
||||
return ""
|
||||
}
|
||||
|
||||
func (self *Entry) Get() string {
|
||||
if self.Node != "" {
|
||||
return self.Node
|
||||
}
|
||||
if self.Group != "" {
|
||||
return self.Group
|
||||
}
|
||||
if self.Profile != "" {
|
||||
return self.Profile
|
||||
}
|
||||
if self.Controller != "" {
|
||||
return self.Controller
|
||||
}
|
||||
if self.Default != "" {
|
||||
return self.Default
|
||||
}
|
||||
return ""
|
||||
return self.from
|
||||
}
|
||||
|
||||
func (self *Entry) Defined() bool {
|
||||
if self.Get() == "" {
|
||||
return false
|
||||
if self.value != "" {
|
||||
return true
|
||||
}
|
||||
|
||||
return true
|
||||
}
|
||||
|
||||
func (self *Entry) SetDefault(value string) {
|
||||
if value == "" {
|
||||
return
|
||||
} else if strings.ToUpper(value) == "UNDEF" {
|
||||
value = ""
|
||||
}
|
||||
self.Default = value
|
||||
}
|
||||
|
||||
func (self *Entry) SetGroup(value string) {
|
||||
if value == "" {
|
||||
return
|
||||
} else if strings.ToUpper(value) == "UNDEF" {
|
||||
value = ""
|
||||
}
|
||||
self.Group = value
|
||||
}
|
||||
|
||||
func (self *Entry) SetProfile(value string) {
|
||||
if value == "" {
|
||||
return
|
||||
} else if strings.ToUpper(value) == "UNDEF" {
|
||||
value = ""
|
||||
}
|
||||
self.Profile = value
|
||||
}
|
||||
|
||||
func (self *Entry) SetController(value string) {
|
||||
if value == "" {
|
||||
return
|
||||
} else if strings.ToUpper(value) == "UNDEF" {
|
||||
value = ""
|
||||
}
|
||||
self.Controller = value
|
||||
}
|
||||
|
||||
func (self *Entry) SetNode(value string) {
|
||||
if value == "" {
|
||||
return
|
||||
} else if strings.ToUpper(value) == "UNDEF" {
|
||||
value = ""
|
||||
}
|
||||
self.Node = value
|
||||
}
|
||||
|
||||
func (self *Entry) GetNode() string {
|
||||
return self.Node
|
||||
}
|
||||
|
||||
func (self *Entry) GetGroup() string {
|
||||
return self.Group
|
||||
}
|
||||
|
||||
func (self *Entry) GetController() string {
|
||||
return self.Controller
|
||||
}
|
||||
|
||||
func (self *Entry) GetProfile() string {
|
||||
return self.Profile
|
||||
}
|
||||
|
||||
func (self *Entry) GetDefault() string {
|
||||
return self.Default
|
||||
return false
|
||||
}
|
||||
|
||||
@@ -3,244 +3,84 @@ package node
|
||||
import (
|
||||
"github.com/hpcng/warewulf/internal/pkg/errors"
|
||||
"github.com/hpcng/warewulf/internal/pkg/wwlog"
|
||||
"strings"
|
||||
|
||||
"gopkg.in/yaml.v2"
|
||||
"os"
|
||||
)
|
||||
|
||||
func get2Set(input string) string {
|
||||
if strings.ToUpper(input) == "UNDEF" {
|
||||
return ""
|
||||
}
|
||||
return input
|
||||
}
|
||||
|
||||
/****
|
||||
*
|
||||
* NODE MODIFIERS
|
||||
*
|
||||
****/
|
||||
|
||||
func (self *nodeYaml) AddNode(controllerID string, groupID string, nodeID string) error {
|
||||
func (self *nodeYaml) AddNode(nodeID string) (NodeInfo, error) {
|
||||
var node NodeConf
|
||||
var n NodeInfo
|
||||
|
||||
wwlog.Printf(wwlog.VERBOSE, "Adding new node: %s/%s\n", groupID, nodeID)
|
||||
wwlog.Printf(wwlog.VERBOSE, "Adding new node: %s\n", nodeID)
|
||||
|
||||
if _, ok := self.Controllers[controllerID]; !ok {
|
||||
return errors.New("Controller does not exist: " + controllerID)
|
||||
if _, ok := self.Nodes[nodeID]; ok {
|
||||
return n, errors.New("Nodename already exists: " + nodeID)
|
||||
}
|
||||
|
||||
if _, ok := self.Controllers[controllerID].NodeGroups[groupID]; !ok {
|
||||
return errors.New("Group does not exist: " + groupID)
|
||||
}
|
||||
self.Nodes[nodeID] = &node
|
||||
self.Nodes[nodeID].Profiles = []string{"default"}
|
||||
self.Nodes[nodeID].NetDevs = make(map[string]*NetDevs)
|
||||
|
||||
if _, ok := self.Controllers[controllerID].NodeGroups[groupID].Nodes[groupID]; ok {
|
||||
return errors.New("Nodename already exists in group: " + nodeID)
|
||||
}
|
||||
n.Id.Set(nodeID)
|
||||
n.Profiles = []string{"default"}
|
||||
n.NetDevs = make(map[string]*NetDevEntry)
|
||||
|
||||
self.Controllers[controllerID].NodeGroups[groupID].Nodes[nodeID] = &node
|
||||
self.Controllers[controllerID].NodeGroups[groupID].Nodes[nodeID].Hostname = nodeID
|
||||
|
||||
return nil
|
||||
return n, nil
|
||||
}
|
||||
|
||||
func (self *nodeYaml) DelNode(controllerID string, groupID string, nodeID string) error {
|
||||
func (self *nodeYaml) DelNode(nodeID string) error {
|
||||
|
||||
if _, ok := self.Controllers[controllerID]; !ok {
|
||||
return errors.New("Controller does not exist: " + controllerID)
|
||||
if _, ok := self.Nodes[nodeID]; !ok {
|
||||
return errors.New("Nodename does not exist: " + nodeID)
|
||||
}
|
||||
|
||||
if _, ok := self.Controllers[controllerID].NodeGroups[groupID]; !ok {
|
||||
return errors.New("Group does not exist: " + groupID)
|
||||
}
|
||||
|
||||
if _, ok := self.Controllers[controllerID].NodeGroups[groupID].Nodes[groupID]; ok {
|
||||
return errors.New("Nodename does not exist in group: " + nodeID)
|
||||
}
|
||||
|
||||
wwlog.Printf(wwlog.VERBOSE, "Deleting node network device: %s/%s\n", groupID, nodeID)
|
||||
delete(self.Controllers[controllerID].NodeGroups[groupID].Nodes, nodeID)
|
||||
wwlog.Printf(wwlog.VERBOSE, "Deleting node: %s\n", nodeID)
|
||||
delete(self.Nodes, nodeID)
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (self *nodeYaml) NodeUpdate(node NodeInfo) error {
|
||||
controllerID := node.Cid.Get()
|
||||
groupID := node.Gid.Get()
|
||||
nodeID := node.Id.Get()
|
||||
|
||||
if _, ok := self.Controllers[controllerID]; !ok {
|
||||
return errors.New("Controller does not exist: " + controllerID)
|
||||
if _, ok := self.Nodes[nodeID]; !ok {
|
||||
return errors.New("Nodename does not exist: " + nodeID)
|
||||
}
|
||||
|
||||
if _, ok := self.Controllers[controllerID].NodeGroups[groupID]; !ok {
|
||||
return errors.New("Group does not exist: " + groupID)
|
||||
self.Nodes[nodeID].Comment = node.Comment.GetReal()
|
||||
self.Nodes[nodeID].Vnfs = node.Vnfs.GetReal()
|
||||
self.Nodes[nodeID].DomainName = node.DomainName.GetReal()
|
||||
self.Nodes[nodeID].Ipxe = node.Ipxe.GetReal()
|
||||
self.Nodes[nodeID].KernelVersion = node.KernelVersion.GetReal()
|
||||
self.Nodes[nodeID].KernelArgs = node.KernelArgs.GetReal()
|
||||
self.Nodes[nodeID].IpmiIpaddr = node.IpmiIpaddr.GetReal()
|
||||
self.Nodes[nodeID].IpmiNetmask = node.IpmiNetmask.GetReal()
|
||||
self.Nodes[nodeID].IpmiUserName = node.IpmiUserName.GetReal()
|
||||
self.Nodes[nodeID].IpmiPassword = node.IpmiPassword.GetReal()
|
||||
self.Nodes[nodeID].RuntimeOverlay = node.RuntimeOverlay.GetReal()
|
||||
self.Nodes[nodeID].SystemOverlay = node.SystemOverlay.GetReal()
|
||||
self.Nodes[nodeID].Profiles = node.Profiles
|
||||
|
||||
for devname, netdev := range node.NetDevs {
|
||||
if _, ok := self.Nodes[nodeID].NetDevs[devname]; !ok {
|
||||
var netdev NetDevs
|
||||
self.Nodes[nodeID].NetDevs[devname] = &netdev
|
||||
}
|
||||
|
||||
self.Nodes[nodeID].NetDevs[devname].Ipaddr = netdev.Ipaddr.GetReal()
|
||||
self.Nodes[nodeID].NetDevs[devname].Netmask = netdev.Netmask.GetReal()
|
||||
self.Nodes[nodeID].NetDevs[devname].Hwaddr = netdev.Hwaddr.GetReal()
|
||||
self.Nodes[nodeID].NetDevs[devname].Gateway = netdev.Gateway.GetReal()
|
||||
self.Nodes[nodeID].NetDevs[devname].Type = netdev.Type.GetReal()
|
||||
self.Nodes[nodeID].NetDevs[devname].Default = netdev.Default.GetRealB()
|
||||
}
|
||||
|
||||
if _, ok := self.Controllers[controllerID].NodeGroups[groupID].Nodes[nodeID]; !ok {
|
||||
return errors.New("Nodename does not exist in group: " + nodeID)
|
||||
}
|
||||
|
||||
self.Controllers[controllerID].NodeGroups[groupID].Nodes[nodeID].Hostname = get2Set(node.HostName.GetNode())
|
||||
self.Controllers[controllerID].NodeGroups[groupID].Nodes[nodeID].Vnfs = get2Set(node.Vnfs.GetNode())
|
||||
self.Controllers[controllerID].NodeGroups[groupID].Nodes[nodeID].DomainName = get2Set(node.DomainName.GetNode())
|
||||
self.Controllers[controllerID].NodeGroups[groupID].Nodes[nodeID].Ipxe = get2Set(node.Ipxe.GetNode())
|
||||
self.Controllers[controllerID].NodeGroups[groupID].Nodes[nodeID].KernelVersion = get2Set(node.KernelVersion.GetNode())
|
||||
self.Controllers[controllerID].NodeGroups[groupID].Nodes[nodeID].KernelArgs = get2Set(node.KernelArgs.GetNode())
|
||||
self.Controllers[controllerID].NodeGroups[groupID].Nodes[nodeID].IpmiIpaddr = get2Set(node.IpmiIpaddr.GetNode())
|
||||
self.Controllers[controllerID].NodeGroups[groupID].Nodes[nodeID].IpmiNetmask = get2Set(node.IpmiNetmask.GetNode())
|
||||
self.Controllers[controllerID].NodeGroups[groupID].Nodes[nodeID].IpmiUserName = get2Set(node.IpmiUserName.GetNode())
|
||||
self.Controllers[controllerID].NodeGroups[groupID].Nodes[nodeID].IpmiPassword = get2Set(node.IpmiPassword.GetNode())
|
||||
self.Controllers[controllerID].NodeGroups[groupID].Nodes[nodeID].RuntimeOverlay = get2Set(node.RuntimeOverlay.GetNode())
|
||||
self.Controllers[controllerID].NodeGroups[groupID].Nodes[nodeID].SystemOverlay = get2Set(node.SystemOverlay.GetNode())
|
||||
self.Controllers[controllerID].NodeGroups[groupID].Nodes[nodeID].Profiles = node.Profiles
|
||||
self.Controllers[controllerID].NodeGroups[groupID].Nodes[nodeID].NetDevs = node.NetDevs
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
/****
|
||||
*
|
||||
* GROUP MODIFIERS
|
||||
*
|
||||
****/
|
||||
|
||||
func (self *nodeYaml) AddGroup(controllerID string, groupID string) error {
|
||||
var group GroupConf
|
||||
|
||||
wwlog.Printf(wwlog.VERBOSE, "Adding new group: %s/%s\n", groupID)
|
||||
|
||||
if _, ok := self.Controllers[controllerID]; !ok {
|
||||
return errors.New("Controller does not exist: " + controllerID)
|
||||
}
|
||||
|
||||
if _, ok := self.Controllers[controllerID].NodeGroups[groupID]; ok {
|
||||
return errors.New("Group already exists: " + groupID)
|
||||
}
|
||||
|
||||
self.Controllers[controllerID].NodeGroups[groupID] = &group
|
||||
self.Controllers[controllerID].NodeGroups[groupID].DomainName = groupID
|
||||
self.Controllers[controllerID].NodeGroups[groupID].Profiles = []string{"default"}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (self *nodeYaml) DelGroup(controllerID string, groupID string) error {
|
||||
|
||||
if _, ok := self.Controllers[controllerID]; !ok {
|
||||
return errors.New("Controller does not exist: " + controllerID)
|
||||
}
|
||||
|
||||
if _, ok := self.Controllers[controllerID].NodeGroups[groupID]; !ok {
|
||||
return errors.New("Group does not exist: " + groupID)
|
||||
}
|
||||
|
||||
wwlog.Printf(wwlog.VERBOSE, "Deleting group: %s\n", groupID)
|
||||
delete(self.Controllers[controllerID].NodeGroups, groupID)
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (self *nodeYaml) GroupUpdate(group GroupInfo) error {
|
||||
controllerID := group.Cid.Get()
|
||||
groupID := group.Id.Get()
|
||||
|
||||
if _, ok := self.Controllers[controllerID]; !ok {
|
||||
return errors.New("Controller does not exist: " + controllerID)
|
||||
}
|
||||
|
||||
if _, ok := self.Controllers[controllerID].NodeGroups[groupID]; !ok {
|
||||
return errors.New("Group does not exist: " + groupID)
|
||||
}
|
||||
|
||||
self.Controllers[controllerID].NodeGroups[groupID].DomainName = group.DomainName.Get()
|
||||
self.Controllers[controllerID].NodeGroups[groupID].Vnfs = group.Vnfs.Get()
|
||||
self.Controllers[controllerID].NodeGroups[groupID].KernelVersion = group.KernelVersion.Get()
|
||||
self.Controllers[controllerID].NodeGroups[groupID].KernelArgs = group.KernelArgs.Get()
|
||||
self.Controllers[controllerID].NodeGroups[groupID].Ipxe = group.Ipxe.Get()
|
||||
self.Controllers[controllerID].NodeGroups[groupID].IpmiNetmask = group.IpmiNetmask.Get()
|
||||
self.Controllers[controllerID].NodeGroups[groupID].IpmiUserName = group.IpmiUserName.Get()
|
||||
self.Controllers[controllerID].NodeGroups[groupID].IpmiPassword = group.IpmiPassword.Get()
|
||||
self.Controllers[controllerID].NodeGroups[groupID].RuntimeOverlay = group.RuntimeOverlay.Get()
|
||||
self.Controllers[controllerID].NodeGroups[groupID].SystemOverlay = group.SystemOverlay.Get()
|
||||
self.Controllers[controllerID].NodeGroups[groupID].Profiles = group.Profiles
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
/****
|
||||
*
|
||||
* CONTROLLER MODIFIERS
|
||||
*
|
||||
****/
|
||||
|
||||
func (self *nodeYaml) AddController(controllerID string) error {
|
||||
var controller ControllerConf
|
||||
var group GroupConf
|
||||
|
||||
wwlog.Printf(wwlog.VERBOSE, "Adding new controller: %s/%s\n", controllerID)
|
||||
|
||||
if _, ok := self.Controllers[controllerID]; ok {
|
||||
return errors.New("Controller already exists: " + controllerID)
|
||||
}
|
||||
|
||||
self.Controllers[controllerID] = &controller
|
||||
self.Controllers[controllerID].NodeGroups = make(map[string]*GroupConf)
|
||||
self.Controllers[controllerID].NodeGroups["default"] = &group
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (self *nodeYaml) DelController(controllerID string) error {
|
||||
|
||||
if _, ok := self.Controllers[controllerID]; !ok {
|
||||
return errors.New("Controller does not exist: " + controllerID)
|
||||
}
|
||||
|
||||
wwlog.Printf(wwlog.VERBOSE, "Deleting controller: %s\n", controllerID)
|
||||
delete(self.Controllers, controllerID)
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (self *nodeYaml) ControllerUpdate(controller ControllerInfo) error {
|
||||
controllerID := controller.Id
|
||||
|
||||
if _, ok := self.Controllers[controllerID]; !ok {
|
||||
return errors.New("Controller does not exist: " + controllerID)
|
||||
}
|
||||
|
||||
self.Controllers[controllerID].Ipaddr = controller.Ipaddr
|
||||
self.Controllers[controllerID].Comment = controller.Comment
|
||||
self.Controllers[controllerID].Fqdn = controller.Fqdn
|
||||
|
||||
self.Controllers[controllerID].Services.Warewulfd.Port = get2Set(controller.Services.Warewulfd.Port)
|
||||
self.Controllers[controllerID].Services.Warewulfd.Secure = controller.Services.Warewulfd.Secure
|
||||
self.Controllers[controllerID].Services.Warewulfd.StartCmd = get2Set(controller.Services.Warewulfd.StartCmd)
|
||||
self.Controllers[controllerID].Services.Warewulfd.RestartCmd = get2Set(controller.Services.Warewulfd.RestartCmd)
|
||||
self.Controllers[controllerID].Services.Warewulfd.EnableCmd = get2Set(controller.Services.Warewulfd.EnableCmd)
|
||||
|
||||
self.Controllers[controllerID].Services.Dhcp.Enabled = controller.Services.Dhcp.Enabled
|
||||
self.Controllers[controllerID].Services.Dhcp.ConfigFile = get2Set(controller.Services.Dhcp.ConfigFile)
|
||||
self.Controllers[controllerID].Services.Dhcp.RangeStart = get2Set(controller.Services.Dhcp.RangeStart)
|
||||
self.Controllers[controllerID].Services.Dhcp.RangeEnd = get2Set(controller.Services.Dhcp.RangeEnd)
|
||||
self.Controllers[controllerID].Services.Dhcp.StartCmd = get2Set(controller.Services.Dhcp.StartCmd)
|
||||
self.Controllers[controllerID].Services.Dhcp.RestartCmd = get2Set(controller.Services.Dhcp.RestartCmd)
|
||||
self.Controllers[controllerID].Services.Dhcp.EnableCmd = get2Set(controller.Services.Dhcp.EnableCmd)
|
||||
|
||||
self.Controllers[controllerID].Services.Nfs.Enabled = controller.Services.Nfs.Enabled
|
||||
self.Controllers[controllerID].Services.Nfs.Exports = controller.Services.Nfs.Exports
|
||||
self.Controllers[controllerID].Services.Nfs.StartCmd = get2Set(controller.Services.Nfs.StartCmd)
|
||||
self.Controllers[controllerID].Services.Nfs.RestartCmd = get2Set(controller.Services.Nfs.RestartCmd)
|
||||
self.Controllers[controllerID].Services.Nfs.EnableCmd = get2Set(controller.Services.Nfs.EnableCmd)
|
||||
|
||||
self.Controllers[controllerID].Services.Tftp.Enabled = controller.Services.Tftp.Enabled
|
||||
self.Controllers[controllerID].Services.Tftp.TftpRoot = get2Set(controller.Services.Tftp.TftpRoot)
|
||||
self.Controllers[controllerID].Services.Tftp.StartCmd = get2Set(controller.Services.Tftp.StartCmd)
|
||||
self.Controllers[controllerID].Services.Tftp.RestartCmd = get2Set(controller.Services.Tftp.RestartCmd)
|
||||
self.Controllers[controllerID].Services.Tftp.EnableCmd = get2Set(controller.Services.Tftp.EnableCmd)
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
@@ -250,6 +90,74 @@ func (self *nodeYaml) ControllerUpdate(controller ControllerInfo) error {
|
||||
*
|
||||
****/
|
||||
|
||||
func (self *nodeYaml) AddProfile(profileID string) (NodeInfo, error) {
|
||||
var node NodeConf
|
||||
var n NodeInfo
|
||||
|
||||
wwlog.Printf(wwlog.VERBOSE, "Adding new profile: %s\n", profileID)
|
||||
|
||||
if _, ok := self.NodeProfiles[profileID]; ok {
|
||||
return n, errors.New("Profile name already exists: " + profileID)
|
||||
}
|
||||
|
||||
self.NodeProfiles[profileID] = &node
|
||||
|
||||
n.Id.Set(profileID)
|
||||
|
||||
return n, nil
|
||||
}
|
||||
|
||||
func (self *nodeYaml) DelProfile(profileID string) error {
|
||||
|
||||
if _, ok := self.NodeProfiles[profileID]; !ok {
|
||||
return errors.New("Profile does not exist: " + profileID)
|
||||
}
|
||||
|
||||
wwlog.Printf(wwlog.VERBOSE, "Deleting profile: %s\n", profileID)
|
||||
delete(self.NodeProfiles, profileID)
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (self *nodeYaml) ProfileUpdate(profile NodeInfo) error {
|
||||
profileID := profile.Id.Get()
|
||||
|
||||
if _, ok := self.NodeProfiles[profileID]; !ok {
|
||||
return errors.New("Profile name does not exist: " + profileID)
|
||||
}
|
||||
self.NodeProfiles[profileID].Comment = profile.Comment.GetReal()
|
||||
self.NodeProfiles[profileID].Vnfs = profile.Vnfs.GetReal()
|
||||
self.NodeProfiles[profileID].Ipxe = profile.Ipxe.GetReal()
|
||||
self.NodeProfiles[profileID].KernelVersion = profile.KernelVersion.GetReal()
|
||||
self.NodeProfiles[profileID].KernelArgs = profile.KernelArgs.GetReal()
|
||||
self.NodeProfiles[profileID].IpmiIpaddr = profile.IpmiIpaddr.GetReal()
|
||||
self.NodeProfiles[profileID].IpmiNetmask = profile.IpmiNetmask.GetReal()
|
||||
self.NodeProfiles[profileID].IpmiUserName = profile.IpmiUserName.GetReal()
|
||||
self.NodeProfiles[profileID].IpmiPassword = profile.IpmiPassword.GetReal()
|
||||
self.NodeProfiles[profileID].RuntimeOverlay = profile.RuntimeOverlay.GetReal()
|
||||
self.NodeProfiles[profileID].SystemOverlay = profile.SystemOverlay.GetReal()
|
||||
self.NodeProfiles[profileID].Profiles = profile.Profiles
|
||||
|
||||
for devname, netdev := range profile.NetDevs {
|
||||
if _, ok := self.NodeProfiles[profileID].NetDevs[devname]; !ok {
|
||||
var netdev NetDevs
|
||||
self.NodeProfiles[profileID].NetDevs[devname] = &netdev
|
||||
}
|
||||
|
||||
self.NodeProfiles[profileID].NetDevs[devname].Ipaddr = netdev.Ipaddr.GetReal()
|
||||
self.NodeProfiles[profileID].NetDevs[devname].Netmask = netdev.Netmask.GetReal()
|
||||
self.NodeProfiles[profileID].NetDevs[devname].Hwaddr = netdev.Hwaddr.GetReal()
|
||||
self.NodeProfiles[profileID].NetDevs[devname].Gateway = netdev.Gateway.GetReal()
|
||||
self.NodeProfiles[profileID].NetDevs[devname].Type = netdev.Type.GetReal()
|
||||
self.NodeProfiles[profileID].NetDevs[devname].Default = netdev.Default.GetRealB()
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
|
||||
func (self *nodeYaml) AddProfile(profileID string) error {
|
||||
var profile ProfileConf
|
||||
|
||||
@@ -295,6 +203,12 @@ func (self *nodeYaml) ProfileUpdate(profile ProfileInfo) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
*/
|
||||
|
||||
/****
|
||||
*
|
||||
* PERSISTENCE
|
||||
|
||||
@@ -123,38 +123,42 @@ func buildOverlay(nodeList []node.NodeInfo, overlayType string) error {
|
||||
|
||||
if overlayType == "runtime" {
|
||||
OverlayDir = config.RuntimeOverlaySource(node.RuntimeOverlay.Get())
|
||||
OverlayFile = config.RuntimeOverlayImage(node.Fqdn.Get())
|
||||
OverlayFile = config.RuntimeOverlayImage(node.Id.Get())
|
||||
} else if overlayType == "system" {
|
||||
OverlayDir = config.SystemOverlaySource(node.RuntimeOverlay.Get())
|
||||
OverlayFile = config.SystemOverlayImage(node.Fqdn.Get())
|
||||
OverlayFile = config.SystemOverlayImage(node.Id.Get())
|
||||
} else {
|
||||
wwlog.Printf(wwlog.ERROR, "overlayType requested is not supported: %s\n", overlayType)
|
||||
os.Exit(1)
|
||||
}
|
||||
|
||||
wwlog.Printf(wwlog.DEBUG, "Processing overlay for node: %s\n", node.Fqdn.Get())
|
||||
wwlog.Printf(wwlog.DEBUG, "Processing overlay for node: %s\n", node.Id.Get())
|
||||
|
||||
t.Self.Fqdn = node.Fqdn.Get()
|
||||
t.Self.Hostname = node.HostName.Get()
|
||||
t.Self.GroupName = node.Gid.Get()
|
||||
t.Self.Fqdn = node.Id.Get()
|
||||
t.Self.Hostname = node.Id.Get()
|
||||
t.Self.Vnfs = node.Vnfs.Get()
|
||||
t.Self.IpmiIpaddr = node.IpmiIpaddr.Get()
|
||||
t.Self.IpmiNetmask = node.IpmiNetmask.Get()
|
||||
t.Self.IpmiUserName = node.IpmiUserName.Get()
|
||||
t.Self.IpmiPassword = node.IpmiPassword.Get()
|
||||
t.Self.NetDevs = node.NetDevs
|
||||
for devname, netdev := range node.NetDevs {
|
||||
t.Self.NetDevs[devname].Ipaddr = netdev.Ipaddr.Get()
|
||||
t.Self.NetDevs[devname].Netmask = netdev.Netmask.Get()
|
||||
t.Self.NetDevs[devname].Gateway = netdev.Gateway.Get()
|
||||
t.Self.NetDevs[devname].Type = netdev.Type.Get()
|
||||
}
|
||||
t.AllNodes = allNodes
|
||||
|
||||
if overlayType == "runtime" && node.RuntimeOverlay.Defined() == false {
|
||||
wwlog.Printf(wwlog.WARN, "Undefined runtime overlay, skipping node: %s\n", node.Fqdn.Get())
|
||||
wwlog.Printf(wwlog.WARN, "Undefined runtime overlay, skipping node: %s\n", node.Id.Get())
|
||||
}
|
||||
if overlayType == "system" && node.SystemOverlay.Defined() == false {
|
||||
wwlog.Printf(wwlog.WARN, "Undefined system overlay, skipping node: %s\n", node.Fqdn.Get())
|
||||
wwlog.Printf(wwlog.WARN, "Undefined system overlay, skipping node: %s\n", node.Id.Get())
|
||||
}
|
||||
|
||||
wwlog.Printf(wwlog.DEBUG, "Checking to see if overlay directory exists: %s\n", OverlayDir)
|
||||
if util.IsDir(OverlayDir) == false {
|
||||
wwlog.Printf(wwlog.WARN, "%-35s: Skipped (runtime overlay template not found)\n", node.Fqdn.Get())
|
||||
wwlog.Printf(wwlog.WARN, "%-35s: Skipped (runtime overlay template not found)\n", node.Id.Get())
|
||||
continue
|
||||
}
|
||||
|
||||
@@ -235,7 +239,7 @@ func buildOverlay(nodeList []node.NodeInfo, overlayType string) error {
|
||||
return nil
|
||||
})
|
||||
|
||||
wwlog.Printf(wwlog.VERBOSE, "Finished generating overlay directory for: %s\n", node.Fqdn.Get())
|
||||
wwlog.Printf(wwlog.VERBOSE, "Finished generating overlay directory for: %s\n", node.Id.Get())
|
||||
|
||||
cmd := fmt.Sprintf("cd \"%s\"; find . | cpio --quiet -o -H newc -F \"%s\"", tmpDir, OverlayFile)
|
||||
wwlog.Printf(wwlog.DEBUG, "RUNNING: %s\n", cmd)
|
||||
@@ -244,7 +248,7 @@ func buildOverlay(nodeList []node.NodeInfo, overlayType string) error {
|
||||
wwlog.Printf(wwlog.ERROR, "Could not generate runtime image overlay: %s\n", err)
|
||||
continue
|
||||
}
|
||||
wwlog.Printf(wwlog.INFO, "%-35s: Done\n", node.Fqdn.Get())
|
||||
wwlog.Printf(wwlog.INFO, "%-35s: Done\n", node.Id.Get())
|
||||
|
||||
wwlog.Printf(wwlog.DEBUG, "Removing temporary directory: %s\n", tmpDir)
|
||||
os.RemoveAll(tmpDir)
|
||||
|
||||
Reference in New Issue
Block a user