Skip to content

Commit

Permalink
Merge pull request kubewharf#185 from wy-lucky/main
Browse files Browse the repository at this point in the history
fix: pod does not work on follower controller
  • Loading branch information
limhawjia authored Aug 1, 2023
2 parents 4d336f8 + 0c4eb98 commit e2ce42c
Show file tree
Hide file tree
Showing 2 changed files with 22 additions and 22 deletions.
22 changes: 11 additions & 11 deletions pkg/controllers/follower/controller.go
Original file line number Diff line number Diff line change
Expand Up @@ -64,16 +64,16 @@ const (
)

var (
// Map from supported leader type to pod template path.
// Map from supported leader type to pod spec path.
// TODO: think about whether PodTemplatePath/PodSpecPath should be specified in the FTC instead.
// Specifying in the FTC allows changing the path according to the api version.
// Other controllers should consider using the specified paths instead of hardcoded paths.
leaderPodTemplatePaths = map[schema.GroupKind]string{
{Group: appsv1.GroupName, Kind: common.DeploymentKind}: "spec.template",
{Group: appsv1.GroupName, Kind: common.StatefulSetKind}: "spec.template",
{Group: appsv1.GroupName, Kind: common.DaemonSetKind}: "spec.template",
{Group: batchv1.GroupName, Kind: common.JobKind}: "spec.template",
{Group: batchv1.GroupName, Kind: common.CronJobKind}: "spec.jobTemplate.spec.template",
leaderPodSpecPaths = map[schema.GroupKind]string{
{Group: appsv1.GroupName, Kind: common.DeploymentKind}: "spec.template.spec",
{Group: appsv1.GroupName, Kind: common.StatefulSetKind}: "spec.template.spec",
{Group: appsv1.GroupName, Kind: common.DaemonSetKind}: "spec.template.spec",
{Group: batchv1.GroupName, Kind: common.JobKind}: "spec.template.spec",
{Group: batchv1.GroupName, Kind: common.CronJobKind}: "spec.jobTemplate.spec.template.spec",
{Group: "", Kind: common.PodKind}: "spec",
}

Expand Down Expand Up @@ -202,7 +202,7 @@ func NewFollowerController(
targetGK := schema.GroupKind{Group: targetType.Group, Kind: targetType.Kind}
federatedGK := schema.GroupKind{Group: federatedType.Group, Kind: federatedType.Kind}

if _, exists := leaderPodTemplatePaths[targetGK]; exists {
if _, exists := leaderPodSpecPaths[targetGK]; exists {
handles := getHandles(ftc, "leader", c.reconcileLeader)
c.sourceToFederatedGKMap[targetGK] = federatedGK
c.leaderTypeHandles[federatedGK] = handles
Expand Down Expand Up @@ -365,16 +365,16 @@ func (c *Controller) inferFollowers(
return nil, err
}

followersFromPodTemplate, err := getFollowersFromPodTemplate(
followersFromPodSpec, err := getFollowersFromPodSpec(
fedObj,
leaderPodTemplatePaths[handles.sourceGK],
leaderPodSpecPaths[handles.sourceGK],
c.sourceToFederatedGKMap,
)
if err != nil {
return nil, err
}

return followersFromAnnotation.Union(followersFromPodTemplate), err
return followersFromAnnotation.Union(followersFromPodSpec), err
}

func (c *Controller) updateFollower(
Expand Down
22 changes: 11 additions & 11 deletions pkg/controllers/follower/util.go
Original file line number Diff line number Diff line change
Expand Up @@ -77,12 +77,12 @@ func getFollowersFromAnnotation(
return followers, nil
}

func getFollowersFromPodTemplate(
func getFollowersFromPodSpec(
fedObject *unstructured.Unstructured,
podTemplatePath string,
podSpecPath string,
sourceToFederatedGKMap map[schema.GroupKind]schema.GroupKind,
) (sets.Set[FollowerReference], error) {
podSpec, err := getPodSpec(fedObject, podTemplatePath)
podSpec, err := getPodSpec(fedObject, podSpecPath)
if err != nil {
return nil, err
}
Expand Down Expand Up @@ -148,23 +148,23 @@ func getFollowersFromPod(
return followers
}

func getPodSpec(fedObject *unstructured.Unstructured, podTemplatePath string) (*corev1.PodSpec, error) {
func getPodSpec(fedObject *unstructured.Unstructured, podSpecPath string) (*corev1.PodSpec, error) {
if fedObject == nil {
return nil, fmt.Errorf("fedObject is nil")
}
fedObjectPodTemplatePath := append(
fedObjectPodSpecPath := append(
[]string{common.SpecField, common.TemplateField},
strings.Split(podTemplatePath, ".")...)
podTemplateMap, found, err := unstructured.NestedMap(fedObject.Object, fedObjectPodTemplatePath...)
strings.Split(podSpecPath, ".")...)
podSpecMap, found, err := unstructured.NestedMap(fedObject.Object, fedObjectPodSpecPath...)
if err != nil {
return nil, err
}
if !found {
return nil, fmt.Errorf("pod template does not exist at path %q", podTemplatePath)
return nil, fmt.Errorf("pod spec does not exist at path %q", podSpecPath)
}
podTemplate := &corev1.PodTemplateSpec{}
if err := runtime.DefaultUnstructuredConverter.FromUnstructured(podTemplateMap, podTemplate); err != nil {
podSpec := &corev1.PodSpec{}
if err := runtime.DefaultUnstructuredConverter.FromUnstructured(podSpecMap, podSpec); err != nil {
return nil, err
}
return &podTemplate.Spec, nil
return podSpec, nil
}

0 comments on commit e2ce42c

Please sign in to comment.