зеркало из https://github.com/microsoft/AzureTRE.git
Merge branch 'main' into snyk-upgrade-815bf1f8452c9bc9e57b898e23202350
This commit is contained in:
Коммит
d75c2f01e9
|
@ -401,6 +401,8 @@ jobs:
|
|||
BUNDLE_DIR: "./templates/workspace_services/ohdsi"}
|
||||
- {BUNDLE_TYPE: "workspace_service",
|
||||
BUNDLE_DIR: "./templates/workspace_services/azuresql"}
|
||||
- {BUNDLE_TYPE: "workspace_service",
|
||||
BUNDLE_DIR: "./templates/workspace_services/openai"}
|
||||
- {BUNDLE_TYPE: "user_resource",
|
||||
BUNDLE_DIR: "./templates/workspace_services/guacamole/user_resources/guacamole-azure-windowsvm"}
|
||||
- {BUNDLE_TYPE: "user_resource",
|
||||
|
|
93
CHANGELOG.md
93
CHANGELOG.md
|
@ -1,10 +1,69 @@
|
|||
<!-- markdownlint-disable MD041 -->
|
||||
## 0.19.0 (Unreleased)
|
||||
## 0.20.0 (Unreleased)
|
||||
|
||||
**BREAKING CHANGES & MIGRATIONS**:
|
||||
|
||||
FEATURES:
|
||||
|
||||
ENHANCEMENTS:
|
||||
|
||||
BUG FIXES:
|
||||
|
||||
COMPONENTS:
|
||||
|
||||
## 0.19.1
|
||||
|
||||
**BREAKING CHANGES & MIGRATIONS**:
|
||||
* Workspace creation blocked due to Azure API depreciation ([#4095](https://github.com/microsoft/AzureTRE/issues/4095))
|
||||
|
||||
ENHANCEMENTS:
|
||||
* Update Unrestricted and Airlock Import Review workspaces to be built off the Base workspace 0.19.0 ([#4087](https://github.com/microsoft/AzureTRE/pull/4087))
|
||||
* Update Release Docs (part of [#2727](https://github.com/microsoft/AzureTRE/issues/2727))
|
||||
* Add info regarding workspace limit into docs ([#3920](https://github.com/microsoft/AzureTRE/issues/3920))
|
||||
|
||||
BUG FIXES:
|
||||
* Add Snyk Security updates for September
|
||||
* Workspace creation blocked due to Azure API depreciation ([#4095](https://github.com/microsoft/AzureTRE/issues/4095))
|
||||
|
||||
COMPONENTS:
|
||||
| name | version |
|
||||
| ----- | ----- |
|
||||
| devops | 0.5.2 |
|
||||
| core | 0.10.8 |
|
||||
| ui | 0.5.28 |
|
||||
| tre-service-guacamole-linuxvm | 1.0.3 |
|
||||
| tre-service-guacamole-import-reviewvm | 0.2.9 |
|
||||
| tre-service-guacamole-export-reviewvm | 0.1.9 |
|
||||
| tre-service-guacamole-windowsvm | 1.0.1 |
|
||||
| tre-service-guacamole | 0.10.9 |
|
||||
| tre-service-databricks | 1.0.4 |
|
||||
| tre-service-mlflow | 0.7.9 |
|
||||
| tre-service-innereye | 0.6.5 |
|
||||
| tre-workspace-service-ohdsi | 0.2.5 |
|
||||
| tre-workspace-service-gitea | 1.0.5 |
|
||||
| tre-workspace-service-mysql | 1.0.4 |
|
||||
| tre-workspace-service-azuresql | 1.0.10 |
|
||||
| tre-user-resource-aml-compute-instance | 0.5.7 |
|
||||
| tre-service-azureml | 0.8.11 |
|
||||
| tre-workspace-service-health | 0.2.6 |
|
||||
| tre-workspace-service-openai | 1.0.1 |
|
||||
| tre-workspace-airlock-import-review | 0.13.1 |
|
||||
| tre-workspace-unrestricted | 0.12.1 |
|
||||
| tre-workspace-base | 1.5.7 |
|
||||
| tre-shared-service-cyclecloud | 0.6.3 |
|
||||
| tre-shared-service-databricks-private-auth | 0.1.6 |
|
||||
| tre-shared-service-sonatype-nexus | 3.0.1 |
|
||||
| tre-shared-service-admin-vm | 0.4.4 |
|
||||
| tre-shared-service-firewall | 1.2.1 |
|
||||
| tre-shared-service-gitea | 1.0.3 |
|
||||
| tre-shared-service-certs | 0.5.2 |
|
||||
| tre-shared-service-airlock-notifier | 1.0.2 |
|
||||
|
||||
## 0.19.0
|
||||
|
||||
FEATURES:
|
||||
* Azure SQL Workspace Service ([#3969](https://github.com/microsoft/AzureTRE/issues/3969))
|
||||
* OpenAI Workspace Service ([#3810](https://github.com/microsoft/AzureTRE/issues/3810))
|
||||
|
||||
ENHANCEMENTS:
|
||||
* Add Case Study Docs ([#1366](https://github.com/microsoft/AzureTRE/issues/1366))
|
||||
|
@ -22,8 +81,40 @@ BUG FIXES:
|
|||
* Update API and Resource Processor opentelemetry versions ([#4052](https://github.com/microsoft/AzureTRE/issues/4052))
|
||||
* Fix broken links in new Case Study Docs
|
||||
* Update Linux VM to stop screensaver locking out the user ([#4065](https://github.com/microsoft/AzureTRE/issues/4065))
|
||||
* Update .NET version on Linux VMs ([#4067](https://github.com/microsoft/AzureTRE/issues/4067))
|
||||
|
||||
COMPONENTS:
|
||||
| name | version |
|
||||
| ----- | ----- |
|
||||
| devops | 0.5.1 |
|
||||
| core | 0.10.6 |
|
||||
| ui | 0.5.28 |
|
||||
| tre-service-guacamole-linuxvm | 1.0.2 |
|
||||
| tre-service-guacamole-import-reviewvm | 0.2.8 |
|
||||
| tre-service-guacamole-export-reviewvm | 0.1.8 |
|
||||
| tre-service-guacamole-windowsvm | 1.0.0 |
|
||||
| tre-service-guacamole | 0.10.8 |
|
||||
| tre-service-databricks | 1.0.3 |
|
||||
| tre-service-mlflow | 0.7.8 |
|
||||
| tre-service-innereye | 0.6.4 |
|
||||
| tre-workspace-service-ohdsi | 0.2.4 |
|
||||
| tre-workspace-service-gitea | 1.0.3 |
|
||||
| tre-workspace-service-mysql | 1.0.2 |
|
||||
| tre-workspace-service-azuresql | 1.0.9 |
|
||||
| tre-user-resource-aml-compute-instance | 0.5.7 |
|
||||
| tre-service-azureml | 0.8.10 |
|
||||
| tre-workspace-service-health | 0.2.5 |
|
||||
| tre-workspace-airlock-import-review | 0.12.16 |
|
||||
| tre-workspace-unrestricted | 0.11.4 |
|
||||
| tre-workspace-base | 1.5.4 |
|
||||
| tre-shared-service-cyclecloud | 0.5.5 |
|
||||
| tre-shared-service-databricks-private-auth | 0.1.5 |
|
||||
| tre-shared-service-sonatype-nexus | 3.0.0 |
|
||||
| tre-shared-service-admin-vm | 0.4.3 |
|
||||
| tre-shared-service-firewall | 1.2.0 |
|
||||
| tre-shared-service-gitea | 1.0.2 |
|
||||
| tre-shared-service-certs | 0.5.1 |
|
||||
| tre-shared-service-airlock-notifier | 1.0.1 |
|
||||
|
||||
## 0.18.0
|
||||
|
||||
|
|
|
@ -1 +1 @@
|
|||
__version__ = "0.18.11"
|
||||
__version__ = "0.19.3"
|
||||
|
|
|
@ -24,7 +24,7 @@ workspace_tags_metadata = [
|
|||
{"name": "workspaces", "description": " **Workspace Owners and Researchers** can view their own workspaces"},
|
||||
{"name": "workspace services", "description": "**Workspace Owners** administer workspace services, **Workspace Owners and Researchers** can view services in the workspaces they belong to"},
|
||||
{"name": "user resources", "description": "**Researchers** administer and can view their own researchers, **Workspace Owners** can view/update/delete all user resources in their workspaces"},
|
||||
{"name": "shared services", "description": "**TRE administratiors** administer shared services"},
|
||||
{"name": "shared services", "description": "**TRE administratiors** administer shared services"}
|
||||
]
|
||||
|
||||
# Root
|
||||
|
|
|
@ -21,6 +21,7 @@ from models.schemas.workspace import WorkspaceAuthInResponse, WorkspaceInCreate,
|
|||
from models.schemas.workspace_service import WorkspaceServiceInCreate, WorkspaceServicesInList, WorkspaceServiceInResponse
|
||||
from models.schemas.resource import ResourceHistoryInList, ResourcePatch
|
||||
from models.schemas.resource_template import ResourceTemplateInformationInList
|
||||
from models.schemas.users import UsersInResponse
|
||||
from resources import strings
|
||||
from services.access_service import AuthConfigValidationError
|
||||
from services.authentication import get_current_admin_user, \
|
||||
|
@ -187,6 +188,13 @@ async def invoke_action_on_workspace(response: Response, action: str, user=Depen
|
|||
return OperationInResponse(operation=operation)
|
||||
|
||||
|
||||
@workspaces_shared_router.get("/workspaces/{workspace_id}/users", response_model=UsersInResponse, name=strings.API_GET_WORKSPACE_USERS)
|
||||
async def get_workspace_users(workspace=Depends(get_workspace_by_id_from_path)) -> UsersInResponse:
|
||||
access_service = get_access_service()
|
||||
users = access_service.get_workspace_users(workspace)
|
||||
return UsersInResponse(users=users)
|
||||
|
||||
|
||||
# workspace operations
|
||||
# This method only returns templates that the authenticated user is authorized to use
|
||||
@workspaces_shared_router.get("/workspaces/{workspace_id}/workspace-service-templates", response_model=ResourceTemplateInformationInList, name=strings.API_GET_WORKSPACE_SERVICE_TEMPLATES_IN_WORKSPACE)
|
||||
|
|
|
@ -10,6 +10,6 @@ RoleAssignment = namedtuple("RoleAssignment", "resource_id, role_id")
|
|||
class User(BaseModel):
|
||||
id: str
|
||||
name: str
|
||||
email: str
|
||||
email: str = Field(None)
|
||||
roles: List[str] = Field([])
|
||||
roleAssignments: List[RoleAssignment] = Field([])
|
||||
|
|
|
@ -0,0 +1,28 @@
|
|||
from pydantic import BaseModel, Field
|
||||
from typing import List
|
||||
|
||||
from models.domain.authentication import User
|
||||
|
||||
|
||||
class UsersInResponse(BaseModel):
|
||||
users: List[User] = Field(..., title="Users", description="List of users assigned to the workspace")
|
||||
|
||||
class Config:
|
||||
schema_extra = {
|
||||
"example": {
|
||||
"users": [
|
||||
{
|
||||
"id": 1,
|
||||
"name": "John Doe",
|
||||
"email": "john.doe@example.com",
|
||||
"roles": ["WorkspaceOwner", "WorkspaceResearcher"]
|
||||
},
|
||||
{
|
||||
"id": 2,
|
||||
"name": "Jane Smith",
|
||||
"email": "jane.smith@example.com",
|
||||
"roles": ["WorkspaceResearcher"]
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
|
@ -15,6 +15,8 @@ API_DELETE_WORKSPACE = "Delete workspace"
|
|||
API_UPDATE_WORKSPACE = "Update an existing workspace"
|
||||
API_INVOKE_ACTION_ON_WORKSPACE = "Invoke action on a workspace"
|
||||
|
||||
API_GET_WORKSPACE_USERS = "Get all users for a workspace"
|
||||
|
||||
API_GET_ALL_WORKSPACE_SERVICES = "Get all workspace services for workspace"
|
||||
API_GET_WORKSPACE_SERVICE_BY_ID = "Get workspace service by Id"
|
||||
API_CREATE_WORKSPACE_SERVICE = "Create a workspace service"
|
||||
|
|
|
@ -219,7 +219,7 @@ class AzureADAuthorization(AccessService):
|
|||
|
||||
@staticmethod
|
||||
def _get_service_principal_assigned_roles_endpoint(client_id) -> str:
|
||||
return f"{MICROSOFT_GRAPH_URL}/v1.0/serviceprincipals/{client_id}/appRoleAssignedTo?$select=appRoleId,principalId,principalType"
|
||||
return f"{MICROSOFT_GRAPH_URL}/v1.0/serviceprincipals/{client_id}/appRoleAssignedTo?$select=appRoleId,principalId,principalType,principalDisplayName"
|
||||
|
||||
@staticmethod
|
||||
def _get_batch_endpoint() -> str:
|
||||
|
@ -227,11 +227,11 @@ class AzureADAuthorization(AccessService):
|
|||
|
||||
@staticmethod
|
||||
def _get_users_endpoint(user_object_id) -> str:
|
||||
return "/users/" + user_object_id + "?$select=mail,id"
|
||||
return "/users/" + user_object_id + "?$select=displayName,mail,id"
|
||||
|
||||
@staticmethod
|
||||
def _get_group_members_endpoint(group_object_id) -> str:
|
||||
return "/groups/" + group_object_id + "/transitiveMembers?$select=mail,id"
|
||||
return "/groups/" + group_object_id + "/transitiveMembers?$select=displayName,mail,id"
|
||||
|
||||
def _get_app_sp_graph_data(self, client_id: str) -> dict:
|
||||
msgraph_token = self._get_msgraph_token()
|
||||
|
@ -243,7 +243,7 @@ class AzureADAuthorization(AccessService):
|
|||
sp_roles_endpoint = self._get_service_principal_assigned_roles_endpoint(client_id)
|
||||
return requests.get(sp_roles_endpoint, headers=self._get_auth_header(msgraph_token)).json()
|
||||
|
||||
def _get_user_emails(self, roles_graph_data, msgraph_token):
|
||||
def _get_user_details(self, roles_graph_data, msgraph_token):
|
||||
batch_endpoint = self._get_batch_endpoint()
|
||||
batch_request_body = self._get_batch_users_by_role_assignments_body(roles_graph_data)
|
||||
headers = self._get_auth_header(msgraph_token)
|
||||
|
@ -262,43 +262,59 @@ class AzureADAuthorization(AccessService):
|
|||
|
||||
return users_graph_data
|
||||
|
||||
def _get_user_emails_from_response(self, users_graph_data):
|
||||
user_emails = {}
|
||||
for user_data in users_graph_data["responses"]:
|
||||
# Handle user endpoint response
|
||||
if "users" in user_data["body"]["@odata.context"] and user_data["body"]["mail"] is not None:
|
||||
user_emails[user_data["body"]["id"]] = [user_data["body"]["mail"]]
|
||||
# Handle group endpoint response
|
||||
if "directoryObjects" in user_data["body"]["@odata.context"]:
|
||||
group_members_emails = []
|
||||
for group_member in user_data["body"]["value"]:
|
||||
if group_member["mail"] is not None and group_member["mail"] not in group_members_emails:
|
||||
group_members_emails.append(group_member["mail"])
|
||||
user_emails[user_data["id"]] = group_members_emails
|
||||
return user_emails
|
||||
|
||||
def get_workspace_role_assignment_details(self, workspace: Workspace):
|
||||
msgraph_token = self._get_msgraph_token()
|
||||
app_role_ids = {role_name: workspace.properties[role_id] for role_name, role_id in self.WORKSPACE_ROLES_DICT.items()}
|
||||
inverted_app_role_ids = {role_id: role_name for role_name, role_id in app_role_ids.items()}
|
||||
|
||||
sp_id = workspace.properties["sp_id"]
|
||||
roles_graph_data = self._get_user_role_assignments(sp_id, msgraph_token)
|
||||
users_graph_data = self._get_user_emails(roles_graph_data, msgraph_token)
|
||||
user_emails = self._get_user_emails_from_response(users_graph_data)
|
||||
|
||||
workspace_role_assignments_details = defaultdict(list)
|
||||
def _get_roles_for_principal(self, user_id, roles_graph_data, app_id_to_role_name):
|
||||
roles = []
|
||||
for role_assignment in roles_graph_data["value"]:
|
||||
principal_id = role_assignment["principalId"]
|
||||
principal_type = role_assignment["principalType"]
|
||||
if role_assignment["principalId"] == user_id:
|
||||
roles.append(app_id_to_role_name[role_assignment["appRoleId"]])
|
||||
return roles
|
||||
|
||||
if principal_type != "ServicePrincipal" and principal_id in user_emails:
|
||||
app_role_id = role_assignment["appRoleId"]
|
||||
app_role_name = inverted_app_role_ids.get(app_role_id)
|
||||
def _get_users_inc_groups_from_response(self, users_graph_data, roles_graph_data, app_id_to_role_name) -> List[User]:
|
||||
users = []
|
||||
for user_data in users_graph_data["responses"]:
|
||||
if "users" in user_data["body"]["@odata.context"]:
|
||||
# Handle user endpoint response
|
||||
user_id = user_data["body"]["id"]
|
||||
user_name = user_data["body"]["displayName"]
|
||||
|
||||
if app_role_name:
|
||||
workspace_role_assignments_details[app_role_name].extend(user_emails[principal_id])
|
||||
if "users" in user_data["body"]["@odata.context"]:
|
||||
user_email = user_data["body"]["mail"]
|
||||
# if user with id does not already exist in users
|
||||
if not any(user.id == user_id for user in users):
|
||||
users.append(User(id=user_id, name=user_name, email=user_email, roles=self._get_roles_for_principal(user_id, roles_graph_data, app_id_to_role_name)))
|
||||
|
||||
# Handle group endpoint response
|
||||
elif "directoryObjects" in user_data["body"]["@odata.context"]:
|
||||
group_id = user_data["id"]
|
||||
for group_member in user_data["body"]["value"]:
|
||||
user_id = group_member["id"]
|
||||
user_name = group_member["displayName"]
|
||||
user_email = group_member["mail"]
|
||||
|
||||
if not any(user.id == user_id for user in users):
|
||||
users.append(User(id=user_id, name=user_name, email=user_email, roles=self._get_roles_for_principal(group_id, roles_graph_data, app_id_to_role_name)))
|
||||
|
||||
return users
|
||||
|
||||
def get_workspace_users(self, workspace: Workspace) -> List[User]:
|
||||
msgraph_token = self._get_msgraph_token()
|
||||
sp_graph_data = self._get_app_sp_graph_data(workspace.properties["client_id"])
|
||||
app_id_to_role_name = {app_role["id"]: app_role["value"] for app_role in sp_graph_data["value"][0]["appRoles"]}
|
||||
roles_graph_data = self._get_user_role_assignments(workspace.properties["sp_id"], msgraph_token)
|
||||
users_graph_data = self._get_user_details(roles_graph_data, msgraph_token)
|
||||
users_inc_groups = self._get_users_inc_groups_from_response(users_graph_data, roles_graph_data, app_id_to_role_name)
|
||||
|
||||
return users_inc_groups
|
||||
|
||||
def get_workspace_user_emails_by_role_assignment(self, workspace: Workspace):
|
||||
users = self.get_workspace_users(workspace)
|
||||
workspace_role_assignments_details = {}
|
||||
for user in users:
|
||||
if user.email:
|
||||
for role in user.roles:
|
||||
if role not in workspace_role_assignments_details:
|
||||
workspace_role_assignments_details[role] = []
|
||||
workspace_role_assignments_details[role].append(user.email)
|
||||
return workspace_role_assignments_details
|
||||
|
||||
def _get_batch_users_by_role_assignments_body(self, roles_graph_data):
|
||||
|
|
|
@ -20,7 +20,11 @@ class AccessService(OAuth2AuthorizationCodeBearer):
|
|||
pass
|
||||
|
||||
@abstractmethod
|
||||
def get_workspace_role_assignment_details(self, workspace: Workspace) -> dict:
|
||||
def get_workspace_users(self, workspace: Workspace) -> List[User]:
|
||||
pass
|
||||
|
||||
@abstractmethod
|
||||
def get_workspace_user_emails_by_role_assignment(self, workspace: Workspace) -> dict:
|
||||
pass
|
||||
|
||||
@staticmethod
|
||||
|
|
|
@ -273,7 +273,7 @@ async def _handle_existing_review_resource(existing_resource: AirlockReviewUserR
|
|||
async def save_and_publish_event_airlock_request(airlock_request: AirlockRequest, airlock_request_repo: AirlockRequestRepository, user: User, workspace: Workspace):
|
||||
|
||||
access_service = get_access_service()
|
||||
role_assignment_details = access_service.get_workspace_role_assignment_details(workspace)
|
||||
role_assignment_details = access_service.get_workspace_user_emails_by_role_assignment(workspace)
|
||||
if config.ENABLE_AIRLOCK_EMAIL_CHECK:
|
||||
check_email_exists(role_assignment_details)
|
||||
|
||||
|
@ -332,7 +332,7 @@ async def update_and_publish_event_airlock_request(
|
|||
logger.debug(f"Sending status changed event for airlock request item: {airlock_request.id}")
|
||||
await send_status_changed_event(airlock_request=updated_airlock_request, previous_status=airlock_request.status)
|
||||
access_service = get_access_service()
|
||||
role_assignment_details = access_service.get_workspace_role_assignment_details(workspace)
|
||||
role_assignment_details = access_service.get_workspace_user_emails_by_role_assignment(workspace)
|
||||
await send_airlock_notification_event(updated_airlock_request, workspace, role_assignment_details)
|
||||
return updated_airlock_request
|
||||
except Exception:
|
||||
|
|
|
@ -135,7 +135,7 @@ class TestAirlockRoutesThatRequireOwnerOrResearcherRights():
|
|||
patch("api.routes.workspaces.OperationRepository.resource_has_deployed_operation"), \
|
||||
patch("api.routes.airlock.AirlockRequestRepository.save_item"), \
|
||||
patch("api.dependencies.workspaces.WorkspaceRepository.get_workspace_by_id"), \
|
||||
patch("services.aad_authentication.AzureADAuthorization.get_workspace_role_assignment_details", return_value={"WorkspaceResearcher": ["researcher@outlook.com"], "WorkspaceOwner": ["owner@outlook.com"], "AirlockManager": ["manager@outlook.com"]}):
|
||||
patch("services.aad_authentication.AzureADAuthorization.get_workspace_user_emails_by_role_assignment", return_value={"WorkspaceResearcher": ["researcher@outlook.com"], "WorkspaceOwner": ["owner@outlook.com"], "AirlockManager": ["manager@outlook.com"]}):
|
||||
yield
|
||||
app.dependency_overrides = {}
|
||||
|
||||
|
|
|
@ -1028,7 +1028,7 @@ class TestWorkspaceServiceRoutesThatRequireOwnerRights:
|
|||
# [PATCH] /workspaces/{workspace_id}/workspace-services/{service_id}/user-resources/{resource_id}
|
||||
@ patch("api.routes.workspaces.ResourceHistoryRepository.save_item", return_value=AsyncMock())
|
||||
@ patch("api.routes.workspaces.send_resource_request_message", return_value=sample_resource_operation(resource_id=USER_RESOURCE_ID, operation_id=OPERATION_ID))
|
||||
@ patch("api.routes.workspaces.ResourceTemplateRepository.get_template_by_name_and_version", return_value=sample_workspace_service())
|
||||
@ patch("api.routes.workspaces.ResourceTemplateRepository.get_template_by_name_and_version", return_value=sample_resource_template())
|
||||
@ patch("api.routes.workspaces.validate_user_has_valid_role_for_user_resource")
|
||||
@ patch("api.dependencies.workspaces.WorkspaceServiceRepository.get_workspace_service_by_id", return_value=sample_workspace_service())
|
||||
@ patch("api.dependencies.workspaces.WorkspaceRepository.get_workspace_by_id", return_value=sample_workspace())
|
||||
|
@ -1054,7 +1054,7 @@ class TestWorkspaceServiceRoutesThatRequireOwnerRights:
|
|||
# [PATCH] /workspaces/{workspace_id}/workspace-services/{service_id}/user-resources/{resource_id}
|
||||
@ patch("api.routes.workspaces.ResourceHistoryRepository.save_item", return_value=AsyncMock())
|
||||
@ patch("api.routes.resource_helpers.send_resource_request_message", return_value=sample_resource_operation(resource_id=USER_RESOURCE_ID, operation_id=OPERATION_ID))
|
||||
@ patch("api.routes.workspaces.ResourceTemplateRepository.get_template_by_name_and_version", return_value=sample_workspace_service())
|
||||
@ patch("api.routes.workspaces.ResourceTemplateRepository.get_template_by_name_and_version", return_value=sample_resource_template())
|
||||
@ patch("api.routes.workspaces.validate_user_has_valid_role_for_user_resource")
|
||||
@ patch("api.dependencies.workspaces.WorkspaceServiceRepository.get_workspace_service_by_id", return_value=sample_workspace_service())
|
||||
@ patch("api.dependencies.workspaces.WorkspaceRepository.get_workspace_by_id", return_value=sample_workspace())
|
||||
|
@ -1080,9 +1080,10 @@ class TestWorkspaceServiceRoutesThatRequireOwnerRights:
|
|||
assert response.status_code == status.HTTP_202_ACCEPTED
|
||||
|
||||
# [PATCH] /workspaces/{workspace_id}/workspace-services/{service_id}/user-resources/{resource_id}
|
||||
@ patch("api.routes.workspaces.OperationRepository.save_item", return_value=AsyncMock())
|
||||
@ patch("api.routes.workspaces.ResourceHistoryRepository.save_item", return_value=AsyncMock())
|
||||
@ patch("api.routes.workspaces.send_resource_request_message", return_value=sample_resource_operation(resource_id=USER_RESOURCE_ID, operation_id=OPERATION_ID))
|
||||
@ patch("api.routes.workspaces.ResourceTemplateRepository.get_template_by_name_and_version", return_value=sample_workspace_service())
|
||||
@ patch("api.routes.workspaces.ResourceTemplateRepository.get_template_by_name_and_version", return_value=sample_resource_template())
|
||||
@ patch("api.routes.workspaces.validate_user_has_valid_role_for_user_resource")
|
||||
@ patch("api.dependencies.workspaces.WorkspaceServiceRepository.get_workspace_service_by_id", return_value=sample_workspace_service())
|
||||
@ patch("api.dependencies.workspaces.WorkspaceRepository.get_workspace_by_id", return_value=sample_workspace())
|
||||
|
@ -1090,8 +1091,7 @@ class TestWorkspaceServiceRoutesThatRequireOwnerRights:
|
|||
@ patch("api.routes.workspaces.UserResourceRepository.update_item_with_etag", return_value=sample_user_resource_object())
|
||||
@ patch("api.routes.workspaces.UserResourceRepository.get_timestamp", return_value=FAKE_UPDATE_TIMESTAMP)
|
||||
@ patch("db.repositories.resources.ResourceRepository.create", return_value=AsyncMock())
|
||||
@ patch("db.repositories.resources.ResourceRepository.get_resource_by_id", return_value=AsyncMock())
|
||||
async def test_patch_user_resource_with_downgrade_version_returns_bad_request(self, _, __, ___, update_item_mock, ____, _____, ______, _______, ________, _________, __________, app, client):
|
||||
async def test_patch_user_resource_with_downgrade_version_returns_bad_request(self, _, __, ___, ____, _____, ______, _______, ________, _________, __________, ___________, app, client):
|
||||
user_resource_service_patch = {"templateVersion": "0.0.1"}
|
||||
etag = "some-etag-value"
|
||||
|
||||
|
@ -1109,7 +1109,7 @@ class TestWorkspaceServiceRoutesThatRequireOwnerRights:
|
|||
# [PATCH] /workspaces/{workspace_id}/workspace-services/{service_id}/user-resources/{resource_id}
|
||||
@ patch("api.routes.workspaces.ResourceHistoryRepository.save_item", return_value=AsyncMock())
|
||||
@ patch("api.routes.resource_helpers.send_resource_request_message", return_value=sample_resource_operation(resource_id=USER_RESOURCE_ID, operation_id=OPERATION_ID))
|
||||
@ patch("api.routes.workspaces.ResourceTemplateRepository.get_template_by_name_and_version", return_value=sample_workspace_service())
|
||||
@ patch("api.routes.workspaces.ResourceTemplateRepository.get_template_by_name_and_version", return_value=sample_resource_template())
|
||||
@ patch("api.routes.workspaces.validate_user_has_valid_role_for_user_resource")
|
||||
@ patch("api.dependencies.workspaces.WorkspaceServiceRepository.get_workspace_service_by_id", return_value=sample_workspace_service())
|
||||
@ patch("api.dependencies.workspaces.WorkspaceRepository.get_workspace_by_id", return_value=sample_workspace())
|
||||
|
@ -1117,7 +1117,8 @@ class TestWorkspaceServiceRoutesThatRequireOwnerRights:
|
|||
@ patch("api.routes.workspaces.UserResourceRepository.update_item_with_etag", return_value=sample_user_resource_object())
|
||||
@ patch("api.routes.workspaces.UserResourceRepository.get_timestamp", return_value=FAKE_UPDATE_TIMESTAMP)
|
||||
@ patch("db.repositories.resources.ResourceRepository.create", return_value=AsyncMock())
|
||||
async def test_patch_user_resource_with_upgrade_minor_version_patches_user_resource(self, resource_repo_create_mock, ___, update_item_mock, ____, _____, ______, _______, ________, _________, __________, app, client):
|
||||
@ patch("db.repositories.resources.ResourceRepository.get_resource_by_id", return_value=AsyncMock())
|
||||
async def test_patch_user_resource_with_upgrade_minor_version_patches_user_resource(self, __, ___, ____, update_item_mock, _____, ______, _______, ________, _________, __________, ___________, app, client):
|
||||
user_resource_service_patch = {"templateVersion": "0.2.0"}
|
||||
etag = "some-etag-value"
|
||||
|
||||
|
@ -1135,13 +1136,16 @@ class TestWorkspaceServiceRoutesThatRequireOwnerRights:
|
|||
# [PATCH] /workspaces/{workspace_id}/workspace-services/{service_id}/user-resources/{resource_id}
|
||||
@ patch("api.routes.workspaces.ResourceHistoryRepository.save_item", return_value=AsyncMock())
|
||||
@ patch("api.routes.resource_helpers.send_resource_request_message", return_value=sample_resource_operation(resource_id=USER_RESOURCE_ID, operation_id=OPERATION_ID))
|
||||
@ patch("api.routes.workspaces.UserResourceRepository.update_item_with_etag", return_value=sample_user_resource_object())
|
||||
@ patch("api.routes.workspaces.ResourceTemplateRepository.get_template_by_name_and_version", return_value=sample_resource_template())
|
||||
@ patch("api.routes.workspaces.validate_user_has_valid_role_for_user_resource")
|
||||
@ patch("api.dependencies.workspaces.WorkspaceServiceRepository.get_workspace_service_by_id", return_value=sample_workspace_service())
|
||||
@ patch("api.dependencies.workspaces.WorkspaceRepository.get_workspace_by_id", return_value=sample_workspace())
|
||||
@ patch("api.dependencies.workspaces.UserResourceRepository.get_user_resource_by_id", return_value=sample_user_resource_object())
|
||||
@ patch("api.routes.workspaces.UserResourceRepository.update_item_with_etag", return_value=sample_user_resource_object())
|
||||
@ patch("api.routes.workspaces.UserResourceRepository.get_timestamp", return_value=FAKE_UPDATE_TIMESTAMP)
|
||||
async def test_patch_user_resource_validates_against_template(self, _, __, ___, ____, _____, update_item_mock, ______, _______, app, client):
|
||||
@ patch("db.repositories.resources.ResourceRepository.create", return_value=AsyncMock())
|
||||
@ patch("db.repositories.resources.ResourceRepository.get_resource_by_id", return_value=AsyncMock())
|
||||
async def test_patch_user_resource_validates_against_template(self, _, __, ___, update_item_mock, ____, _____, ______, _______, ________, _________, __________, app, client):
|
||||
user_resource_service_patch = {'isEnabled': False, 'properties': {'vm_size': 'large'}}
|
||||
etag = "some-etag-value"
|
||||
|
||||
|
@ -1240,7 +1244,7 @@ class TestWorkspaceServiceRoutesThatRequireOwnerRights:
|
|||
@ patch("api.routes.resource_helpers.ResourceRepository.get_resource_dependency_list", return_value=[sample_workspace_service().__dict__])
|
||||
@ patch("api.routes.workspaces.ResourceHistoryRepository.save_item", return_value=AsyncMock())
|
||||
@ patch("api.routes.workspaces.send_resource_request_message", return_value=sample_resource_operation(resource_id=WORKSPACE_ID, operation_id=OPERATION_ID))
|
||||
@ patch("api.routes.workspaces.ResourceTemplateRepository.get_template_by_name_and_version", return_value=sample_workspace_service())
|
||||
@ patch("api.routes.workspaces.ResourceTemplateRepository.get_template_by_name_and_version", return_value=sample_resource_template())
|
||||
@ patch("api.dependencies.workspaces.WorkspaceServiceRepository.get_workspace_service_by_id", return_value=sample_workspace_service())
|
||||
@ patch("api.dependencies.workspaces.WorkspaceRepository.get_workspace_by_id")
|
||||
@ patch("api.routes.workspaces.WorkspaceServiceRepository.update_item_with_etag", return_value=sample_workspace_service())
|
||||
|
@ -1266,7 +1270,7 @@ class TestWorkspaceServiceRoutesThatRequireOwnerRights:
|
|||
@ patch("api.routes.resource_helpers.ResourceRepository.get_resource_dependency_list", return_value=[sample_workspace_service().__dict__])
|
||||
@ patch("api.routes.workspaces.ResourceHistoryRepository.save_item", return_value=AsyncMock())
|
||||
@ patch("api.routes.workspaces.send_resource_request_message", return_value=sample_resource_operation(resource_id=WORKSPACE_ID, operation_id=OPERATION_ID))
|
||||
@ patch("api.routes.workspaces.ResourceTemplateRepository.get_template_by_name_and_version", return_value=sample_workspace_service())
|
||||
@ patch("api.routes.workspaces.ResourceTemplateRepository.get_template_by_name_and_version", return_value=sample_resource_template())
|
||||
@ patch("api.dependencies.workspaces.WorkspaceServiceRepository.get_workspace_service_by_id", return_value=sample_workspace_service())
|
||||
@ patch("api.dependencies.workspaces.WorkspaceRepository.get_workspace_by_id")
|
||||
@ patch("api.routes.workspaces.WorkspaceServiceRepository.update_item_with_etag", return_value=sample_workspace_service())
|
||||
|
@ -1294,7 +1298,7 @@ class TestWorkspaceServiceRoutesThatRequireOwnerRights:
|
|||
@ patch("api.routes.resource_helpers.ResourceRepository.get_resource_dependency_list", return_value=[sample_workspace_service().__dict__])
|
||||
@ patch("api.routes.workspaces.ResourceHistoryRepository.save_item", return_value=AsyncMock())
|
||||
@ patch("api.routes.workspaces.send_resource_request_message", return_value=sample_resource_operation(resource_id=WORKSPACE_ID, operation_id=OPERATION_ID))
|
||||
@ patch("api.routes.workspaces.ResourceTemplateRepository.get_template_by_name_and_version", return_value=sample_workspace_service())
|
||||
@ patch("api.routes.workspaces.ResourceTemplateRepository.get_template_by_name_and_version", return_value=sample_resource_template())
|
||||
@ patch("api.dependencies.workspaces.WorkspaceServiceRepository.get_workspace_service_by_id", return_value=sample_workspace_service())
|
||||
@ patch("api.dependencies.workspaces.WorkspaceRepository.get_workspace_by_id")
|
||||
@ patch("api.routes.workspaces.WorkspaceServiceRepository.update_item_with_etag", return_value=sample_workspace_service())
|
||||
|
@ -1321,7 +1325,7 @@ class TestWorkspaceServiceRoutesThatRequireOwnerRights:
|
|||
@ patch("api.routes.resource_helpers.ResourceRepository.get_resource_dependency_list", return_value=[sample_workspace_service().__dict__])
|
||||
@ patch("api.routes.workspaces.ResourceHistoryRepository.save_item", return_value=AsyncMock())
|
||||
@ patch("api.routes.workspaces.send_resource_request_message", return_value=sample_resource_operation(resource_id=WORKSPACE_ID, operation_id=OPERATION_ID))
|
||||
@ patch("api.routes.workspaces.ResourceTemplateRepository.get_template_by_name_and_version", return_value=sample_workspace_service())
|
||||
@ patch("api.routes.workspaces.ResourceTemplateRepository.get_template_by_name_and_version", return_value=sample_resource_template())
|
||||
@ patch("api.dependencies.workspaces.WorkspaceServiceRepository.get_workspace_service_by_id", return_value=sample_workspace_service())
|
||||
@ patch("api.dependencies.workspaces.WorkspaceRepository.get_workspace_by_id")
|
||||
@ patch("api.routes.workspaces.WorkspaceServiceRepository.update_item_with_etag", return_value=sample_workspace_service())
|
||||
|
@ -1645,3 +1649,31 @@ class TestWorkspaceServiceRoutesThatRequireOwnerOrResearcherRights:
|
|||
|
||||
assert response.status_code == status.HTTP_200_OK
|
||||
assert response.json()["operation"]["resourceId"] == user_resource.id
|
||||
|
||||
@pytest.mark.parametrize("auth_class", ["aad_authentication.AzureADAuthorization"])
|
||||
@patch("api.dependencies.workspaces.WorkspaceRepository.get_workspace_by_id", return_value=sample_workspace())
|
||||
async def test_get_workspace_users_returns_users(self, _, auth_class, app, client):
|
||||
with patch(f"services.{auth_class}.get_workspace_users") as get_workspace_users_mock:
|
||||
|
||||
users = [
|
||||
{
|
||||
"id": "123",
|
||||
"name": "John Doe",
|
||||
"email": "john.doe@example.com",
|
||||
"roles": ["WorkspaceOwner", "WorkspaceResearcher"],
|
||||
'roleAssignments': []
|
||||
},
|
||||
{
|
||||
"id": "456",
|
||||
"name": "Jane Smith",
|
||||
"email": "jane.smith@example.com",
|
||||
"roles": ["WorkspaceResearcher"],
|
||||
'roleAssignments': []
|
||||
}
|
||||
]
|
||||
get_workspace_users_mock.return_value = users
|
||||
|
||||
response = await client.get(app.url_path_for(strings.API_GET_WORKSPACE_USERS, workspace_id=WORKSPACE_ID))
|
||||
|
||||
assert response.status_code == status.HTTP_200_OK
|
||||
assert response.json()["users"] == users
|
||||
|
|
|
@ -108,7 +108,7 @@ class ServiceBusReceivedMessageMock:
|
|||
@patch('service_bus.airlock_request_status_update.AirlockRequestRepository.create')
|
||||
@patch('service_bus.airlock_request_status_update.WorkspaceRepository.create')
|
||||
@patch('logging.exception')
|
||||
@patch("services.aad_authentication.AzureADAuthorization.get_workspace_role_assignment_details", return_value={"researcher_emails": ["researcher@outlook.com"], "owner_emails": ["owner@outlook.com"]})
|
||||
@patch("services.aad_authentication.AzureADAuthorization.get_workspace_user_emails_by_role_assignment", return_value={"researcher_emails": ["researcher@outlook.com"], "owner_emails": ["owner@outlook.com"]})
|
||||
async def test_receiving_good_message(_, logging_mock, workspace_repo, airlock_request_repo, eg_client):
|
||||
|
||||
eg_client().send = AsyncMock()
|
||||
|
|
|
@ -17,9 +17,10 @@ class PrincipalRole:
|
|||
|
||||
|
||||
class UserPrincipal:
|
||||
def __init__(self, principal_id, mail):
|
||||
def __init__(self, principal_id, mail, name):
|
||||
self.principal_id = principal_id
|
||||
self.mail = mail
|
||||
self.display_name = name
|
||||
|
||||
|
||||
class GroupPrincipal:
|
||||
|
@ -28,6 +29,63 @@ class GroupPrincipal:
|
|||
self.members = members
|
||||
|
||||
|
||||
user_principal_1 = UserPrincipal("user_principal_id1", "test_user1@email.com", "test_user1")
|
||||
user_principal_2 = UserPrincipal("user_principal_id2", "test_user2@email.com", "test_user2")
|
||||
user_principal_3 = UserPrincipal("user_principal_id3", "test_user3@email.com", "test_user3")
|
||||
user_principal_4 = UserPrincipal("user_principal_id4", "test_user4@email.com", "test_user4")
|
||||
|
||||
group_principal = GroupPrincipal("group_principal_id", [user_principal_3, user_principal_4])
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def roles_response():
|
||||
workspace_owner_role_id = "1abc4"
|
||||
return get_mock_role_response(
|
||||
[
|
||||
PrincipalRole(user_principal_1.principal_id, workspace_owner_role_id, "User"),
|
||||
PrincipalRole(group_principal.principal_id, workspace_owner_role_id, "Group")
|
||||
]
|
||||
)
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def user_response():
|
||||
return get_mock_batch_response(
|
||||
[user_principal_1], []
|
||||
)
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def group_response():
|
||||
return get_mock_batch_response(
|
||||
[], [group_principal]
|
||||
)
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def users_and_group_response():
|
||||
return get_mock_batch_response(
|
||||
[user_principal_1, user_principal_2], [group_principal]
|
||||
)
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def get_app_sp_graph_data_mock():
|
||||
return {
|
||||
"value": [
|
||||
{
|
||||
"id": "12345",
|
||||
"appRoles": [
|
||||
{"id": "1abc3", "value": "WorkspaceResearcher"},
|
||||
{"id": "1abc4", "value": "WorkspaceOwner"},
|
||||
{"id": "1abc5", "value": "AirlockManager"},
|
||||
],
|
||||
"servicePrincipalNames": ["api://tre_ws_1234"],
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
|
||||
def test_extract_workspace__raises_error_if_client_id_not_available():
|
||||
access_service = AzureADAuthorization()
|
||||
with pytest.raises(AuthConfigValidationError):
|
||||
|
@ -296,34 +354,25 @@ def test_raises_auth_config_error_if_auth_info_has_incorrect_roles(_):
|
|||
)
|
||||
|
||||
|
||||
@patch("services.aad_authentication.AzureADAuthorization._get_app_sp_graph_data")
|
||||
@patch("services.aad_authentication.AzureADAuthorization._get_user_role_assignments")
|
||||
@patch("services.aad_authentication.AzureADAuthorization._get_user_emails")
|
||||
@patch("services.aad_authentication.AzureADAuthorization._get_user_details")
|
||||
@patch(
|
||||
"services.aad_authentication.AzureADAuthorization._get_msgraph_token",
|
||||
return_value="token",
|
||||
)
|
||||
def test_get_workspace_role_assignment_details_with_single_user_returns_user_mail_and_role_assignment(
|
||||
_, users, roles
|
||||
def test_get_workspace_user_emails_by_role_assignment_with_single_user_returns_user_mail_and_role_assignment(
|
||||
_, users, roles, app_sp_graph_data_mock, user_response, roles_response, get_app_sp_graph_data_mock
|
||||
):
|
||||
access_service = AzureADAuthorization()
|
||||
|
||||
# Build user response
|
||||
user_principal_id = "user_principal_id"
|
||||
user_email = "test_user@email.com"
|
||||
user_response = get_mock_batch_response(
|
||||
[UserPrincipal(user_principal_id, user_email)], []
|
||||
)
|
||||
# Use fixtures
|
||||
users.return_value = user_response
|
||||
|
||||
# Build user role assignment response
|
||||
workspace_owner_role_id = "1234"
|
||||
roles_response = get_mock_role_response(
|
||||
[PrincipalRole(user_principal_id, workspace_owner_role_id, "User")]
|
||||
)
|
||||
roles.return_value = roles_response
|
||||
app_sp_graph_data_mock.return_value = get_app_sp_graph_data_mock
|
||||
|
||||
# Act
|
||||
role_assignment_details = access_service.get_workspace_role_assignment_details(
|
||||
role_assignment_details = access_service.get_workspace_user_emails_by_role_assignment(
|
||||
Workspace(
|
||||
id="id",
|
||||
templateName="tre-workspace-base",
|
||||
|
@ -331,43 +380,39 @@ def test_get_workspace_role_assignment_details_with_single_user_returns_user_mai
|
|||
etag="",
|
||||
properties={
|
||||
"sp_id": "ab123",
|
||||
"app_role_id_workspace_owner": workspace_owner_role_id,
|
||||
"client_id": "ab124",
|
||||
"app_role_id_workspace_owner": "1abc4",
|
||||
"app_role_id_workspace_researcher": "ab125",
|
||||
"app_role_id_workspace_airlock_manager": "ab130",
|
||||
},
|
||||
)
|
||||
)
|
||||
|
||||
assert role_assignment_details["WorkspaceOwner"] == [user_email]
|
||||
assert role_assignment_details["WorkspaceOwner"] == ["test_user1@email.com"]
|
||||
|
||||
|
||||
@patch("services.aad_authentication.AzureADAuthorization._get_app_sp_graph_data")
|
||||
@patch("services.aad_authentication.AzureADAuthorization._get_user_role_assignments")
|
||||
@patch("services.aad_authentication.AzureADAuthorization._get_user_emails")
|
||||
@patch("services.aad_authentication.AzureADAuthorization._get_user_details")
|
||||
@patch(
|
||||
"services.aad_authentication.AzureADAuthorization._get_msgraph_token",
|
||||
return_value="token",
|
||||
)
|
||||
def test_get_workspace_role_assignment_details_with_single_user_with_no_mail_is_not_returned(
|
||||
_, users, roles
|
||||
def test_get_workspace_user_emails_by_role_assignment_with_single_user_with_no_mail_is_not_returned(
|
||||
_, users, roles, app_sp_graph_data_mock, user_response, roles_response, get_app_sp_graph_data_mock
|
||||
):
|
||||
access_service = AzureADAuthorization()
|
||||
|
||||
# Build user response
|
||||
user_principal_id = "user_principal_id"
|
||||
user_response = get_mock_batch_response(
|
||||
[UserPrincipal(user_principal_id, None)], []
|
||||
)
|
||||
users.return_value = user_response
|
||||
user_response_no_mail = user_response.copy()
|
||||
user_response_no_mail["responses"][0]["body"]["mail"] = None
|
||||
users.return_value = user_response_no_mail
|
||||
|
||||
# Build user role assignment response
|
||||
workspace_owner_role_id = "1234"
|
||||
roles_response = get_mock_role_response(
|
||||
[PrincipalRole(user_principal_id, workspace_owner_role_id, "User")]
|
||||
)
|
||||
roles.return_value = roles_response
|
||||
app_sp_graph_data_mock.return_value = get_app_sp_graph_data_mock
|
||||
|
||||
# Act
|
||||
role_assignment_details = access_service.get_workspace_role_assignment_details(
|
||||
role_assignment_details = access_service.get_workspace_user_emails_by_role_assignment(
|
||||
Workspace(
|
||||
id="id",
|
||||
templateName="tre-workspace-base",
|
||||
|
@ -375,7 +420,8 @@ def test_get_workspace_role_assignment_details_with_single_user_with_no_mail_is_
|
|||
etag="",
|
||||
properties={
|
||||
"sp_id": "ab123",
|
||||
"app_role_id_workspace_owner": workspace_owner_role_id,
|
||||
"client_id": "ab124",
|
||||
"app_role_id_workspace_owner": "1abc4",
|
||||
"app_role_id_workspace_researcher": "ab125",
|
||||
"app_role_id_workspace_airlock_manager": "ab130",
|
||||
},
|
||||
|
@ -385,34 +431,24 @@ def test_get_workspace_role_assignment_details_with_single_user_with_no_mail_is_
|
|||
assert len(role_assignment_details) == 0
|
||||
|
||||
|
||||
@patch("services.aad_authentication.AzureADAuthorization._get_app_sp_graph_data")
|
||||
@patch("services.aad_authentication.AzureADAuthorization._get_user_role_assignments")
|
||||
@patch("services.aad_authentication.AzureADAuthorization._get_user_emails")
|
||||
@patch("services.aad_authentication.AzureADAuthorization._get_user_details")
|
||||
@patch(
|
||||
"services.aad_authentication.AzureADAuthorization._get_msgraph_token",
|
||||
return_value="token",
|
||||
)
|
||||
def test_get_workspace_role_assignment_details_with_only_groups_assigned_returns_group_members(
|
||||
_, users_and_groups, roles
|
||||
def test_get_workspace_user_emails_by_role_assignment_with_only_groups_assigned_returns_group_members(
|
||||
_, users_and_groups, roles, app_sp_graph_data_mock, group_response, roles_response, get_app_sp_graph_data_mock
|
||||
):
|
||||
access_service = AzureADAuthorization()
|
||||
|
||||
# Build group response
|
||||
user_in_group = UserPrincipal("user_principal_id1", "test_user1@email.com")
|
||||
group_principal_id = "group_principal_id"
|
||||
group_response = get_mock_batch_response(
|
||||
[], [GroupPrincipal(group_principal_id, members=[user_in_group])]
|
||||
)
|
||||
users_and_groups.return_value = group_response
|
||||
|
||||
# Build user role assignment response
|
||||
workspace_owner_role_id = "1234"
|
||||
roles_response = get_mock_role_response(
|
||||
[PrincipalRole(group_principal_id, workspace_owner_role_id, "Group")]
|
||||
)
|
||||
roles.return_value = roles_response
|
||||
app_sp_graph_data_mock.return_value = get_app_sp_graph_data_mock
|
||||
|
||||
# Act
|
||||
role_assignment_details = access_service.get_workspace_role_assignment_details(
|
||||
role_assignment_details = access_service.get_workspace_user_emails_by_role_assignment(
|
||||
Workspace(
|
||||
id="id",
|
||||
templateName="tre-workspace-base",
|
||||
|
@ -420,7 +456,8 @@ def test_get_workspace_role_assignment_details_with_only_groups_assigned_returns
|
|||
etag="",
|
||||
properties={
|
||||
"sp_id": "ab123",
|
||||
"app_role_id_workspace_owner": workspace_owner_role_id,
|
||||
"client_id": "ab124",
|
||||
"app_role_id_workspace_owner": "1abc4",
|
||||
"app_role_id_workspace_researcher": "ab125",
|
||||
"app_role_id_workspace_airlock_manager": "ab130",
|
||||
},
|
||||
|
@ -428,49 +465,29 @@ def test_get_workspace_role_assignment_details_with_only_groups_assigned_returns
|
|||
)
|
||||
|
||||
assert len(role_assignment_details) == 1
|
||||
assert "test_user1@email.com" in role_assignment_details["WorkspaceOwner"]
|
||||
assert "test_user3@email.com" in role_assignment_details["WorkspaceOwner"]
|
||||
assert "test_user4@email.com" in role_assignment_details["WorkspaceOwner"]
|
||||
|
||||
|
||||
@patch("services.aad_authentication.AzureADAuthorization._get_app_sp_graph_data")
|
||||
@patch("services.aad_authentication.AzureADAuthorization._get_user_role_assignments")
|
||||
@patch("services.aad_authentication.AzureADAuthorization._get_user_emails")
|
||||
@patch("services.aad_authentication.AzureADAuthorization._get_user_details")
|
||||
@patch(
|
||||
"services.aad_authentication.AzureADAuthorization._get_msgraph_token",
|
||||
return_value="token",
|
||||
)
|
||||
def test_get_workspace_role_assignment_details_with_group_with_multiple_users_returned_as_expected(
|
||||
_, users_and_groups, roles
|
||||
def test_get_workspace_user_emails_by_role_assignment_with_groups_and_users_assigned_returned_as_expected(
|
||||
_, users_and_groups, roles, app_sp_graph_data_mock, roles_response, get_app_sp_graph_data_mock, users_and_group_response
|
||||
):
|
||||
|
||||
access_service = AzureADAuthorization()
|
||||
|
||||
# Build group response
|
||||
user_principal_id1 = "user_principal_id1"
|
||||
user_email1 = "test_user1@email.com"
|
||||
|
||||
user_principal_id2 = "user_principal_id2"
|
||||
user_email2 = "test_user2@email.com"
|
||||
|
||||
group_principal = GroupPrincipal(
|
||||
"group_principal_id",
|
||||
members=[
|
||||
UserPrincipal(user_principal_id1, user_email1),
|
||||
UserPrincipal(user_principal_id2, user_email2),
|
||||
],
|
||||
)
|
||||
|
||||
# Get batch response
|
||||
users_groups_response = get_mock_batch_response([], [group_principal])
|
||||
|
||||
users_and_groups.return_value = users_groups_response
|
||||
|
||||
# Build user role assignment response
|
||||
workspace_owner_role_id = "1234"
|
||||
roles_response = get_mock_role_response(
|
||||
[PrincipalRole(group_principal.principal_id, workspace_owner_role_id, "Group")]
|
||||
)
|
||||
roles.return_value = roles_response
|
||||
app_sp_graph_data_mock.return_value = get_app_sp_graph_data_mock
|
||||
users_and_groups.return_value = users_and_group_response
|
||||
|
||||
# Act
|
||||
role_assignment_details = access_service.get_workspace_role_assignment_details(
|
||||
role_assignment_details = access_service.get_workspace_user_emails_by_role_assignment(
|
||||
Workspace(
|
||||
id="id",
|
||||
templateName="tre-workspace-base",
|
||||
|
@ -478,7 +495,8 @@ def test_get_workspace_role_assignment_details_with_group_with_multiple_users_re
|
|||
etag="",
|
||||
properties={
|
||||
"sp_id": "ab123",
|
||||
"app_role_id_workspace_owner": workspace_owner_role_id,
|
||||
"client_id": "ab123",
|
||||
"app_role_id_workspace_owner": "ab124",
|
||||
"app_role_id_workspace_researcher": "ab125",
|
||||
"app_role_id_workspace_airlock_manager": "ab130",
|
||||
},
|
||||
|
@ -486,78 +504,15 @@ def test_get_workspace_role_assignment_details_with_group_with_multiple_users_re
|
|||
)
|
||||
|
||||
assert len(role_assignment_details) == 1
|
||||
assert "test_user2@email.com" in role_assignment_details["WorkspaceOwner"]
|
||||
assert "test_user1@email.com" in role_assignment_details["WorkspaceOwner"]
|
||||
|
||||
|
||||
@patch("services.aad_authentication.AzureADAuthorization._get_user_role_assignments")
|
||||
@patch("services.aad_authentication.AzureADAuthorization._get_user_emails")
|
||||
@patch(
|
||||
"services.aad_authentication.AzureADAuthorization._get_msgraph_token",
|
||||
return_value="token",
|
||||
)
|
||||
def test_get_workspace_role_assignment_details_with_groups_and_users_assigned_returned_as_expected(
|
||||
_, users_and_groups, roles
|
||||
):
|
||||
access_service = AzureADAuthorization()
|
||||
|
||||
# Build group response
|
||||
user_principal_id1 = "user_principal_id1"
|
||||
user_email1 = "test_user1@email.com"
|
||||
|
||||
group_principal = GroupPrincipal(
|
||||
"group_principal_id", members=[UserPrincipal(user_principal_id1, user_email1)]
|
||||
)
|
||||
|
||||
# User assigned to the role, not in any group
|
||||
user_principal_id2 = "user_principal_id2"
|
||||
user_email2 = "test_user2@email.com"
|
||||
|
||||
# Get batch response
|
||||
users_groups_response = get_mock_batch_response(
|
||||
[UserPrincipal(user_principal_id2, user_email2)], [group_principal]
|
||||
)
|
||||
|
||||
users_and_groups.return_value = users_groups_response
|
||||
|
||||
# Build user role assignment response
|
||||
workspace_owner_role_id = "1234"
|
||||
roles_response = get_mock_role_response(
|
||||
[
|
||||
PrincipalRole(user_principal_id1, workspace_owner_role_id, "User"),
|
||||
PrincipalRole(user_principal_id2, workspace_owner_role_id, "User"),
|
||||
PrincipalRole(
|
||||
group_principal.principal_id, workspace_owner_role_id, "Group"
|
||||
),
|
||||
]
|
||||
)
|
||||
roles.return_value = roles_response
|
||||
|
||||
# Act
|
||||
role_assignment_details = access_service.get_workspace_role_assignment_details(
|
||||
Workspace(
|
||||
id="id",
|
||||
templateName="tre-workspace-base",
|
||||
templateVersion="0.1.0",
|
||||
etag="",
|
||||
properties={
|
||||
"sp_id": "ab123",
|
||||
"app_role_id_workspace_owner": workspace_owner_role_id,
|
||||
"app_role_id_workspace_researcher": "ab125",
|
||||
"app_role_id_workspace_airlock_manager": "ab130",
|
||||
},
|
||||
)
|
||||
)
|
||||
|
||||
assert len(role_assignment_details) == 1
|
||||
assert "test_user2@email.com" in role_assignment_details["WorkspaceOwner"]
|
||||
assert "test_user1@email.com" in role_assignment_details["WorkspaceOwner"]
|
||||
assert "test_user3@email.com" in role_assignment_details["WorkspaceOwner"]
|
||||
assert "test_user4@email.com" in role_assignment_details["WorkspaceOwner"]
|
||||
|
||||
|
||||
@patch("services.aad_authentication.AzureADAuthorization._get_auth_header")
|
||||
@patch("services.aad_authentication.AzureADAuthorization._get_batch_users_by_role_assignments_body")
|
||||
@patch("requests.post")
|
||||
def test_get_user_emails_with_batch_of_more_than_20_requests(mock_graph_post, mock_get_batch_users_by_role_assignments_body, mock_headers):
|
||||
def test_get_user_details_with_batch_of_more_than_20_requests(mock_graph_post, mock_get_batch_users_by_role_assignments_body, mock_headers):
|
||||
# Arrange
|
||||
access_service = AzureADAuthorization()
|
||||
roles_graph_data = [{"id": "role1"}, {"id": "role2"}]
|
||||
|
@ -591,11 +546,11 @@ def test_get_user_emails_with_batch_of_more_than_20_requests(mock_graph_post, mo
|
|||
mock_get_batch_users_by_role_assignments_body.return_value = batch_request_body
|
||||
|
||||
# Mock the response of the post request
|
||||
mock_graph_post_response = {"responses": [{"id": "user1"}, {"id": "user2"}]}
|
||||
mock_graph_post_response = {"responses": [{"id": "user1", "request": {"id": "user1"}}, {"id": "user2", "request": {"id": "user2"}}]}
|
||||
mock_graph_post.return_value.json.return_value = mock_graph_post_response
|
||||
|
||||
# Act
|
||||
users_graph_data = access_service._get_user_emails(roles_graph_data, msgraph_token)
|
||||
users_graph_data = access_service._get_user_details(roles_graph_data, msgraph_token)
|
||||
|
||||
# Assert
|
||||
assert len(users_graph_data["responses"]) == 4
|
||||
|
@ -618,21 +573,21 @@ def get_mock_batch_response(user_principals, group_principals):
|
|||
response_body = {"responses": []}
|
||||
for user_principal in user_principals:
|
||||
response_body["responses"].append(
|
||||
get_mock_user_response(user_principal.principal_id, user_principal.mail)
|
||||
get_mock_user_response(user_principal.principal_id, user_principal.mail, user_principal.display_name)
|
||||
)
|
||||
for group_principal in group_principals:
|
||||
response_body["responses"].append(get_mock_group_response(group_principal))
|
||||
return response_body
|
||||
|
||||
|
||||
def get_mock_user_response(principal_id, mail):
|
||||
def get_mock_user_response(principal_id, mail, name):
|
||||
headers = '{"Cache-Control":"no-cache","x-ms-resource-unit":"1","OData-Version":"4.0","Content-Type":"application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8"}'
|
||||
user_odata = f'@odata.context":"{MOCK_MICROSOFT_GRAPH_URL}/v1.0/$metadata#users(mail,id)/$entity'
|
||||
user_response_body = {
|
||||
"id": "1",
|
||||
"status": 200,
|
||||
"headers": headers,
|
||||
"body": {"@odata.context": user_odata, "mail": mail, "id": principal_id},
|
||||
"body": {"@odata.context": user_odata, "mail": mail, "id": principal_id, "displayName": name},
|
||||
}
|
||||
return user_response_body
|
||||
|
||||
|
@ -647,6 +602,7 @@ def get_mock_group_response(group):
|
|||
"@odata.type": "#microsoft.graph.user",
|
||||
"mail": member.mail,
|
||||
"id": member.principal_id,
|
||||
"displayName": member.display_name,
|
||||
}
|
||||
)
|
||||
group_response_body = {
|
||||
|
@ -654,6 +610,7 @@ def get_mock_group_response(group):
|
|||
"status": 200,
|
||||
"headers": headers,
|
||||
"body": {"@odata.context": group_odata, "value": group_members_body},
|
||||
"request": {"id": "group_principal_id"}
|
||||
}
|
||||
return group_response_body
|
||||
|
||||
|
|
|
@ -242,7 +242,7 @@ def test_get_required_permission_return_read_and_write_permissions_for_draft_req
|
|||
|
||||
@pytest.mark.asyncio
|
||||
@patch("event_grid.helpers.EventGridPublisherClient", return_value=AsyncMock())
|
||||
@patch("services.aad_authentication.AzureADAuthorization.get_workspace_role_assignment_details", return_value={"WorkspaceResearcher": ["researcher@outlook.com"], "WorkspaceOwner": ["owner@outlook.com"], "AirlockManager": ["manager@outlook.com"]})
|
||||
@patch("services.aad_authentication.AzureADAuthorization.get_workspace_user_emails_by_role_assignment", return_value={"WorkspaceResearcher": ["researcher@outlook.com"], "WorkspaceOwner": ["owner@outlook.com"], "AirlockManager": ["manager@outlook.com"]})
|
||||
@patch('services.airlock.get_timestamp', return_value=CURRENT_TIME)
|
||||
async def test_save_and_publish_event_airlock_request_saves_item(_, __, event_grid_publisher_client_mock, airlock_request_repo_mock):
|
||||
airlock_request_mock = sample_airlock_request()
|
||||
|
@ -269,7 +269,7 @@ async def test_save_and_publish_event_airlock_request_saves_item(_, __, event_gr
|
|||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
@patch("services.aad_authentication.AzureADAuthorization.get_workspace_role_assignment_details", return_value={"WorkspaceResearcher": ["researcher@outlook.com"], "WorkspaceOwner": ["owner@outlook.com"], "AirlockManager": ["manager@outlook.com"]})
|
||||
@patch("services.aad_authentication.AzureADAuthorization.get_workspace_user_emails_by_role_assignment", return_value={"WorkspaceResearcher": ["researcher@outlook.com"], "WorkspaceOwner": ["owner@outlook.com"], "AirlockManager": ["manager@outlook.com"]})
|
||||
async def test_save_and_publish_event_airlock_request_raises_503_if_save_to_db_fails(_, airlock_request_repo_mock):
|
||||
airlock_request_mock = sample_airlock_request()
|
||||
airlock_request_repo_mock.save_item = AsyncMock(side_effect=Exception)
|
||||
|
@ -285,7 +285,7 @@ async def test_save_and_publish_event_airlock_request_raises_503_if_save_to_db_f
|
|||
|
||||
@pytest.mark.asyncio
|
||||
@patch("event_grid.helpers.EventGridPublisherClient", return_value=AsyncMock())
|
||||
@patch("services.aad_authentication.AzureADAuthorization.get_workspace_role_assignment_details", return_value={"WorkspaceResearcher": ["researcher@outlook.com"], "WorkspaceOwner": ["owner@outlook.com"], "AirlockManager": ["manager@outlook.com"]})
|
||||
@patch("services.aad_authentication.AzureADAuthorization.get_workspace_user_emails_by_role_assignment", return_value={"WorkspaceResearcher": ["researcher@outlook.com"], "WorkspaceOwner": ["owner@outlook.com"], "AirlockManager": ["manager@outlook.com"]})
|
||||
async def test_save_and_publish_event_airlock_request_raises_503_if_publish_event_fails(_, event_grid_publisher_client_mock,
|
||||
airlock_request_repo_mock):
|
||||
airlock_request_mock = sample_airlock_request()
|
||||
|
@ -334,11 +334,11 @@ async def test_check_email_exists_passes_if_researcher_or_owner_and_airlock_mana
|
|||
{"WorkspaceResearcher": [], "AirlockManager": ["owner@outlook.com"]},
|
||||
{"WorkspaceResearcher": ["researcher@outlook.com"], "owner_emails": []},
|
||||
{"WorkspaceResearcher": ["researcher@outlook.com"]}])
|
||||
@patch("services.aad_authentication.AzureADAuthorization.get_workspace_role_assignment_details")
|
||||
@patch("services.aad_authentication.AzureADAuthorization.get_workspace_user_emails_by_role_assignment")
|
||||
@patch('core.config.ENABLE_AIRLOCK_EMAIL_CHECK', "True")
|
||||
async def test_save_and_publish_event_airlock_request_raises_417_if_email_not_present(get_workspace_role_assignment_details_patched, email_mock_return):
|
||||
async def test_save_and_publish_event_airlock_request_raises_417_if_email_not_present(get_workspace_user_emails_by_role_assignment_patched, email_mock_return):
|
||||
|
||||
get_workspace_role_assignment_details_patched.return_value = email_mock_return
|
||||
get_workspace_user_emails_by_role_assignment_patched.return_value = email_mock_return
|
||||
airlock_request_mock = sample_airlock_request()
|
||||
|
||||
with pytest.raises(HTTPException) as ex:
|
||||
|
@ -353,11 +353,11 @@ async def test_save_and_publish_event_airlock_request_raises_417_if_email_not_pr
|
|||
@pytest.mark.asyncio
|
||||
@pytest.mark.parametrize('email_mock_return', [{},
|
||||
{"WorkspaceResearcher": [], "AirlockManager": []}])
|
||||
@patch("services.aad_authentication.AzureADAuthorization.get_workspace_role_assignment_details")
|
||||
@patch("services.aad_authentication.AzureADAuthorization.get_workspace_user_emails_by_role_assignment")
|
||||
@patch("event_grid.event_sender.publish_event", return_value=AsyncMock())
|
||||
async def test_save_and_publish_event_airlock_notification_if_email_not_present(publish_event_mock, get_workspace_role_assignment_details_patched, email_mock_return, airlock_request_repo_mock):
|
||||
async def test_save_and_publish_event_airlock_notification_if_email_not_present(publish_event_mock, get_workspace_user_emails_by_role_assignment_patched, email_mock_return, airlock_request_repo_mock):
|
||||
|
||||
get_workspace_role_assignment_details_patched.return_value = email_mock_return
|
||||
get_workspace_user_emails_by_role_assignment_patched.return_value = email_mock_return
|
||||
airlock_request_mock = sample_airlock_request()
|
||||
airlock_request_repo_mock.save_item = AsyncMock()
|
||||
|
||||
|
@ -372,7 +372,7 @@ async def test_save_and_publish_event_airlock_notification_if_email_not_present(
|
|||
|
||||
@pytest.mark.asyncio
|
||||
@patch("event_grid.helpers.EventGridPublisherClient", return_value=AsyncMock())
|
||||
@patch("services.aad_authentication.AzureADAuthorization.get_workspace_role_assignment_details", return_value={"WorkspaceResearcher": ["researcher@outlook.com"], "WorkspaceOwner": ["owner@outlook.com"], "AirlockManager": ["manager@outlook.com"]})
|
||||
@patch("services.aad_authentication.AzureADAuthorization.get_workspace_user_emails_by_role_assignment", return_value={"WorkspaceResearcher": ["researcher@outlook.com"], "WorkspaceOwner": ["owner@outlook.com"], "AirlockManager": ["manager@outlook.com"]})
|
||||
async def test_update_and_publish_event_airlock_request_updates_item(_, event_grid_publisher_client_mock,
|
||||
airlock_request_repo_mock):
|
||||
airlock_request_mock = sample_airlock_request()
|
||||
|
@ -404,7 +404,7 @@ async def test_update_and_publish_event_airlock_request_updates_item(_, event_gr
|
|||
@pytest.mark.asyncio
|
||||
@patch("services.airlock.send_status_changed_event")
|
||||
@patch("services.airlock.send_airlock_notification_event")
|
||||
@patch("services.aad_authentication.AzureADAuthorization.get_workspace_role_assignment_details")
|
||||
@patch("services.aad_authentication.AzureADAuthorization.get_workspace_user_emails_by_role_assignment")
|
||||
async def test_update_and_publish_event_airlock_request_sends_status_changed_event(_, send_airlock_notification_event_mock, send_status_changed_event_mock, airlock_request_repo_mock):
|
||||
new_status = AirlockRequestStatus.Submitted
|
||||
airlock_request_repo_mock.update_airlock_request = AsyncMock()
|
||||
|
@ -421,7 +421,7 @@ async def test_update_and_publish_event_airlock_request_sends_status_changed_eve
|
|||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
@patch("services.aad_authentication.AzureADAuthorization.get_workspace_role_assignment_details", return_value={"WorkspaceResearcher": ["researcher@outlook.com"], "WorkspaceOwner": ["owner@outlook.com"], "AirlockManager": ["manager@outlook.com"]})
|
||||
@patch("services.aad_authentication.AzureADAuthorization.get_workspace_user_emails_by_role_assignment", return_value={"WorkspaceResearcher": ["researcher@outlook.com"], "WorkspaceOwner": ["owner@outlook.com"], "AirlockManager": ["manager@outlook.com"]})
|
||||
async def test_update_and_publish_event_airlock_request_raises_400_if_status_update_invalid(_, airlock_request_repo_mock):
|
||||
airlock_request_mock = sample_airlock_request()
|
||||
|
||||
|
@ -438,7 +438,7 @@ async def test_update_and_publish_event_airlock_request_raises_400_if_status_upd
|
|||
|
||||
@pytest.mark.asyncio
|
||||
@patch("event_grid.helpers.EventGridPublisherClient", return_value=AsyncMock())
|
||||
@patch("services.aad_authentication.AzureADAuthorization.get_workspace_role_assignment_details", return_value={"WorkspaceResearcher": ["researcher@outlook.com"], "WorkspaceOwner": ["owner@outlook.com"], "AirlockManager": ["manager@outlook.com"]})
|
||||
@patch("services.aad_authentication.AzureADAuthorization.get_workspace_user_emails_by_role_assignment", return_value={"WorkspaceResearcher": ["researcher@outlook.com"], "WorkspaceOwner": ["owner@outlook.com"], "AirlockManager": ["manager@outlook.com"]})
|
||||
async def test_update_and_publish_event_airlock_request_raises_503_if_publish_event_fails(_, event_grid_publisher_client_mock,
|
||||
airlock_request_repo_mock):
|
||||
airlock_request_mock = sample_airlock_request()
|
||||
|
@ -460,7 +460,7 @@ async def test_update_and_publish_event_airlock_request_raises_503_if_publish_ev
|
|||
@pytest.mark.asyncio
|
||||
@patch("services.airlock.send_status_changed_event")
|
||||
@patch("services.airlock.send_airlock_notification_event")
|
||||
@patch("services.aad_authentication.AzureADAuthorization.get_workspace_role_assignment_details")
|
||||
@patch("services.aad_authentication.AzureADAuthorization.get_workspace_user_emails_by_role_assignment")
|
||||
async def test_update_and_publish_event_airlock_request_without_status_change_should_not_send_status_changed_event(_, send_airlock_notification_event_mock, send_status_changed_event_mock, airlock_request_repo_mock):
|
||||
new_status = None
|
||||
airlock_request_repo_mock.update_airlock_request = AsyncMock()
|
||||
|
|
|
@ -2,102 +2,102 @@
|
|||
# Manual edits may be lost in future updates.
|
||||
|
||||
provider "registry.terraform.io/azure/azapi" {
|
||||
version = "1.13.1"
|
||||
constraints = ">= 1.9.0, ~> 1.13.0"
|
||||
version = "1.15.0"
|
||||
constraints = "1.15.0"
|
||||
hashes = [
|
||||
"h1:xDZG4lbtQJeyJa3Gzo8qecYxyw+AIXYcdDRlkaSLNz8=",
|
||||
"zh:1f2aceddd67ceeb82a75c2f15dc01e54781e9aed5968507dbc29590c165b2e2b",
|
||||
"zh:397f0bfbac899d48e23cecf38d362c27562150aa20b19157b5bd370b8e6801ee",
|
||||
"zh:652263b7d00623684e29ef7b8ff285a17c5bd7cc8ba7d22967c66d0b3a3c568a",
|
||||
"zh:652c53320a41434942877515780296a1509be03f32d54e60178f39200f960a67",
|
||||
"zh:666426faf686401e54ec09fe06e9d7c06a6455ec398764f70558440c73aeb7f9",
|
||||
"zh:6aa91ae8ba78f2494f99b4c99e66d15ed0b14d735cd1f77adc12ff9dfa075807",
|
||||
"zh:a529e5a13c37d1805c469227f08cdbe7527d04dd64d18709d26627c6a0b588b1",
|
||||
"zh:a589c049205e8e5bf94a13d56b28f400d908ad27e13e16df64408ee82eb8a0ff",
|
||||
"zh:a9a50defdee230f315f74be6c77ff104fe2610a1b3ad6b87326f555e80d13b18",
|
||||
"zh:ba49ef70d96e13795e2dbffd6cb2ff976dfe84e0373a5971ebe3b4c9c9b7af60",
|
||||
"zh:d3ed50efe5f8c80d3d7d464ab9a13ccf82440d871c9ce3032ce476845364c6b9",
|
||||
"zh:e3eb48ee8c36ee4f81850d8a21fc59b81886c729d7c3b7adece4a25f355bed2f",
|
||||
"h1:gIOgxVmFSxHrR+XOzgUEA+ybOmp8kxZlZH3eYeB/eFI=",
|
||||
"zh:0627a8bc77254debc25dc0c7b62e055138217c97b03221e593c3c56dc7550671",
|
||||
"zh:2fe045f07070ef75d0bec4b0595a74c14394daa838ddb964e2fd23cc98c40c34",
|
||||
"zh:343009f39c957883b2c06145a5954e524c70f93585f943f1ea3d28ef6995d0d0",
|
||||
"zh:53fe9ab54485aaebc9b91e27a10bce2729a1c95b1399079e631dc6bb9e3f27dc",
|
||||
"zh:63c407e7dc04d178d4798c17ad489d9cc92f7d1941d7f4a3f560b95908b6107b",
|
||||
"zh:7d6fc2b432b264f036bb80ab2b2ba67f80a5d98da8a8c322aa097833dad598c9",
|
||||
"zh:7ec49c0a8799d469eb6e2a1f856693f9862f1b73f5ed70adc1b346e5a4c6458d",
|
||||
"zh:889704f10319d301d677539d788fc82a7c73608ab78cb93e1280ac2be39e6e00",
|
||||
"zh:90b4b07405b7cde9ebae3b034cb5bb5dd18484d1b95bd250f905451f1e86ac3f",
|
||||
"zh:92aa9c241a8cb2a6d81ad47bc007c119f8b818464a960ebaf39008766c361e6b",
|
||||
"zh:f28fbd0a2c59e239b53067bc1adc691be444876bcb2d4f78d310f549724da6e0",
|
||||
"zh:ffb15e0ddfa505d0e9b75341570199076ae574887124f398162b1ead9376b25f",
|
||||
]
|
||||
}
|
||||
|
||||
provider "registry.terraform.io/hashicorp/azurerm" {
|
||||
version = "3.108.0"
|
||||
constraints = ">= 3.8.0, >= 3.16.0, 3.108.0"
|
||||
version = "3.112.0"
|
||||
constraints = ">= 3.112.0, 3.112.0"
|
||||
hashes = [
|
||||
"h1:RIFBFTXz4X48JDHjbQHX4y400ax1/uEzMVFZgX3/z3w=",
|
||||
"zh:2afecf948fd702bc08c87d9114595809d011f99a70a12dbf6bc67a12d0bee5fc",
|
||||
"zh:395b6d1384a579867064e62d49b0b91e15919c33b03ea8b5031c2779bfa16b3d",
|
||||
"zh:3e5594c59b6b02bc6e0f4c3de71aa2ab992494c53725fb3c64d36745f3814ef3",
|
||||
"zh:4613e190609377309f6a4ac44f631c9469efab3ae148dbb09e73718201dc4f42",
|
||||
"zh:624f01cb7604d58100068401bd07ab09a141e7bd318f8214127838cf202e4868",
|
||||
"zh:65709950c9933e38704e2075a2339951e1259a6e882f35d390be36e1844ebc72",
|
||||
"zh:af82657fad4e3a177f2ebb8035b45bda40f8856eb999288533321028794d03e5",
|
||||
"zh:c40b331eba08830d16c0e6795fa7cbf08231073df2cfdb0f34e9d908a915981a",
|
||||
"zh:d6ccd533a0bd984ca7ed1ae860e057e9e2f88468745be9712236d2d240353de4",
|
||||
"zh:f361fd398e8772f8554a010331d161d6f7284a43238fd28bfa7b41795a5538b8",
|
||||
"h1:5KSVV/O2eG6ty/3/qpOLQFQqJd96KEPzsTHItslJaMw=",
|
||||
"zh:341c22454d24a75792aa99fbbc0c156f368534b7bb04eef4701b85995c7526a4",
|
||||
"zh:3708656d75061c92f7208cc731b946c991ad343a443f8ff0ef082f077b7580b9",
|
||||
"zh:38ca06f9f45705c648f04f272bd9483397693ea8da6db788cd7955f49ab79d6b",
|
||||
"zh:3f305adb5ee0032e0ea68d198a089ecfd0127092930e99fa51377a250292b592",
|
||||
"zh:4ae2fc6065164a819f576f705e634ebf5059f983149a41dad909719fea96145a",
|
||||
"zh:5d376ac7dd71898a94038d6b6b8036dfec4c0216d832ec1135c855bf3e58eb5f",
|
||||
"zh:63d2ff296d3aee5787e12c759a6a3d5aa15a574456aebbe11b833f01adf3faef",
|
||||
"zh:8ad8746741f7f0ac10da6f1d105f26ebeb6e4d944f58ba749e86d7c9a67da3db",
|
||||
"zh:abec182594ee8a21d72a5f23d3aa7fa45247488539fce6ed648c9c255d8bf972",
|
||||
"zh:bf704b400be4181333b38c0306949f26326a9aa5ae68b4167e2fb8ee7fb13618",
|
||||
"zh:c072938f8695f725fc5fbe986a54890f00d520cce570006390dc5bbc51b2a4ea",
|
||||
"zh:f569b65999264a9416862bca5cd2a6177d94ccb0424f3a4ef424428912b9cb3c",
|
||||
"zh:f8c2132c77d35930203ec66f1bf9bbf633a2406e9f7b572ff425d65b8aa8c492",
|
||||
]
|
||||
}
|
||||
|
||||
provider "registry.terraform.io/hashicorp/http" {
|
||||
version = "3.4.3"
|
||||
version = "3.4.5"
|
||||
constraints = "~> 3.4"
|
||||
hashes = [
|
||||
"h1:WUwrzNfcBamA4mm3Stzt6+GcwTosQv2T0CEmZefPBAo=",
|
||||
"zh:001e12b8079955a9fa7f8fcd515ae665b2e1087107fd337c4b872e88a86d540b",
|
||||
"zh:0874fb3f870b2ac24c967a9685f2da641079589024109340389694696301a85b",
|
||||
"zh:3b5e533c3d2859575945568aad0aac66b71bfc709706231fc2de94e01ca76d7f",
|
||||
"zh:622ee28d42ed9d4b1399dde377db515e62cac08bd65bb2455068621f7a42d90d",
|
||||
"zh:6dea688d78840a3f678e06ee602d37c766ce2ee625dcdce0c6658116ebcbde8e",
|
||||
"h1:ceAVZEuaQd7jQX13qf5w7hy3ioiXpuwUaaDRsnAiMLM=",
|
||||
"zh:2072006c177efc101471f3d5eb8e1d8e6c68778cbfd6db3d3f22f59cfe6ce6ae",
|
||||
"zh:3ac4cc0efe11ee054300769cfcc37491433937a8824621d1f8f7a18e7401da87",
|
||||
"zh:63997e5457c9ddf9cfff17bd7bf9f083cbeff3105452045662109dd6be499ef9",
|
||||
"zh:78d5eefdd9e494defcb3c68d282b8f96630502cac21d1ea161f53cfe9bb483b3",
|
||||
"zh:7f57a1436a464bc2e1698457b402ff0fd98ef9e7dcf6707d6bd0debc67fad164",
|
||||
"zh:829d89d82e6fc3c89714950dc8afa51d622bb8e4f4bd5c73037505fb55a67834",
|
||||
"zh:e453202d09b62531ed3278926307d315276e05784e7c6448a2c21c6a2da6e48f",
|
||||
"zh:e76edc035240b4ad9334b4a0282b44a086e001df3007a2fc51f6262c4db032d1",
|
||||
"zh:eeb0379da9093e155a193f666079de6baf8ed02855bf2a443448903f7cfef378",
|
||||
"zh:fcb00eeb665ccae383645173d8e10c3071946396629a7797db39c798997f21b0",
|
||||
"zh:826819bb8ab7d6e3095f597083d5b1ab93d1854312b9e1b6c18288fff9664f34",
|
||||
"zh:8ad74e7d8ec2e226a73d49c7c317108f61a4cb803972fb3f945d1709d5115fcd",
|
||||
"zh:a609ca9e0c91d250ac80295e39d5f524e8c0872d33ba8fde3c3e41893b4b015d",
|
||||
"zh:ae07d19babc452f63f6a6511b944990e819dc20687b6c8f01d1676812f5ada53",
|
||||
"zh:b7c827dc32a1a5d77185a78cd391b01217894b384f58169f98a96d683730d8ce",
|
||||
"zh:d045e3db9f5e39ce78860d3fd94e04604fcbe246f6fe346ee50a971f936e9ccd",
|
||||
"zh:ec28f9b52c74edd47eebbb5c254a6df5706360cde5ccd65097976efca23a2977",
|
||||
"zh:f24982eaa7d34fd66554c3cf94873713a0dff14da9ea4c4be0cc76f1a6146d59",
|
||||
]
|
||||
}
|
||||
|
||||
provider "registry.terraform.io/hashicorp/local" {
|
||||
version = "2.5.1"
|
||||
version = "2.5.2"
|
||||
constraints = ">= 2.2.0, ~> 2.5"
|
||||
hashes = [
|
||||
"h1:8oTPe2VUL6E2d3OcrvqyjI4Nn/Y/UEQN26WLk5O/B0g=",
|
||||
"zh:0af29ce2b7b5712319bf6424cb58d13b852bf9a777011a545fac99c7fdcdf561",
|
||||
"zh:126063ea0d79dad1f68fa4e4d556793c0108ce278034f101d1dbbb2463924561",
|
||||
"zh:196bfb49086f22fd4db46033e01655b0e5e036a5582d250412cc690fa7995de5",
|
||||
"zh:37c92ec084d059d37d6cffdb683ccf68e3a5f8d2eb69dd73c8e43ad003ef8d24",
|
||||
"zh:4269f01a98513651ad66763c16b268f4c2da76cc892ccfd54b401fff6cc11667",
|
||||
"zh:51904350b9c728f963eef0c28f1d43e73d010333133eb7f30999a8fb6a0cc3d8",
|
||||
"zh:73a66611359b83d0c3fcba2984610273f7954002febb8a57242bbb86d967b635",
|
||||
"h1:JlMZD6nYqJ8sSrFfEAH0Vk/SL8WLZRmFaMUF9PJK5wM=",
|
||||
"zh:136299545178ce281c56f36965bf91c35407c11897f7082b3b983d86cb79b511",
|
||||
"zh:3b4486858aa9cb8163378722b642c57c529b6c64bfbfc9461d940a84cd66ebea",
|
||||
"zh:4855ee628ead847741aa4f4fc9bed50cfdbf197f2912775dd9fe7bc43fa077c0",
|
||||
"zh:4b8cd2583d1edcac4011caafe8afb7a95e8110a607a1d5fb87d921178074a69b",
|
||||
"zh:52084ddaff8c8cd3f9e7bcb7ce4dc1eab00602912c96da43c29b4762dc376038",
|
||||
"zh:71562d330d3f92d79b2952ffdda0dad167e952e46200c767dd30c6af8d7c0ed3",
|
||||
"zh:78d5eefdd9e494defcb3c68d282b8f96630502cac21d1ea161f53cfe9bb483b3",
|
||||
"zh:7ae387993a92bcc379063229b3cce8af7eaf082dd9306598fcd42352994d2de0",
|
||||
"zh:9e0f365f807b088646db6e4a8d4b188129d9ebdbcf2568c8ab33bddd1b82c867",
|
||||
"zh:b5263acbd8ae51c9cbffa79743fbcadcb7908057c87eb22fd9048268056efbc4",
|
||||
"zh:dfcd88ac5f13c0d04e24be00b686d069b4879cc4add1b7b1a8ae545783d97520",
|
||||
"zh:805f81ade06ff68fa8b908d31892eaed5c180ae031c77ad35f82cb7a74b97cf4",
|
||||
"zh:8b6b3ebeaaa8e38dd04e56996abe80db9be6f4c1df75ac3cccc77642899bd464",
|
||||
"zh:ad07750576b99248037b897de71113cc19b1a8d0bc235eb99173cc83d0de3b1b",
|
||||
"zh:b9f1c3bfadb74068f5c205292badb0661e17ac05eb23bfe8bd809691e4583d0e",
|
||||
"zh:cc4cbcd67414fefb111c1bf7ab0bc4beb8c0b553d01719ad17de9a047adff4d1",
|
||||
]
|
||||
}
|
||||
|
||||
provider "registry.terraform.io/hashicorp/random" {
|
||||
version = "3.6.2"
|
||||
version = "3.6.3"
|
||||
constraints = ">= 3.0.0, ~> 3.6"
|
||||
hashes = [
|
||||
"h1:wmG0QFjQ2OfyPy6BB7mQ57WtoZZGGV07uAPQeDmIrAE=",
|
||||
"zh:0ef01a4f81147b32c1bea3429974d4d104bbc4be2ba3cfa667031a8183ef88ec",
|
||||
"zh:1bcd2d8161e89e39886119965ef0f37fcce2da9c1aca34263dd3002ba05fcb53",
|
||||
"zh:37c75d15e9514556a5f4ed02e1548aaa95c0ecd6ff9af1119ac905144c70c114",
|
||||
"zh:4210550a767226976bc7e57d988b9ce48f4411fa8a60cd74a6b246baf7589dad",
|
||||
"zh:562007382520cd4baa7320f35e1370ffe84e46ed4e2071fdc7e4b1a9b1f8ae9b",
|
||||
"zh:5efb9da90f665e43f22c2e13e0ce48e86cae2d960aaf1abf721b497f32025916",
|
||||
"zh:6f71257a6b1218d02a573fc9bff0657410404fb2ef23bc66ae8cd968f98d5ff6",
|
||||
"h1:Fnaec9vA8sZ8BXVlN3Xn9Jz3zghSETIKg7ch8oXhxno=",
|
||||
"zh:04ceb65210251339f07cd4611885d242cd4d0c7306e86dda9785396807c00451",
|
||||
"zh:448f56199f3e99ff75d5c0afacae867ee795e4dfda6cb5f8e3b2a72ec3583dd8",
|
||||
"zh:4b4c11ccfba7319e901df2dac836b1ae8f12185e37249e8d870ee10bb87a13fe",
|
||||
"zh:4fa45c44c0de582c2edb8a2e054f55124520c16a39b2dfc0355929063b6395b1",
|
||||
"zh:588508280501a06259e023b0695f6a18149a3816d259655c424d068982cbdd36",
|
||||
"zh:737c4d99a87d2a4d1ac0a54a73d2cb62974ccb2edbd234f333abd079a32ebc9e",
|
||||
"zh:78d5eefdd9e494defcb3c68d282b8f96630502cac21d1ea161f53cfe9bb483b3",
|
||||
"zh:9647e18f221380a85f2f0ab387c68fdafd58af6193a932417299cdcae4710150",
|
||||
"zh:bb6297ce412c3c2fa9fec726114e5e0508dd2638cad6a0cb433194930c97a544",
|
||||
"zh:f83e925ed73ff8a5ef6e3608ad9225baa5376446349572c2449c0c0b3cf184b7",
|
||||
"zh:fbef0781cb64de76b1df1ca11078aecba7800d82fd4a956302734999cfd9a4af",
|
||||
"zh:a357ab512e5ebc6d1fda1382503109766e21bbfdfaa9ccda43d313c122069b30",
|
||||
"zh:c51bfb15e7d52cc1a2eaec2a903ac2aff15d162c172b1b4c17675190e8147615",
|
||||
"zh:e0951ee6fa9df90433728b96381fb867e3db98f66f735e0c3e24f8f16903f0ad",
|
||||
"zh:e3cdcb4e73740621dabd82ee6a37d6cfce7fee2a03d8074df65086760f5cf556",
|
||||
"zh:eff58323099f1bd9a0bec7cb04f717e7f1b2774c7d612bf7581797e1622613a0",
|
||||
]
|
||||
}
|
||||
|
||||
|
|
|
@ -3,11 +3,11 @@ terraform {
|
|||
required_providers {
|
||||
azurerm = {
|
||||
source = "hashicorp/azurerm"
|
||||
version = ">= 3.16"
|
||||
version = ">= 3.112"
|
||||
}
|
||||
azapi = {
|
||||
source = "Azure/azapi"
|
||||
version = ">= 1.9.0"
|
||||
version = ">= 1.15.0"
|
||||
}
|
||||
local = {
|
||||
source = "hashicorp/local"
|
||||
|
|
|
@ -3,7 +3,7 @@ terraform {
|
|||
required_providers {
|
||||
azurerm = {
|
||||
source = "hashicorp/azurerm"
|
||||
version = ">= 3.8"
|
||||
version = ">= 3.112"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -3,7 +3,7 @@ terraform {
|
|||
required_providers {
|
||||
azurerm = {
|
||||
source = "hashicorp/azurerm"
|
||||
version = ">= 3.8"
|
||||
version = ">= 3.112"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -32,6 +32,26 @@ resource "azurerm_private_dns_zone_virtual_network_link" "azuresql" {
|
|||
lifecycle { ignore_changes = [tags] }
|
||||
}
|
||||
|
||||
resource "azurerm_private_dns_zone_virtual_network_link" "openai" {
|
||||
resource_group_name = azurerm_resource_group.core.name
|
||||
virtual_network_id = module.network.core_vnet_id
|
||||
private_dns_zone_name = azurerm_private_dns_zone.non_core["privatelink.openai.azure.com"].name
|
||||
name = azurerm_private_dns_zone.non_core["privatelink.openai.azure.com"].name
|
||||
registration_enabled = false
|
||||
tags = local.tre_core_tags
|
||||
lifecycle { ignore_changes = [tags] }
|
||||
}
|
||||
|
||||
resource "azurerm_private_dns_zone_virtual_network_link" "cognitivesearch" {
|
||||
resource_group_name = azurerm_resource_group.core.name
|
||||
virtual_network_id = module.network.core_vnet_id
|
||||
private_dns_zone_name = azurerm_private_dns_zone.non_core["privatelink.cognitiveservices.azure.com"].name
|
||||
name = azurerm_private_dns_zone.non_core["privatelink.cognitiveservices.azure.com"].name
|
||||
registration_enabled = false
|
||||
tags = local.tre_core_tags
|
||||
lifecycle { ignore_changes = [tags] }
|
||||
}
|
||||
|
||||
# Once the deployment of the app gateway is complete, we can proceed to include the required DNS zone for Nexus, which is dependent on the FQDN of the app gateway.
|
||||
resource "azurerm_private_dns_zone" "nexus" {
|
||||
name = "nexus-${module.appgateway.app_gateway_fqdn}"
|
||||
|
|
|
@ -33,7 +33,9 @@ locals {
|
|||
"privatelink.postgres.database.azure.com",
|
||||
"privatelink.mysql.database.azure.com",
|
||||
"privatelink.database.windows.net",
|
||||
"privatelink.azuredatabricks.net"
|
||||
"privatelink.azuredatabricks.net",
|
||||
"privatelink.openai.azure.com",
|
||||
"privatelink.cognitiveservices.azure.com"
|
||||
])
|
||||
|
||||
# The followig regex extracts different parts of the service bus endpoint: scheme, fqdn, port, path, query and fragment. This allows us to extract the needed fqdn part.
|
||||
|
|
|
@ -3,7 +3,7 @@ terraform {
|
|||
required_providers {
|
||||
azurerm = {
|
||||
source = "hashicorp/azurerm"
|
||||
version = "=3.108.0"
|
||||
version = "=3.112.0"
|
||||
}
|
||||
random = {
|
||||
source = "hashicorp/random"
|
||||
|
@ -19,7 +19,7 @@ terraform {
|
|||
}
|
||||
azapi = {
|
||||
source = "Azure/azapi"
|
||||
version = "~> 1.13.0"
|
||||
version = "~> 1.15.0"
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -179,6 +179,6 @@ module "resource_processor_vmss_porter" {
|
|||
}
|
||||
|
||||
module "terraform_azurerm_environment_configuration" {
|
||||
source = "git::https://github.com/microsoft/terraform-azurerm-environment-configuration.git?ref=0.5.0"
|
||||
source = "git::https://github.com/microsoft/terraform-azurerm-environment-configuration.git?ref=0.6.0"
|
||||
arm_environment = var.arm_environment
|
||||
}
|
||||
|
|
|
@ -3,7 +3,7 @@ terraform {
|
|||
required_providers {
|
||||
azurerm = {
|
||||
source = "hashicorp/azurerm"
|
||||
version = ">= 3.8"
|
||||
version = ">= 3.112"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -3,7 +3,7 @@ terraform {
|
|||
required_providers {
|
||||
azurerm = {
|
||||
source = "hashicorp/azurerm"
|
||||
version = ">= 3.8"
|
||||
version = ">= 3.112"
|
||||
}
|
||||
random = {
|
||||
source = "hashicorp/random"
|
||||
|
|
|
@ -0,0 +1,13 @@
|
|||
#!/bin/bash
|
||||
set -e
|
||||
|
||||
# This script is used to install the bundle directly without having to interact with Porter
|
||||
|
||||
# This script assumes you have created an .env from the sample and the variables
|
||||
# will come from there.
|
||||
# shellcheck disable=SC2154
|
||||
terraform init -upgrade -reconfigure -input=false -backend=true \
|
||||
-backend-config="resource_group_name=${TF_VAR_mgmt_resource_group_name}" \
|
||||
-backend-config="storage_account_name=${TF_VAR_mgmt_storage_account_name}" \
|
||||
-backend-config="container_name=${TF_VAR_terraform_state_container_name}" \
|
||||
-backend-config="key=${TF_VAR_tre_resource_id}-core"
|
|
@ -1 +1 @@
|
|||
__version__ = "0.10.6"
|
||||
__version__ = "0.10.9"
|
||||
|
|
|
@ -2,21 +2,21 @@
|
|||
# Manual edits may be lost in future updates.
|
||||
|
||||
provider "registry.terraform.io/hashicorp/azurerm" {
|
||||
version = "3.51.0"
|
||||
constraints = "3.51.0"
|
||||
version = "3.112.0"
|
||||
constraints = "3.112.0"
|
||||
hashes = [
|
||||
"h1:X13zyweEi+honSpCdijEJBawbG6m1NmGyWDccICIKXs=",
|
||||
"zh:045a56f984882b8cf111301550e14a51346c817ec0b3d6dc752f7533585ed99b",
|
||||
"zh:102fa2fb9213f20c2834b7abb51d44f1c766bb28ad4f14c98d2c149faba0a911",
|
||||
"zh:173e38d128bf559b4a3e4bf5511974ab87951ffad9460f769067f62edc66acc7",
|
||||
"zh:22b7f74a6bf86fa4f735783331335b9c4783d5437c672a7d2579cedea8463e3b",
|
||||
"zh:3e37e83a5f39f73fa3b310162ef9fc58449445aaeb2ddad66404251ceb6908a5",
|
||||
"zh:6609b1c63ea9466bea599f6e1e32573a13889db6be89dd068c0eb114f7de50d5",
|
||||
"zh:6a2cc4ab06a467369f03c4e1fb1eeb23f0ea8a98fb1c0651284fe45ca3d5b02f",
|
||||
"zh:91885a417d4fd1cdc81b64d26330dacf608ef2f9d272b8f7073d93e71d6bccef",
|
||||
"zh:96d1879e52f399f3c813bcf36c7ceee72273a3e020077d09b03f6b7fdef4430c",
|
||||
"zh:dcdae19688d83dbf5dbc4c75d4c5f2d6d8abeb4fddc404c20880f9f3fa22c3ed",
|
||||
"zh:e2e11ffae353f43f4bf4bb88fa386fb214b8dd4aebfe7665b3142484652f9651",
|
||||
"h1:5KSVV/O2eG6ty/3/qpOLQFQqJd96KEPzsTHItslJaMw=",
|
||||
"zh:341c22454d24a75792aa99fbbc0c156f368534b7bb04eef4701b85995c7526a4",
|
||||
"zh:3708656d75061c92f7208cc731b946c991ad343a443f8ff0ef082f077b7580b9",
|
||||
"zh:38ca06f9f45705c648f04f272bd9483397693ea8da6db788cd7955f49ab79d6b",
|
||||
"zh:3f305adb5ee0032e0ea68d198a089ecfd0127092930e99fa51377a250292b592",
|
||||
"zh:4ae2fc6065164a819f576f705e634ebf5059f983149a41dad909719fea96145a",
|
||||
"zh:5d376ac7dd71898a94038d6b6b8036dfec4c0216d832ec1135c855bf3e58eb5f",
|
||||
"zh:63d2ff296d3aee5787e12c759a6a3d5aa15a574456aebbe11b833f01adf3faef",
|
||||
"zh:8ad8746741f7f0ac10da6f1d105f26ebeb6e4d944f58ba749e86d7c9a67da3db",
|
||||
"zh:abec182594ee8a21d72a5f23d3aa7fa45247488539fce6ed648c9c255d8bf972",
|
||||
"zh:bf704b400be4181333b38c0306949f26326a9aa5ae68b4167e2fb8ee7fb13618",
|
||||
"zh:c072938f8695f725fc5fbe986a54890f00d520cce570006390dc5bbc51b2a4ea",
|
||||
"zh:f569b65999264a9416862bca5cd2a6177d94ccb0424f3a4ef424428912b9cb3c",
|
||||
]
|
||||
}
|
||||
|
|
|
@ -4,7 +4,7 @@ terraform {
|
|||
required_providers {
|
||||
azurerm = {
|
||||
source = "hashicorp/azurerm"
|
||||
version = "3.51.0"
|
||||
version = "3.112.0"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,13 @@
|
|||
#!/bin/bash
|
||||
set -e
|
||||
|
||||
# This script is used to install the bundle directly without having to interact with Porter
|
||||
|
||||
# This script assumes you have created an .env from the sample and the variables
|
||||
# will come from there.
|
||||
# shellcheck disable=SC2154
|
||||
terraform init -upgrade -reconfigure -input=false -backend=true \
|
||||
-backend-config="resource_group_name=${TF_VAR_mgmt_resource_group_name}" \
|
||||
-backend-config="storage_account_name=${TF_VAR_mgmt_storage_account_name}" \
|
||||
-backend-config="container_name=${TF_VAR_terraform_state_container_name}" \
|
||||
-backend-config="key=${TF_VAR_tre_resource_id}-devops"
|
|
@ -1 +1 @@
|
|||
__version__ = "0.5.1"
|
||||
__version__ = "0.5.2"
|
||||
|
|
|
@ -5,13 +5,14 @@ A release is created when enough changes have been made and the main branch is s
|
|||
The process follows these steps:
|
||||
|
||||
1. Create a `Prep for Release v0...` issue to track.
|
||||
2. Create PR linked to the `Prep...` issue and open in Dev Container.
|
||||
2. Create a new branch for the release prep and open in Dev Container.
|
||||
3. Update `CHANGELOG.md` in a PR with the following:
|
||||
1. Rename the top-most version noted as unreleased with the version number that makes sense. Note that you don't have to keep the one that is currently in the file as the version number chosen should reflect the changes made (major, minor, etc.)
|
||||
1. Rename the top-most version noted as unreleased with the version number that makes sense. Note that you don't have to keep the one that is currently in the file as the version number chosen should reflect the changes made (major, minor, etc.).
|
||||
2. Create a new section for the next-unreleased version so that future changes will be placed there.
|
||||
3. Run `devops/scripts/list_versions.sh` and include the output in the change log for the version you're about the release
|
||||
4. Merge the PR
|
||||
5. Create GitHub Release in `Pre Release` state.
|
||||
3. Run `devops/scripts/list_versions.sh` and include the output in the change log for the version you're about the release.
|
||||
4. Create PR and link to the `Prep...` issue.
|
||||
5. Merge the PR.
|
||||
6. Create GitHub Release in `Pre Release` state.
|
||||
<!-- markdownlint-disable-next-line MD034 -->
|
||||
1. Go to https://github.com/microsoft/AzureTRE/releases/new
|
||||
2. Click on `Choose a tag` and type a new one for you version. It should be in the form of `v0.9.2` - note the "v" in the beginning.
|
||||
|
@ -20,10 +21,10 @@ The process follows these steps:
|
|||
5. Include a final line with a link to the full changelog similar to this:
|
||||
<!-- markdownlint-disable-next-line MD034 -->
|
||||
**Full Changelog**: https://github.com/microsoft/AzureTRE/compare/v0.9.1...v0.9.2
|
||||
6. Update [AzureTRE-Deployment](https://github.com/microsoft/AzureTRE-Deployment). The procedure may vary depending on the level of changes introduced in the new version but should include the following steps:
|
||||
7. Update [AzureTRE-Deployment](https://github.com/microsoft/AzureTRE-Deployment). The procedure may vary depending on the level of changes introduced in the new version but should include the following steps:
|
||||
1. Update the tag used in [devcontainer.json](https://github.com/microsoft/AzureTRE-Deployment/blob/main/.devcontainer/devcontainer.json).
|
||||
2. Rebuild the container.
|
||||
3. Compare both `.devcontainer` and `.github` folders of the new release with the ones in the repo and make required updates so that only required difference exist.
|
||||
The compare can be done with VSCode [Compare Folders extension](https://marketplace.visualstudio.com/items?itemName=moshfeu.compare-folders) as you have both the old version (under to root folder) and the "new" one inside the _AzureTRE_ symlink.
|
||||
4. With all changes made, rebuild the container to verify it's working and that AzureTRE folder has been populated correctly.
|
||||
7. Once tests have been complete edit GitHub Release to `Set as the latest release`.
|
||||
8. Once tests have been complete edit GitHub Release by disabling `Set as a pre-release` and enabling `Set as the latest release`.
|
||||
|
|
|
@ -64,7 +64,7 @@ ls /etc/yum.repos.d/*.repo | xargs sed -i "s,# baseurl=https://repo.almalinux.or
|
|||
|
||||
yum -y install epel-release
|
||||
ls /etc/yum.repos.d/*.repo | xargs sed -i 's/metalink/# metalink/g'
|
||||
ls /etc/yum.repos.d/*.repo | xargs sed -i "s,#baseurl=https://download.fedoraproject.org/,baseurl=https://nexus-$TRE_ID.$REGION.cloudapp.azure.com/repository/fedoraproject/,g"
|
||||
ls /etc/yum.repos.d/*.repo | xargs sed -i "s,#baseurl=https://download.example/pub/epel/,baseurl=https://nexus-$TRE_ID.$REGION.cloudapp.azure.com/repository/fedoraproject/pub/epel/,g"
|
||||
|
||||
yum -y install python3 python3-pip
|
||||
|
||||
|
@ -83,6 +83,8 @@ gpgcheck=1
|
|||
gpgkey=https://nexus-$TRE_ID.$REGION.cloudapp.azure.com/repository/microsoft-keys/microsoft.asc
|
||||
EOF
|
||||
|
||||
rpm --import https://nexus-$TRE_ID.$REGION.cloudapp.azure.com/repository/almalinux/almalinux/RPM-GPG-KEY-AlmaLinux
|
||||
|
||||
```
|
||||
|
||||
- Click Save.
|
||||
|
|
|
@ -0,0 +1,22 @@
|
|||
# OpenAI Workspace Service
|
||||
|
||||
See: [Azure OpenAI Service](https://learn.microsoft.com/en-us/azure/ai-services/openai/overview)
|
||||
|
||||
## Prerequisites
|
||||
|
||||
- [A base workspace deployed](../workspaces/base.md)
|
||||
|
||||
- The OpenAI workspace service container image needs building and pushing:
|
||||
|
||||
`make workspace_service_bundle BUNDLE=openai`
|
||||
|
||||
## Authenticating
|
||||
|
||||
1. The open AI domain and deployment id can be found from the details tab.
|
||||
2. When communicating with the API, an "api_key" is required. This can be found in the Key Vault.
|
||||
|
||||
## Properties
|
||||
- `is_exposed_externally` - If `True`, the OpenAI workspace is accessible from outside of the workspace virtual network.
|
||||
- `openai_model` - The model to use for the OpenAI deployment `<model name> | <model version>`. The default is `gpt-35-turbo | 0301`.
|
||||
- Important note: Models are subject to different quota and region availability and the deployment may fail if you don't have the correct quota.
|
||||
Please review this link on current limits and how to request increases: [Open AI Quotas](https://learn.microsoft.com/en-us/azure/ai-services/openai/quotas-limits)
|
|
@ -46,6 +46,10 @@ Multiple workspaces can be created within a single Trusted Research Environment
|
|||
|
||||
Each workspace has [workspace users](../azure-tre-overview/user-roles.md): a **workspace owner** (normally only one), and one or more **workspace researchers** that can access the data and workspace services in the workspace. The workspace owner is also considered a workspace researcher.
|
||||
|
||||
!!! important
|
||||
The TRE has a soft limit of 32 projects, it can be increased to 70 by updating the storage account limit in your subscription to 500.
|
||||
See issue [#3920](https://github.com/microsoft/AzureTRE/issues/3920) for more info.
|
||||
|
||||
## Workspace Service
|
||||
|
||||
A workspace service is a service, created as a building block, with pre-configured set of resources that can be applied to a workspace.
|
||||
|
|
|
@ -20,6 +20,7 @@ MLFLOW_SERVICE = "tre-service-mlflow"
|
|||
MYSQL_SERVICE = "tre-workspace-service-mysql"
|
||||
HEALTH_SERVICE = "tre-workspace-service-health"
|
||||
AZURESQL_SERVICE = "tre-workspace-service-azuresql"
|
||||
OPENAI_SERVICE = "tre-workspace-service-openai"
|
||||
|
||||
FIREWALL_SHARED_SERVICE = "tre-shared-service-firewall"
|
||||
GITEA_SHARED_SERVICE = "tre-shared-service-gitea"
|
||||
|
|
|
@ -13,7 +13,8 @@ workspace_services = [
|
|||
strings.MLFLOW_SERVICE,
|
||||
strings.MYSQL_SERVICE,
|
||||
strings.HEALTH_SERVICE,
|
||||
strings.AZURESQL_SERVICE
|
||||
strings.AZURESQL_SERVICE,
|
||||
strings.OPENAI_SERVICE
|
||||
]
|
||||
|
||||
|
||||
|
|
|
@ -104,6 +104,7 @@ nav:
|
|||
- OHDSI: tre-templates/workspace-services/ohdsi.md
|
||||
- MySQL: tre-templates/workspace-services/mysql.md
|
||||
- Azure SQL: tre-templates/workspace-services/azuresql.md
|
||||
- Open AI: tre-templates/workspace-services/openai.md
|
||||
- Shared Services:
|
||||
- Gitea (Source Mirror): tre-templates/shared-services/gitea.md
|
||||
- Nexus (Package Mirror): tre-templates/shared-services/nexus.md
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
---
|
||||
schemaVersion: 1.0.0
|
||||
name: tre-shared-service-admin-vm
|
||||
version: 0.4.3
|
||||
version: 0.4.4
|
||||
description: "An admin vm shared service"
|
||||
dockerfile: Dockerfile.tmpl
|
||||
registry: azuretre
|
||||
|
|
|
@ -2,21 +2,21 @@
|
|||
# Manual edits may be lost in future updates.
|
||||
|
||||
provider "registry.terraform.io/hashicorp/azurerm" {
|
||||
version = "3.23.0"
|
||||
constraints = "3.23.0"
|
||||
version = "3.112.0"
|
||||
constraints = "3.112.0"
|
||||
hashes = [
|
||||
"h1:gL/GB7M9xFNr8SxyalWCkTUaYach2k1/0voy6hAqA0A=",
|
||||
"zh:5856ee393eea2c5807d71794020ec16492b6a219c50fec816376c9c4c50d964a",
|
||||
"zh:58883757371208106ae56b591759a7c308d9a3fd74fb38aefaebe00fee4e380f",
|
||||
"zh:69aca3a6929e629d6fe1dc0c0ff105ee943e5d0f95fe0d8abb89965d5dbc07ce",
|
||||
"zh:6cf146b28a5b82da39ee9b5def88e649ed831824b4e669aa60884743d4b08200",
|
||||
"zh:756dfe6d54e54879bed340f0e05e72a3882a7e8f8f2e783b2064d8c27c9fa1c1",
|
||||
"zh:76ed418c25160fe0be9158c82c425375d79e2427f4a8adbac061d4540c56de79",
|
||||
"zh:8c4f42f67157619fdd21525049f5daf9eb4eb3681b43603570a65bd5d52939ff",
|
||||
"zh:ae15665e0ebe6cb40894cd6b7b7345fe4a7d46ca024fc209e03caee3dff6b51d",
|
||||
"zh:ba21ef2d27e6f96fccfa234201151e0ad195ec798cb5486fa70664e0f707b48a",
|
||||
"zh:d0d9b21b65c7b110e599b78abfdc90cec0bafe2d1b1e0bb36c3a3d5d12ad63b4",
|
||||
"zh:ea02b2e6de9ea4184db300903d75871b16b7e240f6b38c46f8b149878f47c739",
|
||||
"h1:5KSVV/O2eG6ty/3/qpOLQFQqJd96KEPzsTHItslJaMw=",
|
||||
"zh:341c22454d24a75792aa99fbbc0c156f368534b7bb04eef4701b85995c7526a4",
|
||||
"zh:3708656d75061c92f7208cc731b946c991ad343a443f8ff0ef082f077b7580b9",
|
||||
"zh:38ca06f9f45705c648f04f272bd9483397693ea8da6db788cd7955f49ab79d6b",
|
||||
"zh:3f305adb5ee0032e0ea68d198a089ecfd0127092930e99fa51377a250292b592",
|
||||
"zh:4ae2fc6065164a819f576f705e634ebf5059f983149a41dad909719fea96145a",
|
||||
"zh:5d376ac7dd71898a94038d6b6b8036dfec4c0216d832ec1135c855bf3e58eb5f",
|
||||
"zh:63d2ff296d3aee5787e12c759a6a3d5aa15a574456aebbe11b833f01adf3faef",
|
||||
"zh:8ad8746741f7f0ac10da6f1d105f26ebeb6e4d944f58ba749e86d7c9a67da3db",
|
||||
"zh:abec182594ee8a21d72a5f23d3aa7fa45247488539fce6ed648c9c255d8bf972",
|
||||
"zh:bf704b400be4181333b38c0306949f26326a9aa5ae68b4167e2fb8ee7fb13618",
|
||||
"zh:c072938f8695f725fc5fbe986a54890f00d520cce570006390dc5bbc51b2a4ea",
|
||||
"zh:f569b65999264a9416862bca5cd2a6177d94ccb0424f3a4ef424428912b9cb3c",
|
||||
]
|
||||
}
|
||||
|
|
|
@ -3,7 +3,7 @@ terraform {
|
|||
required_providers {
|
||||
azurerm = {
|
||||
source = "hashicorp/azurerm"
|
||||
version = "=3.23.0"
|
||||
version = "=3.112.0"
|
||||
}
|
||||
random = {
|
||||
source = "hashicorp/random"
|
||||
|
|
|
@ -0,0 +1,13 @@
|
|||
#!/bin/bash
|
||||
set -e
|
||||
|
||||
# This script is used to install the bundle directly without having to interact with Porter
|
||||
|
||||
# This script assumes you have created an .env from the sample and the variables
|
||||
# will come from there.
|
||||
# shellcheck disable=SC2154
|
||||
terraform init -upgrade -reconfigure -input=false -backend=true \
|
||||
-backend-config="resource_group_name=${TF_VAR_mgmt_resource_group_name}" \
|
||||
-backend-config="storage_account_name=${TF_VAR_mgmt_storage_account_name}" \
|
||||
-backend-config="container_name=${TF_VAR_terraform_state_container_name}" \
|
||||
-backend-config="key=${TF_VAR_tre_resource_id}-shared-adminvm"
|
|
@ -1,7 +1,7 @@
|
|||
---
|
||||
schemaVersion: 1.0.0
|
||||
name: tre-shared-service-airlock-notifier
|
||||
version: 1.0.1
|
||||
version: 1.0.2
|
||||
description: "A shared service notifying on Airlock Operations"
|
||||
registry: azuretre
|
||||
dockerfile: Dockerfile.tmpl
|
||||
|
|
|
@ -1,42 +1,22 @@
|
|||
# This file is maintained automatically by "terraform init".
|
||||
# Manual edits may be lost in future updates.
|
||||
|
||||
provider "registry.terraform.io/azure/azapi" {
|
||||
version = "1.14.0"
|
||||
constraints = "1.14.0"
|
||||
hashes = [
|
||||
"h1:D8AhiIgpSH6pG05WuslOg3XS0O9I5VxOoD3W3i8N+Xo=",
|
||||
"zh:083709be750b878dfb33747ba1d326d23619a0ed654f95bce9c808e424923c90",
|
||||
"zh:261b5060297b732d97b4363ad753355bfee00e93d773fd329023a5619b964c39",
|
||||
"zh:51adfdaeb1b2c3d9e7aeba97c9c73d469712223dd125b14d90377d445d1cd3df",
|
||||
"zh:5bcbedc9eeefa5e6267042604af20f93cadceba41d8d90a91040f60f6c5e38a9",
|
||||
"zh:6da127f306083e740767f53dd0cc8787166a8af4f44519873dd8775ca981ddef",
|
||||
"zh:7604cf377b8ea31a5a44db5b8566f5eea4d73acdfaaeb8ba10fcac46cbf4a738",
|
||||
"zh:77789ef8906acabbf7eb55378e1f9c407499bb765811f193d256897d2925d66d",
|
||||
"zh:8a333c53279b3b0b65519191dbba8ef7dc390f5d96216e4e6f165cac8b3e5dc2",
|
||||
"zh:8c0dfe57dc2c29f8953db3037144d2254ce28bfa55dae537707ae4bdb4460f64",
|
||||
"zh:debdeabcbcb6b421c2cdf2093d520c67e75a11d28d357b0ba32dd748105a5460",
|
||||
"zh:e252ee062513904836fcc5e6548243429819e68aa7cfaeac7da8d816c4c4d1e8",
|
||||
"zh:f48d1fd67b463d2121516911b5d20f8a72217e43e7740bb74929a17dbd43bb59",
|
||||
]
|
||||
}
|
||||
|
||||
provider "registry.terraform.io/hashicorp/azurerm" {
|
||||
version = "3.113.0"
|
||||
constraints = "3.113.0"
|
||||
version = "3.112.0"
|
||||
constraints = "3.112.0"
|
||||
hashes = [
|
||||
"h1:eEUtt0lrLdpVaF6FiDq8BGQPgEcykmhj0aNIL7hTOGw=",
|
||||
"zh:12479f5664288943400447b55e50df675c28ae82ad8d373cc2e5682f3a3411f0",
|
||||
"zh:1b42a14e80e568429d3b55fed753ca3ef0df9dcdfa107890d7264599c020940f",
|
||||
"zh:381be6ca617f848de3baa3985a6e1788e91a803afe04a3c5c727453528b6310d",
|
||||
"zh:3e70e2e07b6db1c363de3e5d0ca47f27fc956473df03329c7d2e54d3ac29176b",
|
||||
"zh:87c7633aeaa828098c6055da9e67d4acaf4b46748b6b3f0267e105e55f05de25",
|
||||
"zh:8d0d98226901f874770dd5220d4701a12ae8bd586994615aa7dcba12b9736bec",
|
||||
"zh:9fd913acd42a60c3a90a18ce803567ef861db8779a59aacced91f2cbd86de9d9",
|
||||
"zh:b6f3f7ae0a055437fb36c139af9bb3135e7f4dad172157ae1eb0177dc74d703f",
|
||||
"zh:b927027ba2bf40d34e03d742fd2b6c5299023b5ab8e6f05e50aac76a46ad1094",
|
||||
"zh:ceb5187b9d2a439f4e48944f3ffeeeaf47a03dbe6f3325ea1775bf659ce0aa88",
|
||||
"h1:5KSVV/O2eG6ty/3/qpOLQFQqJd96KEPzsTHItslJaMw=",
|
||||
"zh:341c22454d24a75792aa99fbbc0c156f368534b7bb04eef4701b85995c7526a4",
|
||||
"zh:3708656d75061c92f7208cc731b946c991ad343a443f8ff0ef082f077b7580b9",
|
||||
"zh:38ca06f9f45705c648f04f272bd9483397693ea8da6db788cd7955f49ab79d6b",
|
||||
"zh:3f305adb5ee0032e0ea68d198a089ecfd0127092930e99fa51377a250292b592",
|
||||
"zh:4ae2fc6065164a819f576f705e634ebf5059f983149a41dad909719fea96145a",
|
||||
"zh:5d376ac7dd71898a94038d6b6b8036dfec4c0216d832ec1135c855bf3e58eb5f",
|
||||
"zh:63d2ff296d3aee5787e12c759a6a3d5aa15a574456aebbe11b833f01adf3faef",
|
||||
"zh:8ad8746741f7f0ac10da6f1d105f26ebeb6e4d944f58ba749e86d7c9a67da3db",
|
||||
"zh:abec182594ee8a21d72a5f23d3aa7fa45247488539fce6ed648c9c255d8bf972",
|
||||
"zh:bf704b400be4181333b38c0306949f26326a9aa5ae68b4167e2fb8ee7fb13618",
|
||||
"zh:c072938f8695f725fc5fbe986a54890f00d520cce570006390dc5bbc51b2a4ea",
|
||||
"zh:f569b65999264a9416862bca5cd2a6177d94ccb0424f3a4ef424428912b9cb3c",
|
||||
"zh:fb9d78dfeca7489bffca9b1a1f3abee7f16dbbcba31388aea1102062c1d6dce8",
|
||||
]
|
||||
}
|
||||
|
|
|
@ -3,7 +3,7 @@ terraform {
|
|||
required_providers {
|
||||
azurerm = {
|
||||
source = "hashicorp/azurerm"
|
||||
version = "=3.113.0"
|
||||
version = "=3.112.0"
|
||||
}
|
||||
}
|
||||
backend "azurerm" {}
|
||||
|
|
|
@ -1,2 +1,2 @@
|
|||
.cnab/
|
||||
.terraform*
|
||||
.terraform/
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
---
|
||||
schemaVersion: 1.0.0
|
||||
name: tre-shared-service-certs
|
||||
version: 0.5.1
|
||||
version: 0.5.2
|
||||
description: "An Azure TRE shared service to generate certificates for a specified internal domain using Letsencrypt"
|
||||
registry: azuretre
|
||||
dockerfile: Dockerfile.tmpl
|
||||
|
|
|
@ -0,0 +1,22 @@
|
|||
# This file is maintained automatically by "terraform init".
|
||||
# Manual edits may be lost in future updates.
|
||||
|
||||
provider "registry.terraform.io/hashicorp/azurerm" {
|
||||
version = "3.112.0"
|
||||
constraints = "3.112.0"
|
||||
hashes = [
|
||||
"h1:5KSVV/O2eG6ty/3/qpOLQFQqJd96KEPzsTHItslJaMw=",
|
||||
"zh:341c22454d24a75792aa99fbbc0c156f368534b7bb04eef4701b85995c7526a4",
|
||||
"zh:3708656d75061c92f7208cc731b946c991ad343a443f8ff0ef082f077b7580b9",
|
||||
"zh:38ca06f9f45705c648f04f272bd9483397693ea8da6db788cd7955f49ab79d6b",
|
||||
"zh:3f305adb5ee0032e0ea68d198a089ecfd0127092930e99fa51377a250292b592",
|
||||
"zh:4ae2fc6065164a819f576f705e634ebf5059f983149a41dad909719fea96145a",
|
||||
"zh:5d376ac7dd71898a94038d6b6b8036dfec4c0216d832ec1135c855bf3e58eb5f",
|
||||
"zh:63d2ff296d3aee5787e12c759a6a3d5aa15a574456aebbe11b833f01adf3faef",
|
||||
"zh:8ad8746741f7f0ac10da6f1d105f26ebeb6e4d944f58ba749e86d7c9a67da3db",
|
||||
"zh:abec182594ee8a21d72a5f23d3aa7fa45247488539fce6ed648c9c255d8bf972",
|
||||
"zh:bf704b400be4181333b38c0306949f26326a9aa5ae68b4167e2fb8ee7fb13618",
|
||||
"zh:c072938f8695f725fc5fbe986a54890f00d520cce570006390dc5bbc51b2a4ea",
|
||||
"zh:f569b65999264a9416862bca5cd2a6177d94ccb0424f3a4ef424428912b9cb3c",
|
||||
]
|
||||
}
|
|
@ -3,7 +3,7 @@ terraform {
|
|||
required_providers {
|
||||
azurerm = {
|
||||
source = "hashicorp/azurerm"
|
||||
version = "=3.22.0"
|
||||
version = "=3.112.0"
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -0,0 +1,13 @@
|
|||
#!/bin/bash
|
||||
set -e
|
||||
|
||||
# This script is used to install the bundle directly without having to interact with Porter
|
||||
|
||||
# This script assumes you have created an .env from the sample and the variables
|
||||
# will come from there.
|
||||
# shellcheck disable=SC2154
|
||||
terraform init -upgrade -reconfigure -input=false -backend=true \
|
||||
-backend-config="resource_group_name=${TF_VAR_mgmt_resource_group_name}" \
|
||||
-backend-config="storage_account_name=${TF_VAR_mgmt_storage_account_name}" \
|
||||
-backend-config="container_name=${TF_VAR_terraform_state_container_name}" \
|
||||
-backend-config="key=${TRE_ID}-certs"
|
|
@ -1,7 +1,7 @@
|
|||
---
|
||||
schemaVersion: 1.0.0
|
||||
name: tre-shared-service-cyclecloud
|
||||
version: 0.5.5
|
||||
version: 0.6.3
|
||||
description: "An Azure TRE Shared Service Template for Azure Cyclecloud"
|
||||
registry: azuretre
|
||||
dockerfile: Dockerfile.tmpl
|
||||
|
@ -53,6 +53,11 @@ outputs:
|
|||
applyTo:
|
||||
- install
|
||||
- upgrade
|
||||
- name: shared_subnet_address_prefixes
|
||||
type: string
|
||||
applyTo:
|
||||
- install
|
||||
- upgrade
|
||||
|
||||
|
||||
mixins:
|
||||
|
@ -67,10 +72,6 @@ install:
|
|||
description: "Deploy Cyclecloud shared service"
|
||||
vars:
|
||||
tre_id: ${ bundle.parameters.tre_id }
|
||||
arm_client_id: ${ bundle.credentials.azure_client_id }
|
||||
arm_client_secret: ${ bundle.credentials.azure_client_secret }
|
||||
arm_tenant_id: ${ bundle.credentials.azure_tenant_id }
|
||||
arm_use_msi: ${ bundle.parameters.arm_use_msi }
|
||||
tre_resource_id: ${ bundle.parameters.id }
|
||||
arm_environment: ${ bundle.parameters.arm_environment }
|
||||
backendConfig:
|
||||
|
@ -80,16 +81,13 @@ install:
|
|||
key: ${ bundle.parameters.id }
|
||||
outputs:
|
||||
- name: connection_uri
|
||||
- name: shared_subnet_address_prefixes
|
||||
|
||||
upgrade:
|
||||
- terraform:
|
||||
description: "Update Cyclecloud shared service"
|
||||
vars:
|
||||
tre_id: ${ bundle.parameters.tre_id }
|
||||
arm_client_id: ${ bundle.credentials.azure_client_id }
|
||||
arm_client_secret: ${ bundle.credentials.azure_client_secret }
|
||||
arm_tenant_id: ${ bundle.credentials.azure_tenant_id }
|
||||
arm_use_msi: ${ bundle.parameters.arm_use_msi }
|
||||
tre_resource_id: ${ bundle.parameters.id }
|
||||
arm_environment: ${ bundle.parameters.arm_environment }
|
||||
backendConfig:
|
||||
|
@ -99,16 +97,13 @@ upgrade:
|
|||
key: ${ bundle.parameters.id }
|
||||
outputs:
|
||||
- name: connection_uri
|
||||
- name: shared_subnet_address_prefixes
|
||||
|
||||
uninstall:
|
||||
- terraform:
|
||||
description: "Delete the Cyclecloud shared service"
|
||||
vars:
|
||||
tre_id: ${ bundle.parameters.tre_id }
|
||||
arm_client_id: ${ bundle.credentials.azure_client_id }
|
||||
arm_client_secret: ${ bundle.credentials.azure_client_secret }
|
||||
arm_tenant_id: ${ bundle.credentials.azure_tenant_id }
|
||||
arm_use_msi: ${ bundle.parameters.arm_use_msi }
|
||||
tre_resource_id: ${ bundle.parameters.id }
|
||||
arm_environment: ${ bundle.parameters.arm_environment }
|
||||
backendConfig:
|
||||
|
|
|
@ -4,8 +4,200 @@
|
|||
"type": "object",
|
||||
"title": "Azure CycleCloud",
|
||||
"description": "Azure CycleCloud is an enterprise-friendly tool for orchestrating and managing High Performance Computing (HPC) environments on Azure.",
|
||||
"required": [
|
||||
],
|
||||
"required": [],
|
||||
"properties": {
|
||||
"display_name": {
|
||||
"type": "string",
|
||||
"title": "Name for the shared service",
|
||||
"description": "The name of the shared service to be displayed to users",
|
||||
"default": "CycleCloud",
|
||||
"updateable": true
|
||||
},
|
||||
"description": {
|
||||
"type": "string",
|
||||
"title": "Description of the shared service",
|
||||
"description": "Description of the shared service",
|
||||
"default": "Manage HPC environments on Azure",
|
||||
"updateable": true
|
||||
},
|
||||
"overview": {
|
||||
"type": "string",
|
||||
"title": "Workspace Service Overview",
|
||||
"description": "Long form description of the shared service, in markdown syntax",
|
||||
"default": "Azure CycleCloud is an enterprise-friendly tool for orchestrating and managing High Performance Computing (HPC) environments on Azure.",
|
||||
"updateable": true
|
||||
}
|
||||
},
|
||||
"pipeline": {
|
||||
"install": [
|
||||
{
|
||||
"stepId": "main"
|
||||
},
|
||||
{
|
||||
"stepId": "42024559-3a88-4518-b1ea-713aebc91cfd",
|
||||
"stepTitle": "Add CycleCloud rule collection to firewall",
|
||||
"resourceTemplateName": "tre-shared-service-firewall",
|
||||
"resourceType": "shared-service",
|
||||
"resourceAction": "upgrade",
|
||||
"properties": [
|
||||
{
|
||||
"name": "network_rule_collections",
|
||||
"type": "array",
|
||||
"arraySubstitutionAction": "replace",
|
||||
"arrayMatchField": "name",
|
||||
"value": {
|
||||
"name": "nrc_svc_{{ resource.id }}_cyclecloud",
|
||||
"action": "Allow",
|
||||
"rules": [
|
||||
{
|
||||
"name": "Cyclecloud_Dependancies",
|
||||
"description": "Cyclecloud Dependancies",
|
||||
"source_addresses": "{{ resource.properties.shared_subnet_address_prefixes }}",
|
||||
"destination_addresses": [
|
||||
"AzureResourceManager"
|
||||
],
|
||||
"destination_ports": [
|
||||
"443"
|
||||
],
|
||||
"protocols": [
|
||||
"TCP"
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "rule_collections",
|
||||
"type": "array",
|
||||
"arraySubstitutionAction": "replace",
|
||||
"arrayMatchField": "name",
|
||||
"value": {
|
||||
"name": "arc_svc_{{ resource.id }}_cyclecloud",
|
||||
"action": "Allow",
|
||||
"rules": [
|
||||
{
|
||||
"name": "cyclecloud",
|
||||
"description": "CycleCloud",
|
||||
"protocols": [
|
||||
{
|
||||
"port": "443",
|
||||
"type": "Https"
|
||||
}
|
||||
],
|
||||
"target_fqdns": [
|
||||
"github.com",
|
||||
"api.github.com",
|
||||
"codeload.github.com",
|
||||
"objects.githubusercontent.com"
|
||||
],
|
||||
"source_addresses": "{{ resource.properties.shared_subnet_address_prefixes }}"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"upgrade": [
|
||||
{
|
||||
"stepId": "main"
|
||||
},
|
||||
{
|
||||
"stepId": "c3f95f9f-d125-4937-9403-84e4957a26b8",
|
||||
"stepTitle": "Add CycleCloud rule collection from firewall",
|
||||
"resourceTemplateName": "tre-shared-service-firewall",
|
||||
"resourceType": "shared-service",
|
||||
"resourceAction": "upgrade",
|
||||
"properties": [
|
||||
{
|
||||
"name": "network_rule_collections",
|
||||
"type": "array",
|
||||
"arraySubstitutionAction": "replace",
|
||||
"arrayMatchField": "name",
|
||||
"value": {
|
||||
"name": "nrc_svc_{{ resource.id }}_cyclecloud",
|
||||
"action": "Allow",
|
||||
"rules": [
|
||||
{
|
||||
"name": "Cyclecloud_Dependancies",
|
||||
"description": "Cyclecloud Dependancies",
|
||||
"source_addresses": "{{ resource.properties.shared_subnet_address_prefixes }}",
|
||||
"destination_addresses": [
|
||||
"AzureResourceManager"
|
||||
],
|
||||
"destination_ports": [
|
||||
"443"
|
||||
],
|
||||
"protocols": [
|
||||
"TCP"
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "rule_collections",
|
||||
"type": "array",
|
||||
"arraySubstitutionAction": "replace",
|
||||
"arrayMatchField": "name",
|
||||
"value": {
|
||||
"name": "arc_svc_{{ resource.id }}_cyclecloud",
|
||||
"action": "Allow",
|
||||
"rules": [
|
||||
{
|
||||
"name": "cyclecloud",
|
||||
"description": "CycleCloud",
|
||||
"protocols": [
|
||||
{
|
||||
"port": "443",
|
||||
"type": "Https"
|
||||
}
|
||||
],
|
||||
"target_fqdns": [
|
||||
"github.com",
|
||||
"api.github.com",
|
||||
"codeload.github.com",
|
||||
"objects.githubusercontent.com"
|
||||
],
|
||||
"source_addresses": "{{ resource.properties.shared_subnet_address_prefixes }}"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"uninstall": [
|
||||
{
|
||||
"stepId": "c3f95f9f-d125-4937-9403-84e4957a26a8",
|
||||
"stepTitle": "Remove CycleCloud rule collection from firewall",
|
||||
"resourceTemplateName": "tre-shared-service-firewall",
|
||||
"resourceType": "shared-service",
|
||||
"resourceAction": "upgrade",
|
||||
"properties": [
|
||||
{
|
||||
"name": "network_rule_collections",
|
||||
"type": "array",
|
||||
"arraySubstitutionAction": "remove",
|
||||
"arrayMatchField": "name",
|
||||
"value": {
|
||||
"name": "nrc_svc_{{ resource.id }}_cyclecloud"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "rule_collections",
|
||||
"type": "array",
|
||||
"arraySubstitutionAction": "remove",
|
||||
"arrayMatchField": "name",
|
||||
"value": {
|
||||
"name": "arc_svc_{{ resource.id }}_cyclecloud"
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"stepId": "main"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
|
|
|
@ -2,21 +2,21 @@
|
|||
# Manual edits may be lost in future updates.
|
||||
|
||||
provider "registry.terraform.io/hashicorp/azurerm" {
|
||||
version = "3.5.0"
|
||||
constraints = "3.5.0"
|
||||
version = "3.112.0"
|
||||
constraints = "3.112.0"
|
||||
hashes = [
|
||||
"h1:T4XsCHDT839VehWKdxbVsLn0ECjcQaUTzbSGW055pgM=",
|
||||
"zh:0d8ae6d6e87f44ed4a178be03d6466339b0bb578ab54c2677e365a8281b0bb7d",
|
||||
"zh:29d250d1a18d49652b28f234ecd17687b36c875dc47877a678e587d5d136b054",
|
||||
"zh:2e69ba373cf009e8a60b36d04f3dbc4638708d1bf88be9f96b3e52cbf8f47f31",
|
||||
"zh:53d525dd84ac63b5f749bfbc6b70a202dacf29597664d2ab1165efea6f24f630",
|
||||
"zh:a25024d574ccd5ae6c2962f3bb71d510f62899f493b1ed096f2f7f0e2b18f975",
|
||||
"zh:aabc64fe64319b95aaba1d1866f87abc7b10adae37d2eafa2f85f37317fdd49f",
|
||||
"zh:acc6a977814897cb23d3b3753213281334238f8bce6d2b21e9f04fc4087ee980",
|
||||
"zh:b24987e9416c39cd59c0fa41c139a97406b9955f0607fcafbf3315014456338a",
|
||||
"zh:c550eae45fd32acdbe32b4e5c450ae95df6cb18903ac7216b1b07b23a16ce045",
|
||||
"zh:c8f83b763b643893dcb6933a6bcee824cb514e06e7e5c5f5ac4ba187e66d7e22",
|
||||
"zh:dcdac07e7ea18464dea729717870c275de9453775243c231e1fb305cad0ee597",
|
||||
"h1:5KSVV/O2eG6ty/3/qpOLQFQqJd96KEPzsTHItslJaMw=",
|
||||
"zh:341c22454d24a75792aa99fbbc0c156f368534b7bb04eef4701b85995c7526a4",
|
||||
"zh:3708656d75061c92f7208cc731b946c991ad343a443f8ff0ef082f077b7580b9",
|
||||
"zh:38ca06f9f45705c648f04f272bd9483397693ea8da6db788cd7955f49ab79d6b",
|
||||
"zh:3f305adb5ee0032e0ea68d198a089ecfd0127092930e99fa51377a250292b592",
|
||||
"zh:4ae2fc6065164a819f576f705e634ebf5059f983149a41dad909719fea96145a",
|
||||
"zh:5d376ac7dd71898a94038d6b6b8036dfec4c0216d832ec1135c855bf3e58eb5f",
|
||||
"zh:63d2ff296d3aee5787e12c759a6a3d5aa15a574456aebbe11b833f01adf3faef",
|
||||
"zh:8ad8746741f7f0ac10da6f1d105f26ebeb6e4d944f58ba749e86d7c9a67da3db",
|
||||
"zh:abec182594ee8a21d72a5f23d3aa7fa45247488539fce6ed648c9c255d8bf972",
|
||||
"zh:bf704b400be4181333b38c0306949f26326a9aa5ae68b4167e2fb8ee7fb13618",
|
||||
"zh:c072938f8695f725fc5fbe986a54890f00d520cce570006390dc5bbc51b2a4ea",
|
||||
"zh:f569b65999264a9416862bca5cd2a6177d94ccb0424f3a4ef424428912b9cb3c",
|
||||
]
|
||||
}
|
||||
|
|
|
@ -3,7 +3,7 @@ terraform {
|
|||
required_providers {
|
||||
azurerm = {
|
||||
source = "hashicorp/azurerm"
|
||||
version = "=3.5.0"
|
||||
version = "=3.112.0"
|
||||
}
|
||||
random = {
|
||||
source = "hashicorp/random"
|
||||
|
|
|
@ -1,3 +1,7 @@
|
|||
output "connection_uri" {
|
||||
value = "https://${azurerm_private_dns_zone.cyclecloud.name}"
|
||||
}
|
||||
|
||||
output "shared_subnet_address_prefixes" {
|
||||
value = data.azurerm_subnet.shared.address_prefixes
|
||||
}
|
||||
|
|
|
@ -0,0 +1,13 @@
|
|||
#!/bin/bash
|
||||
set -e
|
||||
|
||||
# This script is used to install the bundle directly without having to interact with Porter
|
||||
|
||||
# This script assumes you have created an .env from the sample and the variables
|
||||
# will come from there.
|
||||
# shellcheck disable=SC2154
|
||||
terraform init -upgrade -reconfigure -input=false -backend=true \
|
||||
-backend-config="resource_group_name=${TF_VAR_mgmt_resource_group_name}" \
|
||||
-backend-config="storage_account_name=${TF_VAR_mgmt_storage_account_name}" \
|
||||
-backend-config="container_name=${TF_VAR_terraform_state_container_name}" \
|
||||
-backend-config="key=${TF_VAR_tre_resource_id}-${ID}"
|
|
@ -1,7 +1,7 @@
|
|||
---
|
||||
schemaVersion: 1.0.0
|
||||
name: tre-shared-service-databricks-private-auth
|
||||
version: 0.1.5
|
||||
version: 0.1.6
|
||||
description: "An Azure TRE shared service for Azure Databricks authentication."
|
||||
registry: azuretre
|
||||
dockerfile: Dockerfile.tmpl
|
||||
|
|
|
@ -20,21 +20,21 @@ provider "registry.terraform.io/databricks/databricks" {
|
|||
}
|
||||
|
||||
provider "registry.terraform.io/hashicorp/azurerm" {
|
||||
version = "3.40.0"
|
||||
constraints = "3.40.0"
|
||||
version = "3.112.0"
|
||||
constraints = "3.112.0"
|
||||
hashes = [
|
||||
"h1:/Jbhw/zNAsDYDoASaG6w+0KZyay9BkUVOpR8b7m0CsA=",
|
||||
"zh:00fa6dc05bf2643c6a3c741edb7d88263698086835a8a613f1d7bd76d1b918fd",
|
||||
"zh:0da9b788e773272a7aa9d59bd9e3d5842edd4acc8c3895bea469e66dc14205a0",
|
||||
"zh:25a8c39d1f042fc7c83ba9dd745c3569ea9e577fadb57563a575fb115ac2b9f1",
|
||||
"zh:4423666dbeae8bc22c6e8898ffbb88745681dc27668ca9104b665dd7f3d7292c",
|
||||
"zh:78c07308e7407b558d15737a98fb5eaf15529d297fc3798de6a7d61e0466e2e3",
|
||||
"zh:894aca7e6f4f331ee8eb51957a180dc03d399d2b1727e0d7842e9b3f022a8c6a",
|
||||
"zh:bb0e620c2161b4c4892a6f50b1c4c69ed70f66bb5e92543a03d79d0e4b1d9441",
|
||||
"zh:c7d8e6a791159ca63b30908c9efe72ab65f60d64b30f0c1eb5a64972f4994844",
|
||||
"zh:d04c11bfd346c1ac34d16bbdca70b23b006e822f6beb236b85375e8343888eb4",
|
||||
"zh:f4edea9660327c7c70a823d786fd1b1c1b186c8759770447f63da72f23e1a73c",
|
||||
"h1:5KSVV/O2eG6ty/3/qpOLQFQqJd96KEPzsTHItslJaMw=",
|
||||
"zh:341c22454d24a75792aa99fbbc0c156f368534b7bb04eef4701b85995c7526a4",
|
||||
"zh:3708656d75061c92f7208cc731b946c991ad343a443f8ff0ef082f077b7580b9",
|
||||
"zh:38ca06f9f45705c648f04f272bd9483397693ea8da6db788cd7955f49ab79d6b",
|
||||
"zh:3f305adb5ee0032e0ea68d198a089ecfd0127092930e99fa51377a250292b592",
|
||||
"zh:4ae2fc6065164a819f576f705e634ebf5059f983149a41dad909719fea96145a",
|
||||
"zh:5d376ac7dd71898a94038d6b6b8036dfec4c0216d832ec1135c855bf3e58eb5f",
|
||||
"zh:63d2ff296d3aee5787e12c759a6a3d5aa15a574456aebbe11b833f01adf3faef",
|
||||
"zh:8ad8746741f7f0ac10da6f1d105f26ebeb6e4d944f58ba749e86d7c9a67da3db",
|
||||
"zh:abec182594ee8a21d72a5f23d3aa7fa45247488539fce6ed648c9c255d8bf972",
|
||||
"zh:bf704b400be4181333b38c0306949f26326a9aa5ae68b4167e2fb8ee7fb13618",
|
||||
"zh:c072938f8695f725fc5fbe986a54890f00d520cce570006390dc5bbc51b2a4ea",
|
||||
"zh:f569b65999264a9416862bca5cd2a6177d94ccb0424f3a4ef424428912b9cb3c",
|
||||
"zh:f986e268949cf445ff53a66af48a87c6f6dba5964e8a5b1dc0ea02afabdd71f7",
|
||||
]
|
||||
}
|
||||
|
|
|
@ -2,7 +2,7 @@ terraform {
|
|||
required_providers {
|
||||
azurerm = {
|
||||
source = "hashicorp/azurerm"
|
||||
version = "=3.40.0"
|
||||
version = "=3.112.0"
|
||||
}
|
||||
databricks = {
|
||||
source = "databricks/databricks"
|
||||
|
|
|
@ -0,0 +1,13 @@
|
|||
#!/bin/bash
|
||||
set -e
|
||||
|
||||
# This script is used to install the bundle directly without having to interact with Porter
|
||||
|
||||
# This script assumes you have created an .env from the sample and the variables
|
||||
# will come from there.
|
||||
# shellcheck disable=SC2154
|
||||
terraform init -upgrade -reconfigure -input=false -backend=true \
|
||||
-backend-config="resource_group_name=${TF_VAR_mgmt_resource_group_name}" \
|
||||
-backend-config="storage_account_name=${TF_VAR_mgmt_storage_account_name}" \
|
||||
-backend-config="container_name=${TF_VAR_terraform_state_container_name}" \
|
||||
-backend-config="key=tre-workspace-service-gitea-${TF_VAR_id}"
|
|
@ -1,7 +1,7 @@
|
|||
---
|
||||
schemaVersion: 1.0.0
|
||||
name: tre-shared-service-firewall
|
||||
version: 1.2.0
|
||||
version: 1.2.1
|
||||
description: "An Azure TRE Firewall shared service"
|
||||
dockerfile: Dockerfile.tmpl
|
||||
registry: azuretre
|
||||
|
|
|
@ -2,21 +2,21 @@
|
|||
# Manual edits may be lost in future updates.
|
||||
|
||||
provider "registry.terraform.io/hashicorp/azurerm" {
|
||||
version = "3.53.0"
|
||||
constraints = "3.53.0"
|
||||
version = "3.112.0"
|
||||
constraints = "3.112.0"
|
||||
hashes = [
|
||||
"h1:bK70LV1NldhodSm58cUpawKwdUL1A5AKKglAV2wZ/QY=",
|
||||
"zh:078ece8318ad7d6c1cd2e5f2044188e74af63921b93223c7f8d477539fa91888",
|
||||
"zh:1bdc98ff8c2d3f3e81a746762e03d39794b2f5c90dc478cdb23dcc3d3f9947b6",
|
||||
"zh:20b51cfc0ffc4ff368e6eb2eaece0b6bb99ade09e4b91b3444b50e94fc54c119",
|
||||
"zh:233eed91279a9473825ba02d66487388d66dfc719b7249112d085dece0c2b594",
|
||||
"zh:397ac8194ecc2f8d34d42600d6bf9e20399b222170dc1443b5800db3135ebc99",
|
||||
"zh:3af3a2d8485d6c1ffcd26848af9ab087dfcb6cb045cc624e51f4db5144b53a9c",
|
||||
"zh:5d0b9a346b57cccc369e2076556274225ec7f1c9044a2503dcfd8c117cdc2f79",
|
||||
"zh:6e762dcef4ba14985f93af5f3fd195c9ee7d27de8de3bebdeefe761e53e79bb9",
|
||||
"zh:73f9be719aa867985b1744c1f4fab834d01eb2069ec7a78b3a1bfa87c8256a40",
|
||||
"zh:756deed30c20ffc9b4756c239e1675d3693f7175851e5ef946948a8bfb0b7935",
|
||||
"zh:c279f99902a45a5b88d25d609a73709d101af3ce71222efbab9d4706c8a538b4",
|
||||
"h1:5KSVV/O2eG6ty/3/qpOLQFQqJd96KEPzsTHItslJaMw=",
|
||||
"zh:341c22454d24a75792aa99fbbc0c156f368534b7bb04eef4701b85995c7526a4",
|
||||
"zh:3708656d75061c92f7208cc731b946c991ad343a443f8ff0ef082f077b7580b9",
|
||||
"zh:38ca06f9f45705c648f04f272bd9483397693ea8da6db788cd7955f49ab79d6b",
|
||||
"zh:3f305adb5ee0032e0ea68d198a089ecfd0127092930e99fa51377a250292b592",
|
||||
"zh:4ae2fc6065164a819f576f705e634ebf5059f983149a41dad909719fea96145a",
|
||||
"zh:5d376ac7dd71898a94038d6b6b8036dfec4c0216d832ec1135c855bf3e58eb5f",
|
||||
"zh:63d2ff296d3aee5787e12c759a6a3d5aa15a574456aebbe11b833f01adf3faef",
|
||||
"zh:8ad8746741f7f0ac10da6f1d105f26ebeb6e4d944f58ba749e86d7c9a67da3db",
|
||||
"zh:abec182594ee8a21d72a5f23d3aa7fa45247488539fce6ed648c9c255d8bf972",
|
||||
"zh:bf704b400be4181333b38c0306949f26326a9aa5ae68b4167e2fb8ee7fb13618",
|
||||
"zh:c072938f8695f725fc5fbe986a54890f00d520cce570006390dc5bbc51b2a4ea",
|
||||
"zh:f569b65999264a9416862bca5cd2a6177d94ccb0424f3a4ef424428912b9cb3c",
|
||||
]
|
||||
}
|
||||
|
|
|
@ -3,7 +3,7 @@ terraform {
|
|||
required_providers {
|
||||
azurerm = {
|
||||
source = "hashicorp/azurerm"
|
||||
version = "=3.53.0"
|
||||
version = "=3.112.0"
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -0,0 +1,13 @@
|
|||
#!/bin/bash
|
||||
set -e
|
||||
|
||||
# This script is used to install the bundle directly without having to interact with Porter
|
||||
|
||||
# This script assumes you have created an .env from the sample and the variables
|
||||
# will come from there.
|
||||
# shellcheck disable=SC2154
|
||||
terraform init -upgrade -reconfigure -input=false -backend=true \
|
||||
-backend-config="resource_group_name=${TF_VAR_mgmt_resource_group_name}" \
|
||||
-backend-config="storage_account_name=${TF_VAR_mgmt_storage_account_name}" \
|
||||
-backend-config="container_name=${TF_VAR_terraform_state_container_name}" \
|
||||
-backend-config="key=${TRE_ID}-shared-service-firewall"
|
|
@ -1,7 +1,7 @@
|
|||
---
|
||||
schemaVersion: 1.0.0
|
||||
name: tre-shared-service-gitea
|
||||
version: 1.0.2
|
||||
version: 1.0.3
|
||||
description: "A Gitea shared service"
|
||||
dockerfile: Dockerfile.tmpl
|
||||
registry: azuretre
|
||||
|
|
|
@ -2,22 +2,22 @@
|
|||
# Manual edits may be lost in future updates.
|
||||
|
||||
provider "registry.terraform.io/hashicorp/azurerm" {
|
||||
version = "3.33.0"
|
||||
constraints = "3.33.0"
|
||||
version = "3.112.0"
|
||||
constraints = "3.112.0"
|
||||
hashes = [
|
||||
"h1:pXB6SKE4NKdf+LepsQjrLcBnVTL5ejeKvx/kyojai6c=",
|
||||
"zh:136d9c642746d8d84e62ecd8ab0c7dc015eac504c1f068e06fad438ae222d934",
|
||||
"zh:266e64b8e32a94ddcc20954ebad1d8ff3921d318addf576e981b1390e5d5ba79",
|
||||
"zh:3bd84a1e5b3bbe34a5870f271d6a5bf9b35a4c924db32b450a1fb53bc910c37a",
|
||||
"zh:3c6604041472bb4691b502877cf9d886ed9f973fbadf11389ec9499fdc66045e",
|
||||
"zh:680c00a73c8054c36a58115a44d02d1ebb675c2ad3afaaab2d74a01f978f16ce",
|
||||
"zh:6dab47ef64f90e43b75ed240a974c4119f5268be4433f3c1c3e97559e7ef2f38",
|
||||
"zh:9f73f19fdc340c443693dc03f1a145c6bd0ee5fd425eab7473d06abbe39b99d7",
|
||||
"zh:9ff008b6737e880f191b4be6dfcef95ff019969dd787c44a58c2d7d6aaf6623b",
|
||||
"zh:be297f1515e9ac63886e3e092a0bcd10aa8aa2b69c2b0995ce4e069176b07a95",
|
||||
"h1:5KSVV/O2eG6ty/3/qpOLQFQqJd96KEPzsTHItslJaMw=",
|
||||
"zh:341c22454d24a75792aa99fbbc0c156f368534b7bb04eef4701b85995c7526a4",
|
||||
"zh:3708656d75061c92f7208cc731b946c991ad343a443f8ff0ef082f077b7580b9",
|
||||
"zh:38ca06f9f45705c648f04f272bd9483397693ea8da6db788cd7955f49ab79d6b",
|
||||
"zh:3f305adb5ee0032e0ea68d198a089ecfd0127092930e99fa51377a250292b592",
|
||||
"zh:4ae2fc6065164a819f576f705e634ebf5059f983149a41dad909719fea96145a",
|
||||
"zh:5d376ac7dd71898a94038d6b6b8036dfec4c0216d832ec1135c855bf3e58eb5f",
|
||||
"zh:63d2ff296d3aee5787e12c759a6a3d5aa15a574456aebbe11b833f01adf3faef",
|
||||
"zh:8ad8746741f7f0ac10da6f1d105f26ebeb6e4d944f58ba749e86d7c9a67da3db",
|
||||
"zh:abec182594ee8a21d72a5f23d3aa7fa45247488539fce6ed648c9c255d8bf972",
|
||||
"zh:bf704b400be4181333b38c0306949f26326a9aa5ae68b4167e2fb8ee7fb13618",
|
||||
"zh:c072938f8695f725fc5fbe986a54890f00d520cce570006390dc5bbc51b2a4ea",
|
||||
"zh:f569b65999264a9416862bca5cd2a6177d94ccb0424f3a4ef424428912b9cb3c",
|
||||
"zh:fb29a566e7698cfae477f3efa3bba38526ec8343355763178c6e9c96e51399f3",
|
||||
"zh:fbc3b625733ce5f0970fa8d9743f6db51064c168d6be5fc7a5e3d1a54af28bb7",
|
||||
]
|
||||
}
|
||||
|
||||
|
|
|
@ -3,7 +3,7 @@ terraform {
|
|||
required_providers {
|
||||
azurerm = {
|
||||
source = "hashicorp/azurerm"
|
||||
version = "=3.33.0"
|
||||
version = "=3.112.0"
|
||||
}
|
||||
local = {
|
||||
source = "hashicorp/local"
|
||||
|
|
|
@ -0,0 +1,13 @@
|
|||
#!/bin/bash
|
||||
set -e
|
||||
|
||||
# This script is used to install the bundle directly without having to interact with Porter
|
||||
|
||||
# This script assumes you have created an .env from the sample and the variables
|
||||
# will come from there.
|
||||
# shellcheck disable=SC2154
|
||||
terraform init -upgrade -reconfigure -input=false -backend=true \
|
||||
-backend-config="resource_group_name=${TF_VAR_mgmt_resource_group_name}" \
|
||||
-backend-config="storage_account_name=${TF_VAR_mgmt_storage_account_name}" \
|
||||
-backend-config="container_name=${TF_VAR_terraform_state_container_name}" \
|
||||
-backend-config="key=${TRE_ID}-gitea"
|
|
@ -1,7 +1,7 @@
|
|||
---
|
||||
schemaVersion: 1.0.0
|
||||
name: tre-shared-service-sonatype-nexus
|
||||
version: 3.0.0
|
||||
version: 3.0.1
|
||||
description: "A Sonatype Nexus shared service"
|
||||
dockerfile: Dockerfile.tmpl
|
||||
registry: azuretre
|
||||
|
|
|
@ -2,21 +2,21 @@
|
|||
# Manual edits may be lost in future updates.
|
||||
|
||||
provider "registry.terraform.io/hashicorp/azurerm" {
|
||||
version = "3.53.0"
|
||||
constraints = "3.53.0"
|
||||
version = "3.112.0"
|
||||
constraints = "3.112.0"
|
||||
hashes = [
|
||||
"h1:bK70LV1NldhodSm58cUpawKwdUL1A5AKKglAV2wZ/QY=",
|
||||
"zh:078ece8318ad7d6c1cd2e5f2044188e74af63921b93223c7f8d477539fa91888",
|
||||
"zh:1bdc98ff8c2d3f3e81a746762e03d39794b2f5c90dc478cdb23dcc3d3f9947b6",
|
||||
"zh:20b51cfc0ffc4ff368e6eb2eaece0b6bb99ade09e4b91b3444b50e94fc54c119",
|
||||
"zh:233eed91279a9473825ba02d66487388d66dfc719b7249112d085dece0c2b594",
|
||||
"zh:397ac8194ecc2f8d34d42600d6bf9e20399b222170dc1443b5800db3135ebc99",
|
||||
"zh:3af3a2d8485d6c1ffcd26848af9ab087dfcb6cb045cc624e51f4db5144b53a9c",
|
||||
"zh:5d0b9a346b57cccc369e2076556274225ec7f1c9044a2503dcfd8c117cdc2f79",
|
||||
"zh:6e762dcef4ba14985f93af5f3fd195c9ee7d27de8de3bebdeefe761e53e79bb9",
|
||||
"zh:73f9be719aa867985b1744c1f4fab834d01eb2069ec7a78b3a1bfa87c8256a40",
|
||||
"zh:756deed30c20ffc9b4756c239e1675d3693f7175851e5ef946948a8bfb0b7935",
|
||||
"zh:c279f99902a45a5b88d25d609a73709d101af3ce71222efbab9d4706c8a538b4",
|
||||
"h1:5KSVV/O2eG6ty/3/qpOLQFQqJd96KEPzsTHItslJaMw=",
|
||||
"zh:341c22454d24a75792aa99fbbc0c156f368534b7bb04eef4701b85995c7526a4",
|
||||
"zh:3708656d75061c92f7208cc731b946c991ad343a443f8ff0ef082f077b7580b9",
|
||||
"zh:38ca06f9f45705c648f04f272bd9483397693ea8da6db788cd7955f49ab79d6b",
|
||||
"zh:3f305adb5ee0032e0ea68d198a089ecfd0127092930e99fa51377a250292b592",
|
||||
"zh:4ae2fc6065164a819f576f705e634ebf5059f983149a41dad909719fea96145a",
|
||||
"zh:5d376ac7dd71898a94038d6b6b8036dfec4c0216d832ec1135c855bf3e58eb5f",
|
||||
"zh:63d2ff296d3aee5787e12c759a6a3d5aa15a574456aebbe11b833f01adf3faef",
|
||||
"zh:8ad8746741f7f0ac10da6f1d105f26ebeb6e4d944f58ba749e86d7c9a67da3db",
|
||||
"zh:abec182594ee8a21d72a5f23d3aa7fa45247488539fce6ed648c9c255d8bf972",
|
||||
"zh:bf704b400be4181333b38c0306949f26326a9aa5ae68b4167e2fb8ee7fb13618",
|
||||
"zh:c072938f8695f725fc5fbe986a54890f00d520cce570006390dc5bbc51b2a4ea",
|
||||
"zh:f569b65999264a9416862bca5cd2a6177d94ccb0424f3a4ef424428912b9cb3c",
|
||||
]
|
||||
}
|
||||
|
|
|
@ -3,7 +3,7 @@ terraform {
|
|||
required_providers {
|
||||
azurerm = {
|
||||
source = "hashicorp/azurerm"
|
||||
version = "=3.53.0"
|
||||
version = "=3.112.0"
|
||||
}
|
||||
random = {
|
||||
source = "hashicorp/random"
|
||||
|
|
|
@ -0,0 +1,13 @@
|
|||
#!/bin/bash
|
||||
set -e
|
||||
|
||||
# This script is used to install the bundle directly without having to interact with Porter
|
||||
|
||||
# This script assumes you have created an .env from the sample and the variables
|
||||
# will come from there.
|
||||
# shellcheck disable=SC2154
|
||||
terraform init -upgrade -reconfigure -input=false -backend=true \
|
||||
-backend-config="resource_group_name=${TF_VAR_mgmt_resource_group_name}" \
|
||||
-backend-config="storage_account_name=${TF_VAR_mgmt_storage_account_name}" \
|
||||
-backend-config="container_name=${TF_VAR_terraform_state_container_name}" \
|
||||
-backend-config="key=${TRE_ID:?}-shared-service-sonatype-nexus"
|
|
@ -1,7 +1,7 @@
|
|||
---
|
||||
schemaVersion: 1.0.0
|
||||
name: tre-service-azureml
|
||||
version: 0.8.10
|
||||
version: 0.8.12
|
||||
description: "An Azure TRE service for Azure Machine Learning"
|
||||
registry: azuretre
|
||||
dockerfile: Dockerfile.tmpl
|
||||
|
|
|
@ -2,41 +2,41 @@
|
|||
# Manual edits may be lost in future updates.
|
||||
|
||||
provider "registry.terraform.io/azure/azapi" {
|
||||
version = "1.1.0"
|
||||
constraints = "1.1.0"
|
||||
version = "1.15.0"
|
||||
constraints = "1.15.0"
|
||||
hashes = [
|
||||
"h1:IR+AHCwfjl1c0baWwfOwZ6QZtHj41H2syTgHkJtAr/M=",
|
||||
"zh:2a25df6325a49f9e821f0b02c7da86167fc19a3bac647cd1edf231300f29d077",
|
||||
"zh:2b443a836a39724663fe455d4deee408ff3a2d9a8b86f8408aa7db2e8aa743f8",
|
||||
"zh:364ed09ddfc50d9bed8d930f7de489cb654a9908feb139413a097823a50075fd",
|
||||
"zh:523bc005f56ae785867d230d55c29f59db4b599dbc6c38b4d03ea55a79458916",
|
||||
"zh:60ded375fdb305b60bcb4d9e596dbb222cab166bad1b4958199b05a72aaeacfd",
|
||||
"zh:61e69c58642fead6814e511c872b7c0a6478ec6af4ab758b4512607d910ac078",
|
||||
"zh:823b2154ae2262dabcbd11aac992e3cc29eae0f7baa96bee1e3e2fe1ece8730b",
|
||||
"zh:870ea9cc24807ef5142e4cad0281dac7173f7b6bf818a79762b6c690d12d4c4b",
|
||||
"zh:9094ae76ed66cb328a4f35bd18b9140fb6fc6859c2e46431ec73c018bcb58d96",
|
||||
"zh:d89149cfd01cb70012459536b4d36490b58e43312440562e5910bd5160537858",
|
||||
"zh:dba7ec06171ca062fc423ba5b4776a5600444e45e57f4d1cb043bdc3eee538b7",
|
||||
"zh:ff5bd6883d9ac8334e043434246357a55107411e9a962856c1d17e47ee15ac37",
|
||||
"h1:gIOgxVmFSxHrR+XOzgUEA+ybOmp8kxZlZH3eYeB/eFI=",
|
||||
"zh:0627a8bc77254debc25dc0c7b62e055138217c97b03221e593c3c56dc7550671",
|
||||
"zh:2fe045f07070ef75d0bec4b0595a74c14394daa838ddb964e2fd23cc98c40c34",
|
||||
"zh:343009f39c957883b2c06145a5954e524c70f93585f943f1ea3d28ef6995d0d0",
|
||||
"zh:53fe9ab54485aaebc9b91e27a10bce2729a1c95b1399079e631dc6bb9e3f27dc",
|
||||
"zh:63c407e7dc04d178d4798c17ad489d9cc92f7d1941d7f4a3f560b95908b6107b",
|
||||
"zh:7d6fc2b432b264f036bb80ab2b2ba67f80a5d98da8a8c322aa097833dad598c9",
|
||||
"zh:7ec49c0a8799d469eb6e2a1f856693f9862f1b73f5ed70adc1b346e5a4c6458d",
|
||||
"zh:889704f10319d301d677539d788fc82a7c73608ab78cb93e1280ac2be39e6e00",
|
||||
"zh:90b4b07405b7cde9ebae3b034cb5bb5dd18484d1b95bd250f905451f1e86ac3f",
|
||||
"zh:92aa9c241a8cb2a6d81ad47bc007c119f8b818464a960ebaf39008766c361e6b",
|
||||
"zh:f28fbd0a2c59e239b53067bc1adc691be444876bcb2d4f78d310f549724da6e0",
|
||||
"zh:ffb15e0ddfa505d0e9b75341570199076ae574887124f398162b1ead9376b25f",
|
||||
]
|
||||
}
|
||||
|
||||
provider "registry.terraform.io/hashicorp/azurerm" {
|
||||
version = "3.37.0"
|
||||
constraints = "3.37.0"
|
||||
version = "3.112.0"
|
||||
constraints = "3.112.0"
|
||||
hashes = [
|
||||
"h1:83XTgyPKUKt706IjTLHo9HL0KN5m+DwmSKuVQv6dNb4=",
|
||||
"zh:2a7bda0b7679d1c791c762103a22f333b544b6e6776c4177f33bafc9cc28c919",
|
||||
"zh:49ff49670c349f918017315838a43ece09bf6f1bf7721b992f1cadbceb273c62",
|
||||
"zh:55c9346d03380585e17616b79c4233b726d6fb9efa1921848834fc881e5d7d54",
|
||||
"zh:5ab117b56a4236ea29926e9d95c27d7bf8ae6706d0fffb76c0b1bfe67bf3a78e",
|
||||
"zh:5cfc086d5d56308edb3e68aac5f8a448ddc6e56541be7b152ae886399e9b2c69",
|
||||
"zh:7a8929ed38152aac6652711f32193c8582bc996f8fa73879a3ac7a9bf88d2460",
|
||||
"zh:895294e90a37f719975fcd2269b95e973147e48ec0ebb9c2fe472bc93531b49c",
|
||||
"zh:8baa5e2b6e5b02df5b45d253a3aea93f22619920cf9577290d682b59a6d5664b",
|
||||
"zh:b146a732c7909238c10d216b92a35092be4f72a0509a4c6742cc3245bf3b3bf3",
|
||||
"zh:cedef898ccd512a6519eae3dff7eb0d581d2c3dad8e0001992da16ad1d7fded8",
|
||||
"zh:f016d9ba94ea88476883b4d63cff88a0225974e0a8b8c3e8555f73c5de6f7119",
|
||||
"h1:5KSVV/O2eG6ty/3/qpOLQFQqJd96KEPzsTHItslJaMw=",
|
||||
"zh:341c22454d24a75792aa99fbbc0c156f368534b7bb04eef4701b85995c7526a4",
|
||||
"zh:3708656d75061c92f7208cc731b946c991ad343a443f8ff0ef082f077b7580b9",
|
||||
"zh:38ca06f9f45705c648f04f272bd9483397693ea8da6db788cd7955f49ab79d6b",
|
||||
"zh:3f305adb5ee0032e0ea68d198a089ecfd0127092930e99fa51377a250292b592",
|
||||
"zh:4ae2fc6065164a819f576f705e634ebf5059f983149a41dad909719fea96145a",
|
||||
"zh:5d376ac7dd71898a94038d6b6b8036dfec4c0216d832ec1135c855bf3e58eb5f",
|
||||
"zh:63d2ff296d3aee5787e12c759a6a3d5aa15a574456aebbe11b833f01adf3faef",
|
||||
"zh:8ad8746741f7f0ac10da6f1d105f26ebeb6e4d944f58ba749e86d7c9a67da3db",
|
||||
"zh:abec182594ee8a21d72a5f23d3aa7fa45247488539fce6ed648c9c255d8bf972",
|
||||
"zh:bf704b400be4181333b38c0306949f26326a9aa5ae68b4167e2fb8ee7fb13618",
|
||||
"zh:c072938f8695f725fc5fbe986a54890f00d520cce570006390dc5bbc51b2a4ea",
|
||||
"zh:f569b65999264a9416862bca5cd2a6177d94ccb0424f3a4ef424428912b9cb3c",
|
||||
]
|
||||
}
|
||||
|
@ -62,7 +62,8 @@ provider "registry.terraform.io/hashicorp/external" {
|
|||
}
|
||||
|
||||
provider "registry.terraform.io/hashicorp/random" {
|
||||
version = "3.4.3"
|
||||
version = "3.4.3"
|
||||
constraints = "3.4.3"
|
||||
hashes = [
|
||||
"h1:xZGZf18JjMS06pFa4NErzANI98qi59SEcBsOcS2P2yQ=",
|
||||
"zh:41c53ba47085d8261590990f8633c8906696fa0a3c4b384ff6a7ecbf84339752",
|
||||
|
|
|
@ -2,11 +2,11 @@ terraform {
|
|||
required_providers {
|
||||
azurerm = {
|
||||
source = "hashicorp/azurerm"
|
||||
version = "=3.37.0"
|
||||
version = "=3.112.0"
|
||||
}
|
||||
azapi = {
|
||||
source = "Azure/azapi"
|
||||
version = "=1.1.0"
|
||||
version = "=1.15.0"
|
||||
}
|
||||
external = {
|
||||
source = "hashicorp/external"
|
||||
|
|
|
@ -0,0 +1,13 @@
|
|||
#!/bin/bash
|
||||
set -e
|
||||
|
||||
# This script is used to install the bundle directly without having to interact with Porter
|
||||
|
||||
# This script assumes you have created an .env from the sample and the variables
|
||||
# will come from there.
|
||||
# shellcheck disable=SC2154
|
||||
terraform init -upgrade -reconfigure -input=false -backend=true \
|
||||
-backend-config="resource_group_name=${TF_VAR_mgmt_resource_group_name}" \
|
||||
-backend-config="storage_account_name=${TF_VAR_mgmt_storage_account_name}" \
|
||||
-backend-config="container_name=${TF_VAR_terraform_state_container_name}" \
|
||||
-backend-config="key=${TRE_ID?}_azureml"
|
|
@ -2,41 +2,41 @@
|
|||
# Manual edits may be lost in future updates.
|
||||
|
||||
provider "registry.terraform.io/azure/azapi" {
|
||||
version = "1.1.0"
|
||||
constraints = "1.1.0"
|
||||
version = "1.15.0"
|
||||
constraints = "1.15.0"
|
||||
hashes = [
|
||||
"h1:IR+AHCwfjl1c0baWwfOwZ6QZtHj41H2syTgHkJtAr/M=",
|
||||
"zh:2a25df6325a49f9e821f0b02c7da86167fc19a3bac647cd1edf231300f29d077",
|
||||
"zh:2b443a836a39724663fe455d4deee408ff3a2d9a8b86f8408aa7db2e8aa743f8",
|
||||
"zh:364ed09ddfc50d9bed8d930f7de489cb654a9908feb139413a097823a50075fd",
|
||||
"zh:523bc005f56ae785867d230d55c29f59db4b599dbc6c38b4d03ea55a79458916",
|
||||
"zh:60ded375fdb305b60bcb4d9e596dbb222cab166bad1b4958199b05a72aaeacfd",
|
||||
"zh:61e69c58642fead6814e511c872b7c0a6478ec6af4ab758b4512607d910ac078",
|
||||
"zh:823b2154ae2262dabcbd11aac992e3cc29eae0f7baa96bee1e3e2fe1ece8730b",
|
||||
"zh:870ea9cc24807ef5142e4cad0281dac7173f7b6bf818a79762b6c690d12d4c4b",
|
||||
"zh:9094ae76ed66cb328a4f35bd18b9140fb6fc6859c2e46431ec73c018bcb58d96",
|
||||
"zh:d89149cfd01cb70012459536b4d36490b58e43312440562e5910bd5160537858",
|
||||
"zh:dba7ec06171ca062fc423ba5b4776a5600444e45e57f4d1cb043bdc3eee538b7",
|
||||
"zh:ff5bd6883d9ac8334e043434246357a55107411e9a962856c1d17e47ee15ac37",
|
||||
"h1:gIOgxVmFSxHrR+XOzgUEA+ybOmp8kxZlZH3eYeB/eFI=",
|
||||
"zh:0627a8bc77254debc25dc0c7b62e055138217c97b03221e593c3c56dc7550671",
|
||||
"zh:2fe045f07070ef75d0bec4b0595a74c14394daa838ddb964e2fd23cc98c40c34",
|
||||
"zh:343009f39c957883b2c06145a5954e524c70f93585f943f1ea3d28ef6995d0d0",
|
||||
"zh:53fe9ab54485aaebc9b91e27a10bce2729a1c95b1399079e631dc6bb9e3f27dc",
|
||||
"zh:63c407e7dc04d178d4798c17ad489d9cc92f7d1941d7f4a3f560b95908b6107b",
|
||||
"zh:7d6fc2b432b264f036bb80ab2b2ba67f80a5d98da8a8c322aa097833dad598c9",
|
||||
"zh:7ec49c0a8799d469eb6e2a1f856693f9862f1b73f5ed70adc1b346e5a4c6458d",
|
||||
"zh:889704f10319d301d677539d788fc82a7c73608ab78cb93e1280ac2be39e6e00",
|
||||
"zh:90b4b07405b7cde9ebae3b034cb5bb5dd18484d1b95bd250f905451f1e86ac3f",
|
||||
"zh:92aa9c241a8cb2a6d81ad47bc007c119f8b818464a960ebaf39008766c361e6b",
|
||||
"zh:f28fbd0a2c59e239b53067bc1adc691be444876bcb2d4f78d310f549724da6e0",
|
||||
"zh:ffb15e0ddfa505d0e9b75341570199076ae574887124f398162b1ead9376b25f",
|
||||
]
|
||||
}
|
||||
|
||||
provider "registry.terraform.io/hashicorp/azurerm" {
|
||||
version = "3.37.0"
|
||||
constraints = "3.37.0"
|
||||
version = "3.112.0"
|
||||
constraints = "3.112.0"
|
||||
hashes = [
|
||||
"h1:83XTgyPKUKt706IjTLHo9HL0KN5m+DwmSKuVQv6dNb4=",
|
||||
"zh:2a7bda0b7679d1c791c762103a22f333b544b6e6776c4177f33bafc9cc28c919",
|
||||
"zh:49ff49670c349f918017315838a43ece09bf6f1bf7721b992f1cadbceb273c62",
|
||||
"zh:55c9346d03380585e17616b79c4233b726d6fb9efa1921848834fc881e5d7d54",
|
||||
"zh:5ab117b56a4236ea29926e9d95c27d7bf8ae6706d0fffb76c0b1bfe67bf3a78e",
|
||||
"zh:5cfc086d5d56308edb3e68aac5f8a448ddc6e56541be7b152ae886399e9b2c69",
|
||||
"zh:7a8929ed38152aac6652711f32193c8582bc996f8fa73879a3ac7a9bf88d2460",
|
||||
"zh:895294e90a37f719975fcd2269b95e973147e48ec0ebb9c2fe472bc93531b49c",
|
||||
"zh:8baa5e2b6e5b02df5b45d253a3aea93f22619920cf9577290d682b59a6d5664b",
|
||||
"zh:b146a732c7909238c10d216b92a35092be4f72a0509a4c6742cc3245bf3b3bf3",
|
||||
"zh:cedef898ccd512a6519eae3dff7eb0d581d2c3dad8e0001992da16ad1d7fded8",
|
||||
"zh:f016d9ba94ea88476883b4d63cff88a0225974e0a8b8c3e8555f73c5de6f7119",
|
||||
"h1:5KSVV/O2eG6ty/3/qpOLQFQqJd96KEPzsTHItslJaMw=",
|
||||
"zh:341c22454d24a75792aa99fbbc0c156f368534b7bb04eef4701b85995c7526a4",
|
||||
"zh:3708656d75061c92f7208cc731b946c991ad343a443f8ff0ef082f077b7580b9",
|
||||
"zh:38ca06f9f45705c648f04f272bd9483397693ea8da6db788cd7955f49ab79d6b",
|
||||
"zh:3f305adb5ee0032e0ea68d198a089ecfd0127092930e99fa51377a250292b592",
|
||||
"zh:4ae2fc6065164a819f576f705e634ebf5059f983149a41dad909719fea96145a",
|
||||
"zh:5d376ac7dd71898a94038d6b6b8036dfec4c0216d832ec1135c855bf3e58eb5f",
|
||||
"zh:63d2ff296d3aee5787e12c759a6a3d5aa15a574456aebbe11b833f01adf3faef",
|
||||
"zh:8ad8746741f7f0ac10da6f1d105f26ebeb6e4d944f58ba749e86d7c9a67da3db",
|
||||
"zh:abec182594ee8a21d72a5f23d3aa7fa45247488539fce6ed648c9c255d8bf972",
|
||||
"zh:bf704b400be4181333b38c0306949f26326a9aa5ae68b4167e2fb8ee7fb13618",
|
||||
"zh:c072938f8695f725fc5fbe986a54890f00d520cce570006390dc5bbc51b2a4ea",
|
||||
"zh:f569b65999264a9416862bca5cd2a6177d94ccb0424f3a4ef424428912b9cb3c",
|
||||
]
|
||||
}
|
||||
|
|
|
@ -2,11 +2,11 @@ terraform {
|
|||
required_providers {
|
||||
azurerm = {
|
||||
source = "hashicorp/azurerm"
|
||||
version = "=3.37.0"
|
||||
version = "=3.112.0"
|
||||
}
|
||||
azapi = {
|
||||
source = "Azure/azapi"
|
||||
version = "=1.1.0"
|
||||
version = "=1.15.0"
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -0,0 +1,13 @@
|
|||
#!/bin/bash
|
||||
set -e
|
||||
|
||||
# This script is used to install the bundle directly without having to interact with Porter
|
||||
|
||||
# This script assumes you have created an .env from the sample and the variables
|
||||
# will come from there.
|
||||
# shellcheck disable=SC2154
|
||||
terraform init -upgrade -reconfigure -input=false -backend=true \
|
||||
-backend-config="resource_group_name=${TF_VAR_mgmt_resource_group_name}" \
|
||||
-backend-config="storage_account_name=${TF_VAR_mgmt_storage_account_name}" \
|
||||
-backend-config="container_name=${TF_VAR_terraform_state_container_name}" \
|
||||
-backend-config="key=tre-user-resource-aml-compute-instance"
|
|
@ -1,7 +1,7 @@
|
|||
---
|
||||
schemaVersion: 1.0.0
|
||||
name: tre-workspace-service-azuresql
|
||||
version: 1.0.9
|
||||
version: 1.0.10
|
||||
description: "An Azure SQL workspace service"
|
||||
registry: azuretre
|
||||
dockerfile: Dockerfile.tmpl
|
||||
|
|
|
@ -2,21 +2,21 @@
|
|||
# Manual edits may be lost in future updates.
|
||||
|
||||
provider "registry.terraform.io/hashicorp/azurerm" {
|
||||
version = "3.111.0"
|
||||
constraints = "3.111.0"
|
||||
version = "3.112.0"
|
||||
constraints = "3.112.0"
|
||||
hashes = [
|
||||
"h1:vgrdy5JWGAK5N44/V75etoHIAMvXKNlMrIHTaWApehA=",
|
||||
"zh:0db8afb9278993df7e74796bdd125153b07a7045e5ca1756783a8b8cfec564f4",
|
||||
"zh:22c424fcfda13dc720caa289248c1b71b2ad20e329fd4a52cc6be7e45f795a4a",
|
||||
"zh:471a2c1d7353bc21ef28963f006d2cf5276e7885b423fc0b73f2d8ce6cde72dd",
|
||||
"zh:68bf81cb353c755d48792e881b6405919daa041e35de1d510209237d90d6c21f",
|
||||
"zh:841d8664955bbc77f12095c9b1a4b3923362564a790fd945337759e9bc95d07e",
|
||||
"zh:86e92f959056c573bf4b2be1d6cfa838dab06d3e5a944f371a1131e4c6477d88",
|
||||
"zh:95a096ced57616659687970b5d618c2ce3cd54fa0311b7a7569435cacf39f26f",
|
||||
"zh:c5656a11253ffdaee973e7292dd3c10a1db81f1fc9ee2d3041ae1182f7d25379",
|
||||
"zh:cd6a1049de69280f339d6f83f30a9006bbe003a840a39eb7b5900990c5aadbb0",
|
||||
"zh:e7b3d96f0c9ea47261dbd015f1f64fdb43c8ccb196afda862c0865e30d88245c",
|
||||
"zh:f1ec7da6ab5526845274bff77e023b9faec71c2cf38bd18587274932b2aa2e89",
|
||||
"h1:5KSVV/O2eG6ty/3/qpOLQFQqJd96KEPzsTHItslJaMw=",
|
||||
"zh:341c22454d24a75792aa99fbbc0c156f368534b7bb04eef4701b85995c7526a4",
|
||||
"zh:3708656d75061c92f7208cc731b946c991ad343a443f8ff0ef082f077b7580b9",
|
||||
"zh:38ca06f9f45705c648f04f272bd9483397693ea8da6db788cd7955f49ab79d6b",
|
||||
"zh:3f305adb5ee0032e0ea68d198a089ecfd0127092930e99fa51377a250292b592",
|
||||
"zh:4ae2fc6065164a819f576f705e634ebf5059f983149a41dad909719fea96145a",
|
||||
"zh:5d376ac7dd71898a94038d6b6b8036dfec4c0216d832ec1135c855bf3e58eb5f",
|
||||
"zh:63d2ff296d3aee5787e12c759a6a3d5aa15a574456aebbe11b833f01adf3faef",
|
||||
"zh:8ad8746741f7f0ac10da6f1d105f26ebeb6e4d944f58ba749e86d7c9a67da3db",
|
||||
"zh:abec182594ee8a21d72a5f23d3aa7fa45247488539fce6ed648c9c255d8bf972",
|
||||
"zh:bf704b400be4181333b38c0306949f26326a9aa5ae68b4167e2fb8ee7fb13618",
|
||||
"zh:c072938f8695f725fc5fbe986a54890f00d520cce570006390dc5bbc51b2a4ea",
|
||||
"zh:f569b65999264a9416862bca5cd2a6177d94ccb0424f3a4ef424428912b9cb3c",
|
||||
]
|
||||
}
|
||||
|
|
|
@ -3,7 +3,7 @@ terraform {
|
|||
required_providers {
|
||||
azurerm = {
|
||||
source = "hashicorp/azurerm"
|
||||
version = "3.111.0"
|
||||
version = "3.112.0"
|
||||
}
|
||||
random = {
|
||||
source = "hashicorp/random"
|
||||
|
|
|
@ -0,0 +1,13 @@
|
|||
#!/bin/bash
|
||||
set -e
|
||||
|
||||
# This script is used to install the bundle directly without having to interact with Porter
|
||||
|
||||
# This script assumes you have created an .env from the sample and the variables
|
||||
# will come from there.
|
||||
# shellcheck disable=SC2154
|
||||
terraform init -upgrade -reconfigure -input=false -backend=true \
|
||||
-backend-config="resource_group_name=${TF_VAR_mgmt_resource_group_name}" \
|
||||
-backend-config="storage_account_name=${TF_VAR_mgmt_storage_account_name}" \
|
||||
-backend-config="container_name=${TF_VAR_terraform_state_container_name}" \
|
||||
-backend-config="key=${TF_VAR_tre_resource_id}-shared-azuresql"
|
|
@ -1,7 +1,7 @@
|
|||
---
|
||||
schemaVersion: 1.0.0
|
||||
name: tre-service-databricks
|
||||
version: 1.0.3
|
||||
version: 1.0.5
|
||||
description: "An Azure TRE service for Azure Databricks."
|
||||
registry: azuretre
|
||||
dockerfile: Dockerfile.tmpl
|
||||
|
|
|
@ -2,22 +2,22 @@
|
|||
# Manual edits may be lost in future updates.
|
||||
|
||||
provider "registry.terraform.io/azure/azapi" {
|
||||
version = "1.13.1"
|
||||
constraints = "1.13.1"
|
||||
version = "1.15.0"
|
||||
constraints = "1.15.0"
|
||||
hashes = [
|
||||
"h1:xDZG4lbtQJeyJa3Gzo8qecYxyw+AIXYcdDRlkaSLNz8=",
|
||||
"zh:1f2aceddd67ceeb82a75c2f15dc01e54781e9aed5968507dbc29590c165b2e2b",
|
||||
"zh:397f0bfbac899d48e23cecf38d362c27562150aa20b19157b5bd370b8e6801ee",
|
||||
"zh:652263b7d00623684e29ef7b8ff285a17c5bd7cc8ba7d22967c66d0b3a3c568a",
|
||||
"zh:652c53320a41434942877515780296a1509be03f32d54e60178f39200f960a67",
|
||||
"zh:666426faf686401e54ec09fe06e9d7c06a6455ec398764f70558440c73aeb7f9",
|
||||
"zh:6aa91ae8ba78f2494f99b4c99e66d15ed0b14d735cd1f77adc12ff9dfa075807",
|
||||
"zh:a529e5a13c37d1805c469227f08cdbe7527d04dd64d18709d26627c6a0b588b1",
|
||||
"zh:a589c049205e8e5bf94a13d56b28f400d908ad27e13e16df64408ee82eb8a0ff",
|
||||
"zh:a9a50defdee230f315f74be6c77ff104fe2610a1b3ad6b87326f555e80d13b18",
|
||||
"zh:ba49ef70d96e13795e2dbffd6cb2ff976dfe84e0373a5971ebe3b4c9c9b7af60",
|
||||
"zh:d3ed50efe5f8c80d3d7d464ab9a13ccf82440d871c9ce3032ce476845364c6b9",
|
||||
"zh:e3eb48ee8c36ee4f81850d8a21fc59b81886c729d7c3b7adece4a25f355bed2f",
|
||||
"h1:gIOgxVmFSxHrR+XOzgUEA+ybOmp8kxZlZH3eYeB/eFI=",
|
||||
"zh:0627a8bc77254debc25dc0c7b62e055138217c97b03221e593c3c56dc7550671",
|
||||
"zh:2fe045f07070ef75d0bec4b0595a74c14394daa838ddb964e2fd23cc98c40c34",
|
||||
"zh:343009f39c957883b2c06145a5954e524c70f93585f943f1ea3d28ef6995d0d0",
|
||||
"zh:53fe9ab54485aaebc9b91e27a10bce2729a1c95b1399079e631dc6bb9e3f27dc",
|
||||
"zh:63c407e7dc04d178d4798c17ad489d9cc92f7d1941d7f4a3f560b95908b6107b",
|
||||
"zh:7d6fc2b432b264f036bb80ab2b2ba67f80a5d98da8a8c322aa097833dad598c9",
|
||||
"zh:7ec49c0a8799d469eb6e2a1f856693f9862f1b73f5ed70adc1b346e5a4c6458d",
|
||||
"zh:889704f10319d301d677539d788fc82a7c73608ab78cb93e1280ac2be39e6e00",
|
||||
"zh:90b4b07405b7cde9ebae3b034cb5bb5dd18484d1b95bd250f905451f1e86ac3f",
|
||||
"zh:92aa9c241a8cb2a6d81ad47bc007c119f8b818464a960ebaf39008766c361e6b",
|
||||
"zh:f28fbd0a2c59e239b53067bc1adc691be444876bcb2d4f78d310f549724da6e0",
|
||||
"zh:ffb15e0ddfa505d0e9b75341570199076ae574887124f398162b1ead9376b25f",
|
||||
]
|
||||
}
|
||||
|
||||
|
@ -36,22 +36,22 @@ provider "registry.terraform.io/databricks/databricks" {
|
|||
}
|
||||
|
||||
provider "registry.terraform.io/hashicorp/azurerm" {
|
||||
version = "3.108.0"
|
||||
constraints = "3.108.0"
|
||||
version = "3.112.0"
|
||||
constraints = "3.112.0"
|
||||
hashes = [
|
||||
"h1:RIFBFTXz4X48JDHjbQHX4y400ax1/uEzMVFZgX3/z3w=",
|
||||
"zh:2afecf948fd702bc08c87d9114595809d011f99a70a12dbf6bc67a12d0bee5fc",
|
||||
"zh:395b6d1384a579867064e62d49b0b91e15919c33b03ea8b5031c2779bfa16b3d",
|
||||
"zh:3e5594c59b6b02bc6e0f4c3de71aa2ab992494c53725fb3c64d36745f3814ef3",
|
||||
"zh:4613e190609377309f6a4ac44f631c9469efab3ae148dbb09e73718201dc4f42",
|
||||
"zh:624f01cb7604d58100068401bd07ab09a141e7bd318f8214127838cf202e4868",
|
||||
"zh:65709950c9933e38704e2075a2339951e1259a6e882f35d390be36e1844ebc72",
|
||||
"zh:af82657fad4e3a177f2ebb8035b45bda40f8856eb999288533321028794d03e5",
|
||||
"zh:c40b331eba08830d16c0e6795fa7cbf08231073df2cfdb0f34e9d908a915981a",
|
||||
"zh:d6ccd533a0bd984ca7ed1ae860e057e9e2f88468745be9712236d2d240353de4",
|
||||
"zh:f361fd398e8772f8554a010331d161d6f7284a43238fd28bfa7b41795a5538b8",
|
||||
"h1:5KSVV/O2eG6ty/3/qpOLQFQqJd96KEPzsTHItslJaMw=",
|
||||
"zh:341c22454d24a75792aa99fbbc0c156f368534b7bb04eef4701b85995c7526a4",
|
||||
"zh:3708656d75061c92f7208cc731b946c991ad343a443f8ff0ef082f077b7580b9",
|
||||
"zh:38ca06f9f45705c648f04f272bd9483397693ea8da6db788cd7955f49ab79d6b",
|
||||
"zh:3f305adb5ee0032e0ea68d198a089ecfd0127092930e99fa51377a250292b592",
|
||||
"zh:4ae2fc6065164a819f576f705e634ebf5059f983149a41dad909719fea96145a",
|
||||
"zh:5d376ac7dd71898a94038d6b6b8036dfec4c0216d832ec1135c855bf3e58eb5f",
|
||||
"zh:63d2ff296d3aee5787e12c759a6a3d5aa15a574456aebbe11b833f01adf3faef",
|
||||
"zh:8ad8746741f7f0ac10da6f1d105f26ebeb6e4d944f58ba749e86d7c9a67da3db",
|
||||
"zh:abec182594ee8a21d72a5f23d3aa7fa45247488539fce6ed648c9c255d8bf972",
|
||||
"zh:bf704b400be4181333b38c0306949f26326a9aa5ae68b4167e2fb8ee7fb13618",
|
||||
"zh:c072938f8695f725fc5fbe986a54890f00d520cce570006390dc5bbc51b2a4ea",
|
||||
"zh:f569b65999264a9416862bca5cd2a6177d94ccb0424f3a4ef424428912b9cb3c",
|
||||
"zh:f8c2132c77d35930203ec66f1bf9bbf633a2406e9f7b572ff425d65b8aa8c492",
|
||||
]
|
||||
}
|
||||
|
||||
|
|
|
@ -2,11 +2,11 @@ terraform {
|
|||
required_providers {
|
||||
azurerm = {
|
||||
source = "hashicorp/azurerm"
|
||||
version = "=3.108.0"
|
||||
version = "=3.112.0"
|
||||
}
|
||||
azapi = {
|
||||
source = "Azure/azapi"
|
||||
version = "=1.13.1"
|
||||
version = "=1.15.0"
|
||||
}
|
||||
databricks = {
|
||||
source = "databricks/databricks"
|
||||
|
|
|
@ -0,0 +1,13 @@
|
|||
#!/bin/bash
|
||||
set -e
|
||||
|
||||
# This script is used to install the bundle directly without having to interact with Porter
|
||||
|
||||
# This script assumes you have created an .env from the sample and the variables
|
||||
# will come from there.
|
||||
# shellcheck disable=SC2154
|
||||
terraform init -upgrade -reconfigure -input=false -backend=true \
|
||||
-backend-config="resource_group_name=${TF_VAR_mgmt_resource_group_name}" \
|
||||
-backend-config="storage_account_name=${TF_VAR_mgmt_storage_account_name}" \
|
||||
-backend-config="container_name=${TF_VAR_terraform_state_container_name}" \
|
||||
-backend-config="key=tre-workspace-service-gitea-${TF_VAR_id}"
|
|
@ -1,7 +1,7 @@
|
|||
---
|
||||
schemaVersion: 1.0.0
|
||||
name: tre-workspace-service-gitea
|
||||
version: 1.0.3
|
||||
version: 1.0.5
|
||||
description: "A Gitea workspace service"
|
||||
dockerfile: Dockerfile.tmpl
|
||||
registry: azuretre
|
||||
|
|
|
@ -2,27 +2,28 @@
|
|||
# Manual edits may be lost in future updates.
|
||||
|
||||
provider "registry.terraform.io/hashicorp/azurerm" {
|
||||
version = "3.22.0"
|
||||
constraints = "3.22.0"
|
||||
version = "3.112.0"
|
||||
constraints = "3.112.0"
|
||||
hashes = [
|
||||
"h1:bxkMviG7vvNV2aPZQPall0mdIGOojsYeJvKbscPCZeM=",
|
||||
"zh:03441438f73965fef3a60582573dc9137baf3142d157f16a8c187f7995bf968e",
|
||||
"zh:1a45946e3ad479745e01eb28283beba4b7c63a94d29ccd3afa3adb8aac41ffa7",
|
||||
"zh:457352525d3744a9f5d809a68e61ba51ad022fa012d0f092f04e31730700977d",
|
||||
"zh:48c4ac83fbf5c7295ffe9b8f6a2f3e25d40361b53a8c77f1516973c714862805",
|
||||
"zh:48c503892d780977405b4ef23db55d1216bbe96a592de63769f827cf3d5e092a",
|
||||
"zh:5d5935681f91af8a44772262d7f6f1ed0a4b4e113236cc166559ff57b2c936c4",
|
||||
"zh:61377b5edefdfe96b160a10b1b86b6faef02b813ea7d3d9cbcd8bc664c3293ed",
|
||||
"zh:73b0696146afd6ff360138425973b3349cb2a45f13094a861d9c162c23e0d796",
|
||||
"zh:8b2178ca3e1618107a7d5d68f57ca239c68b70a60cdae1c0a3e3ba867282ba25",
|
||||
"zh:a4021c34ee777863f032425774485adab1d4aba10ce38eb415b5c3a3179423a4",
|
||||
"zh:c66daaf59d5750b1e49706ffa052cb4467280b0cb481fdd4f7618bb8b9d1edb1",
|
||||
"h1:5KSVV/O2eG6ty/3/qpOLQFQqJd96KEPzsTHItslJaMw=",
|
||||
"zh:341c22454d24a75792aa99fbbc0c156f368534b7bb04eef4701b85995c7526a4",
|
||||
"zh:3708656d75061c92f7208cc731b946c991ad343a443f8ff0ef082f077b7580b9",
|
||||
"zh:38ca06f9f45705c648f04f272bd9483397693ea8da6db788cd7955f49ab79d6b",
|
||||
"zh:3f305adb5ee0032e0ea68d198a089ecfd0127092930e99fa51377a250292b592",
|
||||
"zh:4ae2fc6065164a819f576f705e634ebf5059f983149a41dad909719fea96145a",
|
||||
"zh:5d376ac7dd71898a94038d6b6b8036dfec4c0216d832ec1135c855bf3e58eb5f",
|
||||
"zh:63d2ff296d3aee5787e12c759a6a3d5aa15a574456aebbe11b833f01adf3faef",
|
||||
"zh:8ad8746741f7f0ac10da6f1d105f26ebeb6e4d944f58ba749e86d7c9a67da3db",
|
||||
"zh:abec182594ee8a21d72a5f23d3aa7fa45247488539fce6ed648c9c255d8bf972",
|
||||
"zh:bf704b400be4181333b38c0306949f26326a9aa5ae68b4167e2fb8ee7fb13618",
|
||||
"zh:c072938f8695f725fc5fbe986a54890f00d520cce570006390dc5bbc51b2a4ea",
|
||||
"zh:f569b65999264a9416862bca5cd2a6177d94ccb0424f3a4ef424428912b9cb3c",
|
||||
]
|
||||
}
|
||||
|
||||
provider "registry.terraform.io/hashicorp/local" {
|
||||
version = "2.2.3"
|
||||
version = "2.2.3"
|
||||
constraints = "2.2.3"
|
||||
hashes = [
|
||||
"h1:aWp5iSUxBGgPv1UnV5yag9Pb0N+U1I0sZb38AXBFO8A=",
|
||||
"zh:04f0978bb3e052707b8e82e46780c371ac1c66b689b4a23bbc2f58865ab7d5c0",
|
||||
|
|
|
@ -3,7 +3,7 @@ terraform {
|
|||
required_providers {
|
||||
azurerm = {
|
||||
source = "hashicorp/azurerm"
|
||||
version = "=3.22.0"
|
||||
version = "=3.112.0"
|
||||
}
|
||||
random = {
|
||||
source = "hashicorp/random"
|
||||
|
|
|
@ -0,0 +1,13 @@
|
|||
#!/bin/bash
|
||||
set -e
|
||||
|
||||
# This script is used to install the bundle directly without having to interact with Porter
|
||||
|
||||
# This script assumes you have created an .env from the sample and the variables
|
||||
# will come from there.
|
||||
# shellcheck disable=SC2154
|
||||
terraform init -upgrade -reconfigure -input=false -backend=true \
|
||||
-backend-config="resource_group_name=${TF_VAR_mgmt_resource_group_name}" \
|
||||
-backend-config="storage_account_name=${TF_VAR_mgmt_storage_account_name}" \
|
||||
-backend-config="container_name=${TF_VAR_terraform_state_container_name}" \
|
||||
-backend-config="key=tre-workspace-service-gitea-${TF_VAR_id}"
|
|
@ -1 +1 @@
|
|||
__version__ = "0.8.5"
|
||||
__version__ = "0.8.6"
|
||||
|
|
|
@ -48,7 +48,7 @@
|
|||
<dependency>
|
||||
<groupId>com.azure</groupId>
|
||||
<artifactId>azure-security-keyvault-secrets</artifactId>
|
||||
<version>4.8.2</version>
|
||||
<version>4.8.4</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.azure</groupId>
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
---
|
||||
schemaVersion: 1.0.0
|
||||
name: tre-service-guacamole
|
||||
version: 0.10.8
|
||||
version: 0.10.9
|
||||
description: "An Azure TRE service for Guacamole"
|
||||
dockerfile: Dockerfile.tmpl
|
||||
registry: azuretre
|
||||
|
|
|
@ -2,21 +2,21 @@
|
|||
# Manual edits may be lost in future updates.
|
||||
|
||||
provider "registry.terraform.io/hashicorp/azurerm" {
|
||||
version = "3.57.0"
|
||||
constraints = "3.57.0"
|
||||
version = "3.112.0"
|
||||
constraints = "3.112.0"
|
||||
hashes = [
|
||||
"h1:SOBKU/ioGnpuQpAx6dgaD0EzfAM2W+uS9e6p59viSxs=",
|
||||
"zh:028202b0ae01f1262dac076b383cb68b5dd624977669b6db833418c215eb8401",
|
||||
"zh:26fcf9e9b73cb3bbf87a048361a89050d2e52bdc91190a305e624a62be26a3f4",
|
||||
"zh:2f381103953e4513068eee62089a0ec8c60a18ecef2235138b6c29a45920d6a2",
|
||||
"zh:376f016f4b449b2cf38f75e27e7a9157fdcfc925f28198124a30e316abb54f3d",
|
||||
"zh:7d491bab94d5aba91cd9c307dbd4b655dcdc0a6212541e7800b9a902be98befe",
|
||||
"zh:85fa7d8339efd15494f947cda02e9ed127eafa32652e568f54261b2e97d2b3ee",
|
||||
"zh:950e079e55a7e321adbd2f6a0639a4b3b0fac47d2e4bb3a12791e0817b694238",
|
||||
"zh:975260e09379c5c97cad3171327db2f0b4914909861d4c24ab784b0ecd79c54a",
|
||||
"zh:a26bb67ab2d2f20e5fee4d41110584af17357f4b4266d80f9debfad61fa0a4fd",
|
||||
"zh:da0e5d1ec301c69b6fae684e55059fc5e1b91699ed3696229f599d558401556b",
|
||||
"zh:ea11e62ce53caec240cb3a1da25d248805387fa246314001ed3e07e9105f6e12",
|
||||
"h1:5KSVV/O2eG6ty/3/qpOLQFQqJd96KEPzsTHItslJaMw=",
|
||||
"zh:341c22454d24a75792aa99fbbc0c156f368534b7bb04eef4701b85995c7526a4",
|
||||
"zh:3708656d75061c92f7208cc731b946c991ad343a443f8ff0ef082f077b7580b9",
|
||||
"zh:38ca06f9f45705c648f04f272bd9483397693ea8da6db788cd7955f49ab79d6b",
|
||||
"zh:3f305adb5ee0032e0ea68d198a089ecfd0127092930e99fa51377a250292b592",
|
||||
"zh:4ae2fc6065164a819f576f705e634ebf5059f983149a41dad909719fea96145a",
|
||||
"zh:5d376ac7dd71898a94038d6b6b8036dfec4c0216d832ec1135c855bf3e58eb5f",
|
||||
"zh:63d2ff296d3aee5787e12c759a6a3d5aa15a574456aebbe11b833f01adf3faef",
|
||||
"zh:8ad8746741f7f0ac10da6f1d105f26ebeb6e4d944f58ba749e86d7c9a67da3db",
|
||||
"zh:abec182594ee8a21d72a5f23d3aa7fa45247488539fce6ed648c9c255d8bf972",
|
||||
"zh:bf704b400be4181333b38c0306949f26326a9aa5ae68b4167e2fb8ee7fb13618",
|
||||
"zh:c072938f8695f725fc5fbe986a54890f00d520cce570006390dc5bbc51b2a4ea",
|
||||
"zh:f569b65999264a9416862bca5cd2a6177d94ccb0424f3a4ef424428912b9cb3c",
|
||||
]
|
||||
}
|
||||
|
|
|
@ -2,7 +2,7 @@ terraform {
|
|||
required_providers {
|
||||
azurerm = {
|
||||
source = "hashicorp/azurerm"
|
||||
version = "=3.57.0"
|
||||
version = "=3.112.0"
|
||||
}
|
||||
local = {
|
||||
source = "hashicorp/local"
|
||||
|
|
|
@ -0,0 +1,13 @@
|
|||
#!/bin/bash
|
||||
set -e
|
||||
|
||||
# This script is used to install the bundle directly without having to interact with Porter
|
||||
|
||||
# This script assumes you have created an .env from the sample and the variables
|
||||
# will come from there.
|
||||
# shellcheck disable=SC2154
|
||||
terraform init -upgrade -reconfigure -input=false -backend=true \
|
||||
-backend-config="resource_group_name=${TF_VAR_mgmt_resource_group_name}" \
|
||||
-backend-config="storage_account_name=${TF_VAR_mgmt_storage_account_name}" \
|
||||
-backend-config="container_name=${TF_VAR_terraform_state_container_name}" \
|
||||
-backend-config="key=${TRE_ID}${TF_VAR_workspace_id}guacamole"
|
|
@ -1,7 +1,7 @@
|
|||
---
|
||||
schemaVersion: 1.0.0
|
||||
name: tre-service-guacamole-export-reviewvm
|
||||
version: 0.1.8
|
||||
version: 0.1.9
|
||||
description: "An Azure TRE User Resource Template for reviewing Airlock export requests"
|
||||
dockerfile: Dockerfile.tmpl
|
||||
registry: azuretre
|
||||
|
|
|
@ -2,22 +2,22 @@
|
|||
# Manual edits may be lost in future updates.
|
||||
|
||||
provider "registry.terraform.io/hashicorp/azurerm" {
|
||||
version = "3.41.0"
|
||||
constraints = "3.41.0"
|
||||
version = "3.112.0"
|
||||
constraints = "3.112.0"
|
||||
hashes = [
|
||||
"h1:Kn7sqPk/YpsvORFEd/zHXa8U7KkVB551DXUMwvqiU0s=",
|
||||
"zh:123838b581a27499d0a1e3a9804a6f57304969f58c4ea7fbd938ae2a795b2a19",
|
||||
"zh:761a7bff3872a192202411aa62e3e6aedc3046f0df86967a1f9ed5a74207f451",
|
||||
"zh:83092681a9e14d5e548edccece5086d822f86de6ff8227bb78706b41f0041697",
|
||||
"zh:95fd6be4a3b995dc8ad40054646e2261e01365af7e8f8ebe0e62133cee8250cd",
|
||||
"zh:995c3eb0aa23fc6948f45e68173034facc4bd92f4865abc3bba4bd305596fc86",
|
||||
"zh:9f7b158d39f3e9fbc01ee27e6a63600838e34b7364715ebeea7d62717e48cb56",
|
||||
"zh:b23193883592a4889942e82e73782e70dfbb517561a4f24b09f8ab6cbdc46866",
|
||||
"zh:c4884d654d03a0546ec78f348563e32220ae35a2c76f22cb3c960f989dc6be48",
|
||||
"zh:dda1c6720c6cef052db2fb4886a9cd46dee849e4367d6d66b45ad9d5bb607b94",
|
||||
"zh:f0bc878d67785343bfc36a7d14ec58a67fa436f5b8b497221aea3931e3dccefd",
|
||||
"h1:5KSVV/O2eG6ty/3/qpOLQFQqJd96KEPzsTHItslJaMw=",
|
||||
"zh:341c22454d24a75792aa99fbbc0c156f368534b7bb04eef4701b85995c7526a4",
|
||||
"zh:3708656d75061c92f7208cc731b946c991ad343a443f8ff0ef082f077b7580b9",
|
||||
"zh:38ca06f9f45705c648f04f272bd9483397693ea8da6db788cd7955f49ab79d6b",
|
||||
"zh:3f305adb5ee0032e0ea68d198a089ecfd0127092930e99fa51377a250292b592",
|
||||
"zh:4ae2fc6065164a819f576f705e634ebf5059f983149a41dad909719fea96145a",
|
||||
"zh:5d376ac7dd71898a94038d6b6b8036dfec4c0216d832ec1135c855bf3e58eb5f",
|
||||
"zh:63d2ff296d3aee5787e12c759a6a3d5aa15a574456aebbe11b833f01adf3faef",
|
||||
"zh:8ad8746741f7f0ac10da6f1d105f26ebeb6e4d944f58ba749e86d7c9a67da3db",
|
||||
"zh:abec182594ee8a21d72a5f23d3aa7fa45247488539fce6ed648c9c255d8bf972",
|
||||
"zh:bf704b400be4181333b38c0306949f26326a9aa5ae68b4167e2fb8ee7fb13618",
|
||||
"zh:c072938f8695f725fc5fbe986a54890f00d520cce570006390dc5bbc51b2a4ea",
|
||||
"zh:f569b65999264a9416862bca5cd2a6177d94ccb0424f3a4ef424428912b9cb3c",
|
||||
"zh:f6aa3c25f7106619cc6760e1d34b29b0956c50f285994f009939890a85e7b058",
|
||||
]
|
||||
}
|
||||
|
||||
|
|
|
@ -3,7 +3,7 @@ terraform {
|
|||
required_providers {
|
||||
azurerm = {
|
||||
source = "hashicorp/azurerm"
|
||||
version = "=3.41.0"
|
||||
version = "=3.112.0"
|
||||
}
|
||||
random = {
|
||||
source = "hashicorp/random"
|
||||
|
|
Некоторые файлы не были показаны из-за слишком большого количества измененных файлов Показать больше
Загрузка…
Ссылка в новой задаче