Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

InstanceService update #15

Open
wsnnn opened this issue Jul 13, 2020 · 2 comments
Open

InstanceService update #15

wsnnn opened this issue Jul 13, 2020 · 2 comments

Comments

@wsnnn
Copy link

wsnnn commented Jul 13, 2020

С помощью метода update(InstanceService) пытаюсь изменить resources_spec.

В доках: "Поля, которые требуется изменить, указываются в запросе в поле update_mask".
В заголовках sdk прописан в camelCase как updateMask. Но если заполнять его как updateMask, то при выполнении пишет ошибку: UnhandledPromiseRejectionWarning: Error: 3 INVALID_ARGUMENT: Validation failed: - update_mask: Field mask cannot be empty Если поменять на 'update_mask', то начинает работать.

А далее основная проблема, в 'update_mask' надо указать поля, которые будут заменены. Главный вопрос, из каких доков по API яндекса брать названия, из REST(там поле называется "resourcesSpec") или из gRPC(там "resources_spec"), или так, как указано в ответе Operation(get/list, "resources")?

Задача, изменить resourcesSpec на что-то подобное:

resourcesSpec: {memory: 4, cores: 4, coreFraction: 100},

Это не срабатывает, опять же, не понятно, в каком именно формате указывать поля и значения. В ответ ошибка:
(node:2587) UnhandledPromiseRejectionWarning: Error: 3 INVALID_ARGUMENT: Request validation error: Unable to update selected parameters at once.

Можно посмотреть работающий пример метода update в рамках данного SDK?

@monsterzz
Copy link
Contributor

А далее основная проблема, в 'update_mask' надо указать поля, которые будут заменены. Главный вопрос, из каких доков по API яндекса брать названия, из REST(там поле называется "resourcesSpec") или из gRPC(там "resources_spec"), или так, как указано в ответе Operation(get/list, "resources")?

Правильно брать названия полей из gRPC.

Это не срабатывает, опять же, не понятно, в каком именно формате указывать поля и значения. В ответ ошибка:
(node:2587) UnhandledPromiseRejectionWarning: Error: 3 INVALID_ARGUMENT: Request validation error: Unable to update selected parameters at once.

Не все параметры могут быть изменены вместе. Пришлите, пожалуйста, всё тело запроса, чтобы понять что именно идет не так. Как вариант можно открыть кейс в техническую поддержку и они передадут информацию команде сервиса Compute Cloud

@wsnnn
Copy link
Author

wsnnn commented Jul 15, 2020

Ниже код упрощен, суть - сначала получаем instance, потом изменяем его(опущены все условности, типа проверки состояния и т.п.)

const {Session} = require('yandex-cloud');
let _session = new Session({oauthToken: "TOKEN"})
const {InstanceService} = require('yandex-cloud/api/compute/v1')
let instanceService = new InstanceService(_session)
let _instanceId = "ID"
let self = this;

instanceService.get({instanceId: _instanceId, view: "FULL"}).then((instance) => {
    console.log(instance);
  
    self.instanceService.update({
        'update_mask': 'resources_spec',
                    
        instanceId: instance.id,
        platformId: instance.platformId,
        name: instance.name,
        serviceAccountId: instance.serviceAccountId,
        //resourcesSpec:{core_fraction:100},
        resourcesSpec:{memory: 4*1024*1024*1024, cores: 4, core_fraction: 100},

    }).then((r) => {
        console.log(r); 
    })
 })

Если попробовать менять только один параметр за раз, например 'core_fraction', то в ошибке потребует указать обязательное значение "cores" Error: 3 INVALID_ARGUMENT: resourcesSpec.cores: Int value should be greater than or equal to 1. А так ошибка, описанная постом выше.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants