@ -55,6 +55,63 @@ the tests:
 
			
		
	
		
		
			
				
					
					- `Microsoft.KeyVault/*` 
- `Microsoft.KeyVault/*` 
 
			
		
	
		
		
			
				
					
					- `Microsoft.EventHub/*` 
- `Microsoft.EventHub/*` 
 
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					### IAM and CI setup
 
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					To create the necessary IAM role with all the permissions, set up CI secrets and
 
			
		
	
		
		
			
				
					
					variables using
 
			
		
	
		
		
			
				
					
					[azure-gh-actions ](https://github.com/fluxcd/test-infra/tree/main/tf-modules/azure/github-actions )
 
			
		
	
		
		
			
				
					
					use:
 
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					```hcl
 
			
		
	
		
		
			
				
					
					resource "tls_private_key" "privatekey" {
 
			
		
	
		
		
			
				
					
					  algorithm = "RSA"
 
			
		
	
		
		
			
				
					
					  rsa_bits  = 4096
 
			
		
	
		
		
			
				
					
					}
 
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					module "azure_gh_actions" {
 
			
		
	
		
		
			
				
					
					  source = "git::https://github.com/fluxcd/test-infra.git//tf-modules/azure/github-actions"
 
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					  azure_owners          = ["owner-id-1", "owner-id-2"]
 
			
		
	
		
		
			
				
					
					  azure_app_name        = "flux2-e2e"
 
			
		
	
		
		
			
				
					
					  azure_app_description = "flux2 e2e"
 
			
		
	
		
		
			
				
					
					  azure_app_secret_name = "flux2-e2e"
 
			
		
	
		
		
			
				
					
					  azure_permissions = [
 
			
		
	
		
		
			
				
					
					    "Microsoft.Kubernetes/*",
 
			
		
	
		
		
			
				
					
					    "Microsoft.Resources/*",
 
			
		
	
		
		
			
				
					
					    "Microsoft.Authorization/roleAssignments/Read",
 
			
		
	
		
		
			
				
					
					    "Microsoft.Authorization/roleAssignments/Write",
 
			
		
	
		
		
			
				
					
					    "Microsoft.Authorization/roleAssignments/Delete",
 
			
		
	
		
		
			
				
					
					    "Microsoft.ContainerRegistry/*",
 
			
		
	
		
		
			
				
					
					    "Microsoft.ContainerService/*",
 
			
		
	
		
		
			
				
					
					    "Microsoft.KeyVault/*",
 
			
		
	
		
		
			
				
					
					    "Microsoft.EventHub/*"
 
			
		
	
		
		
			
				
					
					  ]
 
			
		
	
		
		
			
				
					
					  azure_location = "eastus"
 
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					  github_project = "flux2"
 
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					  github_secret_client_id_name       = "AZ_ARM_CLIENT_ID"
 
			
		
	
		
		
			
				
					
					  github_secret_client_secret_name   = "AZ_ARM_CLIENT_SECRET"
 
			
		
	
		
		
			
				
					
					  github_secret_subscription_id_name = "AZ_ARM_SUBSCRIPTION_ID"
 
			
		
	
		
		
			
				
					
					  github_secret_tenant_id_name       = "AZ_ARM_TENANT_ID"
 
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					  github_secret_custom = {
 
			
		
	
		
		
			
				
					
					    "TF_VAR_azuredevops_org"   = "< org-name > ",
 
			
		
	
		
		
			
				
					
					    "TF_VAR_azuredevops_pat"   = "< pat > ",
 
			
		
	
		
		
			
				
					
					    "GITREPO_SSH_CONTENTS"     = base64encode(tls_private_key.privatekey.private_key_openssh),
 
			
		
	
		
		
			
				
					
					    "GITREPO_SSH_PUB_CONTENTS" = base64encode(tls_private_key.privatekey.public_key_openssh)
 
			
		
	
		
		
			
				
					
					  }
 
			
		
	
		
		
			
				
					
					}
 
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					output "publickey" {
 
			
		
	
		
		
			
				
					
					  value = tls_private_key.privatekey.public_key_openssh
 
			
		
	
		
		
			
				
					
					}
 
			
		
	
		
		
			
				
					
					```
 
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					Copy the `publickey`  output printed after applying, or run `terraform output`  to
 
			
		
	
		
		
			
				
					
					print it again, and add it in the Azure DevOps SSH public keys under the user
 
			
		
	
		
		
			
				
					
					account that'll be used by flux in the tests.
 
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					## GCP
## GCP
 
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					### Architecture
### Architecture
 
			
		
	
	
		
		
			
				
					
						
						
						
							
								 
						
					 
					@ -73,8 +130,11 @@ for the terraform variables
 
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					- GCP account with an active project to be able to create GKE and GCR, and permission to assign roles.
- GCP account with an active project to be able to create GKE and GCR, and permission to assign roles.
 
			
		
	
		
		
			
				
					
					- Existing GCP KMS keyring and crypto key.
- Existing GCP KMS keyring and crypto key.
 
			
		
	
		
		
			
				
					
					  - [Create a Keyring ](https://cloud.google.com/kms/docs/create-key-ring )
  - [Create a Keyring ](https://cloud.google.com/kms/docs/create-key-ring ) in
 
			
				
				
			
		
	
		
		
			
				
					
					  - [Create a Crypto Key ](https://cloud.google.com/kms/docs/create-key )
    `global`  location.
 
			
				
				
			
		
	
		
		
	
		
		
	
		
		
			
				
					
					  - [Create a Crypto Key ](https://cloud.google.com/kms/docs/create-key ) with
 
			
		
	
		
		
			
				
					
					    symmetric algorithm for encryption and decryption, and software based
 
			
		
	
		
		
			
				
					
					    protection level.
 
			
		
	
		
		
			
				
					
					- gcloud CLI, need to be logged in using `gcloud auth login`  as a User (not a
- gcloud CLI, need to be logged in using `gcloud auth login`  as a User (not a
 
			
		
	
		
		
			
				
					
					  Service Account), configure application default credentials with `gcloud auth
  Service Account), configure application default credentials with `gcloud auth
 
			
		
	
		
		
			
				
					
					  application-default login` and docker credential helper with `gcloud auth configure-docker` .
  application-default login` and docker credential helper with `gcloud auth configure-docker` .
 
			
		
	
	
		
		
			
				
					
						
							
								 
						
						
							
								 
						
						
					 
					@ -112,15 +172,71 @@ for the terraform variables
 
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					Following roles are needed for provisioning the infrastructure and running the tests:
Following roles are needed for provisioning the infrastructure and running the tests:
 
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					- Compute Instance Admin (v1)
- Compute Instance Admin (v1) - `roles/compute.instanceAdmin.v1` 
 
			
				
				
			
		
	
		
		
			
				
					
					- Kubernetes Engine Admin
- Kubernetes Engine Admin - `roles/container.admin` 
 
			
				
				
			
		
	
		
		
			
				
					
					- Service Account User
- Service Account User - `roles/iam.serviceAccountUser` 
 
			
				
				
			
		
	
		
		
			
				
					
					- Artifact Registry Administrator
- Service Account Token Creator - `roles/iam.serviceAccountTokenCreator` 
 
			
				
				
			
		
	
		
		
			
				
					
					- Artifact Registry Repository Administrator
- Artifact Registry Administrator - `roles/artifactregistry.admin` 
 
			
				
				
			
		
	
		
		
			
				
					
					- Cloud KMS Admin
- Artifact Registry Repository Administrator - `roles/artifactregistry.repoAdmin` 
 
			
				
				
			
		
	
		
		
			
				
					
					- Cloud KMS CryptoKey Encrypter
- Cloud KMS Admin - `roles/cloudkms.admin` 
 
			
				
				
			
		
	
		
		
			
				
					
					- Source Repository Administrator
- Cloud KMS CryptoKey Encrypter - `roles/cloudkms.cryptoKeyEncrypt` 
 
			
				
				
			
		
	
		
		
			
				
					
					- Pub/Sub Admin
- Source Repository Administrator - `roles/source.admin` 
 
			
				
				
			
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					
					- Pub/Sub Admin - `roles/pubsub.admin` 
 
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					### IAM and CI setup
 
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					To create the necessary IAM role with all the permissions, set up CI secrets and
 
			
		
	
		
		
			
				
					
					variables using
 
			
		
	
		
		
			
				
					
					[gcp-gh-actions ](https://github.com/fluxcd/test-infra/tree/main/tf-modules/gcp/github-actions )
 
			
		
	
		
		
			
				
					
					use:
 
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					```hcl
 
			
		
	
		
		
			
				
					
					provider "google" {}
 
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					resource "tls_private_key" "privatekey" {
 
			
		
	
		
		
			
				
					
					  algorithm = "RSA"
 
			
		
	
		
		
			
				
					
					  rsa_bits  = 4096
 
			
		
	
		
		
			
				
					
					}
 
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					module "gcp_gh_actions" {
 
			
		
	
		
		
			
				
					
					  source = "git::https://github.com/fluxcd/test-infra.git//tf-modules/gcp/github-actions"
 
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					  gcp_service_account_id   = "flux2-e2e-test"
 
			
		
	
		
		
			
				
					
					  gcp_service_account_name = "flux2-e2e-test"
 
			
		
	
		
		
			
				
					
					  gcp_roles = [
 
			
		
	
		
		
			
				
					
					    "roles/compute.instanceAdmin.v1",
 
			
		
	
		
		
			
				
					
					    "roles/container.admin",
 
			
		
	
		
		
			
				
					
					    "roles/iam.serviceAccountUser",
 
			
		
	
		
		
			
				
					
					    "roles/iam.serviceAccountTokenCreator",
 
			
		
	
		
		
			
				
					
					    "roles/artifactregistry.admin",
 
			
		
	
		
		
			
				
					
					    "roles/artifactregistry.repoAdmin",
 
			
		
	
		
		
			
				
					
					    "roles/cloudkms.admin",
 
			
		
	
		
		
			
				
					
					    "roles/cloudkms.cryptoKeyEncrypter",
 
			
		
	
		
		
			
				
					
					    "roles/source.admin",
 
			
		
	
		
		
			
				
					
					    "roles/pubsub.admin"
 
			
		
	
		
		
			
				
					
					  ]
 
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					  github_project = "flux2"
 
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					  github_secret_credentials_name = "FLUX2_E2E_GOOGLE_CREDENTIALS"
 
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					  github_secret_custom = {
 
			
		
	
		
		
			
				
					
					    "TF_VAR_gcp_keyring"       = "< keyring-name > ",
 
			
		
	
		
		
			
				
					
					    "TF_VAR_gcp_crypto_key"    = "< key-name > ",
 
			
		
	
		
		
			
				
					
					    "TF_VAR_gcp_email"         = "< email > ",
 
			
		
	
		
		
			
				
					
					    "GITREPO_SSH_CONTENTS"     = base64encode(tls_private_key.privatekey.private_key_openssh),
 
			
		
	
		
		
			
				
					
					    "GITREPO_SSH_PUB_CONTENTS" = base64encode(tls_private_key.privatekey.public_key_openssh)
 
			
		
	
		
		
			
				
					
					  }
 
			
		
	
		
		
			
				
					
					}
 
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					output "publickey" {
 
			
		
	
		
		
			
				
					
					  value = tls_private_key.privatekey.public_key_openssh
 
			
		
	
		
		
			
				
					
					}
 
			
		
	
		
		
			
				
					
					```
 
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					Copy the `publickey`  output printed after applying, or run `terraform output`  to
 
			
		
	
		
		
			
				
					
					print it again, and add it in the Google Source Repository SSH public keys under
 
			
		
	
		
		
			
				
					
					the user account with email address referred in `TF_VAR_gcp_email`  above.
 
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					## Tests
## Tests