Skip to content

Fleet hub tests failing with error AttributeError: 'FleetsOperations' object has no attribute 'begin_create_or_update' #4

@audrastump

Description

@audrastump

Describe the bug

Fleet hub test in Fleet extension failing with error trace : cmd = <azure.cli.core.commands.AzCliCommand object at 0x7f2e41937d40>
client = <azext_fleet.vendored_sdks.v2025_04_01_preview.operations._operations.FleetsOperations object at 0x7f2e418fd9d0>
resource_group_name = 'cli-000001', name = 'fl-000002', location = 'westus', tags = None, enable_hub = True
vm_size = 'Standard_A8_v2', dns_name_prefix = None, enable_private_cluster = False, enable_vnet_integration = False
apiserver_subnet_id = None, agent_subnet_id = None, enable_managed_identity = False, assign_identity = None
no_wait = False

def create_fleet(cmd,
                 client,
                 resource_group_name,
                 name,
                 location=None,
                 tags=None,
                 enable_hub=False,
                 vm_size=None,
                 dns_name_prefix=None,
                 enable_private_cluster=False,
                 enable_vnet_integration=False,
                 apiserver_subnet_id=None,
                 agent_subnet_id=None,
                 enable_managed_identity=False,
                 assign_identity=None,
                 no_wait=False):
    fleet_model = cmd.get_models(
        "Fleet",
        resource_type=CUSTOM_MGMT_FLEET,
        operation_group="fleets"
    )

    poll_interval = 5
    if enable_hub:
        poll_interval = 30
        fleet_hub_profile_model = cmd.get_models(
            "FleetHubProfile",
            resource_type=CUSTOM_MGMT_FLEET,
            operation_group="fleets"
        )
        api_server_access_profile_model = cmd.get_models(
            "APIServerAccessProfile",
            resource_type=CUSTOM_MGMT_FLEET,
            operation_group="fleets"
        )
        agent_profile_model = cmd.get_models(
            "AgentProfile",
            resource_type=CUSTOM_MGMT_FLEET,
            operation_group="fleets",
        )
        api_server_access_profile = api_server_access_profile_model(
            enable_private_cluster=enable_private_cluster,
            enable_vnet_integration=enable_vnet_integration,
            subnet_id=apiserver_subnet_id
        )
        agent_profile = agent_profile_model(
            subnet_id=agent_subnet_id,
            vm_size=vm_size
        )
        fleet_hub_profile = fleet_hub_profile_model(
            dns_prefix=dns_name_prefix,
            api_server_access_profile=api_server_access_profile,
            agent_profile=agent_profile)
    else:
        if dns_name_prefix is not None or \
           enable_private_cluster or \
           enable_vnet_integration or \
           apiserver_subnet_id is not None or \
           agent_subnet_id is not None:
            raise CLIError(
                "The parameters for private cluster, vnet & subnet integration are only valid if hub is enabled.")
        fleet_hub_profile = None

    fleet_managed_service_identity_model = cmd.get_models(
        "ManagedServiceIdentity",
        resource_type=CUSTOM_MGMT_FLEET,
        operation_group="fleets"
    )
    managed_service_identity = fleet_managed_service_identity_model(type="None")
    if enable_managed_identity:
        managed_service_identity.type = "SystemAssigned"
        if assign_identity is not None:
            user_assigned_identity_model = cmd.get_models(
                "UserAssignedIdentity",
                resource_type=CUSTOM_MGMT_FLEET,
                operation_group="fleets"
            )
            managed_service_identity.type = "UserAssigned"
            managed_service_identity.user_assigned_identities = {assign_identity: user_assigned_identity_model()}
    elif assign_identity is not None:
        raise CLIError("Cannot assign identity without enabling managed identity.")

    fleet_properties = cmd.get_models(
        "FleetProperties",
        resource_type=CUSTOM_MGMT_FLEET,
        operation_group="fleets"
    )()

    if fleet_hub_profile:
        fleet_properties.hub_profile = fleet_hub_profile

    fleet = fleet_model(
        location=location,
        tags=tags,
        properties=fleet_properties,
        identity=managed_service_identity
    )

    if enable_private_cluster:
        assign_network_contributor_role_to_subnet(cmd, agent_subnet_id)

    return sdk_no_wait(no_wait,
                     client.begin_create_or_update,
                       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
                       resource_group_name,
                       name,
                       fleet,
                       polling_interval=poll_interval)

E AttributeError: 'FleetsOperations' object has no attribute 'begin_create_or_update'

../../custom.py:127: AttributeError

  • generated xml file: /home/audrastump/.azdev/env_config/home/audrastump/go/src/go.goms.io/azure-cli-extensions/env/test_results.xml -
    ============================================== short test summary info ==============================================
    FAILED test_fleet_hubful_scenario.py::FleetHubfulScenarioTest::test_fleet_hubful
    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! xdist.dsession.Interrupted: stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    =========================================== 1 failed, 26 passed in 4.62s ============================================

Related command

Fleet unit tests

Errors

cmd = <azure.cli.core.commands.AzCliCommand object at 0x7f2e41937d40>
client = <azext_fleet.vendored_sdks.v2025_04_01_preview.operations._operations.FleetsOperations object at 0x7f2e418fd9d0>
resource_group_name = 'cli-000001', name = 'fl-000002', location = 'westus', tags = None, enable_hub = True
vm_size = 'Standard_A8_v2', dns_name_prefix = None, enable_private_cluster = False, enable_vnet_integration = False
apiserver_subnet_id = None, agent_subnet_id = None, enable_managed_identity = False, assign_identity = None
no_wait = False

def create_fleet(cmd,
                 client,
                 resource_group_name,
                 name,
                 location=None,
                 tags=None,
                 enable_hub=False,
                 vm_size=None,
                 dns_name_prefix=None,
                 enable_private_cluster=False,
                 enable_vnet_integration=False,
                 apiserver_subnet_id=None,
                 agent_subnet_id=None,
                 enable_managed_identity=False,
                 assign_identity=None,
                 no_wait=False):
    fleet_model = cmd.get_models(
        "Fleet",
        resource_type=CUSTOM_MGMT_FLEET,
        operation_group="fleets"
    )

    poll_interval = 5
    if enable_hub:
        poll_interval = 30
        fleet_hub_profile_model = cmd.get_models(
            "FleetHubProfile",
            resource_type=CUSTOM_MGMT_FLEET,
            operation_group="fleets"
        )
        api_server_access_profile_model = cmd.get_models(
            "APIServerAccessProfile",
            resource_type=CUSTOM_MGMT_FLEET,
            operation_group="fleets"
        )
        agent_profile_model = cmd.get_models(
            "AgentProfile",
            resource_type=CUSTOM_MGMT_FLEET,
            operation_group="fleets",
        )
        api_server_access_profile = api_server_access_profile_model(
            enable_private_cluster=enable_private_cluster,
            enable_vnet_integration=enable_vnet_integration,
            subnet_id=apiserver_subnet_id
        )
        agent_profile = agent_profile_model(
            subnet_id=agent_subnet_id,
            vm_size=vm_size
        )
        fleet_hub_profile = fleet_hub_profile_model(
            dns_prefix=dns_name_prefix,
            api_server_access_profile=api_server_access_profile,
            agent_profile=agent_profile)
    else:
        if dns_name_prefix is not None or \
           enable_private_cluster or \
           enable_vnet_integration or \
           apiserver_subnet_id is not None or \
           agent_subnet_id is not None:
            raise CLIError(
                "The parameters for private cluster, vnet & subnet integration are only valid if hub is enabled.")
        fleet_hub_profile = None

    fleet_managed_service_identity_model = cmd.get_models(
        "ManagedServiceIdentity",
        resource_type=CUSTOM_MGMT_FLEET,
        operation_group="fleets"
    )
    managed_service_identity = fleet_managed_service_identity_model(type="None")
    if enable_managed_identity:
        managed_service_identity.type = "SystemAssigned"
        if assign_identity is not None:
            user_assigned_identity_model = cmd.get_models(
                "UserAssignedIdentity",
                resource_type=CUSTOM_MGMT_FLEET,
                operation_group="fleets"
            )
            managed_service_identity.type = "UserAssigned"
            managed_service_identity.user_assigned_identities = {assign_identity: user_assigned_identity_model()}
    elif assign_identity is not None:
        raise CLIError("Cannot assign identity without enabling managed identity.")

    fleet_properties = cmd.get_models(
        "FleetProperties",
        resource_type=CUSTOM_MGMT_FLEET,
        operation_group="fleets"
    )()

    if fleet_hub_profile:
        fleet_properties.hub_profile = fleet_hub_profile

    fleet = fleet_model(
        location=location,
        tags=tags,
        properties=fleet_properties,
        identity=managed_service_identity
    )

    if enable_private_cluster:
        assign_network_contributor_role_to_subnet(cmd, agent_subnet_id)

    return sdk_no_wait(no_wait,
                     client.begin_create_or_update,
                       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
                       resource_group_name,
                       name,
                       fleet,
                       polling_interval=poll_interval)

E AttributeError: 'FleetsOperations' object has no attribute 'begin_create_or_update'

../../custom.py:127: AttributeError

  • generated xml file: /home/audrastump/.azdev/env_config/home/audrastump/go/src/go.goms.io/azure-cli-extensions/env/test_results.xml -
    ============================================== short test summary info ==============================================
    FAILED test_fleet_hubful_scenario.py::FleetHubfulScenarioTest::test_fleet_hubful
    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! xdist.dsession.Interrupted: stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    =========================================== 1 failed, 26 passed in 4.62s ============================================

Issue script & Debug output

Unit tests should all pass when creating python venv:
To test

  1. python3 -m venv env

source env/bin/activate

  1. Install pip and azdev

pip install --upgrade pip
pip install azdev

  1. Navigate to azure-cli-extensions directory

cd azure-cli-extensions

Setup azdev with both repositories

azdev setup -c /path/to/azure-cli -r /path/to/azure-cli-extensions -e fleet

then azdev linter fleet
then azdev test fleet

Expected behavior

Unit tests should all pass when creating python venv:
To test

  1. python3 -m venv env

source env/bin/activate

  1. Install pip and azdev

pip install --upgrade pip
pip install azdev

  1. Navigate to azure-cli-extensions directory

cd azure-cli-extensions

Setup azdev with both repositories

azdev setup -c /path/to/azure-cli -r /path/to/azure-cli-extensions -e fleet

then azdev linter fleet
then azdev test fleet

Environment Summary

N/A

Additional context

No response

Metadata

Metadata

Assignees

Labels

bugSomething isn't working

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions