@@ -80,17 +80,17 @@ func (s *SQLSyncer) dynamicEntitlements(ctx context.Context, resource *v2.Resour
8080 var ret []* v2.Entitlement
8181
8282 npt , err := s .runQuery (ctx , pToken , s .config .Entitlements .Query , s .config .Entitlements .Pagination , func (ctx context.Context , rowMap map [string ]any ) (bool , error ) {
83- r , err := s .mapEntitlement (ctx , resource , rowMap )
84- if err != nil {
85- return false , err
86- }
87- // No error and no entitlement means we should skip this row
88- if r == nil {
89- return true , nil
90- }
83+ for _ , mapping := range s .config .Entitlements .Map {
84+ r , ok , err := s .mapEntitlement (ctx , resource , mapping , rowMap )
85+ if err != nil {
86+ return false , err
87+ }
9188
92- r .Resource = resource
93- ret = append (ret , r )
89+ if ok {
90+ r .Resource = resource
91+ ret = append (ret , r )
92+ }
93+ }
9494 return true , nil
9595 })
9696 if err != nil {
@@ -100,7 +100,7 @@ func (s *SQLSyncer) dynamicEntitlements(ctx context.Context, resource *v2.Resour
100100 return ret , npt , nil , nil
101101}
102102
103- func (s * SQLSyncer ) mapEntitlement (ctx context.Context , resource * v2.Resource , rowMap map [string ]any ) (* v2.Entitlement , error ) {
103+ func (s * SQLSyncer ) mapEntitlement (ctx context.Context , resource * v2.Resource , mappings * EntitlementMapping , rowMap map [string ]any ) (* v2.Entitlement , bool , error ) {
104104 ret := & v2.Entitlement {}
105105
106106 inputs := s .env .BaseInputsWithResource (rowMap , resource )
@@ -111,48 +111,46 @@ func (s *SQLSyncer) mapEntitlement(ctx context.Context, resource *v2.Resource, r
111111 "DisplayName" : resource .DisplayName ,
112112 }
113113
114- mappings := s .config .Entitlements .Map
115-
116114 if mappings .SkipIf != "" {
117115 skip , err := s .env .EvaluateBool (ctx , mappings .SkipIf , inputs )
118116 if err != nil {
119- return nil , err
117+ return nil , false , err
120118 }
121119
122120 if skip {
123- return nil , nil
121+ return nil , false , nil
124122 }
125123 }
126124
127125 if mappings .Id == "" {
128- return nil , fmt .Errorf ("entitlements mapping id is required" )
126+ return nil , false , fmt .Errorf ("entitlements mapping id is required" )
129127 }
130128 v , err := s .env .EvaluateString (ctx , mappings .Id , inputs )
131129 if err != nil {
132- return nil , err
130+ return nil , false , err
133131 }
134132 ret .Id = sdkEntitlement .NewEntitlementID (resource , v )
135133
136134 if mappings .DisplayName == "" {
137- return nil , fmt .Errorf ("entitlements mapping display_name is required" )
135+ return nil , false , fmt .Errorf ("entitlements mapping display_name is required" )
138136 }
139137 v , err = s .env .EvaluateString (ctx , mappings .DisplayName , inputs )
140138 if err != nil {
141- return nil , err
139+ return nil , false , err
142140 }
143141 ret .DisplayName = v
144142
145143 if mappings .Description != "" {
146144 v , err = s .env .EvaluateString (ctx , mappings .Description , inputs )
147145 if err != nil {
148- return nil , err
146+ return nil , false , err
149147 }
150148 ret .Description = v
151149 }
152150
153151 resourceTypes , err := s .fullConfig .GetResourceTypes (ctx )
154152 if err != nil {
155- return nil , err
153+ return nil , false , err
156154 }
157155 for _ , rt := range mappings .GrantableTo {
158156 for _ , r := range resourceTypes {
@@ -164,19 +162,19 @@ func (s *SQLSyncer) mapEntitlement(ctx context.Context, resource *v2.Resource, r
164162
165163 // TODO(jirwin): Should entitlement slugs be required?
166164 if mappings .Slug == "" {
167- return nil , fmt .Errorf ("entitlements mapping slug is required" )
165+ return nil , false , fmt .Errorf ("entitlements mapping slug is required" )
168166 }
169167 v , err = s .env .EvaluateString (ctx , mappings .Slug , inputs )
170168 if err != nil {
171- return nil , err
169+ return nil , false , err
172170 }
173171 ret .Slug = v
174172
175173 var purpose string
176174 if mappings .Purpose != "" {
177175 purpose , err = s .env .EvaluateString (ctx , mappings .Purpose , inputs )
178176 if err != nil {
179- return nil , err
177+ return nil , false , err
180178 }
181179 }
182180 switch purpose {
@@ -194,5 +192,5 @@ func (s *SQLSyncer) mapEntitlement(ctx context.Context, resource *v2.Resource, r
194192 }
195193 ret .Annotations = annos
196194
197- return ret , nil
195+ return ret , true , nil
198196}
0 commit comments