NotImplementedError: ElasticNetworkInterfaces(AmazonVPC).describe_network_interface_attribute is not yet implemented

NotImplementedError: ElasticNetworkInterfaces(AmazonVPC).describe_network_interface_attribute is not yet implemented

如何在 test_elastic_network_interfaces_get_by_description 函数中描述 mock_ec2 的网络接口属性?

@mock_ec2 def test_elastic_network_interfaces_get_by_description():
    ec2 = boto3.resource("ec2", region_name="us-east-1")
    ec2_client= ec2.meta.client

    vpc = ec2.create_vpc(CidrBlock="10.0.0.0/16")
    vpc.reload()
    subnet = ec2.create_subnet(
        VpcId=vpc.id, CidrBlock="10.0.0.0/24", 
        AvailabilityZone="us-east-1a")

    desc = str(uuid4())
    eni1 = ec2.create_network_interface(
        SubnetId=subnet.id, PrivateIpAddress="10.0.10.5", Description=desc )

    # The status of the new interface should be 'available'
    waiter = ec2_client.get_waiter("network_interface_available")
    waiter.wait(NetworkInterfaceIds=[eni1.id])

    eni1.modify_attribute(SourceDestCheck={'Value': False})
    eni1.reload()
    response = eni1.describe_attribute(Attribute='description')

python 3.7
模拟 4.0.3
摩托 2.1.0
当然 2.0.0
aiobotocore 1.4.2
boto3 1.18.2 botocore 1.20.106
覆盖率 5.5

实施或修复 运行 或通过测试需要什么?

如果您询问如何在 Moto 中实现此功能,文档应该在这里提供帮助:http://docs.getmoto.org/en/latest/docs/contributing/new_feature.html

TLDR:

有一个脚本可以为新功能生成脚手架。

  • 查看 Moto 源代码
  • 安装项目(make init
  • 运行 脚手架脚本:scripts/scaffold.py

总是可以在 Moto 中提出问题或创建草稿 PR - 如果您想做出贡献,他们很乐意提供帮助。 https://github.com/spulec/moto

如果在 moto 库的更新或脚手架脚本之后,该方法尚未在库中实现并继续出现这样的错误:

NotImplementedError: ElasticNetworkInterfaces(AmazonVPC).describe_network_interface_attribute is not yet implemented

一个简单的测试解决方案是一个 monkeypatch 函数,它可以模拟未实现的方法。

def client_mock(Attribute='description'):
    return {
        'Attachment': {
            'AttachTime': 34545,
            'DeleteOnTermination': False,
            'DeviceIndex': 123,
            'NetworkCardIndex': 123,
            'InstanceId': 'eni1.instanceid',
        },
        'Description': {
            'Value': 'Vpc network inteface'
        },
        'Groups': [
            {
                'GroupName': 'name group',
                'GroupId': 'grupoid'
            },
        ],
        'NetworkInterfaceId': 'eni.id',
        'SourceDestCheck': {
            'Value': False
        }
    }

并将其与属性一起放在相应的函数或方法的传递上

monkeypatch.setattr(eni1, "describe_attribute", client_mock)

如果你知道更好的解决办法,请post吧!