这里将介绍使用IBM Cloud的命令行调用IBM IaaS平台的API来对IBM Cloud平台的基础架构进行日常的管理,查询和维护。
首先,在大家能够使用命令行Call API之前,需要先设置好自己的命令行(CLI)环境。可以是自己笔记本上的Windows或Mac OS,也可以是专门在云上开的用于管理的Linux虚拟机环境,笔者就是在IBM云上开了这样一个2C4G的虚拟机,机器开在IBM达拉斯机房,从国内远程登录到达拉斯机房的速度和网络稳定性还算比较满意。读者有需要的也可以考虑在IBM香港,韩国或日本的机房开这样一个虚拟机,国内连接这几个地方的网络都还比较稳定(此处只谈SSH等远程登录方式),进入IBM环境之后,再连往IBM的其他数据中心的时候,我们可以走IBM内网连接,这样既能保证网络性能,又能保证网络质量。当然,我们的CLI的API Call其实也没用到内网,上面又扯多了。
有关如何设定CLI运行环境,请参考下面的URL:
https://blog.csdn.net/koolincn/article/details/104492312
Section 1 – 获取机器列表信息
我们先来看看直接命令行获取账号下物理机信息的命令以及输出:
slcli hardware list
这个命令是获取的所有物理机信息,如需要过滤,则需要通过Linux Shell的过滤功能来实现。 获取虚拟机的命令如下: slcli virtual list
我们再来看一下使用API获取账号下物理机信息的命令与输出:
命令:slcli call-api Account getHardware --filter 'hardware.datacenter.name IN fra05' --mask=id,hostname,primaryIpAddress,primaryBackendIpAddress,datacenter.name
我们可以看到,调用API可以有更多的选择去输出想要的字段,通过对结果添加mask ②来实现。通过添加filter ①(过滤)实现对整个输出结果集的筛选,我们这里的筛选条件是FRA05机房,与上面直接命令行的过滤一致,但是直接命令行的筛选会把含有fra05字串的所有记录都过滤出来,没有Call API的filter来得精准。
大家或许也注意到了,API调用的输出中,红框圈出③的关于数据中心名词一列,其格式似乎与其他列不一致,这是由于我们mask中用到的datacenter.name这个字段中的datacenter他自己本身包含有多个Local的字段,我们现在只是让其输出了其中的一个,所以在格式上,他还是保留了需要输出自己其他字段的格式。我们可以看下我们让他输出其他字段时的效果。
命令:slcli call-api Account getHardware --filter 'hardware.datacenter.name IN fra05' --mask=id,hostname,primaryIpAddress,primaryBackendIpAddress,datacenter[id,name,longName]