WIP: Added entry point for deletion. Not workign yet.

This commit is contained in:
Rodolfo Pacheco
2020-11-10 14:55:19 -05:00
parent 7caa8ed791
commit dba81c5b6c
4 changed files with 111 additions and 17 deletions

Binary file not shown.

View File

@@ -1,2 +1,2 @@
SCHEDULED=$1
kubectl get baremetalhosts --all-namespaces -l sip.airshipit.org/sip-scheduled=$SCHEDULED --show-labels|awk '{print $1,$2,$5,$6}'
kubectl get baremetalhosts --all-namespaces -l sip.airshipit.org/sip-scheduled=$SCHEDULED --show-labels|grep -v NAME|awk '{print "____________\n",$2,"\n\t",$5,$6}'|sed -e's/,/\n\t/g'

View File

@@ -56,23 +56,35 @@ func (r *SIPClusterReconciler) Reconcile(req ctrl.Request) (ctrl.Result, error)
// on deleted requests.
return ctrl.Result{}, nil
}
// machines
err, machines := r.gatherVBMH(sip)
if err != nil {
log.Error(err, "unable to gather vBMHs")
return ctrl.Result{}, err
}
err = r.deployInfra(sip, machines)
if err != nil {
log.Error(err, "unable to deploy infrastructure services")
return ctrl.Result{}, err
}
// Check for Deletion
if sip.ObjectMeta.DeletionTimestamp.IsZero() {
// machines
err, machines := r.gatherVBMH(sip)
if err != nil {
//log.Error(err, "unable to gather vBMHs")
return ctrl.Result{}, err
}
err = r.deployInfra(sip, machines)
if err != nil {
log.Error(err, "unable to deploy infrastructure services")
return ctrl.Result{}, err
}
err = r.finish(sip, machines)
if err != nil {
log.Error(err, "unable to finish creation/update ..")
return ctrl.Result{}, err
}
} else {
// Deleting the SIP , what do we do now
err := r.finalize(sip)
if err != nil {
log.Error(err, "unable to finalize")
return ctrl.Result{}, err
}
err = r.finish(sip, machines)
if err != nil {
log.Error(err, "unable to finalize ..")
return ctrl.Result{}, err
}
return ctrl.Result{}, nil
}
@@ -169,3 +181,28 @@ func (r *SIPClusterReconciler) finish(sip airshipv1.SIPCluster, machines *airshi
return nil
}
/**
Deal with Deletion andd Finalizers if any is needed
Such as i'e what are we doing with the lables on teh vBMH's
**/
func (r *SIPClusterReconciler) finalize(sip airshipv1.SIPCluster) error {
// 1- Let me retrieve all vBMH mapped for this SIP Cluster
// 2- Let me now select the one's that meet teh scheduling criteria
// If I schedule successfully then
// If Not complete schedule , then throw an error.
machines := &airshipvms.MachineList{}
fmt.Printf("finalize sip:%v machines:%s\n", sip, machines.String())
// Update the list of Machines.
err := machines.GetCluster(sip, r.Client)
if err != nil {
return err
}
// Placeholder unsuree whether this is what we want
err = machines.RemoveLabels(sip, r.Client)
if err != nil {
return err
}
return nil
}

View File

@@ -297,7 +297,7 @@ func (ml *MachineList) scheduleIt(nodeRole airshipv1.VmRoles, nodeCfg airshipv1.
if validBmh && !ml.hasMachine(bmh) {
// Lets add it to the list as a schedulable thing
ml.bmhs[bmh.ObjectMeta.Name] = NewMachine(bmh, nodeRole)
fmt.Printf("---------------\nSchedule.scheduleIt ADDED machine:%s ml.bmhs %s \n", ml.bmhs[bmh.ObjectMeta.Name].String())
fmt.Printf("---------------\nSchedule.scheduleIt ADDED machine:%s \n", ml.bmhs[bmh.ObjectMeta.Name].String())
// TODO Probable should remove the bmh from the list so if there are other node targets they dont even take it into account
nodeTarget = nodeTarget - 1
if nodeTarget == 0 {
@@ -603,3 +603,60 @@ func (ml *MachineList) ApplyLabels(sip airshipv1.SIPCluster, c client.Client) er
}
return nil
}
/*
RemoveLabels
*/
func (ml *MachineList) RemoveLabels(sip airshipv1.SIPCluster, c client.Client) error {
fmt.Printf("ApplyLabels %s size:%d\n", ml.String(), len(ml.bmhs))
for _, machine := range ml.bmhs {
bmh := &machine.Bmh
fmt.Printf("ApplyLabels bmh.ObjectMeta.Name:%s\n", bmh.ObjectMeta.Name)
bmh.Labels[SipClusterLabel] = "-" // REMOVE IT
bmh.Labels[SipScheduleLabel] = "false"
bmh.Labels[SipNodeTypeLabel] = "-" // REMOVE IT
// This is bombing when it find 1 error
// Might be better to acculumalte the errors, and
// Allow it to continue.
err := c.Update(context.Background(), bmh)
if err != nil {
fmt.Printf("ApplyLabel bmh:%s err:%v\n", bmh.ObjectMeta.Name, err)
return err
}
}
return nil
}
func (ml *MachineList) addLabels(bmh metal3.BareMetalHost, m *Machine) {
}
func (ml *MachineList) GetCluster(sip airshipv1.SIPCluster, c client.Client) error {
bmhList := &metal3.BareMetalHostList{}
scheduleLabels := map[string]string{
SipScheduleLabel: "true",
SipClusterLabel: sip.Spec.Config.ClusterName,
}
err := c.List(context.Background(), bmhList, client.MatchingLabels(scheduleLabels))
if err != nil {
return err
}
for _, bmh := range bmhList.Items {
ml.bmhs[bmh.ObjectMeta.Name] = &Machine{
Bmh: bmh,
ScheduleStatus: Scheduled,
VmRole: airshipv1.VmRoles(bmh.Labels[SipNodeTypeLabel]),
Data: &MachineData{
IpOnInterface: make(map[string]string),
},
}
}
fmt.Printf("GetCluster %s \n", ml.String())
return nil
}