Using the CLI¶
This tool allows the manipulation of all Metal Cloud elements via the command line.
Installation¶
To install on Mac OS X:
brew tap metalsoft-io/homebrew-repo
brew install metalcloud-cli
To install on any CentOS/Redhat Linux distribution use the latest release for your platform: https://github.com/metalsoft-io/metalcloud-cli/releases/latest
$ sudo rpm -i https://github.com/metalsoft-io/metalcloud-cli/releases/download/v2.5.13/metalcloud-cli_2.5.13_linux_amd64.rpm
To install on any Debian/Ubuntu distributions:
curl -sLO https://github.com/metalsoft-io/metalcloud-cli/releases/download/v2.5.13/metalcloud-cli_2.5.13_linux_amd64.deb && sudo dpkg -i metalcloud-cli_2.5.13_linux_amd64.deb
To install on Windows: Binaries are available here: Download and unzip the executable and simply execute.
To install using go get
:
go get github.com/metalsoft-io/metalcloud-cli
Getting the API key¶
In the Metalsoft Web UI click on the user icon at the top right corner. Then go to API credentials > APY key
Copy the api key. Its format should be <number>:<letters>
.
Copy the endpoint. Its format should be https://api.environment.hostname
.
Configure credentials as environment variables:
export METALCLOUD_API_KEY="<your key>" # example value: "1:e5fa44f2b31c1fb553b6021e7360d07d5d91ff5e"
export METALCLOUD_ENDPOINT="<your api endpoint>" # example value: "https://api.demo.metalsoft.io"
export METALCLOUD_USER_EMAIL="<your email>" # example value: "[email protected]"
export METALCLOUD_INSECURE_SKIP_VERIFY=false #defaults to false
export METALCLOUD_TIMEOUT_SECONDS=300 #defaults to 300 if not set
Getting a list of supported commands¶
Use metalcloud-cli help
for a list of supported commands.
Getting started¶
To create an infrastructure, in the default datacenter, configured via the METALCLOUD_DATACENTER
environment variable):
metalcloud-cli infrastructure create --label test --return-id
metalcloud-cli infrastructure list
+-------+-----------------------------------------+-------------------------------+-----------+-----------+---------------------+---------------------+
| ID | LABEL | OWNER | REL. | STATUS | CREATED | UPDATED |
+-------+-----------------------------------------+-------------------------------+-----------+-----------+---------------------+---------------------+
| 12345 | complex-demo | [email protected] | OWNER | active | 2019-03-28T15:23:08Z| 2019-03-28T15:23:08Z|
+-------+-----------------------------------------+-------------------------------+-----------+-----------+---------------------+---------------------+
To create an instance array in that infrastructure, get the ID of the infrastructure from above (12345):
metalcloud-cli instance-array create --infra 12345 --label master --proc 1 --proc-core-count 8 --ram 16
To view the id of the previously created drive array:
metalcloud-cli instance-array list --infra 12345
+-------+---------------------+---------------------+-----------+
| ID | LABEL | STATUS | INST_CNT |
+-------+---------------------+---------------------+-----------+
| 54321 | master | ordered | 1 |
+-------+---------------------+---------------------+-----------+
Total: 1 Instance Arrays
To create a drive array and attach it to the previous instance array:
metalcloud-cli drive-array create --infra 12345 --label master-da --ia 54321
To view the current status of the infrastructure
metalcloud-cli infrastructure get --id 12345
Infrastructures I have access to (as [email protected])
+-------+----------------+-------------------------------+-----------------------------------------------------------------------+-----------+
| ID | OBJECT_TYPE | LABEL | DETAILS | STATUS |
+-------+----------------+-------------------------------+-----------------------------------------------------------------------+-----------+
| 36791 | InstanceArray | master | 1 instances (16 RAM, 8 cores, 1 disks) | ordered |
| 47398 | DriveArray | master-da | 1 drives - 40.0 GB iscsi_ssd (volume_template:0) attached to: 36791 | ordered |
+-------+----------------+-------------------------------+-----------------------------------------------------------------------+-----------+
Total: 2 elements
Kubernetes-style Apply support¶
Apply creates or updates a resource from a file. The supported format is yaml.
metalcloud-cli apply -f resources.yaml
The type of the requested resource needs to be specified using the field kind.
cat resources.yaml
kind: InstanceArray
apiVersion: 1.0
label: my-instance-array
---
kind: Secret
apiVersion: 1.0
name: my-secret
The objects and their fields can be found in the SDK documentation. The fields will be in the format specified in the yaml tag. For example SubnetPool
object has a field named subnet_pool_prefix_human_readable
in JSON format. In the YAML file used as input for this command, the field should be called prefix
.
Condensed format¶
The CLI also provides a “condensed format” for most of it’s commands:
instance=array = ia
drive-array = da
infrastructure = infra
list = ls
delete = rm …
This allows commands such as:
metalcloud-cli infra ls
Using label instead of IDs¶
Most commands also take a label instead of an id as a parameter. For example:
metalcloud-cli infra show --id complex-demo
Permissions¶
Some commands depend on various permissions. For instance you cannot access another user’s infrastructure unless you are a delegate of it.