WIP: Added entry point for deletion. Not workign yet.
This commit is contained in:
		
							
								
								
									
										
											BIN
										
									
								
								bin/manager
									
									
									
									
									
								
							
							
						
						
									
										
											BIN
										
									
								
								bin/manager
									
									
									
									
									
								
							
										
											Binary file not shown.
										
									
								
							@@ -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'
 | 
			
		||||
 
 | 
			
		||||
@@ -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
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -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
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user