Skip to content

Commit 48417bd

Browse files
committed
Enable Azure OIDC for Azure DevOps Respository
- Add a new provider field to GitRepository API spec which can be set to azure to enable passwordless authentication to Azure DevOps repositories. - API docs for new provider field and guidance to setup Azure environment with workload identity. - Controller changes to set the provider options in git authoptions to fetch credential while cloning the repository. - Add unit tests for testing provider Signed-off-by: Dipti Pai <[email protected]>
1 parent 93253c7 commit 48417bd

File tree

8 files changed

+230
-30
lines changed

8 files changed

+230
-30
lines changed

api/v1/gitrepository_types.go

+15
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,14 @@ import (
2727
const (
2828
// GitRepositoryKind is the string representation of a GitRepository.
2929
GitRepositoryKind = "GitRepository"
30+
31+
// GitProviderGeneric provides support for authentication using
32+
// credentials specified in secretRef.
33+
GitProviderGeneric string = "generic"
34+
35+
// GitProviderAzure provides support for authentication to azure
36+
// repositories using Managed Identity.
37+
GitProviderAzure string = "azure"
3038
)
3139

3240
const (
@@ -80,6 +88,13 @@ type GitRepositorySpec struct {
8088
// +optional
8189
SecretRef *meta.LocalObjectReference `json:"secretRef,omitempty"`
8290

91+
// Provider used for authentication, can be 'azure', 'generic'.
92+
// When not specified, defaults to 'generic'.
93+
// +kubebuilder:validation:Enum=generic;azure
94+
// +kubebuilder:default:=generic
95+
// +optional
96+
Provider string `json:"provider,omitempty"`
97+
8398
// Interval at which the GitRepository URL is checked for updates.
8499
// This interval is approximate and may be subject to jitter to ensure
85100
// efficient use of resources.

config/crd/bases/source.toolkit.fluxcd.io_gitrepositories.yaml

+9
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,15 @@ spec:
103103
efficient use of resources.
104104
pattern: ^([0-9]+(\.[0-9]+)?(ms|s|m|h))+$
105105
type: string
106+
provider:
107+
default: generic
108+
description: |-
109+
Provider used for authentication, can be 'azure', 'generic'.
110+
When not specified, defaults to 'generic'.
111+
enum:
112+
- generic
113+
- azure
114+
type: string
106115
proxySecretRef:
107116
description: |-
108117
ProxySecretRef specifies the Secret containing the proxy configuration

docs/api/v1/source.md

+26
Original file line numberDiff line numberDiff line change
@@ -383,6 +383,19 @@ and &lsquo;known_hosts&rsquo; fields.</p>
383383
</tr>
384384
<tr>
385385
<td>
386+
<code>provider</code><br>
387+
<em>
388+
string
389+
</em>
390+
</td>
391+
<td>
392+
<em>(Optional)</em>
393+
<p>Provider used for authentication, can be &lsquo;azure&rsquo;, &lsquo;generic&rsquo;.
394+
When not specified, defaults to &lsquo;generic&rsquo;.</p>
395+
</td>
396+
</tr>
397+
<tr>
398+
<td>
386399
<code>interval</code><br>
387400
<em>
388401
<a href="https://pkg.go.dev/k8s.io/apimachinery/pkg/apis/meta/v1#Duration">
@@ -1710,6 +1723,19 @@ and &lsquo;known_hosts&rsquo; fields.</p>
17101723
</tr>
17111724
<tr>
17121725
<td>
1726+
<code>provider</code><br>
1727+
<em>
1728+
string
1729+
</em>
1730+
</td>
1731+
<td>
1732+
<em>(Optional)</em>
1733+
<p>Provider used for authentication, can be &lsquo;azure&rsquo;, &lsquo;generic&rsquo;.
1734+
When not specified, defaults to &lsquo;generic&rsquo;.</p>
1735+
</td>
1736+
</tr>
1737+
<tr>
1738+
<td>
17131739
<code>interval</code><br>
17141740
<em>
17151741
<a href="https://pkg.go.dev/k8s.io/apimachinery/pkg/apis/meta/v1#Duration">

docs/spec/v1/gitrepositories.md

+85
Original file line numberDiff line numberDiff line change
@@ -212,6 +212,91 @@ For password-protected SSH private keys, the password must be provided
212212
via an additional `password` field in the secret. Flux CLI also supports
213213
this via the `--password` flag.
214214

215+
### Provider
216+
217+
`.spec.provider` is an optional field that allows specifying an OIDC provider
218+
used for authentication purposes.
219+
220+
Supported options are:
221+
222+
- `generic`
223+
- `azure`
224+
225+
When provider is not specified, it defaults to `generic` indicating that
226+
mechanisms using `spec.secretRef` are used for authentication.
227+
228+
#### Azure
229+
230+
The `azure` provider can be used to authenticate to Azure DevOps repositories
231+
automatically using Workload Identity.
232+
233+
##### Pre-requisites
234+
235+
- Ensure that your Azure DevOps Organization is
236+
[connected](https://learn.microsoft.com/en-us/azure/devops/organizations/accounts/connect-organization-to-azure-ad?view=azure-devops)
237+
to Microsoft Entra.
238+
- Ensure Workload Identity is properly [set up on your
239+
cluster](https://learn.microsoft.com/en-us/azure/aks/workload-identity-deploy-cluster#create-an-aks-cluster).
240+
241+
##### Configure Flux controller
242+
243+
- Create a managed identity to access Azure DevOps. Establish a federated
244+
identity credential between the managed identity and the source-controller
245+
service account. In the default installation, the source-controller service
246+
account is located in the `flux-system` namespace with name
247+
`source-controller`. Ensure the federated credential uses the correct
248+
namespace and name of the source-controller service account. For more details,
249+
please refer to this
250+
[guide](https://azure.github.io/azure-workload-identity/docs/quick-start.html#6-establish-federated-identity-credential-between-the-identity-and-the-service-account-issuer--subject).
251+
252+
- Add the managed identity to the Azure DevOps organization as a user. Ensure
253+
that the managed identity has the necessary permissions to access the Azure
254+
DevOps repository as described
255+
[here](https://learn.microsoft.com/en-us/azure/devops/integrate/get-started/authentication/service-principal-managed-identity?view=azure-devops#2-add-and-manage-service-principals-in-an-azure-devops-organization).
256+
257+
- Add the following patch to your bootstrap repository in
258+
`flux-system/kustomization.yaml` file:
259+
260+
261+
```yaml
262+
apiVersion: kustomize.config.k8s.io/v1beta1
263+
kind: Kustomization
264+
resources:
265+
- gotk-components.yaml
266+
- gotk-sync.yaml
267+
patches:
268+
- patch: |-
269+
apiVersion: v1
270+
kind: ServiceAccount
271+
metadata:
272+
name: source-controller
273+
namespace: flux-system
274+
annotations:
275+
azure.workload.identity/client-id: <AZURE_CLIENT_ID>
276+
labels:
277+
azure.workload.identity/use: "true"
278+
- patch: |-
279+
apiVersion: apps/v1
280+
kind: Deployment
281+
metadata:
282+
name: source-controller
283+
namespace: flux-system
284+
labels:
285+
azure.workload.identity/use: "true"
286+
spec:
287+
template:
288+
metadata:
289+
labels:
290+
azure.workload.identity/use: "true"
291+
```
292+
293+
**Note:** When azure `provider` is used with `GitRepository`, the `.spec.url`
294+
must follow this format:
295+
296+
```
297+
https://dev.azure.com/{your-organization}/{your-project}/_git/{your-repository}
298+
```
299+
215300
### Interval
216301

217302
`.spec.interval` is a required field that specifies the interval at which the

go.mod

+11-10
Original file line numberDiff line numberDiff line change
@@ -16,27 +16,28 @@ require (
1616
github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.7.0
1717
github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v1.4.0
1818
github.com/Masterminds/semver/v3 v3.3.0
19-
github.com/cyphar/filepath-securejoin v0.3.1
19+
github.com/cyphar/filepath-securejoin v0.3.2
2020
github.com/distribution/distribution/v3 v3.0.0-beta.1
2121
github.com/docker/cli v27.2.1+incompatible
2222
github.com/docker/go-units v0.5.0
2323
github.com/elazarl/goproxy v0.0.0-20240909085733-6741dbfc16a1
2424
github.com/fluxcd/cli-utils v0.36.0-flux.9
2525
github.com/fluxcd/pkg/apis/event v0.10.0
2626
github.com/fluxcd/pkg/apis/meta v1.6.0
27-
github.com/fluxcd/pkg/git v0.20.0
28-
github.com/fluxcd/pkg/git/gogit v0.20.0
29-
github.com/fluxcd/pkg/gittestserver v0.13.0
27+
github.com/fluxcd/pkg/auth v0.0.1
28+
github.com/fluxcd/pkg/git v0.21.0
29+
github.com/fluxcd/pkg/git/gogit v0.21.0
30+
github.com/fluxcd/pkg/gittestserver v0.13.1
3031
github.com/fluxcd/pkg/helmtestserver v0.19.0
3132
github.com/fluxcd/pkg/lockedfile v0.3.0
3233
github.com/fluxcd/pkg/masktoken v0.4.0
3334
github.com/fluxcd/pkg/oci v0.41.0
3435
github.com/fluxcd/pkg/runtime v0.49.0
3536
github.com/fluxcd/pkg/sourceignore v0.8.0
36-
github.com/fluxcd/pkg/ssh v0.14.0
37+
github.com/fluxcd/pkg/ssh v0.14.1
3738
github.com/fluxcd/pkg/tar v0.8.0
3839
github.com/fluxcd/pkg/testserver v0.7.0
39-
github.com/fluxcd/pkg/version v0.4.0
40+
github.com/fluxcd/pkg/version v0.4.1
4041
github.com/fluxcd/source-controller/api v1.3.0
4142
github.com/foxcpp/go-mockdns v1.1.0
4243
github.com/go-git/go-billy/v5 v5.5.0
@@ -146,7 +147,7 @@ require (
146147
github.com/chai2010/gettext-go v1.0.2 // indirect
147148
github.com/chrismellard/docker-credential-acr-env v0.0.0-20230304212654-82a0ddb27589 // indirect
148149
github.com/clbanning/mxj/v2 v2.7.0 // indirect
149-
github.com/cloudflare/circl v1.3.9 // indirect
150+
github.com/cloudflare/circl v1.4.0 // indirect
150151
github.com/common-nighthawk/go-figure v0.0.0-20210622060536-734e95fb86be // indirect
151152
github.com/containerd/containerd v1.7.20 // indirect
152153
github.com/containerd/continuity v0.4.3 // indirect
@@ -371,13 +372,13 @@ require (
371372
go.uber.org/multierr v1.11.0 // indirect
372373
go.uber.org/zap v1.27.0 // indirect
373374
golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56 // indirect
374-
golang.org/x/mod v0.20.0 // indirect
375-
golang.org/x/net v0.28.0 // indirect
375+
golang.org/x/mod v0.21.0 // indirect
376+
golang.org/x/net v0.29.0 // indirect
376377
golang.org/x/sys v0.25.0 // indirect
377378
golang.org/x/term v0.24.0 // indirect
378379
golang.org/x/text v0.18.0 // indirect
379380
golang.org/x/time v0.6.0 // indirect
380-
golang.org/x/tools v0.24.0 // indirect
381+
golang.org/x/tools v0.25.0 // indirect
381382
gomodules.xyz/jsonpatch/v2 v2.4.0 // indirect
382383
google.golang.org/genproto v0.0.0-20240903143218-8af14fe29dc1 // indirect
383384
google.golang.org/genproto/googleapis/api v0.0.0-20240827150818-7e3bb234dfed // indirect

go.sum

+22-20
Original file line numberDiff line numberDiff line change
@@ -239,8 +239,8 @@ github.com/clbanning/mxj/v2 v2.7.0 h1:WA/La7UGCanFe5NpHF0Q3DNtnCsVoxbPKuyBNHWRyM
239239
github.com/clbanning/mxj/v2 v2.7.0/go.mod h1:hNiWqW14h+kc+MdF9C6/YoRfjEJoR3ou6tn/Qo+ve2s=
240240
github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
241241
github.com/cloudflare/circl v1.3.3/go.mod h1:5XYMA4rFBvNIrhs50XuiBJ15vF2pZn4nnUKZrLbUZFA=
242-
github.com/cloudflare/circl v1.3.9 h1:QFrlgFYf2Qpi8bSpVPK1HBvWpx16v/1TZivyo7pGuBE=
243-
github.com/cloudflare/circl v1.3.9/go.mod h1:PDRU+oXvdD7KCtgKxW95M5Z8BpSCJXQORiZFnBQS5QU=
242+
github.com/cloudflare/circl v1.4.0 h1:BV7h5MgrktNzytKmWjpOtdYrf0lkkbF8YMlBGPhJQrY=
243+
github.com/cloudflare/circl v1.4.0/go.mod h1:PDRU+oXvdD7KCtgKxW95M5Z8BpSCJXQORiZFnBQS5QU=
244244
github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc=
245245
github.com/cockroachdb/apd/v3 v3.2.1 h1:U+8j7t0axsIgvQUqthuNm82HIrYXodOV2iWLWtEaIwg=
246246
github.com/cockroachdb/apd/v3 v3.2.1/go.mod h1:klXJcjp+FffLTHlhIG69tezTDvdP065naDsHzKhYSqc=
@@ -271,8 +271,8 @@ github.com/creack/pty v1.1.19 h1:tUN6H7LWqNx4hQVxomd0CVsDwaDr9gaRQaI4GpSmrsA=
271271
github.com/creack/pty v1.1.19/go.mod h1:MOBLtS5ELjhRRrroQr9kyvTxUAFNvYEK993ew/Vr4O4=
272272
github.com/cyberphone/json-canonicalization v0.0.0-20231011164504-785e29786b46 h1:2Dx4IHfC1yHWI12AxQDJM1QbRCDfk6M+blLzlZCXdrc=
273273
github.com/cyberphone/json-canonicalization v0.0.0-20231011164504-785e29786b46/go.mod h1:uzvlm1mxhHkdfqitSA92i7Se+S9ksOn3a3qmv/kyOCw=
274-
github.com/cyphar/filepath-securejoin v0.3.1 h1:1V7cHiaW+C+39wEfpH6XlLBQo3j/PciWFrgfCLS8XrE=
275-
github.com/cyphar/filepath-securejoin v0.3.1/go.mod h1:F7i41x/9cBF7lzCrVsYs9fuzwRZm4NQsGTBdpp6mETc=
274+
github.com/cyphar/filepath-securejoin v0.3.2 h1:QhZu5AxQ+o1XZH0Ye05YzvJ0kAdK6VQc0z9NNMek7gc=
275+
github.com/cyphar/filepath-securejoin v0.3.2/go.mod h1:F7i41x/9cBF7lzCrVsYs9fuzwRZm4NQsGTBdpp6mETc=
276276
github.com/danieljoos/wincred v1.2.1 h1:dl9cBrupW8+r5250DYkYxocLeZ1Y4vB1kxgtjxw8GQs=
277277
github.com/danieljoos/wincred v1.2.1/go.mod h1:uGaFL9fDn3OLTvzCGulzE+SzjEe5NGlh5FdCcyfPwps=
278278
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
@@ -348,14 +348,16 @@ github.com/fluxcd/pkg/apis/event v0.10.0 h1:eMYXjMnLQ9jctPkTauuiBmEI127RjCKDf1zf
348348
github.com/fluxcd/pkg/apis/event v0.10.0/go.mod h1:pG/3gbSBLNy6YGZP2eajiyVgkEQDvva789t46PY6NFE=
349349
github.com/fluxcd/pkg/apis/meta v1.6.0 h1:93TcRpiph0OCoQh+cI+PM7E35kBW9dScuas9tWc90Dw=
350350
github.com/fluxcd/pkg/apis/meta v1.6.0/go.mod h1:ZOeHcvyVdZDC5ZOGV7YuwplIvAx6LvmpeyhfTcNZCnc=
351+
github.com/fluxcd/pkg/auth v0.0.1 h1:3fMg1EdkQdY2Rv1qHbiPPWCBa27xsNeu09y9SuZk6Co=
352+
github.com/fluxcd/pkg/auth v0.0.1/go.mod h1:tdCkiB3/LBg7CcxX1fhVmM5ZjDIaOduK0XX88pBXie0=
351353
github.com/fluxcd/pkg/cache v0.0.3 h1:VK5joG/p+amh5Ob+r1OFOx0cCYiswEf8mX1/J1BG7Mw=
352354
github.com/fluxcd/pkg/cache v0.0.3/go.mod h1:UU6oFhV+mG0A5/RwIlvXhyuKlJwQEkk92jVB3vKMLtk=
353-
github.com/fluxcd/pkg/git v0.20.0 h1:byUbxLLZ9AyVYmK16mvxY/iA/ZhNwA30GHKPKNh7pik=
354-
github.com/fluxcd/pkg/git v0.20.0/go.mod h1:YnBOFhX7zzyVjg/u1Et1xBqXs30kb2sWWesIl3/glhw=
355-
github.com/fluxcd/pkg/git/gogit v0.20.0 h1:ZlWq//I465lv9aEEWaJhjJaTiTtnjcH+Td0fg1rPXWU=
356-
github.com/fluxcd/pkg/git/gogit v0.20.0/go.mod h1:ZA4WsKr28cj1yuplxOw9vHgCL4OCNJJLib1cJ77Tp9o=
357-
github.com/fluxcd/pkg/gittestserver v0.13.0 h1:6rvD9Z7+4zBcNT+LK0z4H0z6mDaw1Zd8ZaLh/dw8dzI=
358-
github.com/fluxcd/pkg/gittestserver v0.13.0/go.mod h1:LDw32Wo9mTmKNmJq4g7LRVBqPXlpMIWFBDOrRRh/+As=
355+
github.com/fluxcd/pkg/git v0.21.0 h1:5FfcKj9bDVz8KwoOQUOSJABLMeSdhvLBf7yctwwuMzc=
356+
github.com/fluxcd/pkg/git v0.21.0/go.mod h1:iCCmUCunoFLgntySJfIDxsHGYfS97ky990gEKIDZ9lo=
357+
github.com/fluxcd/pkg/git/gogit v0.21.0 h1:iR2kzW1XrcBDYuC8zVIAdC/2/aeXuRkZ9jupdd54E6I=
358+
github.com/fluxcd/pkg/git/gogit v0.21.0/go.mod h1:gyoSlEIqzsOiTwSL0iFuEiJat+W0uGgc+WEiCVC1xk8=
359+
github.com/fluxcd/pkg/gittestserver v0.13.1 h1:5rXF8ANlk6wtAsvqH7tI7gaO2zhMySftf7ALh0AhfU4=
360+
github.com/fluxcd/pkg/gittestserver v0.13.1/go.mod h1:nPO7ibtBRgLWFHTSvxI63zZubJXU82cVMH6nViVnHsY=
359361
github.com/fluxcd/pkg/helmtestserver v0.19.0 h1:DbidD46we8iLp/Sxn2TO8twtlP5gxFQaP3XTNJC0bl8=
360362
github.com/fluxcd/pkg/helmtestserver v0.19.0/go.mod h1:BhP2n8VMh+HnikYg9XEpzd2+pMQKemT9pBYg3SKCOxE=
361363
github.com/fluxcd/pkg/lockedfile v0.3.0 h1:tZkBAffcxyt4zMigHIKc54cKgN5I/kFF005gyWZdyds=
@@ -368,14 +370,14 @@ github.com/fluxcd/pkg/runtime v0.49.0 h1:XldsD4C2TsfuIgku3NEQYCXFLZWDau22YqClTGU
368370
github.com/fluxcd/pkg/runtime v0.49.0/go.mod h1:0JYsoNhrBtBC4mKAuZdfrkfIqsVGAXKM/A234HuNSnk=
369371
github.com/fluxcd/pkg/sourceignore v0.8.0 h1:oHQZ0Fnk88T7EQKfUshgZ4MULVKlt/AbW4C8Chmrrx4=
370372
github.com/fluxcd/pkg/sourceignore v0.8.0/go.mod h1:6dYIHKdlaATjY/e32EDabfyx0m89ObvlYQesJQoPPOc=
371-
github.com/fluxcd/pkg/ssh v0.14.0 h1:rkcUwEZiwNoHq8oGOf/THV5sf9LBbXOoJgOt+6+bU34=
372-
github.com/fluxcd/pkg/ssh v0.14.0/go.mod h1:1USgRvaaayJfzybQaCIAUn2e8LPsLe601Rec7Y8KQQE=
373+
github.com/fluxcd/pkg/ssh v0.14.1 h1:C/RBDch6cxAqQtaOohcasSAeGfZznNEeZtvpfI+hXQY=
374+
github.com/fluxcd/pkg/ssh v0.14.1/go.mod h1:HsVzHyF7CkfTnjtLEI6XK+8tfyWqwI1TPxJ34HcMg2o=
373375
github.com/fluxcd/pkg/tar v0.8.0 h1:YcEW7K40/XM8o+bkU23dceWtxdaKUpsKcsppLSp8QWc=
374376
github.com/fluxcd/pkg/tar v0.8.0/go.mod h1:O0WUC+nUIw7Cnw1h/4V310kLvzW4tvacD/VZTJtGBUM=
375377
github.com/fluxcd/pkg/testserver v0.7.0 h1:kNVAn+3bAF2rfR9cT6SxzgEz2o84i+o7zKY3XRKTXmk=
376378
github.com/fluxcd/pkg/testserver v0.7.0/go.mod h1:Ih5IK3Y5G3+a6c77BTqFkdPDCY1Yj1A1W5cXQqkCs9s=
377-
github.com/fluxcd/pkg/version v0.4.0 h1:3F6oeIZ+ug/f7pALIBhcUhfURel37EPPOn7nsGfsnOg=
378-
github.com/fluxcd/pkg/version v0.4.0/go.mod h1:izVsSDxac81qWRmpOL9qcxZYx+zAN1ajoP5SidGP6PA=
379+
github.com/fluxcd/pkg/version v0.4.1 h1:xnw+cu+GRcQSBTejcGiigYpipszO4Cn5UUGpAHVN4F0=
380+
github.com/fluxcd/pkg/version v0.4.1/go.mod h1:hO3ul44vTFFrosekcnrpxoPaM4cLbET4Fc/LR6pz4YQ=
379381
github.com/foxcpp/go-mockdns v1.1.0 h1:jI0rD8M0wuYAxL7r/ynTrCQQq0BVqfB99Vgk7DlmewI=
380382
github.com/foxcpp/go-mockdns v1.1.0/go.mod h1:IhLeSFGed3mJIAXPH2aiRQB+kqz7oqu8ld2qVbOu7Wk=
381383
github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHkI4W8=
@@ -1093,8 +1095,8 @@ golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91
10931095
golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
10941096
golang.org/x/mod v0.12.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
10951097
golang.org/x/mod v0.14.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=
1096-
golang.org/x/mod v0.20.0 h1:utOm6MM3R3dnawAiJgn0y+xvuYRsm1RKM/4giyfDgV0=
1097-
golang.org/x/mod v0.20.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=
1098+
golang.org/x/mod v0.21.0 h1:vvrHzRwRfVKSiLrG+d4FMl/Qi4ukBCE6kZlTUkDYRT0=
1099+
golang.org/x/mod v0.21.0/go.mod h1:6SkKJ3Xj0I0BrPOZoBy3bdMptDDU9oJrpohJ3eWZ1fY=
10981100
golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
10991101
golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
11001102
golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
@@ -1128,8 +1130,8 @@ golang.org/x/net v0.17.0/go.mod h1:NxSsAGuq816PNPmqtQdLE42eU2Fs7NoRIZrHJAlaCOE=
11281130
golang.org/x/net v0.18.0/go.mod h1:/czyP5RqHAH4odGYxBJ1qz0+CE5WZ+2j1YgoEo8F2jQ=
11291131
golang.org/x/net v0.21.0/go.mod h1:bIjVDfnllIU7BJ2DNgfnXvpSvtn8VRwhlsaeUTyUS44=
11301132
golang.org/x/net v0.22.0/go.mod h1:JKghWKKOSdJwpW2GEx0Ja7fmaKnMsbu+MWVZTokSYmg=
1131-
golang.org/x/net v0.28.0 h1:a9JDOJc5GMUJ0+UDqmLT86WiEy7iWyIhz8gz8E4e5hE=
1132-
golang.org/x/net v0.28.0/go.mod h1:yqtgsTWOOnlGLG9GFRrK3++bGOUEkNBoHZc8MEDWPNg=
1133+
golang.org/x/net v0.29.0 h1:5ORfpBpCs4HzDYoodCDBbwHzdR5UrLBZ3sOnUJmFoHo=
1134+
golang.org/x/net v0.29.0/go.mod h1:gLkgy8jTGERgjzMic6DS9+SP0ajcu6Xu3Orq/SpETg0=
11331135
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
11341136
golang.org/x/oauth2 v0.23.0 h1:PbgcYx2W7i4LvjJWEbf0ngHV6qJYr86PkAV3bXdLEbs=
11351137
golang.org/x/oauth2 v0.23.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI=
@@ -1233,8 +1235,8 @@ golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc
12331235
golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU=
12341236
golang.org/x/tools v0.13.0/go.mod h1:HvlwmtVNQAhOuCjW7xxvovg8wbNq7LwfXh/k7wXUl58=
12351237
golang.org/x/tools v0.15.0/go.mod h1:hpksKq4dtpQWS1uQ61JkdqWM3LscIS6Slf+VVkm+wQk=
1236-
golang.org/x/tools v0.24.0 h1:J1shsA93PJUEVaUSaay7UXAyE8aimq3GW0pjlolpa24=
1237-
golang.org/x/tools v0.24.0/go.mod h1:YhNqVBIfWHdzvTLs0d8LCuMhkKUgSUKldakyV7W/WDQ=
1238+
golang.org/x/tools v0.25.0 h1:oFU9pkj/iJgs+0DT+VMHrx+oBKs/LJMV+Uvg78sl+fE=
1239+
golang.org/x/tools v0.25.0/go.mod h1:/vtpO8WL1N9cQC3FN5zPqb//fRXskFHbLKk4OW1Q7rg=
12381240
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
12391241
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
12401242
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=

internal/controller/gitrepository_controller.go

+14
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ import (
2727
"time"
2828

2929
securejoin "github.com/cyphar/filepath-securejoin"
30+
"github.com/fluxcd/pkg/auth/azure"
3031
"github.com/fluxcd/pkg/runtime/logger"
3132
"github.com/go-git/go-git/v5/plumbing/transport"
3233
corev1 "k8s.io/api/core/v1"
@@ -647,6 +648,19 @@ func (r *GitRepositoryReconciler) getAuthOpts(ctx context.Context, obj *sourcev1
647648
if err != nil {
648649
return nil, err
649650
}
651+
652+
// Configure provider authentication if specified in spec
653+
if obj.Spec.Provider != "" && obj.Spec.Provider != sourcev1.GitProviderGeneric {
654+
if obj.Spec.Provider == sourcev1.GitProviderAzure {
655+
authOpts.ProviderOpts = &git.ProviderOptions{
656+
Name: obj.Spec.Provider,
657+
AzureOpts: []azure.OptFunc{
658+
azure.WithAzureDevOpsScope(),
659+
},
660+
}
661+
}
662+
}
663+
650664
return authOpts, nil
651665
}
652666

0 commit comments

Comments
 (0)