{ "metadata": { "kernelspec": { "name": "python3", "display_name": "Python 3", "language": "python" }, "language_info": { "name": "python", "version": "3.6.6", "mimetype": "text/x-python", "codemirror_mode": { "name": "ipython", "version": 3 }, "pygments_lexer": "ipython3", "nbconvert_exporter": "python", "file_extension": ".py" } }, "nbformat_minor": 2, "nbformat": 4, "cells": [ { "cell_type": "markdown", "source": [ "![Microsoft](https://raw.githubusercontent.com/microsoft/azuredatastudio/main/extensions/arc/images/microsoft-small-logo.png)\n", " \n", "## Create a PostgreSQL Hyperscale - Azure Arc on an existing Azure Arc Data Controller\n", " \n", "This notebook walks through the process of creating a PostgreSQL Hyperscale - Azure Arc on an existing Azure Arc Data Controller.\n", " \n", "* Follow the instructions in the **Prerequisites** cell to install the tools if not already installed.\n", "* Make sure you have the target Azure Arc Data Controller already created.\n", "\n", "Please press the \"Run All\" button to run the notebook" ], "metadata": { "azdata_cell_guid": "e4ed0892-7b5a-4d95-bd0d-a6c3eb0b2c99" } }, { "cell_type": "markdown", "source": [ "### **Prerequisites** \n", "Ensure the following tools are installed and added to PATH before proceeding.\n", " \n", "|Tools|Description|Installation|\n", "|---|---|---|\n", "|Azure CLI (az) | Command-line tool for installing and managing resources in an Azure Arc cluster |[Installation](https://docs.microsoft.com/cli/azure/install-azure-cli-windows?tabs=azure-cli) |\n", "|Azure CLI arcdata extension | Commands for using Azure Arc for Azure data services. | [Installation](https://docs.microsoft.com/azure/azure-arc/data/install-arcdata-extension)" ], "metadata": { "azdata_cell_guid": "20fe3985-a01e-461c-bce0-235f7606cc3c" } }, { "cell_type": "markdown", "source": [ "### **Setup and Check Prerequisites**" ], "metadata": { "azdata_cell_guid": "68531b91-ddce-47d7-a1d8-2ddc3d17f3e7" } }, { "cell_type": "code", "execution_count": null, "source": [ "import sys,os,json,subprocess\n", "def run_command():\n", " print(\"Executing: \" + cmd)\n", " output = subprocess.run(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True )\n", " if output.returncode != 0:\n", " print(f'Command: {cmd} failed \\n')\n", " print(f'\\t>>>Error output: {output.stderr.decode(\"utf-8\")}\\n')\n", " sys.exit(f'exit code: {output.returncode}\\n')\n", " print(f'Successfully executed: {cmd}')\n", " print(f'\\t>>>Output: {output.stdout.decode(\"utf-8\")}\\n')\n", " return output.stdout.decode(\"utf-8\")\n", "cmd = 'az --version'\n", "out = run_command()\n" ], "outputs": [], "metadata": { "azdata_cell_guid": "749d8dba-3da8-46e9-ae48-2b38056ab7a2", "tags": [] } }, { "cell_type": "markdown", "source": [ "### **Set variables**\n", "\n", "#### \n", "\n", "Generated by Azure Data Studio using the values collected in the 'Deploy PostgreSQL Hyperscale - Azure Arc instance' wizard" ], "metadata": { "azdata_cell_guid": "68ec0760-27d1-4ded-9a9f-89077c40b8bb" } }, { "cell_type": "markdown", "source": [ "### **Creating the PostgreSQL Hyperscale - Azure Arc instance**" ], "metadata": { "azdata_cell_guid": "90b0e162-2987-463f-9ce6-12dda1267189" } }, { "cell_type": "code", "execution_count": null, "source": [ "print (f'Creating the PostgreSQL Hyperscale - Azure Arc instance')\n", "\n", "workers = f' --workers {postgres_server_group_workers}' if postgres_server_group_workers else \"\"\n", "port = f' --port \"{postgres_server_group_port}\"' if postgres_server_group_port else \"\"\n", "engine_version = f' --engine-version {postgres_server_group_engine_version}' if postgres_server_group_engine_version else \"\"\n", "extensions = f' --extensions \"{postgres_server_group_extensions}\"' if postgres_server_group_extensions else \"\"\n", "volume_size_data = f' --volume-size-data {postgres_server_group_volume_size_data}Gi' if postgres_server_group_volume_size_data else \"\"\n", "volume_size_logs = f' --volume-size-logs {postgres_server_group_volume_size_logs}Gi' if postgres_server_group_volume_size_logs else \"\"\n", "volume_size_backups = f' --volume-size-backups {postgres_server_group_volume_size_backups}Gi' if postgres_server_group_volume_size_backups else \"\"\n", "\n", "def get_per_role_argument(argument, roles, unit=''):\n", " value = ','.join(f'{role}={value}{unit}' for role,value in roles.items() if value not in (None, ''))\n", " return f' {argument} {value}' if value else ''\n", "\n", "cores_request = get_per_role_argument('--cores-request', {\n", " 'c': postgres_server_group_coordinator_cores_request,\n", " 'w': postgres_server_group_workers_cores_request\n", "})\n", "\n", "cores_limit = get_per_role_argument('--cores-limit', {\n", " 'c': postgres_server_group_coordinator_cores_limit,\n", " 'w': postgres_server_group_workers_cores_limit\n", "})\n", "\n", "memory_request = get_per_role_argument('--memory-request', {\n", " 'c': postgres_server_group_coordinator_memory_request,\n", " 'w': postgres_server_group_workers_memory_request\n", "}, 'Gi')\n", "\n", "memory_limit = get_per_role_argument('--memory-limit', {\n", " 'c': postgres_server_group_coordinator_memory_limit,\n", " 'w': postgres_server_group_workers_memory_limit\n", "}, 'Gi')\n", "\n", "os.environ[\"AZDATA_PASSWORD\"] = os.environ[\"AZDATA_NB_VAR_POSTGRES_SERVER_GROUP_PASSWORD\"]\n", "cmd = f'az postgres arc-server create --name {postgres_server_group_name} --k8s-namespace {arc_data_controller_namespace} --use-k8s --storage-class-data {postgres_storage_class_data} --storage-class-logs {postgres_storage_class_logs} --storage-class-backups {postgres_storage_class_backups}{workers}{port}{engine_version}{extensions}{volume_size_data}{volume_size_logs}{volume_size_backups}{cores_request}{cores_limit}{memory_request}{memory_limit}'\n", "out=run_command()" ], "outputs": [], "metadata": { "azdata_cell_guid": "4fbaf071-55a1-40bc-be7e-7b9b5547b886" } } ] }