0

I was wondering how to add ssh keys that are within softlayer to be added to a json bare metal order. Through the GUI, it would be added at the end of the order before you click submit

wondering if it's just with:

productOrder = { "quantity": 1, "location": 1234, "packageId": 1234, "sshKeyIds": 1234, "hardware": [ ...

I did a verifyOrder() but not sure if it's correct

Patrick
  • 103
  • 2
  • 10

4 Answers4

1

If you are using: SoftLayer_Product_Order::placeOrder method, take a look the following example:

"""
Order a new server with SSH Keys

Important manual pages:
http://sldn.softlayer.com/reference/datatypes/SoftLayer_Container_Product_Order
http://sldn.softlayer.com/reference/datatypes/SoftLayer_Hardware_Server
http://sldn.softlayer.com/reference/datatypes/SoftLayer_Product_Item_Price
http://sldn.softlayer.com/reference/services/SoftLayer_Product_Order/verifyOrder
http://sldn.softlayer.com/reference/services/SoftLayer_Product_Order/placeOrder

License: http://sldn.softlayer.com/article/License
Author: SoftLayer Technologies, Inc. <sldn@softlayer.com>
"""
import SoftLayer


# Your SoftLayer API username and key.
USERNAME = 'set me'
API_KEY = 'set me'


productOrder = {
    'quantity': 1,
    'location': "DALLAS09",
    'packageId': 255,
    'hardware': [
                 {
                  'hostname': 'rcvtest-11',  # The hostname of the server you wish to order.
                  'domain': 'example.org'  # The domain name of the server you wish to order.
                  }
                 ],
    'prices': [
               {'id': 50357},  
               {'id': 50041},  
               {'id': 876},  
               {'id': 55},  
               {'id': 57},  
               {'id': 44988},  
               {'id': 273},  
               {'id': 21},  
               {'id': 50387},  
               {'id': 906},  
               {'id': 58},  
               {'id': 50397},  
               {'id': 420},  
               {'id': 418}  
               ],
        'sshKeys': [{'sshKeyIds': [214147, 94206]}]

}

# Create a SoftLayer API client object
client = SoftLayer.Client(username=USERNAME, api_key=API_KEY)

try:
    """
    verifyOrder() will check your order for errors. Replace this with a call
    to placeOrder() when you're ready to order. Both calls return a receipt
    object that you can use for your records.

    Once your order is placed it'll go through SoftLayer's approval and
    provisioning process. When it's done you'll have a new
    SoftLayer_Hardware_Server object and server ready to use.
    """
    receipt = client['Product_Order'].verifyOrder(productOrder)
    print(receipt)
except SoftLayer.SoftLayerAPIError as e:
    print("Unable to place a server order faultCode=%s, faultString=%s"
          % (e.faultCode, e.faultString))
    exit(1)

I hope it helps, let me know any doubt or comments

0

You could try this:

http://$username:$apiKey@api.softlayer.com/rest/v3/SoftLayer_Hardware_Server/createObject.json 
Method: POST
Request body:

{  
   "parameters":[  
      {  
         "hostname":"test",
         "domain":"softlayer.com",
         "processorCoreAmount":2,
         "memoryCapacity":2,
         "hourlyBillingFlag":true,
         "datacenter":{  
            "name":"dal05"
         },
         "operatingSystemReferenceCode":"UBUNTU_LATEST",
         "sshKeys":[
            { "id":21414 },
            { "id":9420 }
         ]
      }
   ]
}

Additional links to review: http://sldn.softlayer.com/reference/services/SoftLayer_Hardware_Server/createObject http://sldn.softlayer.com/reference/services/SoftLayer_Account/getSshKeys http://sldn.softlayer.com/reference/services/SoftLayer_Hardware/getCreateObjectOptions

0
import SoftLayer
import json
from pprint import pprint as pp

productOrder = {
    "quantity": 1,
    "location": 1441195,
    "packageId": 251,
    "sshKeyIds": 248873,
    "hardware": [
        {
            "hostname": "db2oncloud-tshirt-plan-customer-#-letter-datacenter",
            "primaryNetworkComponent": {
                "networkVlan": {
                    "id": 1351859
                }
            },
            "domain": "bluemix.net",
            "primaryBackendNetworkComponent": {
                "networkVlan": {
                    "id": 1351879
                }
            }

        }
    ],
    "prices": [
        {
            "id": 50691,
            "description": "Dual Intel Xeon E5-2620 v3 (12 Cores, 2.40 GHz)"
        },
        {
            "id": 49437,
            "description": "128 GB RAM"
        },
        {
            "id": 49081,
            "description": "Red Hat Enterprise Linux 7.x (64 bit) (per-processor licensing)"
        },
        {
            "id": 35686,
            "description": "10 Gbps Redundant Public & Private Network Uplinks"
        },
        {
            "id": 34241,
            "description": "Host Ping and TCP Service Monitoring"
        },
        {
            "id": 34996,
            "description": "Automated Reboot from Monitoring"
        },
        {
            "id": 50359,
            "description": "500 GB Bandwidth"
        },
        {
            "id": 33483,
            "description": "Unlimited SSL VPN Users & 1 PPTP VPN User per account"
        },
        {
            "id": 141833, # Disk0
            "description": "1.2 TB SSD (10 DWPD)"
        },
        {
            "id": 141833, # Disk1
            "description": "1.2 TB SSD (10 DWPD)"
        },
        {
            "id": 141833, # Disk2
            "description": "1.2 TB SSD (10 DWPD)"
        },
        {
            "id": 141833, # Disk3
            "description": "1.2 TB SSD (10 DWPD)"
        },
        {
            "id": 141833, # Disk4
            "description": "1.2 TB SSD (10 DWPD)"
        },
        {
            "id": 141833, # Disk5
            "description": "1.2 TB SSD (10 DWPD)"
        },
        {
            "id": 50143, # Disk6
            "description": "800 GB SSD (10 DWPD)"
        },
        {
            "id": 50143, # Disk7
            "description": "800 GB SSD (10 DWPD)"
        },
        {
            "id": 141965,
            "description": "DISK_CONTROLLER_RAID_10"
        },
        {
            "id": 32500,
            "description": "Email and Ticket"
        },
        {
            "id": 35310,
            "description": "Nessus Vulnerability Assessment & Reporting"
        },
        {
            "id": 34807,
            "description": "1 IP Address"
        },
        {
            "id": 25014,
            "description": "Reboot / KVM over IP"
        }
    ],
    "sshKeys": [
        {
            "sshKeyIds":248873
        }
    ],
    "storageGroups": [
        {
            "arraySize": 100,
            "arrayTypeId": 5, # Raid 10
            "hardDrives": [
                0,
                1,
                2,
                3,
                4,
                5
            ],
            "partitionTemplateId": 1, # Linux Basic
            "partitions": [
                {
                    "isGrow": True,
                    "name": "/ssd_disk1",
                    "size": 3501
                }
            ]
        },
        {
            "arraySize": 800,
            "arrayTypeId": 2, # Raid 1
            "hardDrives": [
                6,
                7
            ],
            "partitions": [
                {
                    "isGrow": True,
                    "name": "/ssd_disk2",
                    "side": 800
                }
            ]
        }
    ]
}

client = SoftLayer.Client(username=&apikey)

order = client['Product_Order'].verifyOrder(productOrder)
pp(order)
Patrick
  • 103
  • 2
  • 10
0

Try the following script:

import SoftLayer
import json
from pprint import pprint as pp

productOrder = {
    "quantity": 1,
    "location": 1441195,
    "packageId": 251,
    #"sshKeyIds": 248873,
    "hardware": [
        {
            "hostname": "db2oncloud-tshirt-plan-customer-#-letter-datacenter",
            "primaryNetworkComponent": {
                "networkVlan": {
                    "id": 1351859
                }
            },
            "domain": "bluemix.net",
            "primaryBackendNetworkComponent": {
                "networkVlan": {
                    "id": 1351879
                }
            }

        }
    ],
    "prices": [
        {
            "id": 50691,
            "description": "Dual Intel Xeon E5-2620 v3 (12 Cores, 2.40 GHz)"
        },
        {
            "id": 49437,
            "description": "128 GB RAM"
        },
        {
            "id": 49081,
            "description": "Red Hat Enterprise Linux 7.x (64 bit) (per-processor licensing)"
        },
        {
            "id": 35686,
            "description": "10 Gbps Redundant Public & Private Network Uplinks"
        },
        {
            "id": 34241,
            "description": "Host Ping and TCP Service Monitoring"
        },
        {
            "id": 34996,
            "description": "Automated Reboot from Monitoring"
        },
        {
            "id": 50359,
            "description": "500 GB Bandwidth"
        },
        {
            "id": 33483,
            "description": "Unlimited SSL VPN Users & 1 PPTP VPN User per account"
        },
        {
            "id": 141833, # Disk0
            "description": "1.2 TB SSD (10 DWPD)"
        },
        {
            "id": 141833, # Disk1
            "description": "1.2 TB SSD (10 DWPD)"
        },
        {
            "id": 141833, # Disk2
            "description": "1.2 TB SSD (10 DWPD)"
        },
        {
            "id": 141833, # Disk3
            "description": "1.2 TB SSD (10 DWPD)"
        },
        {
            "id": 141833, # Disk4
            "description": "1.2 TB SSD (10 DWPD)"
        },
        {
            "id": 141833, # Disk5
            "description": "1.2 TB SSD (10 DWPD)"
        },
        {
            "id": 50143, # Disk6
            "description": "800 GB SSD (10 DWPD)"
        },
        {
            "id": 50143, # Disk7
            "description": "800 GB SSD (10 DWPD)"
        },
        {
            "id": 141965,
            "description": "DISK_CONTROLLER_RAID_10"
        },
        {
            "id": 32500,
            "description": "Email and Ticket"
        },
        {
            "id": 35310,
            "description": "Nessus Vulnerability Assessment & Reporting"
        },
        {
            "id": 34807,
            "description": "1 IP Address"
        },
        {
            "id": 25014,
            "description": "Reboot / KVM over IP"
        }
    ],
    "sshKeys": [
        {
            "sshKeyIds":[248873]
        }
    ],
    "storageGroups": [
        {
            "arraySize": 100,
            "arrayTypeId": 5, # Raid 10
            "hardDrives": [
                0,
                1,
                2,
                3,
                4,
                5
            ],
            "partitionTemplateId": 1, # Linux Basic
            "partitions": [
                {
                    "isGrow": True,
                    "name": "/ssd_disk1",
                    "size": 3501
                }
            ]
        },
        {
            "arraySize": 800,
            "arrayTypeId": 2, # Raid 1
            "hardDrives": [
                6,
                7
            ],
            "partitions": [
                {
                    "isGrow": True,
                    "name": "/ssd_disk2",
                    "side": 800
                }
            ]
        }
    ]
}

#client = Client(username=USERNAME, api_key=API_KEY)
client = SoftLayer.Client(username=&apikey)

order = client['Product_Order'].verifyOrder(productOrder)
pp(order)
  • Thanks a lot Ruber, you're the best! – Patrick Nov 07 '16 at 20:21
  • i see that I have RAID option in the prices but have 2 raid setups in the `storageGroups` is that okay? – Patrick Nov 07 '16 at 22:29
  • You should use this price: **141945 - DISK_CONTROLLER_RAID** instead of: **141965 - DISK_CONTROLLER_RAID_10**, reviewing your template. Reviewing your template, you are configuring partitions for the first raid (RAID 10), It's not possible to set custom partitions for the first RAID. To get more information about RAID configuration see: [Ordering RAID Through API](http://sldn.softlayer.com/blog/hansKristian/Ordering-RAID-through-API) – Ruber Cuellar Valenzuela Nov 08 '16 at 18:56
  • Sorry for delay, I was reviewing the RAID configuration from your template – Ruber Cuellar Valenzuela Nov 08 '16 at 18:57