Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Feature: Add NetworkManager resource support #7704

Merged
merged 21 commits into from
May 24, 2024
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
21 commits
Select commit Hold shift + click to select a range
5ac5933
added networkmanager:CreateGlobalNetwork
zkarpinski May 19, 2024
1f660f1
added CreateCoreNetwork support
zkarpinski May 19, 2024
e26dfcc
add Delete/List/Get CoreNetwork endpoints
zkarpinski May 20, 2024
9a0386e
Merge branch 'getmoto:master' into add-network-manager-feature
zkarpinski May 20, 2024
0cf7cbc
add TagResource, UntagResource and DescribeGlobalNetworks
zkarpinski May 20, 2024
1078af4
fixed test
zkarpinski May 21, 2024
d9bf2da
fixed test
zkarpinski May 20, 2024
bd56574
Merge branch 'add-network-manager-feature' of https://github.com/zkar…
zkarpinski May 21, 2024
1a9963e
Revert "Merge branch 'add-network-manager-feature' of https://github.…
zkarpinski May 21, 2024
c6e280b
fix linting issues
zkarpinski May 21, 2024
92b5bfd
fixed more linting
zkarpinski May 22, 2024
9629dd4
final linting update
zkarpinski May 22, 2024
be51d48
Merge branch 'getmoto:master' into add-network-manager-feature
zkarpinski May 22, 2024
285bd03
Merge branch 'getmoto:master' into add-network-manager-feature
zkarpinski May 22, 2024
9b70378
fix global backend after pr #7710
zkarpinski May 22, 2024
7937d6e
Merge branch 'add-network-manager-feature' of https://github.com/zkar…
zkarpinski May 22, 2024
832be70
fixed url and added server test
zkarpinski May 23, 2024
f3bef49
update tests, fix urls, fix global backend after pr #7710
zkarpinski May 19, 2024
c368fc1
Merge branch 'add-network-manager-feature' of https://github.com/zkar…
zkarpinski May 23, 2024
ee4515d
fix tag resource and update exceptions
zkarpinski May 23, 2024
d5995ab
Networkmanager - Fix tag-URLs in ServerMode
bblommers May 23, 2024
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
21 changes: 9 additions & 12 deletions moto/networkmanager/models.py
Original file line number Diff line number Diff line change
@@ -1,12 +1,11 @@
"""NetworkManagerBackend class with methods for supported APIs."""

import random
from datetime import datetime, timezone
from typing import Any, Dict, List, Optional

from moto.core.base_backend import BackendDict, BaseBackend
from moto.core.common_models import BaseModel
from moto.ec2.utils import HEX_CHARS
from moto.moto_api._internal import mock_random
from moto.utilities.paginator import paginate
from moto.utilities.utils import PARTITION_NAMES

Expand All @@ -32,15 +31,16 @@ class GlobalNetwork(BaseModel):
def __init__(
self,
account_id: str,
partition: str,
description: Optional[str],
tags: Optional[List[Dict[str, str]]],
):
self.description = description
self.tags = tags or []
self.global_network_id = "global-network-" + "".join(
random.choice(HEX_CHARS) for _ in range(18)
mock_random.get_random_hex(18)
)
self.global_network_arn = f"arn:aws:networkmanager:{account_id}:global-network/{self.global_network_id}"
self.global_network_arn = f"arn:{partition}:networkmanager:{account_id}:global-network/{self.global_network_id}"
self.created_at = datetime.now(timezone.utc).strftime("%Y-%m-%dT%H:%M:%S.%fZ")
self.state = "PENDING"

Expand All @@ -59,6 +59,7 @@ class CoreNetwork(BaseModel):
def __init__(
self,
account_id: str,
partition: str,
global_network_id: str,
description: Optional[str],
tags: Optional[List[Dict[str, str]]],
Expand All @@ -70,12 +71,8 @@ def __init__(
self.tags = tags or []
self.policy_document = policy_document
self.client_token = client_token
self.core_network_id = "core-network-" + "".join(
random.choice(HEX_CHARS) for _ in range(18)
)
self.core_network_arn = (
f"arn:aws:networkmanager:{account_id}:core-network/{self.core_network_id}"
)
self.core_network_id = "core-network-" + "".join(mock_random.get_random_hex(18))
self.core_network_arn = f"arn:{partition}:networkmanager:{account_id}:core-network/{self.core_network_id}"

self.created_at = datetime.now(timezone.utc).strftime("%Y-%m-%dT%H:%M:%S.%fZ")
self.state = "PENDING"
Expand All @@ -101,8 +98,6 @@ def __init__(self, region_name: str, account_id: str) -> None:
self.global_networks: Dict[str, GlobalNetwork] = {}
self.core_networks: Dict[str, CoreNetwork] = {}

# add methods from here

def create_global_network(
self,
description: Optional[str],
Expand All @@ -112,6 +107,7 @@ def create_global_network(
description=description,
tags=tags,
account_id=self.account_id,
partition=self.partition,
)
gnw_id = global_network.global_network_id
self.global_networks[gnw_id] = global_network
Expand All @@ -136,6 +132,7 @@ def create_core_network(
policy_document=policy_document,
client_token=client_token,
account_id=self.account_id,
partition=self.partition,
)
cnw_id = core_network.core_network_id
self.core_networks[cnw_id] = core_network
Expand Down
4 changes: 2 additions & 2 deletions moto/networkmanager/responses.py
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ def delete_core_network(self) -> str:
def tag_resource(self) -> TYPE_RESPONSE:
params = json.loads(self.body)
tags = params.get("Tags")
resource_arn = unquote(self.path.split("/")[-1])
resource_arn = unquote(self.path.split("/tags/")[-1])

self.networkmanager_backend.tag_resource(
resource_arn=resource_arn,
Expand All @@ -66,7 +66,7 @@ def tag_resource(self) -> TYPE_RESPONSE:
def untag_resource(self) -> TYPE_RESPONSE:
params = self._get_params()
tag_keys = params.get("tagKeys")
resource_arn = unquote(self.path.split("/")[-1])
resource_arn = unquote(self.path.split("/tags/")[-1])
self.networkmanager_backend.untag_resource(
resource_arn=resource_arn,
tag_keys=tag_keys,
Expand Down
1 change: 1 addition & 0 deletions moto/networkmanager/urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,4 +14,5 @@
"{0}/global-networks/(?P<networkid>[^/.]+)$": NetworkManagerResponse.dispatch,
"{0}/tags$": NetworkManagerResponse.dispatch,
"{0}/tags/(?P<resourcearn>[^/.]+)$": NetworkManagerResponse.dispatch,
"{0}/tags/(?P<arn_prefix>[^/]+)/(?P<resource_id>[^/]+)$": NetworkManagerResponse.dispatch,
zkarpinski marked this conversation as resolved.
Show resolved Hide resolved
}
9 changes: 9 additions & 0 deletions tests/test_networkmanager/test_networkmanager.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import boto3

from moto import mock_aws
from tests import DEFAULT_ACCOUNT_ID

# See our Development Tips on writing tests for hints on how to write good tests:
# http://docs.getmoto.org/en/latest/docs/contributing/development_tips/tests.html
Expand All @@ -28,6 +29,10 @@ def test_create_global_network():
)

global_network = resp["GlobalNetwork"]
assert (
global_network["GlobalNetworkArn"]
== f"arn:aws:networkmanager:{DEFAULT_ACCOUNT_ID}:global-network/{global_network['GlobalNetworkId']}"
)
assert global_network["Description"] == "Test global network"
assert global_network["Tags"] == [{"Key": "Name", "Value": "TestNetwork"}]
assert global_network["State"] == "PENDING"
Expand Down Expand Up @@ -55,6 +60,10 @@ def test_create_core_network():
)

core_network = resp["CoreNetwork"]
assert (
core_network["CoreNetworkArn"]
== f"arn:aws:networkmanager:{DEFAULT_ACCOUNT_ID}:core-network/{core_network['CoreNetworkId']}"
)
assert core_network["GlobalNetworkId"] == global_network_id
assert core_network["Description"] == "Test core network"
assert len(core_network["Tags"]) == 1
Expand Down