I’m receiving The provided ssh_keys value must be an array.
, and I’ve tried various dumping of the array of ssh key ids. using API attribute described in https://developers.digitalocean.com/documentation/v2/#create-a-new-droplet.
# list of numbers
print(type(key_ids), key_ids)
<class 'list'> [12345678, 12345678]
# stringified list via `str()` or via `json.dumps()`
<class 'str'> [12345678, 12345678]
# mapping each value to string, seems unlikely since ids are returned as numbers when creating droplets... but trying many things anyway. via `list(map(lambda k: str(k), [12345678, 12345678]))`
<class 'list'> ['12345678', '12345678']
The payload looks like:
{
'name': 'mydropletname',
'region': 'sfo2',
'size': '4gb',
'image': 'ghost-18-04',
'ssh_keys': <variations of above>
}
And I’m using the following endpoint: https://api.digitalocean.com/v2/droplets
This textbox defaults to using Markdown to format your answer.
You can type !ref in this text area to quickly search our full set of tutorials, documentation & marketplace offerings and insert the link!
Accepted Answer
ok, figured it out! the issue is with formatting the params. it has to be like 'ssh_keys[]': [123]
instead of 'ssh_keys': [123]
.
following up; it also doesnt appear as if using the SSH key fingerprints matters either. for example replacing the above example’s get_key_ids
method with:
def get_key_fingerprints(token):
"""
Using ssh_key fingerprints because array of ids seems broken on Digital
Ocean's side?
"""
request = requests.get('https://api.digitalocean.com/v2/account/keys', headers=headers(token))
return list(map(lambda key: key['fingerprint'], request.json()['ssh_keys']))
doesnt effect things either.
also! if you do 'ssh_keys': []
it isnt rejected, but any string or number value (whether valid ids/fingerprints or not!) give the exact same error message. is this because Digital Ocean doesnt want to reveal whether or not youre using a proper ID for security purposes???
Hey friend,
You’ll want to get the ID for the SSH key by listing the keys first: https://developers.digitalocean.com/documentation/v2/#list-all-keys
From there just plug it in like this:
"ssh_keys":[19402414],
Here’s a curl string I just ran, with the API key removed, which did the job:
curl -X POST -H "Content-Type: application/json" -H "Authorization: Bearer [removed]" -d '{"name":"example.com","region":"nyc3","size":"s-1vcpu-1gb","image":"ubuntu-16-04-x64","ssh_keys":[19402414],"backups":false,"ipv6":true,"user_data":null,"private_networking":null,"volumes": null,"tags":["web"]}' "https://api.digitalocean.com/v2/droplets"
Jarland
Get paid to write technical tutorials and select a tech-focused charity to receive a matching donation.
Full documentation for every DigitalOcean product.
The Wave has everything you need to know about building a business, from raising funding to marketing your product.
Stay up to date by signing up for DigitalOcean’s Infrastructure as a Newsletter.
New accounts only. By submitting your email you agree to our Privacy Policy
Scale up as you grow — whether you're running one virtual machine or ten thousand.
Sign up and get $200 in credit for your first 60 days with DigitalOcean.*
*This promotional offer applies to new accounts only.