7.3. 解决方案
以下示例显示了在实例启动后尝试附加接口:
RHEL_INSTANCE_COUNT=1 NETID=$(neutron net-list | grep provider1 | awk '{print $2}') for i in `seq 1 $RHEL_INSTANCE_COUNT`;do # nova floating-ip-create provider1 portid1=`neutron port-create sriov1 --name sriov1 --binding:vnic-type direct | awk '$2 == "id" {print $(NF-1)}'` portid2=`neutron port-create sriov2 --name sriov2 --binding:vnic-type direct | awk '$2 == "id" {print $(NF-1)}'` openstack server create --flavor m1.small --image rhel --nic net-id=$NETID --key-name id_rsa sriov_vm${i} serverid=`openstack server list | grep sriov_vm${i} | awk '{print $2}'` status="NONE" while [ "$status" != "ACTIVE" ]; do echo "Server $serverid not active ($status)" ; sleep 5 ; status=`openstack server show $serverid | grep -i status | awk '{print $4}'` done nova interface-attach --port-id $portid1 $serverid nova interface-attach --port-id $portid2 $serverid done
这失败并显示以下错误:
ERROR (ClientException): Unexpected API Error. Please report this at http://bugs.launchpad.net/nova/ and attach the Nova API log if possible. <type 'exceptions.KeyError'> (HTTP 500) (Request-ID: req-36b544f4-91a6-442e-a30d-6148220d1449)
正确的方法是直接生成带有 SR-IOV 端口的实例:
RHEL_INSTANCE_COUNT=1 NETID=$(neutron net-list | grep provider1 | awk '{print $2}') for i in `seq 1 $RHEL_INSTANCE_COUNT`;do # nova floating-ip-create provider1 portid1=`neutron port-create sriov1 --name sriov1 --binding:vnic-type direct | awk '$2 == "id" {print $(NF-1)}'` portid2=`neutron port-create sriov2 --name sriov2 --binding:vnic-type direct | awk '$2 == "id" {print $(NF-1)}'` openstack server create --flavor m1.small --image rhel --nic net-id=$NETID --nic port-id=$portid1 --nic port-id=$portid2 --key-name id_rsa sriov_vm${i} done