Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
27 commits
Select commit Hold shift + click to select a range
6c7d7b3
validate with list-skus info
DaeunYim Sep 18, 2020
f4aff33
style fixed
DaeunYim Sep 19, 2020
341fbcf
validate with list-skus info
DaeunYim Sep 18, 2020
9207f45
style fixed
DaeunYim Sep 19, 2020
9caa763
move validators to command body to speed up
DaeunYim Sep 22, 2020
8d9f96c
test code for validator and restored mgmt testcode
DaeunYim Sep 23, 2020
72e34f9
resolve conflicts
DaeunYim Sep 23, 2020
27a273b
minor fix
DaeunYim Sep 23, 2020
7848a49
flexible mgmt mysql test
DaeunYim Sep 24, 2020
7e61dad
new test recording files
DaeunYim Sep 29, 2020
490908d
deleting arguments and recording files modified
DaeunYim Sep 29, 2020
33c038f
style fixed, location changed, linter fixed
DaeunYim Sep 29, 2020
b7f7ed0
Adding az {} flexible-server connect capability
mjain2 Sep 29, 2020
6795970
Styling and linter fixes
mjain2 Sep 29, 2020
63add36
Merging with ppbugbash
mjain2 Sep 29, 2020
aa3c7e8
firewall rule name generation and end-ip-address rule changed
DaeunYim Sep 29, 2020
dca3e63
style fixed
DaeunYim Sep 29, 2020
8d16183
restore removed sterling test
DaeunYim Sep 30, 2020
47f489f
Fixing tests for renaming of parameters
mjain2 Sep 30, 2020
5249876
post public preview changes
arde0708 Sep 30, 2020
40d4d76
remove point in time param name change
arde0708 Sep 30, 2020
f1c1396
Merge pull request #2 from DaeunYim/arde/ppplusone
arde0708 Sep 30, 2020
01d284b
Merge branch 'daeunyim/ppbugbash' of https://github.com/DaeunYim/azur…
mjain2 Sep 30, 2020
abaab72
Merge pull request #1 from DaeunYim/mjain2/ppbugbash
mjain2 Sep 30, 2020
98c4775
Fixing linter/style issues and connect libraries in setup.py
mjain2 Sep 30, 2020
adcb404
Removing connect capability due to package issue
mjain2 Sep 30, 2020
307e9aa
Merge with dev
mjain2 Sep 30, 2020
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 9 additions & 2 deletions src/azure-cli/azure/cli/command_modules/rdbms/_client_factory.py
Original file line number Diff line number Diff line change
Expand Up @@ -303,6 +303,10 @@ def cf_mysql_flexible_location_capabilities(cli_ctx, _):
return get_mysql_flexible_management_client(cli_ctx).location_based_capabilities


def cf_mysql_check_resource_availability(cli_ctx, _):
return get_mysql_flexible_management_client(cli_ctx).check_name_availability


def cf_postgres_flexible_servers(cli_ctx, _):
return get_postgresql_flexible_management_client(cli_ctx).servers

Expand All @@ -319,10 +323,13 @@ def cf_postgres_flexible_location_capabilities(cli_ctx, _):
return get_postgresql_flexible_management_client(cli_ctx).location_based_capabilities


def cf_postgres_check_resource_availability(cli_ctx, _):
return get_postgresql_flexible_management_client(cli_ctx).check_name_availability


def resource_client_factory(cli_ctx, **_):
return get_mgmt_service_client(cli_ctx, ResourceType.MGMT_RESOURCE_RESOURCES)


def network_client_factory(cli_ctx):
from azure.mgmt.network import NetworkManagementClient
return get_mgmt_service_client(cli_ctx, NetworkManagementClient, api_version="2018-08-01")
return get_mgmt_service_client(cli_ctx, ResourceType.MGMT_NETWORK)
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,12 @@

import random
from knack.log import get_logger
from msrest.paging import Paged

from azure.cli.core.commands import LongRunningOperation, _is_poller
from azure.cli.core.util import CLIError
from azure.mgmt.resource.resources.models import ResourceGroup
from ._client_factory import resource_client_factory
from ._client_factory import resource_client_factory, cf_mysql_flexible_location_capabilities, cf_postgres_flexible_location_capabilities

logger = get_logger(__name__)

Expand Down Expand Up @@ -154,6 +156,99 @@ def parse_maintenance_window(maintenance_window_string):
return None, None, None


def get_mysql_versions(sku_info, tier):
return _get_available_values(sku_info, 'versions', tier)


def get_mysql_skus(sku_info, tier):
return _get_available_values(sku_info, 'skus', tier)


def get_mysql_storage_size(sku_info, tier):
return _get_available_values(sku_info, 'storage_sizes', tier)


def get_mysql_backup_retention(sku_info, tier):
return _get_available_values(sku_info, 'backup_retention', tier)


def get_mysql_tiers(sku_info):
return list(sku_info.keys())


def get_postgres_versions(sku_info, tier):
return _get_available_values(sku_info, 'versions', tier)


def get_postgres_skus(sku_info, tier):
return _get_available_values(sku_info, 'skus', tier)


def get_postgres_storage_sizes(sku_info, tier):
return _get_available_values(sku_info, 'storage_sizes', tier)


def get_postgres_tiers(sku_info):
return list(sku_info.keys())


def get_postgres_list_skus_info(cmd, location):
list_skus_client = cf_postgres_flexible_location_capabilities(cmd.cli_ctx, '_')
list_skus_result = list_skus_client.execute(location)
return _parse_list_skus(list_skus_result, 'postgres')


def get_mysql_list_skus_info(cmd, location):
list_skus_client = cf_mysql_flexible_location_capabilities(cmd.cli_ctx, '_')
list_skus_result = list_skus_client.list(location)
return _parse_list_skus(list_skus_result, 'mysql')


def _parse_list_skus(result, database_engine):
result = _get_list_from_paged_response(result)
if not result:
raise CLIError("No available SKUs in this location")

tiers = result[0].supported_flexible_server_editions
tiers_dict = {}
for tier_info in tiers:
tier_name = tier_info.name
tier_dict = {}

skus = set()
versions = set()
for version in tier_info.supported_server_versions:
versions.add(version.name)
for vcores in version.supported_vcores:
skus.add(vcores.name)
tier_dict["skus"] = skus
tier_dict["versions"] = versions

storage_info = tier_info.supported_storage_editions[0]
if database_engine == 'mysql':
tier_dict["backup_retention"] = (storage_info.min_backup_retention_days, storage_info.max_backup_retention_days)
tier_dict["storage_sizes"] = (int(storage_info.min_storage_size.storage_size_mb) // 1024,
int(storage_info.max_storage_size.storage_size_mb) // 1024)
elif database_engine == 'postgres':
storage_sizes = set()
for size in storage_info.supported_storage_mb:
storage_sizes.add(int(size.storage_size_mb // 1024))
tier_dict["storage_sizes"] = storage_sizes

tiers_dict[tier_name] = tier_dict

return tiers_dict


def _get_available_values(sku_info, argument, tier=None):
result = {key: val[argument] for key, val in sku_info.items()}
return result[tier]


def _get_list_from_paged_response(obj_list):
return list(obj_list) if isinstance(obj_list, Paged) else obj_list


def _update_location(cmd, resource_group_name):
resource_client = resource_client_factory(cmd.cli_ctx)
rg = resource_client.resource_groups.get(resource_group_name)
Expand Down
35 changes: 22 additions & 13 deletions src/azure-cli/azure/cli/command_modules/rdbms/_helptext_mysql.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,15 @@
type: command
short-summary: Create a flexible server.
examples:
- name: Create a MySQL flexible server with default params (resource group, location, servername, username, password) with VNET enabled by default.
text: |
az mysql flexible-server create
- name: Create a Mysql flexible server with default params (resource group, location, servername, username, password) with all public IPs(0.0.0.0 - 255.255.255.255).
text: |
az mysql flexible-server create --public-access all
- name: Create a MySQL flexible server with default params ( resource group, location, servername, username, password ) with public access without any firewall rules.
text: |
az mysql flexible-server create --public-access none
- name: Create a MySQL flexible server with specified SKU and storage, using defaults from local context.
text: |
az mysql flexible-server create --name testServer --admin-password password
Expand Down Expand Up @@ -73,7 +82,7 @@
- name: Delete a flexible server.
text: az mysql flexible-server delete --resource-group testGroup --name testServer
- name: Delete a flexible server without prompt or confirmation.
text: az mysql flexible-server delete --resource-group testGroup --name testServer --force
text: az mysql flexible-server delete --resource-group testGroup --name testServer --yes
"""

helps['mysql flexible-server firewall-rule'] = """
Expand All @@ -86,17 +95,17 @@
short-summary: Create a new firewall rule for a flexible server.
examples:
- name: Create a firewall rule allowing connections from a specific IP address.
text: az mysql flexible-server firewall-rule create --resource-group testGroup --server-name testServer --name allowip --start-ip-address 107.46.14.221 --end-ip-address 107.46.14.221
text: az mysql flexible-server firewall-rule create --resource-group testGroup --name testServer --rule-name allowip --start-ip-address 107.46.14.221 --end-ip-address 107.46.14.221
- name: Create a firewall rule allowing connections from an IP address range.
text: az mysql flexible-server firewall-rule create --resource-group testGroup --server-name testServer --name allowiprange --start-ip-address 107.46.14.0 --end-ip-address 107.46.14.221
text: az mysql flexible-server firewall-rule create --resource-group testGroup --name testServer --rule-name allowiprange --start-ip-address 107.46.14.0 --end-ip-address 107.46.14.221
"""

helps['mysql flexible-server firewall-rule delete'] = """
type: command
short-summary: Delete a firewall rule.
examples:
- name: Delete a firewall rule.
text: az mysql flexible-server firewall-rule delete --name testRule --resource-group testGroup --server-name testServer
text: az mysql flexible-server firewall-rule delete --rule-name testRule --resource-group testGroup --name testServer
crafted: true
"""

Expand All @@ -105,7 +114,7 @@
short-summary: List all firewall rules for a flexible server.
example:
- name: List all firewall rules for a server.
text: az mysql server firewall-rule list --resource-group testGroup --server-name testServer
text: az mysql server firewall-rule list --resource-group testGroup --name testServer
crafted: false
"""

Expand All @@ -114,7 +123,7 @@
short-summary: Get the details of a firewall rule.
examples:
- name: Get the details of a firewall rule.
text: az mysql flexible-server firewall-rule show --name testRule --resource-group testGroup --server-name testServer
text: az mysql flexible-server firewall-rule show --rule-name testRule --resource-group testGroup --name testServer
crafted: true
"""

Expand All @@ -123,11 +132,11 @@
short-summary: Update a firewall rule.
examples:
- name: Update a firewall rule's start IP address.
text: az mysql flexible-server firewall-rule update --resource-group testGroup --server-name testServer
--name allowiprange --start-ip-address 107.46.14.1
text: az mysql flexible-server firewall-rule update --resource-group testGroup --name testServer
--rule-name allowiprange --start-ip-address 107.46.14.1
- name: Update a firewall rule's start and end IP address.
text: az mysql flexible-server firewall-rule update --resource-group testGroup --server-name testServer
--name allowiprange --start-ip-address 107.46.14.2 --end-ip-address 107.46.14.218
text: az mysql flexible-server firewall-rule update --resource-group testGroup --name testServer
--rule-name allowiprange --start-ip-address 107.46.14.2 --end-ip-address 107.46.14.218
"""

helps['mysql flexible-server list'] = """
Expand Down Expand Up @@ -187,7 +196,7 @@
short-summary: Create a read replica for a server.
examples:
- name: Create a read replica 'testReplicaServer' for 'testServer'.
text: az mysql flexible-server replica create -n testReplicaServer -g testGroup --source-server testServer
text: az mysql flexible-server replica create --replica-name testReplicaServer -g testGroup --source-server testServer
"""

helps['mysql flexible-server replica list'] = """
Expand Down Expand Up @@ -220,12 +229,12 @@
short-summary: Restore a flexible server from backup.
examples:
- name: Restore 'testServer' to a specific point-in-time as a new server 'testServerNew'.
text: az mysql flexible-server restore --resource-group testGroup --name testServerNew --source-server testServer --time "2017-06-15T13:10:00Z"
text: az mysql flexible-server restore --resource-group testGroup --name testServerNew --source-server testServer --restore-time "2017-06-15T13:10:00Z"
- name: Restore 'testServer2' to 'testServerNew', where 'testServerNew' is in a different resource group from 'testServer2'.
text: |
az mysql flexible-server restore --resource-group testGroup --name testServerNew \\
--source-server "/subscriptions/${SubID}/resourceGroups/${ResourceGroup}/providers/Microsoft.DBforMySQL/servers/testServer2" \\
--time "2017-06-15T13:10:00Z"
--restore-time "2017-06-15T13:10:00Z"
"""

helps['mysql flexible-server show'] = """
Expand Down
34 changes: 24 additions & 10 deletions src/azure-cli/azure/cli/command_modules/rdbms/_helptext_pg.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,18 @@
type: command
short-summary: Create a flexible server.
examples:
- name: Create a PostgreSQL flexible server with default params ( resource group, location, servername, username, password ) with VNET enabled by default.
text: |
az postgres flexible-server create

- name: Create a PostgreSQL flexible server with default params ( resource group, location, servername, username, password ) with all public IPs(0.0.0.0 - 255.255.255.255).
text: |
az postgres flexible-server create --public-access all

- name: Create a PostgreSQL flexible server with default params ( resource group, location, servername, username, password ) with public access without any firewall rules.
text: |
az postgres flexible-server create --public-access none

- name: Create a PostgreSQL flexible server with specified SKU and storage, using defaults from local context.
text: |
az postgres flexible-server create --name testServer --admin-password password
Expand All @@ -34,6 +46,8 @@
examples:
- name: Delete a flexible server.
text: az postgres flexible-server delete --resource-group testGroup --name testServer
- name: Delete a flexible server without prompt or confirmation.
text: az postgres flexible-server delete --resource-group testGroup --name testServer --yes
"""

helps['postgres flexible-server firewall-rule'] = """
Expand All @@ -46,17 +60,17 @@
short-summary: Create a new firewall rule for a flexible server.
examples:
- name: Create a firewall rule allowing connections from a specific IP address.
text: az postgres flexible-server firewall-rule create --resource-group testGroup --server-name testServer --name allowip --start-ip-address 107.46.14.221 --end-ip-address 107.46.14.221
text: az postgres flexible-server firewall-rule create --resource-group testGroup --name testServer --rule-name allowip --start-ip-address 107.46.14.221 --end-ip-address 107.46.14.221
- name: Create a firewall rule allowing connections from an IP address range.
text: az postgres flexible-server firewall-rule create --resource-group testGroup --server-name testServer --name allowiprange --start-ip-address 107.46.14.0 --end-ip-address 107.46.14.221
text: az postgres flexible-server firewall-rule create --resource-group testGroup --name testServer --rule-name allowiprange --start-ip-address 107.46.14.0 --end-ip-address 107.46.14.221
"""

helps['postgres flexible-server firewall-rule delete'] = """
type: command
short-summary: Delete a firewall rule.
examples:
- name: Delete a firewall rule.
text: az postgres flexible-server firewall-rule delete --name testRule --resource-group testGroup --server-name testServer
text: az postgres flexible-server firewall-rule delete --rule-name testRule --resource-group testGroup --name testServer
crafted: true
"""

Expand All @@ -65,7 +79,7 @@
short-summary: List all firewall rules for a flexible server.
example:
- name: List all firewall rules for a server.
text: az postgres server firewall-rule list --resource-group testGroup --server-name testServer
text: az postgres server firewall-rule list --resource-group testGroup --name testServer
crafted: true
"""

Expand All @@ -74,7 +88,7 @@
short-summary: Get the details of a firewall rule.
examples:
- name: Get the details of a firewall rule.
text: az postgres flexible-server firewall-rule show --name testRule --resource-group testGroup --server-name testServer
text: az postgres flexible-server firewall-rule show --rule-name testRule --resource-group testGroup --name testServer
crafted: true
"""

Expand All @@ -83,9 +97,9 @@
short-summary: Update a firewall rule.
examples:
- name: Update a firewall rule's start IP address.
text: az postgres flexible-server firewall-rule update --resource-group testGroup --server-name testServer --name allowiprange --start-ip-address 107.46.14.1
text: az postgres flexible-server firewall-rule update --resource-group testGroup --name testServer --rule-name allowiprange --start-ip-address 107.46.14.1
- name: Update a firewall rule's start and end IP address.
text: az postgres flexible-server firewall-rule update --resource-group testGroup --server-name testServer --name allowiprange --start-ip-address 107.46.14.2 --end-ip-address 107.46.14.218
text: az postgres flexible-server firewall-rule update --resource-group testGroup --name testServer --rule-name allowiprange --start-ip-address 107.46.14.2 --end-ip-address 107.46.14.218
"""

helps['postgres flexible-server list'] = """
Expand Down Expand Up @@ -149,12 +163,12 @@
short-summary: Restore a flexible server from backup.
examples:
- name: Restore 'testServer' to a specific point-in-time as a new server 'testServerNew'.
text: az postgres flexible-server restore --resource-group testGroup --name testServerNew --source-server testServer --time "2017-06-15T13:10:00Z"
text: az postgres flexible-server restore --resource-group testGroup --name testServerNew --source-server testServer --restore-time "2017-06-15T13:10:00Z"
- name: Restore 'testServer2' to 'testServerNew', where 'testServerNew' is in a different resource group from 'testServer2'.
text: |
az postgres flexible-server restore --resource-group testGroup --name testServerNew \\
--source-server "/subscriptions/${SubID}/resourceGroups/${ResourceGroup}/providers/Microsoft.DBforPostgreSQL/servers/testServer2" \\
--time "2017-06-15T13:10:00Z"
--restore-time "2017-06-15T13:10:00Z"
"""

helps['postgres flexible-server show'] = """
Expand Down Expand Up @@ -202,7 +216,7 @@
short-summary: Lists available sku's in the given region.
example:
- name: Lists available sku's in the given region.
text: az mysql flexible-server list-skus -l eastus
text: az postgres flexible-server list-skus -l eastus
"""

helps['postgres flexible-server wait'] = """
Expand Down
Loading