LKDevelopment / hetzner-cloud-php-sdk

A PHP SDK for the Hetzner Cloud API
MIT License
104 stars 51 forks source link

Floating IP Description empty causes php error: Uncaught TypeError: Argument 2 passed to FloatingIp::__construct() must be of the type string, null given #35

Closed teyeheimans closed 4 years ago

teyeheimans commented 4 years ago

I have this code:

    $hetznerClient = new HetznerAPIClient($apiKey);
    try {
        $floatingIps = $hetznerClient->floatingIps()->all();
    } catch (Exception $exception) {
        echo 'Failed to fetch floating IPs: ' . $exception->getCode();
        exit(1);
    }

However, I receive this error code:

Stack trace:
#0 /Users/teye/workspace/ansible/vendor/lkdevelopment/hetzner-cloud-php-sdk/src/Models/FloatingIps/FloatingIp.php(269): LKDev\HetznerCloud\Models\FloatingIps\FloatingIp->__construct(181765, NULL, 'x.x.x.x', 'ipv4', 3387136, Array, Object(LKDev\HetznerCloud\Models\Locations\Location), false, Object(LKDev\HetznerCloud\Models\Protection), Array, '2020-01-31T08:0...', 'ivr-2')
#1 /Users/teye/workspace/ansible/vendor/lkdevelopment/hetzner-cloud-php-sdk/src/Models/FloatingIps/FloatingIps.php(114): LKDev\HetznerCloud\Models\FloatingIps\FloatingIp::parse(Object(stdClass))
#2 [internal function]: LKD in /Users/teye/workspace/ansible/vendor/lkdevelopment/hetzner-cloud-php-sdk/src/Models/FloatingIps/FloatingIp.php on line 98

Fatal error: Uncaught TypeError: Argument 2 passed to LKDev\HetznerCloud\Models\FloatingIps\FloatingIp::__construct() must be of the type string, null given, called in /Users/teye/workspace/ansible/vendor/lkdevelopment/hetzner-cloud-php-sdk/src/Models/FloatingIps/FloatingIp.php on line 269 and defined in /Users/teye/workspace/ansible/vendor/lkdevelopment/hetzner-cloud-php-sdk/src/Models/FloatingIps/FloatingIp.php on line 98

TypeError: Argument 2 passed to LKDev\HetznerCloud\Models\FloatingIps\FloatingIp::__construct() must be of the type string, null given, called in /Users/teye/workspace/ansible/vendor/lkdevelopment/hetzner-cloud-php-sdk/src/Models/FloatingIps/FloatingIp.php on line 269 in /Users/teye/workspace/ansible/vendor/lkdevelopment/hetzner-cloud-php-sdk/src/Models/FloatingIps/FloatingIp.php on line 98

Call Stack:
    0.0007     424296   1. {main}() /Users/teye/workspace/ansible/environments/production/hetzner.php:0
    0.0101    1506272   2. processKey() /Users/teye/workspace/ansible/environments/production/hetzner.php:155
    0.0162    2161616   3. LKDev\HetznerCloud\Models\FloatingIps\FloatingIps->all() /Users/teye/workspace/ansible/environments/production/hetzner.php:56
    0.1844    2515656   4. LKDev\HetznerCloud\Models\FloatingIps\FloatingIps::parse() /Users/teye/workspace/ansible/vendor/lkdevelopment/hetzner-cloud-php-sdk/src/Models/FloatingIps/FloatingIps.php:39
    0.1844    2515736   5. LKDev\HetznerCloud\Models\FloatingIps\FloatingIps->setAdditionalData() /Users/teye/workspace/ansible/vendor/lkdevelopment/hetzner-cloud-php-sdk/src/Models/FloatingIps/FloatingIps.php:126
    0.1844    2516136   6. Tightenco\Collect\Support\Collection->map() /Users/teye/workspace/ansible/vendor/lkdevelopment/hetzner-cloud-php-sdk/src/Models/FloatingIps/FloatingIps.php:115
    0.1844    2516512   7. array_map() /Users/teye/workspace/ansible/vendor/tightenco/collect/src/Collect/Support/Collection.php:861
    0.1844    2516608   8. LKDev\HetznerCloud\Models\FloatingIps\FloatingIps->LKDev\HetznerCloud\Models\FloatingIps\{closure:/Users/teye/workspace/ansible/vendor/lkdevelopment/hetzner-cloud-php-sdk/src/Models/FloatingIps/FloatingIps.php:113-115}() /Users/teye/workspace/ansible/vendor/tightenco/collect/src/Collect/Support/Collection.php:861
    0.1847    2543576   9. LKDev\HetznerCloud\Models\FloatingIps\FloatingIp::parse() /Users/teye/workspace/ansible/vendor/lkdevelopment/hetzner-cloud-php-sdk/src/Models/FloatingIps/FloatingIps.php:114
    0.1850    2566048  10. LKDev\HetznerCloud\Models\FloatingIps\FloatingIp->__construct() /Users/teye/workspace/ansible/vendor/lkdevelopment/hetzner-cloud-php-sdk/src/Models/FloatingIps/FloatingIp.php:269

It seems that the class vendor/lkdevelopment/hetzner-cloud-php-sdk/src/Models/FloatingIps/FloatingIp.php forces the description to be a string, however, from the json response it can be null:

{
  "floating_ips": [
    {
      "id": xxxx,
      "name": "floating-1",
      "description": null,
      "ip": "x.x.x.x",
      "type": "ipv4",
      "server": 1234,
      "dns_ptr": "..."
   }]
}

Changing the descriptions type to ?string solves the issue. In this way the description can also be null.

teyeheimans commented 4 years ago

I have created a pull request for a fix:

https://github.com/LKDevelopment/hetzner-cloud-php-sdk/pull/36

LKaemmerling commented 4 years ago

Fixed with Release v2.0.1, thank you!