Клиентская библиотека Google Cloud для Java: insertInstance () приводит к исключению UnavailableException - PullRequest
0 голосов
/ 30 апреля 2019

Я пытаюсь создать экземпляр, используя клиентскую библиотеку Cloud API для Java. Я пробежался по различным классам Builder, используя кнопку «Эквивалентный REST» на консоли, чтобы увидеть, какие элементы мне не хватает, но теперь вызов insertInstance() возвращает исключение UnavailableException. Проверка в консоли, я вижу, ничего не было создано. Кто может помочь мне найти то, что я сделал не так? Все URL-адреса кажутся правильными: когда их нет, я получаю полезное исключение с подробными ошибками.

Константа SETUP_NO_BOT - это текст моего установочного скрипта, который создает пользователя, копирует файлы из корзины, и тому подобное. Это не должно быть проблемой, потому что тогда я ожидал бы работающую ВМ с ошибками в журналах запуска.

Все примеры, которые я мог бы найти, использовали либо старые пакеты com.google.api.services, либо пакеты com.google.cloud.compute.deprecated, и ни один из них не использовал сопоставимую структуру классов.

Если я использую тот же код с ошибкой в ​​URL-адресах (теперь генерируемых вызовами getUrl()), я получаю приятное сообщение об ошибке. Эта версия последовательно возвращает 503.

    private Instance createInstance() {
        logger.debug("createInstance(): Creating boot disk based on \"{}\".", getBaseImage());
        AttachedDiskInitializeParams diskParams;
        if (ifSet(getBaseImageProject())) {
            diskParams = AttachedDiskInitializeParams.newBuilder()
                    .setSourceImage(getUrl(getBaseImageProject(), "images", getBaseImage()))
                    .setDiskSizeGb("10")
                    .setDiskType(getUrl(context, "diskTypes", "pd-standard"))
                    .build();
        }
        else {
            diskParams = AttachedDiskInitializeParams.newBuilder()
                    .setSourceImage(getUrl("images", getBaseImage()))
                    .setDiskSizeGb("10")
                    .setDiskType(getUrl(context, "diskTypes", "pd-standard"))
                    .build();
        }
        AttachedDisk disk = AttachedDisk.newBuilder()
                .setType("PERSISTENT")
                .setBoot(true)
                .setMode("READ_WRITE")
                .setAutoDelete(true)
                .setDeviceName(getName())
                .setInitializeParams(diskParams)
                .build();

        logger.debug("createInstance(): Creating network interface to network \"{}\".", getNetwork());
        AccessConfig accessConfig = AccessConfig.newBuilder()
                .setName("External NAT")
                .setType("ONE_TO_ONE_NAT")
                .setNetworkTier("PREMIUM")
                .build();
        NetworkInterface netIntf = NetworkInterface.newBuilder()
                .setNetwork(getUrl(context, "networks", getNetwork()))
                .setSubnetwork(getRegionalUrl(context, "subnetworks", "default"))
                .addAccessConfigs(accessConfig)
                .build();

        logger.debug("createInstane(): Creating startup script metadata.");
        Items metadataItems = Items.newBuilder()
                .setKey("startup-script")
                .setValue(SETUP_NO_BOT)
                .build();
        Metadata metadata = Metadata.newBuilder()
                .addItems(metadataItems)
                .build();

        logger.debug("createInstance(): Create the instance...");
        Instance inst = Instance.newBuilder()
                .setName(getName())
                .setZone(getUrl(context, "zones", context.getZone()))
                .setMachineType(getZonalUrl(context, "machineTypes", getMachineType()))
                .addDisks(disk)
                .setCanIpForward(false)
                .addNetworkInterfaces(netIntf)
                .setMetadata(metadata)
                .build();
        return gceUtil.createInstance(inst) ? gceUtil.getInstance(getName()) : null;
    }

createInstance очень прост:

    /**
     * Create an {@link Instance}.
     */
    public boolean createInstance(Instance instance) {
        logger.debug("createInstance(): project = \"{}\", zone = \"{}\".", getProjectName(), getZoneName());

        Operation response = instClient.insertInstance(ProjectZoneName.of(getProjectName(), getZoneName()), instance);

        return isHttp2xx(response);
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...