1.1. Get Started

Baremetal Server API allows you to purchase and control your baremetal servers. Here you can see how to use the API to for some basic use cases.

Create Server

First of all, you might need to know how to purchase your baremetal server. You can follow these steps to buy your first baremetal server.

Prerequisites

Before following these steps, you need to create Account. In following steps, create network resource which your baremetal server will be connected to and note its Network ID and Port ID. If you want how to know setting network information, please refer Network API.

1. Authentication

At first, please call the authentication API. you can get authentication token, endpoint uris, tenant ID for Baremetal Server API and Image Data Storage API from GUI page.

In following steps, you need to put the authentication token in X-Auth-Token header of API request.

2. List flavors

Flavor is a type of server. e.g., # of CPU, memory, HDD, type of RAID, etc.

Available flavor can be checked on Service Descriptions.

You can get flavors list with following API call. You will know available flavors. If you know more detail API information, please refer List Flavors. Response parameter of id or links -> href are used at Create Server as flavorRef parameter.

$ curl -s -X GET {api_endpoint}/v2/{tenant_id}/flavors \
          -H "Content-Type: application/json" \
          -H "X-Auth-Token: {token}"

Sample Response

{
  "flavors": [
    {
      "id": "05184ba3-00ba-4fbc-b7a2-03b62b884931",
      "links": [
        {
          "href": "https://baremetal-server-jp1-ecl.api.ntt.com/v2/5a077efd3e8e4319be283b22c0ce8c77/flavors/05184ba3-00ba-4fbc-b7a2-03b62b884931",
          "rel": "self"
        },
        {
          "href": "https://baremetal-server-jp1-ecl.api.ntt.com/5a077efd3e8e4319be283b22c0ce8c77/flavors/05184ba3-00ba-4fbc-b7a2-03b62b884931",
          "rel": "bookmark"
        }
      ],
      "name": "General Purpose 1"
    },
    {
      "id": "70a599e031e749b7b260868f441e862b",
      "links": [
        {
          "href": "https://baremetal-server-jp1-ecl.api.ntt.com/v2/5a077efd3e8e4319be283b22c0ce8c77/flavors/70a599e0-31e7-49b7-b260-868f441e862b",
          "rel": "yourself"
        },
        {
          "href": "https://baremetal-server-jp1-ecl.api.ntt.com/v2/5a077efd3e8e4319be283b22c0ce8c77/flavors/70a599e0-31e7-49b7-b260-868f441e862b",
          "rel": "sample"
        }
      ],
      "name": "General Purpose 2"
    }
  ]
}

3. Get template image

Template image is OS type which will be installed to your baremetal server.

You can get template images list with this API call. You will know available template image. If you know more detail API information, please refer List Servers Details and Show Server.

$ curl -s -X GET {api_endpoint}/v2/{tenant_id}/images \
       -H "Content-Type: application/json" \
       -H "X-Auth-Token: {token}"
It will show below 4 type images when you get as member role account.

1. Baremetal Server public image
2. Virtual Server public image
3. QCOW2 image at user tenant (available for only Virtual Server)
4. ISO image at user tenant (available for both Baremetal Server and Virtual Server)

Please check ”.service.type” parameter to distinguish image type.

Sample Response

{
  "images": [
    {
      "id": "70a599e0-31e7-49b7-b260-868f441e862b",
      "links": [
        {
          "href": "https://baremetal-server-jp1-ecl.api.ntt.com/v2/openstack/images/70a599e0-31e7-49b7-b260-868f441e862b",
          "rel": "self"
        },
        {
          "href": "https://baremetal-server-jp1-ecl.api.ntt.com/openstack/images/70a599e0-31e7-49b7-b260-868f441e862b",
          "rel": "bookmark"
        },
        {
          "href": "http://glance.baremetal-server-jp1-ecl.api.ntt.com/v2/openstack/images/70a599e0-31e7-49b7-b260-868f441e862b",
          "rel": "alternate",
          "type": "application/vnd.openstack.image"
        }
      ],
      "name": "fakeimage7"
    },
    {
      "id": "155d900f-4e14-4e4c-a73d-069cbf4541e6",
      "links": [
        {
          "href": "https://baremetal-server-jp1-ecl.api.ntt.com/v2/openstack/images/155d900f-4e14-4e4c-a73d-069cbf4541e6",
          "rel": "self"
        },
        {
          "href": "https://baremetal-server-jp1-ecl.api.ntt.com/openstack/images/155d900f-4e14-4e4c-a73d-069cbf4541e6",
          "rel": "bookmark"
        },
        {
          "href": "http://glance.baremetal-server-jp1-ecl.api.ntt.com/v2/openstack/images/155d900f-4e14-4e4c-a73d-069cbf4541e6",
          "rel": "alternate",
          "type": "application/vnd.openstack.image"
        }
      ],
      "name": "fakeimage123456"
    }
  ]
}

4. Create Keypair (Optional)

You can inject SSH public_key into your baremetal server.

If you want to inject public_key, you need to create Keypair before create server. If you know more detail API information, please refer Create or Import KeyPair.

$ curl -s -X POST {api_endpoint}/v2/{tenant_id}/os-keypairs \
          -H "Content-Type: application/json" \
          -H "X-Auth-Token: {token}"

Sample Request

{
  "keypair": {
    "name": "my-public-key",
    "public_key": "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAAAQQCtzdf5vKNNSoeMfTUUj65eJLMjXfIbtc2GQn6+EEISHX6vjBzsTMdToQJEhgg+5rYlb5tc2mvPYNbPDIJV8OyV"
  }
}

5. Create server

You can create a new baremetal server with this API call.

$ curl -s -X POST {api_endpoint}/v2/{tenant_id}/servers \
          -H "Content-Type: application/json" \
          -H "X-Auth-Token: {token}"

This will return an ID of the server. You need to specify these parameters you got in the previous steps when calling this API.

  • Network information which your new server will be connected to. If it is specified greater than two, default gateway is first network. You can check parameters to connect by Network - List API. If you want how to know setting network information, please refer Network API.
    • uuid, Network ID (Required if you omit Port ID)
    • port, Port ID (Required if you omit Network ID)
    • plane, Plane type (optional: ‘storage’ or ‘data’)
  • Flavor ID
  • Image ID
  • Keypair name (optional)

If you know more detail API information, please refer Create Server.

Sample Request

{
  "server": {
    "name": "server-test-1",
    "adminPass": "aabbccddeeff",
    "imageRef": "b5660a6e-4b46-4be3-9707-6b47221b454f",
    "flavorRef": "05184ba3-00ba-4fbc-b7a2-03b62b884931",
    "key_name": "my-public-key",
    "networks": [
      {
        "uuid": "d32019d3-bc6e-4319-9c1d-6722fc136a22", // Network ID
        "fixed_ip": "10.0.0.100"                        // ip address
      },
      {
        "port": "92270031-7E48-4C15-83D8-4CD3FE062C8F"  // Port ID
      },
      {
        "port": "92270031-7E48-4C15-83D8-4CD3FE062C8F",
        "plane": "storage"                              // plane type (optional)
      }
    ],
    "raid_arrays": [
      {
        "primary_storage": true,
        "partitions": [
          {
            "lvm": true,
            "partition_label": "primary-part1"
          },
          {
            "lvm": false,
            "size": "100G",
            "partition_label": "var"
          }
        ]
      }
    ],
    "lvm_volume_groups": [
      {
        "vg_label": "VG_root",
        "physical_volume_partition_labels": [
          "primary-part1"
        ],
        "logical_volumes": [
          {
            "size": "300G",
            "lv_label": "LV_root"
          },
          {
            "size": "2G",
            "lv_label": "LV_swap"
          }
        ]
      }
    ],
    "filesystems": [
      {
        "label": "LV_root",
        "mount_point": "/",
        "fs_type": "xfs"
      },
      {
        "label": "var",
        "mount_point": "/var",
        "fs_type": "xfs"
      },
      {
        "label": "LV_swap",
        "fs_type": "swap"
      }
    ],
    "user_data": "IyEvYmluL3NoCm1rZGlyIH4vLnNzaApjaG1vZCA3MDAgfi8uc3NoCmVjaG8gInNzaC1yc2EgQUFBQUIzTnphQzF5YzJFQUFCSlFBQUFJQi1+fn5+LVZ1WHdyamVnd1VtMlFZSGJTc3V1PT0gdXNlcjEiID4gfi8uc3NoL2F1dGhvcml6ZWRfa2V5cwpjaG1vZCA2MDAgfi8uc3NoL2F1dGhvcml6ZWRfa2V5cwo="
  }
}
Example of user_data

As for “user_data”, you can specify configuration information or scripts to use upon launch. This must be Base64 encoded. For example, this is how to inject your public key into your baremetal server after provisioning. If you know more detail API information, please refer Using user_data introduction.

  1. Create a file for an injection of ssh public key
$ cat injection.txt
#!/bin/sh
mkdir ~/.ssh
chmod 700 ~/.ssh
echo "ssh-rsa AAAAB3NzaC1yc2EAABJQAAAIB-~~~~-VuXwrjegwUm2QYHbSsuu== user1" > ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
  1. Base64 encoding
$ base64 < injection.txt
IyEvYmluL3NoCm1rZGlyIH4vLnNzaApjaG1vZCA3MDAgfi8uc3NoCmVjaG8gInNzaC1yc2EgQUFBQUIzTnphQzF5YzJFQUFCSlFBQUFJQi1+fn5+LVZ1WHdyamVnd1VtMlFZSGJTc3V1PT0gdXNlcjEiID4gfi8uc3NoL2F1dGhvcml6ZWRfa2V5cwpjaG1vZCA2MDAgfi8uc3NoL2F1dGhvcml6ZWRfa2V5cwo=

Sample Response

{
  "server": {
    "id": "05184ba3-00ba-4fbc-b7a2-03b62b884931",
    "links": [
      {
        "href": "https://baremetal-server-jp1-ecl.api.ntt.com/v2/openstack/servers/05184ba3-00ba-4fbc-b7a2-03b62b884931",
        "rel": "self"
      },
      {
        "href": "https://baremetal-server-jp1-ecl.api.ntt.com/openstack/servers/05184ba3-00ba-4fbc-b7a2-03b62b884931",
        "rel": "bookmark"
      }
    ],
    "adminPass": "aabbccddeeff"
  }
}

Operate Server

You can also operate your baremetal server via this Baremetal Server API. Here we will show you some of APIs you might use frequently.

1. Power on Server Software

If you know more detail API information, please refer Start Server.

$ curl -s -X POST {api_endpoint}/v2/{tenant_id}/servers/{server_id}/action \
          -H "Content-Type: application/json" \
          -H "X-Auth-Token: {token}"

Sample Request

{
  "os-start": {
    "boot_mode": "cdrom"
  }
}
Currently we support “disk”, “pxe” and “cdrom” as boot mode.
In case of boot_mode is cdrom, your CD-ROM image uploaded to VirtualMedia is available when the server power state is off. If you want to know how to boot using your CD-ROM, please refer private iso image annotation in Service Description.

2. Power off Server Software

If you know more detail API information, please refer Stop Server.

$ curl -s -X POST {api_endpoint}/v2/{tenant_id}/servers/{server_id}/action \
          -H "Content-Type: application/json" \
          -H "X-Auth-Token: {token}"

Sample Request

{
  "os-stop": null
}

Delete Server

When you no longer use your server, you can delete your baremetal server by calling this API.

1. Delete Specified Server

If you know more detail API information, please refer Delete Server.

$ curl -s -X DELETE {api_endpoint}/v2/{tenant_id}/servers/{server_id} \
          -H "Content-Type: application/json" \
          -H "X-Auth-Token: {token}"