public function describeInstanceAttribute($instanceId, InstanceAttributeType $attribute)
{
$result = null;
$options = ['InstanceId' => (string) $instanceId, 'Attribute' => (string) $attribute];
$action = ucfirst(__FUNCTION__);
$response = $this->client->call($action, $options);
if ($response->getError() === false) {
$sxml = simplexml_load_string($response->getRawContent());
$response = null;
$ptr = $sxml->{$options['Attribute']};
switch ($options['Attribute']) {
case InstanceAttributeType::TYPE_EBS_OPTIMIZED:
case InstanceAttributeType::TYPE_SOURCE_DEST_CHECK:
case InstanceAttributeType::TYPE_DISABLE_API_TERMINATION:
$result = (string) $ptr->value == 'true';
break;
case InstanceAttributeType::TYPE_INSTANCE_TYPE:
case InstanceAttributeType::TYPE_KERNEL:
case InstanceAttributeType::TYPE_RAMDISK:
case InstanceAttributeType::TYPE_USER_DATA:
case InstanceAttributeType::TYPE_INSTANCE_INITIATED_SHUTDOWN_BEHAVIOR:
case InstanceAttributeType::TYPE_ROOT_DEVICE_NAME:
case InstanceAttributeType::TYPE_SRIOV_NET_SUPPORT:
$result = (string) $ptr->value;
break;
case InstanceAttributeType::TYPE_BLOCK_DEVICE_MAPPING:
$result = $this->_loadInstanceBlockDeviceMappingResponseList($ptr);
break;
case InstanceAttributeType::TYPE_GROUP_SET:
$result = $this->_loadGroupList($ptr);
break;
case InstanceAttributeType::TYPE_PRODUCT_CODES:
$result = $this->_loadProductCodeSetList($ptr);
break;
default:
throw new \InvalidArgumentException(sprintf('Unexpected attribute "%s" in %s call', $options['Attribute'], $action));
}
}
return $result;
}