@@ -147,7 +147,7 @@ func (p *Plugin) Generate() ([]byte, error) {
147147 // or policy is not part of any policy sets
148148 if p .Policies [i ].GeneratePlacementWhenInSet ||
149149 (p .Policies [i ].GeneratePolicyPlacement && len (p .Policies [i ].PolicySets ) == 0 ) {
150- plcName , err := p .createPlacement ( & p .Policies [i ].Placement , p .Policies [i ].Name )
150+ plcName , err := p .createPolicyPlacement ( p .Policies [i ].Placement , p .Policies [i ].Name )
151151 if err != nil {
152152 return nil , err
153153 }
@@ -163,7 +163,7 @@ func (p *Plugin) Generate() ([]byte, error) {
163163 for i := range p .PolicySets {
164164 // only generate placement when GeneratePolicySetPlacement equals to true
165165 if p .PolicySets [i ].GeneratePolicySetPlacement {
166- plcName , err := p .createPlacement ( & p .PolicySets [i ].Placement , p .PolicySets [i ].Name )
166+ plcName , err := p .createPolicySetPlacement ( p .PolicySets [i ].Placement , p .PolicySets [i ].Name )
167167 if err != nil {
168168 return nil , err
169169 }
@@ -1432,17 +1432,26 @@ func (p *Plugin) getPlcFromPath(plcPath string) (string, map[string]interface{},
14321432
14331433// getCsKey generates the key for the policy's cluster/label selectors to be used in
14341434// Policies.csToPlc.
1435- func getCsKey (placementConfig * types.PlacementConfig ) string {
1435+ func getCsKey (placementConfig types.PlacementConfig ) string {
14361436 return fmt .Sprintf ("%#v" , placementConfig .ClusterSelectors )
14371437}
14381438
14391439// getPlcName will generate a placement name for the policy. If the placement has
14401440// previously been generated, skip will be true.
1441- func (p * Plugin ) getPlcName (placementConfig * types.PlacementConfig , nameDefault string ) (string , bool ) {
1441+ func (p * Plugin ) getPlcName (
1442+ defaultPlacementConfig types.PlacementConfig ,
1443+ placementConfig types.PlacementConfig ,
1444+ nameDefault string ,
1445+ ) (string , bool ) {
14421446 if placementConfig .Name != "" {
14431447 // If the policy explicitly specifies a placement name, use it
14441448 return placementConfig .Name , false
1445- } else if p .PolicyDefaults .Placement .Name != "" {
1449+ } else if defaultPlacementConfig .Name != "" || p .PolicyDefaults .Placement .Name != "" {
1450+ // Prioritize the provided default but fall back to policyDefaults
1451+ defaultPlacementName := p .PolicyDefaults .Placement .Name
1452+ if defaultPlacementConfig .Name != "" {
1453+ defaultPlacementName = defaultPlacementConfig .Name
1454+ }
14461455 // If the policy doesn't explicitly specify a placement name, and there is a
14471456 // default placement name set, check if one has already been generated for these
14481457 // cluster/label selectors
@@ -1455,20 +1464,35 @@ func (p *Plugin) getPlcName(placementConfig *types.PlacementConfig, nameDefault
14551464 // default placement name, use that
14561465 if len (p .csToPlc ) == 0 {
14571466 // If this is the first generated placement, just use it as is
1458- return p . PolicyDefaults . Placement . Name , false
1467+ return defaultPlacementName , false
14591468 }
14601469 // If there is already one or more generated placements, increment the name
1461- return fmt .Sprintf ("%s%d" , p . PolicyDefaults . Placement . Name , len (p .csToPlc )+ 1 ), false
1470+ return fmt .Sprintf ("%s%d" , defaultPlacementName , len (p .csToPlc )+ 1 ), false
14621471 }
14631472 // Default to a placement per policy
14641473 return "placement-" + nameDefault , false
14651474}
14661475
1476+ func (p * Plugin ) createPolicyPlacement (placementConfig types.PlacementConfig , nameDefault string ) (
1477+ name string , err error ,
1478+ ) {
1479+ return p .createPlacement (p .PolicyDefaults .Placement , placementConfig , nameDefault )
1480+ }
1481+
1482+ func (p * Plugin ) createPolicySetPlacement (placementConfig types.PlacementConfig , nameDefault string ) (
1483+ name string , err error ,
1484+ ) {
1485+ return p .createPlacement (p .PolicySetDefaults .Placement , placementConfig , nameDefault )
1486+ }
1487+
14671488// createPlacement creates a placement for the input placement config and default name by writing it to
14681489// the policy generator's output buffer. The name of the placement or an error is returned.
14691490// If the placement has already been generated, it will be reused and not added to the
14701491// policy generator's output buffer. An error is returned if the placement cannot be created.
1471- func (p * Plugin ) createPlacement (placementConfig * types.PlacementConfig , nameDefault string ) (
1492+ func (p * Plugin ) createPlacement (
1493+ defaultPlacementConfig types.PlacementConfig ,
1494+ placementConfig types.PlacementConfig ,
1495+ nameDefault string ) (
14721496 name string , err error ,
14731497) {
14741498 // If a placementName or placementRuleName is defined just return it
@@ -1511,7 +1535,7 @@ func (p *Plugin) createPlacement(placementConfig *types.PlacementConfig, nameDef
15111535 p .processedPlcs [name ] = true
15121536 } else {
15131537 var skip bool
1514- name , skip = p .getPlcName (placementConfig , nameDefault )
1538+ name , skip = p .getPlcName (defaultPlacementConfig , placementConfig , nameDefault )
15151539 if skip {
15161540 return
15171541 }
0 commit comments