php-opencloud / openstack

PHP SDK for OpenStack clouds
Apache License 2.0
222 stars 152 forks source link

Call to a member function getServiceUrl() on null #330

Open jjj117 opened 3 years ago

jjj117 commented 3 years ago

OpenStack\Identity\v3\Service::authenticate vendor/php-opencloud/openstack/src/Identity/v3/Service.php:50

   if (!empty($options['cachedToken'])) {

            $token = $this->generateTokenFromCache($options['cachedToken']);

            if ($token->hasExpired()) {

                throw new \RuntimeException(sprintf('Cached token has expired on "%s".', $token->expires->format(\DateTime::ISO8601)));

            }

        } else {

            $token = $this->generateToken($authOptions);

        }

        $name      = $options['catalogName'];

        $type      = $options['catalogType'];

        $region    = $options['region'];

        $interface = isset($options['interface']) ? $options['interface'] : Enum::INTERFACE_PUBLIC;

        if ($baseUrl = $token->catalog->getServiceUrl($name, $type, $region, $interface)) {

            return [$token, $baseUrl];

        }

        throw new \RuntimeException(sprintf('No service found with type [%s] name [%s] region [%s] interface [%s]', $type, $name, $region, $interface));

    }

    /**

     * Generates authentication token from cached token using `$token->export()`.

     *

     * @param array $cachedToken {@see \OpenStack\Identity\v3\Models\Token::export}

     */

    public function generateTokenFromCache(array $cachedToken): Models\Token

    {

        return $this->model(Models\Token::class)->populateFromArray($cachedToken);

    }

my code:

 $compute = $openstack->computeV2(['region' => 'default']);
 $images = $compute->listImages(['status' => 'ACTIVE']);
adamramadhan commented 2 years ago

same here