Skip to content

Commit 353f9d7

Browse files
feat(preflight): build preflight package for AZURE (#1725)
* feat(preflight): build preflight package for AZURE.
1 parent d0e8ae2 commit 353f9d7

File tree

274 files changed

+39082
-1
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

274 files changed

+39082
-1
lines changed

.github/workflows/nightly-build.yml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,9 @@ jobs:
9292
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
9393
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
9494
GOOGLE_CREDENTIALS: ${{ secrets.GOOGLE_CREDENTIALS }}
95+
AZURE_CLIENT_ID: ${{ secrets.AZURE_CLIENT_ID }}
96+
AZURE_CLIENT_SECRET: ${{ secrets.AZURE_CLIENT_SECRET }}
97+
AZURE_TENANT_ID: ${{ secrets.AZURE_TENANT_ID }}
9598
CI_ACCOUNT: ${{ secrets.CI_ACCOUNT }}
9699
CI_SUBACCOUNT: ${{ secrets.CI_SUBACCOUNT }}
97100
CI_API_KEY: ${{ secrets.CI_API_KEY }}

.github/workflows/test-build.yml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,9 @@ jobs:
9595
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
9696
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
9797
GOOGLE_CREDENTIALS: ${{ secrets.GOOGLE_CREDENTIALS }}
98+
AZURE_CLIENT_ID: ${{ secrets.AZURE_CLIENT_ID }}
99+
AZURE_CLIENT_SECRET: ${{ secrets.AZURE_CLIENT_SECRET }}
100+
AZURE_TENANT_ID: ${{ secrets.AZURE_TENANT_ID }}
98101
CI_ACCOUNT: ${{ secrets.CI_ACCOUNT }}
99102
CI_SUBACCOUNT: ${{ secrets.CI_SUBACCOUNT }}
100103
CI_API_KEY: ${{ secrets.CI_API_KEY }}

go.mod

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,10 @@ require (
5252
)
5353

5454
require (
55+
github.com/Azure/azure-sdk-for-go/sdk/azcore v1.18.0
56+
github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.10.1
57+
github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/authorization/armauthorization v1.0.0
58+
github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/resources/armsubscriptions v1.3.0
5559
github.com/aws/aws-sdk-go-v2/credentials v1.17.67
5660
github.com/aws/aws-sdk-go-v2/service/cloudtrail v1.48.4
5761
github.com/aws/aws-sdk-go-v2/service/eks v1.64.0
@@ -83,6 +87,8 @@ require (
8387
cloud.google.com/go/iam v1.5.2 // indirect
8488
cloud.google.com/go/longrunning v0.6.7 // indirect
8589
dario.cat/mergo v1.0.0 // indirect
90+
github.com/Azure/azure-sdk-for-go/sdk/internal v1.11.1 // indirect
91+
github.com/AzureAD/microsoft-authentication-library-for-go v1.4.2 // indirect
8692
github.com/Microsoft/go-winio v0.6.1 // indirect
8793
github.com/ProtonMail/go-crypto v1.1.3 // indirect
8894
github.com/agext/levenshtein v1.2.1 // indirect
@@ -108,6 +114,7 @@ require (
108114
github.com/go-logr/logr v1.4.2 // indirect
109115
github.com/go-logr/stdr v1.2.2 // indirect
110116
github.com/go-viper/mapstructure/v2 v2.2.1 // indirect
117+
github.com/golang-jwt/jwt/v5 v5.2.2 // indirect
111118
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect
112119
github.com/google/btree v1.1.2 // indirect
113120
github.com/google/go-cmp v0.7.0 // indirect
@@ -120,12 +127,14 @@ require (
120127
github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51 // indirect
121128
github.com/kevinburke/ssh_config v1.2.0 // indirect
122129
github.com/kr/pty v1.1.8 // indirect
130+
github.com/kylelemons/godebug v1.1.0 // indirect
123131
github.com/mattn/go-colorable v0.1.13 // indirect
124132
github.com/mattn/go-runewidth v0.0.9 // indirect
125133
github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b // indirect
126134
github.com/mitchellh/go-wordwrap v0.0.0-20150314170334-ad45545899c7 // indirect
127135
github.com/pelletier/go-toml/v2 v2.2.3 // indirect
128136
github.com/pjbgf/sha1cd v0.3.0 // indirect
137+
github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c // indirect
129138
github.com/russross/blackfriday/v2 v2.1.0 // indirect
130139
github.com/sagikazarmark/locafero v0.7.0 // indirect
131140
github.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3 // indirect

go.sum

Lines changed: 35 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,26 @@ dario.cat/mergo v1.0.0 h1:AGCNq9Evsj31mOgNPcLyXc+4PNABt905YmuqPYYpBWk=
2222
dario.cat/mergo v1.0.0/go.mod h1:uNxQE+84aUszobStD9th8a29P2fMDhsBdgRYvZOxGmk=
2323
github.com/AlecAivazis/survey/v2 v2.3.2 h1:TqTB+aDDCLYhf9/bD2TwSO8u8jDSmMUd2SUVO4gCnU8=
2424
github.com/AlecAivazis/survey/v2 v2.3.2/go.mod h1:TH2kPCDU3Kqq7pLbnCWwZXDBjnhZtmsCle5EiYDJ2fg=
25+
github.com/Azure/azure-sdk-for-go/sdk/azcore v1.18.0 h1:Gt0j3wceWMwPmiazCa8MzMA0MfhmPIz0Qp0FJ6qcM0U=
26+
github.com/Azure/azure-sdk-for-go/sdk/azcore v1.18.0/go.mod h1:Ot/6aikWnKWi4l9QB7qVSwa8iMphQNqkWALMoNT3rzM=
27+
github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.10.1 h1:B+blDbyVIG3WaikNxPnhPiJ1MThR03b3vKGtER95TP4=
28+
github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.10.1/go.mod h1:JdM5psgjfBf5fo2uWOZhflPWyDBZ/O/CNAH9CtsuZE4=
29+
github.com/Azure/azure-sdk-for-go/sdk/azidentity/cache v0.3.2 h1:yz1bePFlP5Vws5+8ez6T3HWXPmwOK7Yvq8QxDBD3SKY=
30+
github.com/Azure/azure-sdk-for-go/sdk/azidentity/cache v0.3.2/go.mod h1:Pa9ZNPuoNu/GztvBSKk9J1cDJW6vk/n0zLtV4mgd8N8=
31+
github.com/Azure/azure-sdk-for-go/sdk/internal v1.11.1 h1:FPKJS1T+clwv+OLGt13a8UjqeRuh0O4SJ3lUriThc+4=
32+
github.com/Azure/azure-sdk-for-go/sdk/internal v1.11.1/go.mod h1:j2chePtV91HrC22tGoRX3sGY42uF13WzmmV80/OdVAA=
33+
github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/authorization/armauthorization v1.0.0 h1:qtRcg5Y7jNJ4jEzPq4GpWLfTspHdNe2ZK6LjwGcjgmU=
34+
github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/authorization/armauthorization v1.0.0/go.mod h1:lPneRe3TwsoDRKY4O6YDLXHhEWrD+TIRa8XrV/3/fqw=
35+
github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/internal/v2 v2.0.0 h1:PTFGRSlMKCQelWwxUyYVEUqseBJVemLyqWJjvMyt0do=
36+
github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/internal/v2 v2.0.0/go.mod h1:LRr2FzBTQlONPPa5HREE5+RjSCTXl7BwOvYOaWTqCaI=
37+
github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/resources/armresources v1.1.1 h1:7CBQ+Ei8SP2c6ydQTGCCrS35bDxgTMfoP2miAwK++OU=
38+
github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/resources/armresources v1.1.1/go.mod h1:c/wcGeGx5FUPbM/JltUYHZcKmigwyVLJlDq+4HdtXaw=
39+
github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/resources/armsubscriptions v1.3.0 h1:wxQx2Bt4xzPIKvW59WQf1tJNx/ZZKPfN+EhPX3Z6CYY=
40+
github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/resources/armsubscriptions v1.3.0/go.mod h1:TpiwjwnW/khS0LKs4vW5UmmT9OWcxaveS8U7+tlknzo=
41+
github.com/AzureAD/microsoft-authentication-extensions-for-go/cache v0.1.1 h1:WJTmL004Abzc5wDB5VtZG2PJk5ndYDgVacGqfirKxjM=
42+
github.com/AzureAD/microsoft-authentication-extensions-for-go/cache v0.1.1/go.mod h1:tCcJZ0uHAmvjsVYzEFivsRTN00oz5BEsRgQHu5JZ9WE=
43+
github.com/AzureAD/microsoft-authentication-library-for-go v1.4.2 h1:oygO0locgZJe7PpYPXT5A29ZkwJaPqcva7BVeemZOZs=
44+
github.com/AzureAD/microsoft-authentication-library-for-go v1.4.2/go.mod h1:wP83P5OoQ5p6ip3ScPr0BAq0BvuPAvacpEuSzyouqAI=
2545
github.com/BurntSushi/toml v1.3.2 h1:o7IhLm0Msx3BaB+n3Ag7L8EVlByGnpq14C4YWiu/gL8=
2646
github.com/BurntSushi/toml v1.3.2/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ=
2747
github.com/Masterminds/semver v1.5.0 h1:H65muMkzWKEuNDnfl9d70GUjFniHKHRbFPGBuZ3QEww=
@@ -96,6 +116,8 @@ github.com/briandowns/spinner v1.17.0 h1:7HjHI07APcVZBT71J2UvJl3CAvYCnqqCrxW5gXS
96116
github.com/briandowns/spinner v1.17.0/go.mod h1:QOuQk7x+EaDASo80FEXwlwiA+j/PPIcX3FScO+3/ZPQ=
97117
github.com/cenkalti/backoff/v4 v4.2.0 h1:HN5dHm3WBOgndBH6E8V0q2jIYIR3s9yglV8k/+MN3u4=
98118
github.com/cenkalti/backoff/v4 v4.2.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE=
119+
github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs=
120+
github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
99121
github.com/cloudflare/circl v1.3.7 h1:qlCDlTPz2n9fu58M0Nh1J/JzcFpfgkFHHX3O35r5vcU=
100122
github.com/cloudflare/circl v1.3.7/go.mod h1:sRTcRWXGLrKw6yIGJ+l7amYJFfAXbZG0kBSc8r4zxgA=
101123
github.com/cpuguy83/go-md2man/v2 v2.0.2 h1:p1EgwI/C7NhT0JmVkwCD2ZBK8j4aeHQX2pMHHBfMQ6w=
@@ -108,6 +130,8 @@ github.com/cyphar/filepath-securejoin v0.2.5/go.mod h1:aPGpWjXOXUn2NCNjFvBE6aRxG
108130
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
109131
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
110132
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
133+
github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f h1:lO4WD4F/rVNCu3HqELle0jiPLLBs70cWOduZpkS1E78=
134+
github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f/go.mod h1:cuUVRXasLTGF7a8hSLbxyZXjz+1KgoB3wDUb6vlszIc=
111135
github.com/elazarl/goproxy v1.2.1 h1:njjgvO6cRG9rIqN2ebkqy6cQz2Njkx7Fsfv/zIZqgug=
112136
github.com/elazarl/goproxy v1.2.1/go.mod h1:YfEbZtqP4AetfO6d40vWchF3znWX7C7Vd6ZMfdL8z64=
113137
github.com/emirpasic/gods v1.12.0/go.mod h1:YfzfFFoVP/catgzJb4IKIqXjX78Ha8FMSDh3ymbK86o=
@@ -158,6 +182,8 @@ github.com/go-test/deep v1.0.3 h1:ZrJSEWsXzPOxaZnFteGEfooLba+ju3FYIbOrS+rQd68=
158182
github.com/go-test/deep v1.0.3/go.mod h1:wGDj63lr65AM2AQyKZd/NYHGb0R+1RLqB8NKt3aSFNA=
159183
github.com/go-viper/mapstructure/v2 v2.2.1 h1:ZAaOCxANMuZx5RCeg0mBdEZk7DZasvvZIxtHqx8aGss=
160184
github.com/go-viper/mapstructure/v2 v2.2.1/go.mod h1:oJDH3BJKyqBA2TXFhDsKDGDTlndYOZ6rGS0BRZIxGhM=
185+
github.com/golang-jwt/jwt/v5 v5.2.2 h1:Rl4B7itRWVtYIHFrSNd7vhTiz9UpLdi6gZhZ3wEeDy8=
186+
github.com/golang-jwt/jwt/v5 v5.2.2/go.mod h1:pqrtFR0X4osieyHYxtmOUWsAWrfe1Q5UVIyoH402zdk=
161187
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE=
162188
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
163189
github.com/golang/protobuf v1.1.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
@@ -219,6 +245,8 @@ github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51/go.mod h1:C
219245
github.com/kevinburke/ssh_config v0.0.0-20201106050909-4977a11b4351/go.mod h1:CT57kijsi8u/K/BOFA39wgDQJ9CxiF4nAY/ojJ6r6mM=
220246
github.com/kevinburke/ssh_config v1.2.0 h1:x584FjTGwHzMwvHx18PXxbBVzfnxogHaAReU4gf13a4=
221247
github.com/kevinburke/ssh_config v1.2.0/go.mod h1:CT57kijsi8u/K/BOFA39wgDQJ9CxiF4nAY/ojJ6r6mM=
248+
github.com/keybase/go-keychain v0.0.1 h1:way+bWYa6lDppZoZcgMbYsvC7GxljxrskdNInRtuthU=
249+
github.com/keybase/go-keychain v0.0.1/go.mod h1:PdEILRW3i9D8JcdM+FmY6RwkHGnhHxXwkPPMeUgOK1k=
222250
github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
223251
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
224252
github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI=
@@ -227,8 +255,9 @@ github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3x
227255
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
228256
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
229257
github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
230-
github.com/kylelemons/godebug v0.0.0-20170820004349-d65d576e9348 h1:MtvEpTB6LX3vkb4ax0b5D2DHbNAUsen0Gx5wZoq3lV4=
231258
github.com/kylelemons/godebug v0.0.0-20170820004349-d65d576e9348/go.mod h1:B69LEHPfb2qLo0BaaOLcbitczOKLWTsrBG9LczfCD4k=
259+
github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0SNc=
260+
github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw=
232261
github.com/kyokomi/emoji/v2 v2.2.12 h1:sSVA5nH9ebR3Zji1o31wu3yOwD1zKXQA2z0zUyeit60=
233262
github.com/kyokomi/emoji/v2 v2.2.12/go.mod h1:JUcn42DTdsXJo1SWanHh4HKDEyPaR5CqkmoirZZP9qE=
234263
github.com/matryer/is v1.2.0/go.mod h1:2fLPjFQM9rhQ15aVEtbuwhJinnOqrmgXPNdZsdwlWXA=
@@ -271,11 +300,15 @@ github.com/peterbourgon/diskv/v3 v3.0.1 h1:x06SQA46+PKIUftmEujdwSEpIx8kR+M9eLYsU
271300
github.com/peterbourgon/diskv/v3 v3.0.1/go.mod h1:kJ5Ny7vLdARGU3WUuy6uzO6T0nb/2gWcT1JiBvRmb5o=
272301
github.com/pjbgf/sha1cd v0.3.0 h1:4D5XXmUUBUl/xQ6IjCkEAbqXskkq/4O7LmGn0AqMDs4=
273302
github.com/pjbgf/sha1cd v0.3.0/go.mod h1:nZ1rrWOcGJ5uZgEEVL1VUM9iRQiZvWdbZjkKyFzPPsI=
303+
github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c h1:+mdjkGKdHQG3305AYmdv1U2eRNDiU2ErMBj1gwrq8eQ=
304+
github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c/go.mod h1:7rwL4CYBLnjLxUqIJNnCWiEdr3bn6IUYi15bNlnbCCU=
274305
github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
275306
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
276307
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
277308
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
278309
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
310+
github.com/redis/go-redis/v9 v9.8.0 h1:q3nRvjrlge/6UD7eTu/DSg2uYiU2mCL0G/uzBWqhicI=
311+
github.com/redis/go-redis/v9 v9.8.0/go.mod h1:huWgSWd8mW6+m0VPhJjSSQ+d6Nh1VICQ6Q5lHuCH/Iw=
279312
github.com/rogpeppe/go-internal v1.13.1 h1:KvO1DLK/DRN07sQ1LQKScxyZJuNnedQ5/wKSR38lUII=
280313
github.com/rogpeppe/go-internal v1.13.1/go.mod h1:uMEvuHeurkdAXX61udpOXGD/AzZDWNMNyH2VO9fmH0o=
281314
github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk=
@@ -413,6 +446,7 @@ golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBc
413446
golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
414447
golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
415448
golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
449+
golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
416450
golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
417451
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
418452
golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
//go:build preflight
2+
3+
package integration
4+
5+
import (
6+
"os"
7+
"testing"
8+
9+
"github.com/lacework/go-sdk/v2/lwpreflight/azure"
10+
"github.com/stretchr/testify/assert"
11+
)
12+
13+
func TestPreflightAzure(t *testing.T) {
14+
const (
15+
SubscriptionID = "1fe75302-1906-45bc-bdc1-79b76799dd74"
16+
)
17+
18+
clientID := os.Getenv("AZURE_CLIENT_ID")
19+
clientSecret := os.Getenv("AZURE_CLIENT_SECRET")
20+
tenantID := os.Getenv("AZURE_TENANT_ID")
21+
22+
preflight, err := azure.New(azure.Params{
23+
Agentless: true,
24+
Config: true,
25+
ActivityLog: true,
26+
SubscriptionID: SubscriptionID,
27+
TenantID: tenantID,
28+
ClientID: clientID,
29+
ClientSecret: clientSecret,
30+
})
31+
32+
assert.NoError(t, err)
33+
34+
result, err := preflight.Run()
35+
assert.NoError(t, err)
36+
assert.NotEmpty(t, result.Caller.ObjectID)
37+
assert.False(t, result.Caller.IsAdmin)
38+
assert.NotEmpty(t, result.Caller.TenantID)
39+
assert.NotEmpty(t, result.Details.Regions)
40+
assert.Contains(t, result.Errors["azure_agentless"], "Required permission missing: Microsoft.Compute/virtualMachineScaleSets/read")
41+
assert.Contains(t, result.Errors["azure_activity_log"], "Required permission missing: Microsoft.Insights/diagnosticSettings/delete")
42+
assert.Contains(t, result.Errors["azure_config"], "Required permission missing: Microsoft.Authorization/roleAssignments/write")
43+
}

lwpreflight/azure/azure.go

Lines changed: 106 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,106 @@
1+
package azure
2+
3+
import (
4+
"errors"
5+
6+
"github.com/Azure/azure-sdk-for-go/sdk/azcore"
7+
"github.com/Azure/azure-sdk-for-go/sdk/azidentity"
8+
)
9+
10+
type Preflight struct {
11+
cred azcore.TokenCredential
12+
subscriptionID string
13+
tenantID string
14+
integrationTypes []IntegrationType
15+
tasks []func(p *Preflight) error
16+
permissions map[string]bool
17+
18+
caller Caller
19+
details Details
20+
errors map[IntegrationType][]string
21+
}
22+
23+
type Result struct {
24+
Caller Caller
25+
Details Details
26+
Errors map[IntegrationType][]string
27+
}
28+
29+
type Params struct {
30+
Agentless bool
31+
Config bool
32+
ActivityLog bool
33+
SubscriptionID string
34+
TenantID string
35+
ClientID string
36+
ClientSecret string
37+
}
38+
39+
func New(params Params) (*Preflight, error) {
40+
integrationTypes := []IntegrationType{}
41+
tasks := []func(p *Preflight) error{
42+
FetchCaller,
43+
FetchPolicies,
44+
CheckPermissions,
45+
FetchDetails,
46+
}
47+
48+
if params.Config {
49+
integrationTypes = append(integrationTypes, Config)
50+
}
51+
if params.ActivityLog {
52+
integrationTypes = append(integrationTypes, ActivityLog)
53+
}
54+
if params.Agentless {
55+
integrationTypes = append(integrationTypes, Agentless)
56+
}
57+
58+
if params.SubscriptionID == "" {
59+
return nil, errors.New("SubscriptionID must be provided")
60+
}
61+
62+
// Initialize credentials
63+
var cred azcore.TokenCredential
64+
var err error
65+
if params.ClientID != "" && params.ClientSecret != "" {
66+
cred, err = azidentity.NewClientSecretCredential(
67+
params.TenantID,
68+
params.ClientID,
69+
params.ClientSecret,
70+
nil,
71+
)
72+
} else {
73+
cred, err = azidentity.NewDefaultAzureCredential(nil)
74+
}
75+
if err != nil {
76+
return nil, err
77+
}
78+
79+
preflight := &Preflight{
80+
cred: cred,
81+
subscriptionID: params.SubscriptionID,
82+
tenantID: params.TenantID,
83+
integrationTypes: integrationTypes,
84+
permissions: map[string]bool{},
85+
tasks: tasks,
86+
details: Details{},
87+
errors: map[IntegrationType][]string{},
88+
}
89+
90+
return preflight, nil
91+
}
92+
93+
func (p *Preflight) Run() (*Result, error) {
94+
for _, task := range p.tasks {
95+
err := task(p)
96+
if err != nil {
97+
return nil, err
98+
}
99+
}
100+
result := &Result{
101+
Caller: p.caller,
102+
Details: p.details,
103+
Errors: p.errors,
104+
}
105+
return result, nil
106+
}

0 commit comments

Comments
 (0)