diff --git a/src/agentfabric/HISTORY.rst b/src/agentfabric/HISTORY.rst new file mode 100644 index 00000000000..6e680cb998e --- /dev/null +++ b/src/agentfabric/HISTORY.rst @@ -0,0 +1,9 @@ +.. :changelog: + +Release History +=============== + +1.0.0b1 +++++++ +* Initial preview release for Azure Agent Fabric using API version ``2026-07-21-preview``. +* Add Agent Fabric, member, and Policy Group create, show, list, update, delete, and wait commands. \ No newline at end of file diff --git a/src/agentfabric/README.md b/src/agentfabric/README.md new file mode 100644 index 00000000000..2fe8c988336 --- /dev/null +++ b/src/agentfabric/README.md @@ -0,0 +1,81 @@ +# Azure CLI Agent Fabric Extension + +This extension manages Azure Agent Fabric resources, their child members, and +independent Policy Group peer resources. It uses the `Microsoft.NetworkSecurity` +resource provider API version `2026-07-21-preview`. + +## Resource hierarchy + +```text +Microsoft.NetworkSecurity +├── agentFabrics/{fabricName} (independent top-level resource) +│ └── members/{memberName} (child of an Agent Fabric) +└── policyGroups/{policyGroupName} (independent top-level peer resource) +``` + +## Install + +```bash +az extension add --name agentfabric +``` + +## Agent Fabrics + +Root CRUD commands manage Agent Fabric resources. + +```bash +az agentfabric create \ + --resource-group myResourceGroup \ + --name myFabric \ + --location eastus \ + --trust-domain contoso.agentfabric + +az agentfabric update \ + --resource-group myResourceGroup \ + --name myFabric \ + --tags environment=production + +az agentfabric list --resource-group myResourceGroup +``` + +## Members + +Members are children of an Agent Fabric, so member commands require the parent +Fabric name through `--fabric-name`. + +```bash +az agentfabric member create \ + --resource-group myResourceGroup \ + --fabric-name myFabric \ + --member-name myMember \ + --location eastus \ + --workload "{aci:{resource-id:/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/myResourceGroup/providers/Microsoft.ContainerInstance/containerGroups/myContainerGroup}}" + +az agentfabric member show \ + --resource-group myResourceGroup \ + --fabric-name myFabric \ + --member-name myMember +``` + +## Policy Groups + +Policy Groups are independent resource-group-scoped +`Microsoft.NetworkSecurity` peer resources. They are not children of an Agent +Fabric, and their commands do not accept `--fabric-name`. + +```bash +az agentfabric policy-group create \ + --resource-group myResourceGroup \ + --name myPolicyGroup \ + --location eastus \ + --display-name "My policy group" \ + --priority 100 + +az agentfabric policy-group show \ + --ids /subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/myResourceGroup/providers/Microsoft.NetworkSecurity/policyGroups/myPolicyGroup +``` + +Policy Group ARM IDs end with `/policyGroups/{name}`. + +Long-running create, update, and delete operations support `--no-wait`. Use the +corresponding `wait` command to wait for provisioning to reach a target state. diff --git a/src/agentmesh/azext_agentmesh/__init__.py b/src/agentfabric/azext_agentfabric/__init__.py similarity index 76% rename from src/agentmesh/azext_agentmesh/__init__.py rename to src/agentfabric/azext_agentfabric/__init__.py index d5b149feef9..1ad60bb6af8 100644 --- a/src/agentmesh/azext_agentmesh/__init__.py +++ b/src/agentfabric/azext_agentfabric/__init__.py @@ -6,20 +6,20 @@ # -------------------------------------------------------------------------------------------- from azure.cli.core import AzCommandsLoader -from azext_agentmesh._help import helps # pylint: disable=unused-import +from azext_agentfabric._help import helps # pylint: disable=unused-import -class AgentmeshCommandsLoader(AzCommandsLoader): +class AgentfabricCommandsLoader(AzCommandsLoader): def __init__(self, cli_ctx=None): from azure.cli.core.commands import CliCommandType custom_command_type = CliCommandType( - operations_tmpl='azext_agentmesh.custom#{}') + operations_tmpl='azext_agentfabric.custom#{}') super().__init__(cli_ctx=cli_ctx, custom_command_type=custom_command_type) def load_command_table(self, args): - from azext_agentmesh.commands import load_command_table + from azext_agentfabric.commands import load_command_table from azure.cli.core.aaz import load_aaz_command_table try: from . import aaz @@ -35,8 +35,8 @@ def load_command_table(self, args): return self.command_table def load_arguments(self, command): - from azext_agentmesh._params import load_arguments + from azext_agentfabric._params import load_arguments load_arguments(self, command) -COMMAND_LOADER_CLS = AgentmeshCommandsLoader +COMMAND_LOADER_CLS = AgentfabricCommandsLoader diff --git a/src/agentmesh/azext_agentmesh/_help.py b/src/agentfabric/azext_agentfabric/_help.py similarity index 100% rename from src/agentmesh/azext_agentmesh/_help.py rename to src/agentfabric/azext_agentfabric/_help.py diff --git a/src/agentmesh/azext_agentmesh/_params.py b/src/agentfabric/azext_agentfabric/_params.py similarity index 100% rename from src/agentmesh/azext_agentmesh/_params.py rename to src/agentfabric/azext_agentfabric/_params.py diff --git a/src/agentmesh/azext_agentmesh/aaz/__init__.py b/src/agentfabric/azext_agentfabric/aaz/__init__.py similarity index 100% rename from src/agentmesh/azext_agentmesh/aaz/__init__.py rename to src/agentfabric/azext_agentfabric/aaz/__init__.py diff --git a/src/agentmesh/azext_agentmesh/aaz/latest/__init__.py b/src/agentfabric/azext_agentfabric/aaz/latest/__init__.py similarity index 99% rename from src/agentmesh/azext_agentmesh/aaz/latest/__init__.py rename to src/agentfabric/azext_agentfabric/aaz/latest/__init__.py index 7e832c711e8..f6acc11aa4e 100644 --- a/src/agentmesh/azext_agentmesh/aaz/latest/__init__.py +++ b/src/agentfabric/azext_agentfabric/aaz/latest/__init__.py @@ -7,3 +7,4 @@ # pylint: skip-file # flake8: noqa + diff --git a/src/agentmesh/azext_agentmesh/aaz/latest/agentmesh/policy_group/__cmd_group.py b/src/agentfabric/azext_agentfabric/aaz/latest/agentfabric/__cmd_group.py similarity index 79% rename from src/agentmesh/azext_agentmesh/aaz/latest/agentmesh/policy_group/__cmd_group.py rename to src/agentfabric/azext_agentfabric/aaz/latest/agentfabric/__cmd_group.py index 81a3e9225f8..2abbc35cde6 100644 --- a/src/agentmesh/azext_agentmesh/aaz/latest/agentmesh/policy_group/__cmd_group.py +++ b/src/agentfabric/azext_agentfabric/aaz/latest/agentfabric/__cmd_group.py @@ -12,10 +12,10 @@ @register_command_group( - "agentmesh policy-group", + "agentfabric", ) class __CMDGroup(AAZCommandGroup): - """Manage Agent Mesh policy groups. + """Manage Agent Fabric and related Microsoft.NetworkSecurity resources. Root commands manage Agent Fabric resources. """ pass diff --git a/src/agentmesh/azext_agentmesh/aaz/latest/agentmesh/fabric/__init__.py b/src/agentfabric/azext_agentfabric/aaz/latest/agentfabric/__init__.py similarity index 100% rename from src/agentmesh/azext_agentmesh/aaz/latest/agentmesh/fabric/__init__.py rename to src/agentfabric/azext_agentfabric/aaz/latest/agentfabric/__init__.py diff --git a/src/agentmesh/azext_agentmesh/aaz/latest/agentmesh/fabric/_create.py b/src/agentfabric/azext_agentfabric/aaz/latest/agentfabric/_create.py similarity index 96% rename from src/agentmesh/azext_agentmesh/aaz/latest/agentmesh/fabric/_create.py rename to src/agentfabric/azext_agentfabric/aaz/latest/agentfabric/_create.py index 07a06870287..3a7326e01bb 100644 --- a/src/agentmesh/azext_agentmesh/aaz/latest/agentmesh/fabric/_create.py +++ b/src/agentfabric/azext_agentfabric/aaz/latest/agentfabric/_create.py @@ -12,13 +12,13 @@ @register_command( - "agentmesh fabric create", + "agentfabric create", ) class Create(AAZCommand): - """Create an Agent Mesh fabric + """Create an Agent Fabric resource. :example: AgentFabrics_CreateOrUpdate - az agentmesh fabric create --resource-group rgnetworksecurity --name testAIFabric --default-policy-groups "[/subscriptions/11809CA1-E126-4017-945E-AA795CD5C5A9/resourceGroups/rgnetworksecurity/providers/Microsoft.NetworkSecurity/policyGroups/testPolicyGroup]" --trust-domain contoso.agentfabric --tags "{}" --location eastus + az agentfabric create --resource-group rgnetworksecurity --name testAIFabric --default-policy-groups "[/subscriptions/11809CA1-E126-4017-945E-AA795CD5C5A9/resourceGroups/rgnetworksecurity/providers/Microsoft.NetworkSecurity/policyGroups/testPolicyGroup]" --trust-domain contoso.agentfabric --tags "{}" --location eastus """ _aaz_info = { diff --git a/src/agentmesh/azext_agentmesh/aaz/latest/agentmesh/fabric/_delete.py b/src/agentfabric/azext_agentfabric/aaz/latest/agentfabric/_delete.py similarity index 97% rename from src/agentmesh/azext_agentmesh/aaz/latest/agentmesh/fabric/_delete.py rename to src/agentfabric/azext_agentfabric/aaz/latest/agentfabric/_delete.py index 51ca27320c6..f7aa1fe6c11 100644 --- a/src/agentmesh/azext_agentmesh/aaz/latest/agentmesh/fabric/_delete.py +++ b/src/agentfabric/azext_agentfabric/aaz/latest/agentfabric/_delete.py @@ -12,14 +12,14 @@ @register_command( - "agentmesh fabric delete", + "agentfabric delete", confirmation="Are you sure you want to perform this operation?", ) class Delete(AAZCommand): - """Delete an Agent Mesh fabric + """Delete an Agent Fabric resource. :example: AgentFabrics_Delete - az agentmesh fabric delete --resource-group rgnetworksecurity --name testAIFabric + az agentfabric delete --resource-group rgnetworksecurity --name testAIFabric """ _aaz_info = { diff --git a/src/agentmesh/azext_agentmesh/aaz/latest/agentmesh/fabric/_list.py b/src/agentfabric/azext_agentfabric/aaz/latest/agentfabric/_list.py similarity index 98% rename from src/agentmesh/azext_agentmesh/aaz/latest/agentmesh/fabric/_list.py rename to src/agentfabric/azext_agentfabric/aaz/latest/agentfabric/_list.py index 9f58b5b21d2..282d8b8fd62 100644 --- a/src/agentmesh/azext_agentmesh/aaz/latest/agentmesh/fabric/_list.py +++ b/src/agentfabric/azext_agentfabric/aaz/latest/agentfabric/_list.py @@ -12,16 +12,16 @@ @register_command( - "agentmesh fabric list", + "agentfabric list", ) class List(AAZCommand): - """List Agent Mesh fabrics + """List Agent Fabric resources. :example: AgentFabrics_ListBySubscription - az agentmesh fabric list + az agentfabric list :example: AgentFabrics_ListByResourceGroup - az agentmesh fabric list --resource-group rgnetworksecurity + az agentfabric list --resource-group rgnetworksecurity """ _aaz_info = { diff --git a/src/agentmesh/azext_agentmesh/aaz/latest/agentmesh/fabric/_show.py b/src/agentfabric/azext_agentfabric/aaz/latest/agentfabric/_show.py similarity index 97% rename from src/agentmesh/azext_agentmesh/aaz/latest/agentmesh/fabric/_show.py rename to src/agentfabric/azext_agentfabric/aaz/latest/agentfabric/_show.py index 0956cef9aa7..294c0ebeda6 100644 --- a/src/agentmesh/azext_agentmesh/aaz/latest/agentmesh/fabric/_show.py +++ b/src/agentfabric/azext_agentfabric/aaz/latest/agentfabric/_show.py @@ -12,13 +12,13 @@ @register_command( - "agentmesh fabric show", + "agentfabric show", ) class Show(AAZCommand): - """Get an Agent Mesh fabric + """Show an Agent Fabric resource. :example: AgentFabrics_Get - az agentmesh fabric show --resource-group rgnetworksecurity --name testAIFabric + az agentfabric show --resource-group rgnetworksecurity --name testAIFabric """ _aaz_info = { diff --git a/src/agentmesh/azext_agentmesh/aaz/latest/agentmesh/fabric/_update.py b/src/agentfabric/azext_agentfabric/aaz/latest/agentfabric/_update.py similarity index 97% rename from src/agentmesh/azext_agentmesh/aaz/latest/agentmesh/fabric/_update.py rename to src/agentfabric/azext_agentfabric/aaz/latest/agentfabric/_update.py index cfc6bde9e83..abd7b5a41a8 100644 --- a/src/agentmesh/azext_agentmesh/aaz/latest/agentmesh/fabric/_update.py +++ b/src/agentfabric/azext_agentfabric/aaz/latest/agentfabric/_update.py @@ -12,13 +12,13 @@ @register_command( - "agentmesh fabric update", + "agentfabric update", ) class Update(AAZCommand): - """Update an Agent Mesh fabric's tags + """Update an Agent Fabric resource. :example: AgentFabrics_Update - az agentmesh fabric update --resource-group rgnetworksecurity --name testAIFabric --tags "{env:production}" + az agentfabric update --resource-group rgnetworksecurity --name testAIFabric --tags "{env:production}" """ _aaz_info = { diff --git a/src/agentmesh/azext_agentmesh/aaz/latest/agentmesh/fabric/_wait.py b/src/agentfabric/azext_agentfabric/aaz/latest/agentfabric/_wait.py similarity index 99% rename from src/agentmesh/azext_agentmesh/aaz/latest/agentmesh/fabric/_wait.py rename to src/agentfabric/azext_agentfabric/aaz/latest/agentfabric/_wait.py index 3e21749e3e0..4fce0f83dc9 100644 --- a/src/agentmesh/azext_agentmesh/aaz/latest/agentmesh/fabric/_wait.py +++ b/src/agentfabric/azext_agentfabric/aaz/latest/agentfabric/_wait.py @@ -12,7 +12,7 @@ @register_command( - "agentmesh fabric wait", + "agentfabric wait", ) class Wait(AAZWaitCommand): """Place the CLI in a waiting state until a condition is met. diff --git a/src/agentmesh/azext_agentmesh/aaz/latest/agentmesh/__cmd_group.py b/src/agentfabric/azext_agentfabric/aaz/latest/agentfabric/member/__cmd_group.py similarity index 82% rename from src/agentmesh/azext_agentmesh/aaz/latest/agentmesh/__cmd_group.py rename to src/agentfabric/azext_agentfabric/aaz/latest/agentfabric/member/__cmd_group.py index c67bf0e3291..bc7e73f981a 100644 --- a/src/agentmesh/azext_agentmesh/aaz/latest/agentmesh/__cmd_group.py +++ b/src/agentfabric/azext_agentfabric/aaz/latest/agentfabric/member/__cmd_group.py @@ -12,10 +12,10 @@ @register_command_group( - "agentmesh", + "agentfabric member", ) class __CMDGroup(AAZCommandGroup): - """Manage Azure Agent Mesh resources. + """Manage members that are children of an Agent Fabric. The parent Fabric name is required. """ pass diff --git a/src/agentmesh/azext_agentmesh/aaz/latest/agentmesh/fabric/member/__init__.py b/src/agentfabric/azext_agentfabric/aaz/latest/agentfabric/member/__init__.py similarity index 100% rename from src/agentmesh/azext_agentmesh/aaz/latest/agentmesh/fabric/member/__init__.py rename to src/agentfabric/azext_agentfabric/aaz/latest/agentfabric/member/__init__.py diff --git a/src/agentmesh/azext_agentmesh/aaz/latest/agentmesh/fabric/member/_create.py b/src/agentfabric/azext_agentfabric/aaz/latest/agentfabric/member/_create.py similarity index 95% rename from src/agentmesh/azext_agentmesh/aaz/latest/agentmesh/fabric/member/_create.py rename to src/agentfabric/azext_agentfabric/aaz/latest/agentfabric/member/_create.py index 132225126a9..c6b68612c49 100644 --- a/src/agentmesh/azext_agentmesh/aaz/latest/agentmesh/fabric/member/_create.py +++ b/src/agentfabric/azext_agentfabric/aaz/latest/agentfabric/member/_create.py @@ -12,16 +12,16 @@ @register_command( - "agentmesh fabric member create", + "agentfabric member create", ) class Create(AAZCommand): - """Create a member in an Agent Mesh fabric + """Create a member resource as a child of an Agent Fabric. The parent Fabric name is required. :example: Members_CreateOrUpdate - az agentmesh fabric member create --resource-group rgnetworksecurity --fabric-name testAIFabric --member-name testMember --location eastus --workload "{aci:{resource-id:/subscriptions/11809CA1-E126-4017-945E-AA795CD5C5A9/resourceGroups/rgnetworksecurity/providers/Microsoft.ContainerInstance/containerGroups/testContainerGroup}}" + az agentfabric member create --resource-group rgnetworksecurity --fabric-name testAIFabric --member-name testMember --location eastus --workload "{aci:{resource-id:/subscriptions/11809CA1-E126-4017-945E-AA795CD5C5A9/resourceGroups/rgnetworksecurity/providers/Microsoft.ContainerInstance/containerGroups/testContainerGroup}}" :example: Members_CreateOrUpdate_AgentFabricSandbox - az agentmesh fabric member create --resource-group rgnetworksecurity --fabric-name testAIFabric --member-name sandboxMember --location eastus --workload "{agent-fabric-sandbox:{image:{uri:'contoso.azurecr.io/agents/sandbox:1.0.0',digest:'sha256:2c26b46b68ffc68ff99b453c1d30413413422d706483bfa0f98a5e886266e7ae',pull-policy:IfNotPresent},resources:{cpu:2,memory:4Gi,disk:20Gi},agent-identity:{tenant-id:72f988bf-86f1-41af-91ab-2d7cd011db47,agent-id:aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee},endpoints:[{name:http,port:8080}],domain:sandbox-member.testaifabric.contoso.com}}" + az agentfabric member create --resource-group rgnetworksecurity --fabric-name testAIFabric --member-name sandboxMember --location eastus --workload "{agent-fabric-sandbox:{image:{uri:'contoso.azurecr.io/agents/sandbox:1.0.0',digest:'sha256:2c26b46b68ffc68ff99b453c1d30413413422d706483bfa0f98a5e886266e7ae',pull-policy:IfNotPresent},resources:{cpu:2,memory:4Gi,disk:20Gi},agent-identity:{tenant-id:72f988bf-86f1-41af-91ab-2d7cd011db47,agent-id:aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee},endpoints:[{name:http,port:8080}],domain:sandbox-member.testaifabric.contoso.com}}" """ _aaz_info = { diff --git a/src/agentmesh/azext_agentmesh/aaz/latest/agentmesh/fabric/member/_delete.py b/src/agentfabric/azext_agentfabric/aaz/latest/agentfabric/member/_delete.py similarity index 95% rename from src/agentmesh/azext_agentmesh/aaz/latest/agentmesh/fabric/member/_delete.py rename to src/agentfabric/azext_agentfabric/aaz/latest/agentfabric/member/_delete.py index 49302597e98..21d09dcce01 100644 --- a/src/agentmesh/azext_agentmesh/aaz/latest/agentmesh/fabric/member/_delete.py +++ b/src/agentfabric/azext_agentfabric/aaz/latest/agentfabric/member/_delete.py @@ -12,14 +12,14 @@ @register_command( - "agentmesh fabric member delete", + "agentfabric member delete", confirmation="Are you sure you want to perform this operation?", ) class Delete(AAZCommand): - """Delete a member from an Agent Mesh fabric + """Delete a member resource that is a child of an Agent Fabric. The parent Fabric name is required. :example: Members_Delete - az agentmesh fabric member delete --resource-group rgnetworksecurity --fabric-name testAIFabric --member-name testMember + az agentfabric member delete --resource-group rgnetworksecurity --fabric-name testAIFabric --member-name testMember """ _aaz_info = { diff --git a/src/agentmesh/azext_agentmesh/aaz/latest/agentmesh/fabric/member/_list.py b/src/agentfabric/azext_agentfabric/aaz/latest/agentfabric/member/_list.py similarity index 97% rename from src/agentmesh/azext_agentmesh/aaz/latest/agentmesh/fabric/member/_list.py rename to src/agentfabric/azext_agentfabric/aaz/latest/agentfabric/member/_list.py index 7839c3a8345..45ca8a9d05d 100644 --- a/src/agentmesh/azext_agentmesh/aaz/latest/agentmesh/fabric/member/_list.py +++ b/src/agentfabric/azext_agentfabric/aaz/latest/agentfabric/member/_list.py @@ -12,13 +12,13 @@ @register_command( - "agentmesh fabric member list", + "agentfabric member list", ) class List(AAZCommand): - """List members in an Agent Mesh fabric + """List member resources that are children of an Agent Fabric. The parent Fabric name is required. :example: Members_ListByParent - az agentmesh fabric member list --resource-group rgnetworksecurity --fabric-name testAIFabric + az agentfabric member list --resource-group rgnetworksecurity --fabric-name testAIFabric """ _aaz_info = { diff --git a/src/agentmesh/azext_agentmesh/aaz/latest/agentmesh/fabric/member/_show.py b/src/agentfabric/azext_agentfabric/aaz/latest/agentfabric/member/_show.py similarity index 97% rename from src/agentmesh/azext_agentmesh/aaz/latest/agentmesh/fabric/member/_show.py rename to src/agentfabric/azext_agentfabric/aaz/latest/agentfabric/member/_show.py index b8be0d21474..2ffc848ada2 100644 --- a/src/agentmesh/azext_agentmesh/aaz/latest/agentmesh/fabric/member/_show.py +++ b/src/agentfabric/azext_agentfabric/aaz/latest/agentfabric/member/_show.py @@ -12,13 +12,13 @@ @register_command( - "agentmesh fabric member show", + "agentfabric member show", ) class Show(AAZCommand): - """Get a member in an Agent Mesh fabric + """Show a member resource that is a child of an Agent Fabric. The parent Fabric name is required. :example: Members_Get - az agentmesh fabric member show --resource-group rgnetworksecurity --fabric-name testAIFabric --member-name testMember + az agentfabric member show --resource-group rgnetworksecurity --fabric-name testAIFabric --member-name testMember """ _aaz_info = { diff --git a/src/agentmesh/azext_agentmesh/aaz/latest/agentmesh/fabric/member/_update.py b/src/agentfabric/azext_agentfabric/aaz/latest/agentfabric/member/_update.py similarity index 97% rename from src/agentmesh/azext_agentmesh/aaz/latest/agentmesh/fabric/member/_update.py rename to src/agentfabric/azext_agentfabric/aaz/latest/agentfabric/member/_update.py index ca7deac0548..51760007627 100644 --- a/src/agentmesh/azext_agentmesh/aaz/latest/agentmesh/fabric/member/_update.py +++ b/src/agentfabric/azext_agentfabric/aaz/latest/agentfabric/member/_update.py @@ -12,13 +12,13 @@ @register_command( - "agentmesh fabric member update", + "agentfabric member update", ) class Update(AAZCommand): - """Update an Agent Mesh fabric member's tags + """Update a member resource that is a child of an Agent Fabric. The parent Fabric name is required. :example: Members_Update - az agentmesh fabric member update --resource-group rgnetworksecurity --fabric-name testAIFabric --member-name testMember --tags "{environment:production}" + az agentfabric member update --resource-group rgnetworksecurity --fabric-name testAIFabric --member-name testMember --tags "{environment:production}" """ _aaz_info = { diff --git a/src/agentmesh/azext_agentmesh/aaz/latest/agentmesh/fabric/member/_wait.py b/src/agentfabric/azext_agentfabric/aaz/latest/agentfabric/member/_wait.py similarity index 99% rename from src/agentmesh/azext_agentmesh/aaz/latest/agentmesh/fabric/member/_wait.py rename to src/agentfabric/azext_agentfabric/aaz/latest/agentfabric/member/_wait.py index 21cb09dd8a0..f48d23b60e7 100644 --- a/src/agentmesh/azext_agentmesh/aaz/latest/agentmesh/fabric/member/_wait.py +++ b/src/agentfabric/azext_agentfabric/aaz/latest/agentfabric/member/_wait.py @@ -12,7 +12,7 @@ @register_command( - "agentmesh fabric member wait", + "agentfabric member wait", ) class Wait(AAZWaitCommand): """Place the CLI in a waiting state until a condition is met. diff --git a/src/agentmesh/azext_agentmesh/aaz/latest/agentmesh/fabric/__cmd_group.py b/src/agentfabric/azext_agentfabric/aaz/latest/agentfabric/policy_group/__cmd_group.py similarity index 75% rename from src/agentmesh/azext_agentmesh/aaz/latest/agentmesh/fabric/__cmd_group.py rename to src/agentfabric/azext_agentfabric/aaz/latest/agentfabric/policy_group/__cmd_group.py index b8eeff1ab7c..b7398d921a9 100644 --- a/src/agentmesh/azext_agentmesh/aaz/latest/agentmesh/fabric/__cmd_group.py +++ b/src/agentfabric/azext_agentfabric/aaz/latest/agentfabric/policy_group/__cmd_group.py @@ -12,10 +12,10 @@ @register_command_group( - "agentmesh fabric", + "agentfabric policy-group", ) class __CMDGroup(AAZCommandGroup): - """Manage Agent Mesh fabrics. + """Manage independent resource-group-scoped Microsoft.NetworkSecurity Policy Group peer resources. Policy Groups are not children of an Agent Fabric. """ pass diff --git a/src/agentmesh/azext_agentmesh/aaz/latest/agentmesh/policy_group/__init__.py b/src/agentfabric/azext_agentfabric/aaz/latest/agentfabric/policy_group/__init__.py similarity index 100% rename from src/agentmesh/azext_agentmesh/aaz/latest/agentmesh/policy_group/__init__.py rename to src/agentfabric/azext_agentfabric/aaz/latest/agentfabric/policy_group/__init__.py diff --git a/src/agentmesh/azext_agentmesh/aaz/latest/agentmesh/policy_group/_create.py b/src/agentfabric/azext_agentfabric/aaz/latest/agentfabric/policy_group/_create.py similarity index 95% rename from src/agentmesh/azext_agentmesh/aaz/latest/agentmesh/policy_group/_create.py rename to src/agentfabric/azext_agentfabric/aaz/latest/agentfabric/policy_group/_create.py index 0a5eb2bfbdb..78d6c837899 100644 --- a/src/agentmesh/azext_agentmesh/aaz/latest/agentmesh/policy_group/_create.py +++ b/src/agentfabric/azext_agentfabric/aaz/latest/agentfabric/policy_group/_create.py @@ -12,25 +12,25 @@ @register_command( - "agentmesh policy-group create", + "agentfabric policy-group create", ) class Create(AAZCommand): - """Create an Agent Mesh policy group + """Create an independent resource-group-scoped Microsoft.NetworkSecurity Policy Group resource. Policy Groups are not children of an Agent Fabric. :example: PolicyGroups_CreateOrUpdate - az agentmesh policy-group create --resource-group rgnetworksecurity --name testPolicyGroup --location eastus --tags "{env:test}" --display-name "Test Policy Group" --description "A policy group for testing" --priority 100 --network-security-policies "[{fqdn-filtering:{name:allowOutbound,priority:10,direction:Outbound,ports:[443,80],source:{workload-id-patterns:{patterns:[workload1,workload2]}},destination:{fqdns:{fqdns:[example.com,contoso.com]}}}}]" + az agentfabric policy-group create --resource-group rgnetworksecurity --name testPolicyGroup --location eastus --tags "{env:test}" --display-name "Test Policy Group" --description "A policy group for testing" --priority 100 --network-security-policies "[{fqdn-filtering:{name:allowOutbound,priority:10,direction:Outbound,ports:[443,80],source:{workload-id-patterns:{patterns:[workload1,workload2]}},destination:{fqdns:{fqdns:[example.com,contoso.com]}}}}]" :example: PolicyGroups_CreateOrUpdate_ContentInspection - az agentmesh policy-group create --resource-group rgnetworksecurity --name contentInspectionGroup --location eastus --tags "{env:test}" --display-name "Content Inspection Policy Group" --description "A policy group demonstrating content inspection policies" --priority 100 --network-security-policies "[{content-inspection:{source:{workload-id-patterns:{patterns:['spiffe://contoso.com/ns/default/sa/*']}},prompt-injection-protection:{sensitivity:High,prompt-locations:['$.messages[*].content','$.input'],response-locations:['$.choices[*].message.content'],on-detection:BlockAndAlert}}}]" + az agentfabric policy-group create --resource-group rgnetworksecurity --name contentInspectionGroup --location eastus --tags "{env:test}" --display-name "Content Inspection Policy Group" --description "A policy group demonstrating content inspection policies" --priority 100 --network-security-policies "[{content-inspection:{source:{workload-id-patterns:{patterns:['spiffe://contoso.com/ns/default/sa/*']}},prompt-injection-protection:{sensitivity:High,prompt-locations:['$.messages[*].content','$.input'],response-locations:['$.choices[*].message.content'],on-detection:BlockAndAlert}}}]" :example: PolicyGroups_CreateOrUpdate_Mcp - az agentmesh policy-group create --resource-group rgnetworksecurity --name mcpPolicyGroup --location eastus --tags "{env:test}" --display-name "MCP Policy Group" --description "A policy group demonstrating MCP server policies" --priority 100 --network-security-policies "[{mcp:{default-action:Deny,source:{workload-id-patterns:{patterns:['spiffe://contoso.com/ns/default/sa/*']}},destination:{workload-id-patterns:{patterns:['spiffe://contoso.com/ns/mcp/sa/*']}},rules:[{action:Allow,tools:[search,fetch]},{action:Deny,tools:[deleteFile]}]}},{mcp:{default-action:Allow,source:{workload-id-patterns:{patterns:['spiffe://contoso.com/ns/default/sa/*']}},destination:{fqdns:{fqdns:[mcp.contoso.com]}},rules:[{action:Deny,tools:[executeShell,writeFile]}]}},{mcp:{default-action:Deny,source:{workload-id-patterns:{patterns:['spiffe://contoso.com/ns/default/sa/*']}},destination:{address-prefixes:{prefixes:[10.0.0.0/24]}},rules:[{action:Allow,tools:[listResources,readResource]}]}}]" + az agentfabric policy-group create --resource-group rgnetworksecurity --name mcpPolicyGroup --location eastus --tags "{env:test}" --display-name "MCP Policy Group" --description "A policy group demonstrating MCP server policies" --priority 100 --network-security-policies "[{mcp:{default-action:Deny,source:{workload-id-patterns:{patterns:['spiffe://contoso.com/ns/default/sa/*']}},destination:{workload-id-patterns:{patterns:['spiffe://contoso.com/ns/mcp/sa/*']}},rules:[{action:Allow,tools:[search,fetch]},{action:Deny,tools:[deleteFile]}]}},{mcp:{default-action:Allow,source:{workload-id-patterns:{patterns:['spiffe://contoso.com/ns/default/sa/*']}},destination:{fqdns:{fqdns:[mcp.contoso.com]}},rules:[{action:Deny,tools:[executeShell,writeFile]}]}},{mcp:{default-action:Deny,source:{workload-id-patterns:{patterns:['spiffe://contoso.com/ns/default/sa/*']}},destination:{address-prefixes:{prefixes:[10.0.0.0/24]}},rules:[{action:Allow,tools:[listResources,readResource]}]}}]" :example: PolicyGroups_CreateOrUpdate_TlsInspection - az agentmesh policy-group create --resource-group rgnetworksecurity --name tlsInspectionPolicyGroup --location eastus --tags "{env:test}" --display-name "TLS Inspection Policy Group" --description "A policy group demonstrating TLS inspection policies" --priority 100 --network-security-policies "[{tls-inspection:{source:{workload-id-patterns:{patterns:['spiffe://contoso.com/ns/default/sa/*']}},certificate:{azure-managed-ca:{}}}}]" + az agentfabric policy-group create --resource-group rgnetworksecurity --name tlsInspectionPolicyGroup --location eastus --tags "{env:test}" --display-name "TLS Inspection Policy Group" --description "A policy group demonstrating TLS inspection policies" --priority 100 --network-security-policies "[{tls-inspection:{source:{workload-id-patterns:{patterns:['spiffe://contoso.com/ns/default/sa/*']}},certificate:{azure-managed-ca:{}}}}]" :example: PolicyGroups_CreateOrUpdate_UrlFiltering - az agentmesh policy-group create --resource-group rgnetworksecurity --name urlFilteringPolicyGroup --location eastus --tags "{env:test}" --display-name "URL Filtering Policy Group" --description "A policy group demonstrating URL filtering" --priority 100 --network-security-policies "[{url-filtering:{default-action:Deny,source:{address-prefixes:{prefixes:[10.0.0.0/24]}},destination:{fqdns:{fqdns:[api.contoso.com]}},rules:[{name:allowProductApi,priority:10,hostname:api.contoso.com,method:GET,paths:['/v1/products','/v1/products/*'],action:Allow},{name:denyAdmin,priority:20,paths:['/admin/*'],action:Deny}]}}]" + az agentfabric policy-group create --resource-group rgnetworksecurity --name urlFilteringPolicyGroup --location eastus --tags "{env:test}" --display-name "URL Filtering Policy Group" --description "A policy group demonstrating URL filtering" --priority 100 --network-security-policies "[{url-filtering:{default-action:Deny,source:{address-prefixes:{prefixes:[10.0.0.0/24]}},destination:{fqdns:{fqdns:[api.contoso.com]}},rules:[{name:allowProductApi,priority:10,hostname:api.contoso.com,method:GET,paths:['/v1/products','/v1/products/*'],action:Allow},{name:denyAdmin,priority:20,paths:['/admin/*'],action:Deny}]}}]" """ _aaz_info = { diff --git a/src/agentmesh/azext_agentmesh/aaz/latest/agentmesh/policy_group/_delete.py b/src/agentfabric/azext_agentfabric/aaz/latest/agentfabric/policy_group/_delete.py similarity index 94% rename from src/agentmesh/azext_agentmesh/aaz/latest/agentmesh/policy_group/_delete.py rename to src/agentfabric/azext_agentfabric/aaz/latest/agentfabric/policy_group/_delete.py index 9eb7b495e5f..7afec806e6b 100644 --- a/src/agentmesh/azext_agentmesh/aaz/latest/agentmesh/policy_group/_delete.py +++ b/src/agentfabric/azext_agentfabric/aaz/latest/agentfabric/policy_group/_delete.py @@ -12,14 +12,14 @@ @register_command( - "agentmesh policy-group delete", + "agentfabric policy-group delete", confirmation="Are you sure you want to perform this operation?", ) class Delete(AAZCommand): - """Delete an Agent Mesh policy group + """Delete an independent resource-group-scoped Microsoft.NetworkSecurity Policy Group resource. Policy Groups are not children of an Agent Fabric. :example: PolicyGroups_Delete - az agentmesh policy-group delete --resource-group rgnetworksecurity --name testPolicyGroup + az agentfabric policy-group delete --resource-group rgnetworksecurity --name testPolicyGroup """ _aaz_info = { diff --git a/src/agentmesh/azext_agentmesh/aaz/latest/agentmesh/policy_group/_list.py b/src/agentfabric/azext_agentfabric/aaz/latest/agentfabric/policy_group/_list.py similarity index 99% rename from src/agentmesh/azext_agentmesh/aaz/latest/agentmesh/policy_group/_list.py rename to src/agentfabric/azext_agentfabric/aaz/latest/agentfabric/policy_group/_list.py index a8ade384dd0..e62d3f8d00c 100644 --- a/src/agentmesh/azext_agentmesh/aaz/latest/agentmesh/policy_group/_list.py +++ b/src/agentfabric/azext_agentfabric/aaz/latest/agentfabric/policy_group/_list.py @@ -12,16 +12,16 @@ @register_command( - "agentmesh policy-group list", + "agentfabric policy-group list", ) class List(AAZCommand): - """List Agent Mesh policy groups + """List independent resource-group-scoped Microsoft.NetworkSecurity Policy Group resources. Policy Groups are not children of an Agent Fabric. :example: PolicyGroups_ListBySubscription - az agentmesh policy-group list + az agentfabric policy-group list :example: PolicyGroups_ListByResourceGroup - az agentmesh policy-group list --resource-group rgnetworksecurity + az agentfabric policy-group list --resource-group rgnetworksecurity """ _aaz_info = { diff --git a/src/agentmesh/azext_agentmesh/aaz/latest/agentmesh/policy_group/_show.py b/src/agentfabric/azext_agentfabric/aaz/latest/agentfabric/policy_group/_show.py similarity index 98% rename from src/agentmesh/azext_agentmesh/aaz/latest/agentmesh/policy_group/_show.py rename to src/agentfabric/azext_agentfabric/aaz/latest/agentfabric/policy_group/_show.py index 6321cd317e9..1c93b534821 100644 --- a/src/agentmesh/azext_agentmesh/aaz/latest/agentmesh/policy_group/_show.py +++ b/src/agentfabric/azext_agentfabric/aaz/latest/agentfabric/policy_group/_show.py @@ -12,13 +12,13 @@ @register_command( - "agentmesh policy-group show", + "agentfabric policy-group show", ) class Show(AAZCommand): - """Get an Agent Mesh policy group + """Show an independent resource-group-scoped Microsoft.NetworkSecurity Policy Group resource. Policy Groups are not children of an Agent Fabric. :example: PolicyGroups_Get - az agentmesh policy-group show --resource-group rgnetworksecurity --name testPolicyGroup + az agentfabric policy-group show --resource-group rgnetworksecurity --name testPolicyGroup """ _aaz_info = { diff --git a/src/agentmesh/azext_agentmesh/aaz/latest/agentmesh/policy_group/_update.py b/src/agentfabric/azext_agentfabric/aaz/latest/agentfabric/policy_group/_update.py similarity index 98% rename from src/agentmesh/azext_agentmesh/aaz/latest/agentmesh/policy_group/_update.py rename to src/agentfabric/azext_agentfabric/aaz/latest/agentfabric/policy_group/_update.py index 1a2ff9bc593..185d406be5b 100644 --- a/src/agentmesh/azext_agentmesh/aaz/latest/agentmesh/policy_group/_update.py +++ b/src/agentfabric/azext_agentfabric/aaz/latest/agentfabric/policy_group/_update.py @@ -12,13 +12,13 @@ @register_command( - "agentmesh policy-group update", + "agentfabric policy-group update", ) class Update(AAZCommand): - """Update an Agent Mesh policy group's tags + """Update an independent resource-group-scoped Microsoft.NetworkSecurity Policy Group resource. Policy Groups are not children of an Agent Fabric. :example: PolicyGroups_Update - az agentmesh policy-group update --resource-group rgnetworksecurity --name testPolicyGroup --tags "{env:production}" + az agentfabric policy-group update --resource-group rgnetworksecurity --name testPolicyGroup --tags "{env:production}" """ _aaz_info = { diff --git a/src/agentmesh/azext_agentmesh/aaz/latest/agentmesh/policy_group/_wait.py b/src/agentfabric/azext_agentfabric/aaz/latest/agentfabric/policy_group/_wait.py similarity index 99% rename from src/agentmesh/azext_agentmesh/aaz/latest/agentmesh/policy_group/_wait.py rename to src/agentfabric/azext_agentfabric/aaz/latest/agentfabric/policy_group/_wait.py index b816d17a0c5..10970b8c85a 100644 --- a/src/agentmesh/azext_agentmesh/aaz/latest/agentmesh/policy_group/_wait.py +++ b/src/agentfabric/azext_agentfabric/aaz/latest/agentfabric/policy_group/_wait.py @@ -12,7 +12,7 @@ @register_command( - "agentmesh policy-group wait", + "agentfabric policy-group wait", ) class Wait(AAZWaitCommand): """Place the CLI in a waiting state until a condition is met. diff --git a/src/agentmesh/azext_agentmesh/azext_metadata.json b/src/agentfabric/azext_agentfabric/azext_metadata.json similarity index 100% rename from src/agentmesh/azext_agentmesh/azext_metadata.json rename to src/agentfabric/azext_agentfabric/azext_metadata.json diff --git a/src/agentmesh/azext_agentmesh/commands.py b/src/agentfabric/azext_agentfabric/commands.py similarity index 100% rename from src/agentmesh/azext_agentmesh/commands.py rename to src/agentfabric/azext_agentfabric/commands.py diff --git a/src/agentmesh/azext_agentmesh/custom.py b/src/agentfabric/azext_agentfabric/custom.py similarity index 100% rename from src/agentmesh/azext_agentmesh/custom.py rename to src/agentfabric/azext_agentfabric/custom.py diff --git a/src/agentmesh/azext_agentmesh/tests/__init__.py b/src/agentfabric/azext_agentfabric/tests/__init__.py similarity index 100% rename from src/agentmesh/azext_agentmesh/tests/__init__.py rename to src/agentfabric/azext_agentfabric/tests/__init__.py diff --git a/src/agentmesh/azext_agentmesh/tests/latest/__init__.py b/src/agentfabric/azext_agentfabric/tests/latest/__init__.py similarity index 100% rename from src/agentmesh/azext_agentmesh/tests/latest/__init__.py rename to src/agentfabric/azext_agentfabric/tests/latest/__init__.py diff --git a/src/agentfabric/azext_agentfabric/tests/latest/test_agentfabric.py b/src/agentfabric/azext_agentfabric/tests/latest/test_agentfabric.py new file mode 100644 index 00000000000..d6b51ba482e --- /dev/null +++ b/src/agentfabric/azext_agentfabric/tests/latest/test_agentfabric.py @@ -0,0 +1,209 @@ +# -------------------------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# +# Code generated by aaz-dev-tools +# -------------------------------------------------------------------------------------------- + +import importlib +import shlex +import unittest +from unittest.mock import MagicMock + +from azure.cli.testsdk import ScenarioTest + + +COMMANDS = ( + ("agentfabric create", "azext_agentfabric.aaz.latest.agentfabric._create", "Create"), + ("agentfabric show", "azext_agentfabric.aaz.latest.agentfabric._show", "Show"), + ("agentfabric list", "azext_agentfabric.aaz.latest.agentfabric._list", "List"), + ("agentfabric update", "azext_agentfabric.aaz.latest.agentfabric._update", "Update"), + ("agentfabric delete", "azext_agentfabric.aaz.latest.agentfabric._delete", "Delete"), + ( + "agentfabric member create", + "azext_agentfabric.aaz.latest.agentfabric.member._create", + "Create", + ), + ( + "agentfabric member show", + "azext_agentfabric.aaz.latest.agentfabric.member._show", + "Show", + ), + ( + "agentfabric member list", + "azext_agentfabric.aaz.latest.agentfabric.member._list", + "List", + ), + ( + "agentfabric member update", + "azext_agentfabric.aaz.latest.agentfabric.member._update", + "Update", + ), + ( + "agentfabric member delete", + "azext_agentfabric.aaz.latest.agentfabric.member._delete", + "Delete", + ), + ( + "agentfabric policy-group create", + "azext_agentfabric.aaz.latest.agentfabric.policy_group._create", + "Create", + ), + ( + "agentfabric policy-group show", + "azext_agentfabric.aaz.latest.agentfabric.policy_group._show", + "Show", + ), + ( + "agentfabric policy-group list", + "azext_agentfabric.aaz.latest.agentfabric.policy_group._list", + "List", + ), + ( + "agentfabric policy-group update", + "azext_agentfabric.aaz.latest.agentfabric.policy_group._update", + "Update", + ), + ( + "agentfabric policy-group delete", + "azext_agentfabric.aaz.latest.agentfabric.policy_group._delete", + "Delete", + ), +) + +HELP_ONLY_COMMANDS = ( + "agentfabric wait", + "agentfabric member wait", + "agentfabric policy-group wait", +) + +REQUEST_SHAPES = ( + ( + "azext_agentfabric.aaz.latest.agentfabric._create", + "Create", + "AgentFabricsCreateOrUpdate", + "PUT", + "/Microsoft.NetworkSecurity/agentFabrics/{agentFabricName}", + ), + ( + "azext_agentfabric.aaz.latest.agentfabric._update", + "Update", + "AgentFabricsUpdate", + "PATCH", + "/Microsoft.NetworkSecurity/agentFabrics/{agentFabricName}", + ), + ( + "azext_agentfabric.aaz.latest.agentfabric._delete", + "Delete", + "AgentFabricsDelete", + "DELETE", + "/Microsoft.NetworkSecurity/agentFabrics/{agentFabricName}", + ), + ( + "azext_agentfabric.aaz.latest.agentfabric.member._create", + "Create", + "MembersCreateOrUpdate", + "PUT", + "/agentFabrics/{agentFabricName}/members/{memberName}", + ), + ( + "azext_agentfabric.aaz.latest.agentfabric.member._update", + "Update", + "MembersUpdate", + "PATCH", + "/agentFabrics/{agentFabricName}/members/{memberName}", + ), + ( + "azext_agentfabric.aaz.latest.agentfabric.member._delete", + "Delete", + "MembersDelete", + "DELETE", + "/agentFabrics/{agentFabricName}/members/{memberName}", + ), + ( + "azext_agentfabric.aaz.latest.agentfabric.policy_group._create", + "Create", + "PolicyGroupsCreateOrUpdate", + "PUT", + "/Microsoft.NetworkSecurity/policyGroups/{policyGroupName}", + ), + ( + "azext_agentfabric.aaz.latest.agentfabric.policy_group._update", + "Update", + "PolicyGroupsUpdate", + "PATCH", + "/Microsoft.NetworkSecurity/policyGroups/{policyGroupName}", + ), + ( + "azext_agentfabric.aaz.latest.agentfabric.policy_group._delete", + "Delete", + "PolicyGroupsDelete", + "DELETE", + "/Microsoft.NetworkSecurity/policyGroups/{policyGroupName}", + ), +) + + +def _examples(command_class): + doc = command_class.__doc__ or "" + return [ + line.strip() + for line in doc.splitlines() + if line.strip().startswith("az agentfabric ") + ] + + +class AgentfabricScenario(ScenarioTest): + + def test_agentfabric_command_help(self): + commands = ( + "agentfabric", + "agentfabric member", + "agentfabric policy-group", + *(command for command, _, _ in COMMANDS), + *HELP_ONLY_COMMANDS, + ) + for command in commands: + try: + self.cmd(f"az {command} --help") + except SystemExit as ex: + self.assertEqual(ex.code, 0, f"{command} help failed") + + def test_agentfabric_examples_parse(self): + for command, module_name, class_name in COMMANDS: + command_class = getattr(importlib.import_module(module_name), class_name) + examples = _examples(command_class) + self.assertTrue(examples, command) + for example in examples: + tokens = shlex.split(example) + self.assertEqual(tokens[:2], ["az", "agentfabric"], example) + escaped_example = example.replace("{", "{{").replace("}", "}}") + try: + self.cmd(f"{escaped_example} --help") + except SystemExit as ex: + self.assertEqual(ex.code, 0, f"Example failed to parse: {example}") + + +class AgentfabricGeneratedCommandTest(unittest.TestCase): + + def test_all_commands_have_generated_examples(self): + for command, module_name, class_name in COMMANDS: + command_class = getattr(importlib.import_module(module_name), class_name) + self.assertIn(":example:", command_class.__doc__, command) + self.assertTrue( + any(example.startswith(f"az {command}") for example in _examples(command_class)), + command, + ) + + def test_lro_request_shapes_and_resource_urls(self): + for module_name, class_name, operation_name, method, url_suffix in REQUEST_SHAPES: + command_class = getattr(importlib.import_module(module_name), class_name) + operation_class = getattr(command_class, operation_name) + operation = operation_class(ctx=MagicMock()) + operation.client.format_url.side_effect = lambda url, **_: url + self.assertEqual(operation.method, method) + self.assertEqual( + operation.query_parameters, + {"api-version": "2026-07-21-preview"}, + ) + self.assertTrue(operation.url.endswith(url_suffix), operation.url) diff --git a/src/agentmesh/linter_exclusions.yml b/src/agentfabric/linter_exclusions.yml similarity index 75% rename from src/agentmesh/linter_exclusions.yml rename to src/agentfabric/linter_exclusions.yml index 245f8957d2b..5f69784db9e 100644 --- a/src/agentmesh/linter_exclusions.yml +++ b/src/agentfabric/linter_exclusions.yml @@ -1,4 +1,4 @@ -agentmesh policy-group create: +agentfabric policy-group create: parameters: network_security_policies: rule_exclusions: diff --git a/src/agentmesh/setup.cfg b/src/agentfabric/setup.cfg similarity index 100% rename from src/agentmesh/setup.cfg rename to src/agentfabric/setup.cfg diff --git a/src/agentmesh/setup.py b/src/agentfabric/setup.py similarity index 90% rename from src/agentmesh/setup.py rename to src/agentfabric/setup.py index 48c1f55ba8d..0d7b199be59 100644 --- a/src/agentmesh/setup.py +++ b/src/agentfabric/setup.py @@ -36,16 +36,16 @@ HISTORY = f.read() setup( - name='agentmesh', + name='agentfabric', version=VERSION, - description='Microsoft Azure Command-Line Tools Agent Mesh Extension.', + description='Manage Azure Agent Fabric resources.', long_description=README + '\n\n' + HISTORY, license='MIT', author='Microsoft Corporation', author_email='azpycli@microsoft.com', - url='https://github.com/Azure/azure-cli-extensions/tree/main/src/agentmesh', + url='https://github.com/Azure/azure-cli-extensions/tree/main/src/agentfabric', classifiers=CLASSIFIERS, packages=find_packages(exclude=["tests"]), - package_data={'azext_agentmesh': ['azext_metadata.json']}, + package_data={'azext_agentfabric': ['azext_metadata.json']}, install_requires=DEPENDENCIES ) diff --git a/src/agentmesh/HISTORY.rst b/src/agentmesh/HISTORY.rst deleted file mode 100644 index 10c3d4b501d..00000000000 --- a/src/agentmesh/HISTORY.rst +++ /dev/null @@ -1,9 +0,0 @@ -.. :changelog: - -Release History -=============== - -1.0.0b1 -++++++ -* Initial preview release for Azure Agent Mesh using API version ``2026-07-21-preview``. -* Add fabric, fabric member, and policy group create, show, list, update, and delete commands. \ No newline at end of file diff --git a/src/agentmesh/README.md b/src/agentmesh/README.md deleted file mode 100644 index 789c5f145b4..00000000000 --- a/src/agentmesh/README.md +++ /dev/null @@ -1,70 +0,0 @@ -# Azure CLI Agent Mesh Extension - -This extension manages Azure Agent Mesh fabrics, fabric members, and policy groups. -It uses the `Microsoft.NetworkSecurity` resource provider API version -`2026-07-21-preview`. - -## Install - -```bash -az extension add --name agentmesh -``` - -## Commands - -Each resource supports `create`, `show`, `list`, `update`, and `delete`. - -```bash -az agentmesh fabric --help -az agentmesh fabric member --help -az agentmesh policy-group --help -``` - -### Fabrics - -```bash -az agentmesh fabric create \ - --resource-group myResourceGroup \ - --name myFabric \ - --location eastus \ - --trust-domain contoso.agentfabric - -az agentmesh fabric update \ - --resource-group myResourceGroup \ - --name myFabric \ - --tags environment=production - -az agentmesh fabric list --resource-group myResourceGroup -``` - -### Fabric members - -```bash -az agentmesh fabric member create \ - --resource-group myResourceGroup \ - --fabric-name myFabric \ - --member-name myMember \ - --location eastus \ - --workload "{aci:{resource-id:/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/myResourceGroup/providers/Microsoft.ContainerInstance/containerGroups/myContainerGroup}}" - -az agentmesh fabric member show \ - --resource-group myResourceGroup \ - --fabric-name myFabric \ - --member-name myMember -``` - -### Policy groups - -```bash -az agentmesh policy-group create \ - --resource-group myResourceGroup \ - --name myPolicyGroup \ - --location eastus \ - --display-name "My policy group" \ - --priority 100 - -az agentmesh policy-group list --resource-group myResourceGroup -``` - -Long-running create, update, and delete operations support `--no-wait`. Use the -corresponding `wait` command to wait for provisioning to reach a target state. \ No newline at end of file diff --git a/src/agentmesh/azext_agentmesh/aaz/latest/agentmesh/__init__.py b/src/agentmesh/azext_agentmesh/aaz/latest/agentmesh/__init__.py deleted file mode 100644 index 5a9d61963d6..00000000000 --- a/src/agentmesh/azext_agentmesh/aaz/latest/agentmesh/__init__.py +++ /dev/null @@ -1,11 +0,0 @@ -# -------------------------------------------------------------------------------------------- -# Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT License. See License.txt in the project root for license information. -# -# Code generated by aaz-dev-tools -# -------------------------------------------------------------------------------------------- - -# pylint: skip-file -# flake8: noqa - -from .__cmd_group import * diff --git a/src/agentmesh/azext_agentmesh/aaz/latest/agentmesh/fabric/member/__cmd_group.py b/src/agentmesh/azext_agentmesh/aaz/latest/agentmesh/fabric/member/__cmd_group.py deleted file mode 100644 index 605104362fc..00000000000 --- a/src/agentmesh/azext_agentmesh/aaz/latest/agentmesh/fabric/member/__cmd_group.py +++ /dev/null @@ -1,23 +0,0 @@ -# -------------------------------------------------------------------------------------------- -# Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT License. See License.txt in the project root for license information. -# -# Code generated by aaz-dev-tools -# -------------------------------------------------------------------------------------------- - -# pylint: skip-file -# flake8: noqa - -from azure.cli.core.aaz import * - - -@register_command_group( - "agentmesh fabric member", -) -class __CMDGroup(AAZCommandGroup): - """Manage members of an Agent Mesh fabric. - """ - pass - - -__all__ = ["__CMDGroup"] diff --git a/src/agentmesh/azext_agentmesh/tests/latest/recordings/test_agentmesh_command_help.yaml b/src/agentmesh/azext_agentmesh/tests/latest/recordings/test_agentmesh_command_help.yaml deleted file mode 100644 index 591dc7c3b1a..00000000000 --- a/src/agentmesh/azext_agentmesh/tests/latest/recordings/test_agentmesh_command_help.yaml +++ /dev/null @@ -1,44 +0,0 @@ -interactions: -- request: - body: null - headers: - Accept: - - '*/*' - Accept-Encoding: - - gzip, deflate - Connection: - - keep-alive - User-Agent: - - python-requests/2.33.0 - method: GET - uri: https://aka.ms/azExtCmdTree - response: - body: - string: '' - headers: - cache-control: - - max-age=0, no-cache, no-store - connection: - - keep-alive - content-length: - - '0' - date: - - Tue, 15 Sep 2026 22:07:43 GMT - expires: - - Tue, 15 Sep 2026 22:07:43 GMT - location: - - https://azurecliextensionsync.blob.core.windows.net/cmd-index/extensionCommandTree.json - pragma: - - no-cache - request-context: - - appId=cid-v1:d94c0f68-64bf-4036-8409-a0e761bb7ee1 - server: - - Kestrel - strict-transport-security: - - max-age=31536000 ; includeSubDomains - x-response-cache-status: - - 'True' - status: - code: 301 - message: Moved Permanently -version: 1 diff --git a/src/agentmesh/azext_agentmesh/tests/latest/test_agentmesh.py b/src/agentmesh/azext_agentmesh/tests/latest/test_agentmesh.py deleted file mode 100644 index 8a9a42c3bc0..00000000000 --- a/src/agentmesh/azext_agentmesh/tests/latest/test_agentmesh.py +++ /dev/null @@ -1,172 +0,0 @@ -# -------------------------------------------------------------------------------------------- -# Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT License. See License.txt in the project root for license information. -# -# Code generated by aaz-dev-tools -# -------------------------------------------------------------------------------------------- - -import importlib -import unittest -from unittest.mock import MagicMock - -from azure.cli.testsdk import ScenarioTest - - -COMMANDS = ( - ("agentmesh fabric create", "azext_agentmesh.aaz.latest.agentmesh.fabric._create", "Create"), - ("agentmesh fabric show", "azext_agentmesh.aaz.latest.agentmesh.fabric._show", "Show"), - ("agentmesh fabric list", "azext_agentmesh.aaz.latest.agentmesh.fabric._list", "List"), - ("agentmesh fabric update", "azext_agentmesh.aaz.latest.agentmesh.fabric._update", "Update"), - ("agentmesh fabric delete", "azext_agentmesh.aaz.latest.agentmesh.fabric._delete", "Delete"), - ( - "agentmesh fabric member create", - "azext_agentmesh.aaz.latest.agentmesh.fabric.member._create", - "Create", - ), - ( - "agentmesh fabric member show", - "azext_agentmesh.aaz.latest.agentmesh.fabric.member._show", - "Show", - ), - ( - "agentmesh fabric member list", - "azext_agentmesh.aaz.latest.agentmesh.fabric.member._list", - "List", - ), - ( - "agentmesh fabric member update", - "azext_agentmesh.aaz.latest.agentmesh.fabric.member._update", - "Update", - ), - ( - "agentmesh fabric member delete", - "azext_agentmesh.aaz.latest.agentmesh.fabric.member._delete", - "Delete", - ), - ( - "agentmesh policy-group create", - "azext_agentmesh.aaz.latest.agentmesh.policy_group._create", - "Create", - ), - ( - "agentmesh policy-group show", - "azext_agentmesh.aaz.latest.agentmesh.policy_group._show", - "Show", - ), - ( - "agentmesh policy-group list", - "azext_agentmesh.aaz.latest.agentmesh.policy_group._list", - "List", - ), - ( - "agentmesh policy-group update", - "azext_agentmesh.aaz.latest.agentmesh.policy_group._update", - "Update", - ), - ( - "agentmesh policy-group delete", - "azext_agentmesh.aaz.latest.agentmesh.policy_group._delete", - "Delete", - ), -) - -HELP_ONLY_COMMANDS = ( - "agentmesh fabric wait", - "agentmesh fabric member wait", - "agentmesh policy-group wait", -) - -REQUEST_SHAPES = ( - ( - "azext_agentmesh.aaz.latest.agentmesh.fabric._create", - "Create", - "AgentFabricsCreateOrUpdate", - "PUT", - ), - ( - "azext_agentmesh.aaz.latest.agentmesh.fabric._update", - "Update", - "AgentFabricsUpdate", - "PATCH", - ), - ( - "azext_agentmesh.aaz.latest.agentmesh.fabric._delete", - "Delete", - "AgentFabricsDelete", - "DELETE", - ), - ( - "azext_agentmesh.aaz.latest.agentmesh.fabric.member._create", - "Create", - "MembersCreateOrUpdate", - "PUT", - ), - ( - "azext_agentmesh.aaz.latest.agentmesh.fabric.member._update", - "Update", - "MembersUpdate", - "PATCH", - ), - ( - "azext_agentmesh.aaz.latest.agentmesh.fabric.member._delete", - "Delete", - "MembersDelete", - "DELETE", - ), - ( - "azext_agentmesh.aaz.latest.agentmesh.policy_group._create", - "Create", - "PolicyGroupsCreateOrUpdate", - "PUT", - ), - ( - "azext_agentmesh.aaz.latest.agentmesh.policy_group._update", - "Update", - "PolicyGroupsUpdate", - "PATCH", - ), - ( - "azext_agentmesh.aaz.latest.agentmesh.policy_group._delete", - "Delete", - "PolicyGroupsDelete", - "DELETE", - ), -) - - -class AgentmeshScenario(ScenarioTest): - - def test_agentmesh_command_help(self): - commands = ( - "agentmesh", - "agentmesh fabric", - "agentmesh fabric member", - "agentmesh policy-group", - *(command for command, _, _ in COMMANDS), - *HELP_ONLY_COMMANDS, - ) - for command in commands: - try: - self.cmd(f"az {command} --help") - except SystemExit as ex: - self.assertEqual(ex.code, 0, f"{command} help failed") - - -class AgentmeshGeneratedCommandTest(unittest.TestCase): - - def test_all_commands_have_generated_examples(self): - for command, module_name, class_name in COMMANDS: - command_class = getattr(importlib.import_module(module_name), class_name) - self.assertIn(":example:", command_class.__doc__, command) - self.assertIn(f"az {command}", command_class.__doc__, command) - - def test_lro_request_shapes(self): - for module_name, class_name, operation_name, method in REQUEST_SHAPES: - command_class = getattr(importlib.import_module(module_name), class_name) - operation_class = getattr(command_class, operation_name) - operation = operation_class(ctx=MagicMock()) - self.assertEqual(operation.method, method) - self.assertEqual( - operation.query_parameters, - {"api-version": "2026-07-21-preview"}, - ) diff --git a/src/index.json b/src/index.json index d2cdf5f64db..0f154bd825d 100644 --- a/src/index.json +++ b/src/index.json @@ -1341,51 +1341,6 @@ "sha256Digest": "76f8a2717abd08fd23e9888c1fd1cb820c4ea618384bb5aa159712cc1b295023" } ], - "agentmesh": [ - { - "downloadUrl": "https://azcliprod.blob.core.windows.net/cli-extensions/agentmesh-1.0.0b1-py3-none-any.whl", - "filename": "agentmesh-1.0.0b1-py3-none-any.whl", - "metadata": { - "azext.isPreview": true, - "azext.minCliCoreVersion": "2.75.0", - "classifiers": [ - "Development Status :: 4 - Beta", - "Intended Audience :: Developers", - "Intended Audience :: System Administrators", - "Programming Language :: Python", - "Programming Language :: Python :: 3", - "Programming Language :: Python :: 3.9", - "Programming Language :: Python :: 3.10", - "Programming Language :: Python :: 3.11", - "Programming Language :: Python :: 3.12", - "Programming Language :: Python :: 3.13", - "License :: OSI Approved :: MIT License" - ], - "extensions": { - "python.details": { - "contacts": [ - { - "email": "azpycli@microsoft.com", - "name": "Microsoft Corporation", - "role": "author" - } - ], - "project_urls": { - "Home": "https://github.com/Azure/azure-cli-extensions/tree/main/src/agentmesh" - } - } - }, - "extras": [], - "license": "MIT", - "metadata_version": "2.4", - "name": "agentmesh", - "run_requires": [], - "summary": "Microsoft Azure Command-Line Tools Agent Mesh Extension.", - "version": "1.0.0b1" - }, - "sha256Digest": "fe82ae4d052f4cce1914ac36a5f29f531858deea567146b4b9c055104037c918" - } - ], "ai-examples": [ { "downloadUrl": "https://azcliprod.blob.core.windows.net/cli-extensions/ai_examples-0.1.0-py2.py3-none-any.whl", diff --git a/src/service_name.json b/src/service_name.json index 4d70787d3cb..006623a8062 100644 --- a/src/service_name.json +++ b/src/service_name.json @@ -25,8 +25,8 @@ "URL": "https://learn.microsoft.com/azure/frontdoor" }, { - "Command": "az agentmesh", - "AzureServiceName": "Azure Agent Mesh", + "Command": "az agentfabric", + "AzureServiceName": "Azure Agent Fabric", "URL": "" }, {