Skip to content
Snippets Groups Projects

Issue #3249829: Fix an error: InvalidInstanceType of DescribeInstanceTypes()

1 file
+ 38
35
Compare changes
  • Side-by-side
  • Inline
@@ -4372,7 +4372,9 @@ class Ec2Service extends CloudServiceBase implements Ec2ServiceInterface {
@@ -4372,7 +4372,9 @@ class Ec2Service extends CloudServiceBase implements Ec2ServiceInterface {
];
];
$types = array_keys($instance_types);
$types = array_keys($instance_types);
$error_count = 0;
 
// Temporary keep error messages.
 
$errors = $this->messenger->deleteByType('error');
foreach ($types ?: [] as $idx => $type) {
foreach ($types ?: [] as $idx => $type) {
$param['InstanceTypes'][] = $type;
$param['InstanceTypes'][] = $type;
@@ -4387,52 +4389,47 @@ class Ec2Service extends CloudServiceBase implements Ec2ServiceInterface {
@@ -4387,52 +4389,47 @@ class Ec2Service extends CloudServiceBase implements Ec2ServiceInterface {
// Execute DescribeInstanceTypes.
// Execute DescribeInstanceTypes.
$desc_instance_types = $this->describeInstanceTypes($param);
$desc_instance_types = $this->describeInstanceTypes($param);
// Confirm error messages.
// Delete and confirm error messages.
$messages = $this->messenger->messagesByType('error');
$messages = $this->messenger->deleteByType('error');
if (!empty($messages) && count($messages) > $error_count) {
if (!empty($messages)) {
$message = NULL;
$exclude_types = [];
for ($idx = $error_count; $idx < count($messages); $idx++) {
foreach ($messages ?: [] as $message) {
$error_count = $idx;
// If the message includes 'InvalidInstanceType',
// If the message includes 'InvalidInstanceType',
// there are some invalid instance types in the parameter.
// there are some invalid instance types in the parameter.
if (strpos($messages[$idx], 'InvalidInstanceType') === FALSE) {
if (strpos($message, 'InvalidInstanceType') === FALSE) {
continue;
continue;
}
}
$message = $messages[$idx];
$dom = new \DOMDocument();
 
$dom->loadHTML($message);
 
$items = [];
 
foreach ($dom->getElementsByTagName('li') ?: [] as $node) {
 
$items[] = $node->textContent;
 
}
 
 
foreach ($items ?: [] as $item) {
 
if (strpos($item, 'Message:') === FALSE) {
 
continue;
 
}
 
 
$matches = [];
 
if (preg_match('/\[.*?\]/', $item, $matches)) {
 
// Get the invalid instance types.
 
$exclude_types = explode(', ', trim($matches[0], '[]'));
 
}
 
}
break;
break;
}
}
if (empty($message)) {
if (empty($exclude_types)) {
$param['InstanceTypes'] = [];
$param['InstanceTypes'] = [];
continue;
continue;
}
}
$dom = new \DOMDocument();
// Exclude the invalid instance types.
$dom->loadHTML($message);
// Then execute DescribeInstanceTypes again.
$items = [];
$param['InstanceTypes'] = array_diff($param['InstanceTypes'], $exclude_types);
foreach ($dom->getElementsByTagName('li') ?: [] as $node) {
$desc_instance_types = $this->describeInstanceTypes($param);
$items[] = $node->textContent;
}
foreach ($items ?: [] as $item) {
if (strpos($item, 'Message:') === FALSE) {
continue;
}
$matches = [];
if (preg_match('/\[.*?\]/', $item, $matches)) {
// Get the invalid instance types.
$exclude_types = explode(', ', trim($matches[0], '[]'));
// Exclude the invalid instance types.
// Then execute DescribeInstanceTypes again.
$param['InstanceTypes'] = array_diff($param['InstanceTypes'], $exclude_types);
$desc_instance_types = $this->describeInstanceTypes($param);
break;
}
}
}
}
if (empty($desc_instance_types['InstanceTypes'])) {
if (empty($desc_instance_types['InstanceTypes'])) {
@@ -4456,6 +4453,12 @@ class Ec2Service extends CloudServiceBase implements Ec2ServiceInterface {
@@ -4456,6 +4453,12 @@ class Ec2Service extends CloudServiceBase implements Ec2ServiceInterface {
$param['InstanceTypes'] = [];
$param['InstanceTypes'] = [];
}
}
 
 
// Add temporary keeping error messages.
 
foreach ($errors ?: [] as $error) {
 
$this->messenger->addError($error);
 
}
 
}
}
}
}
Loading