在本教程中,我们向您展示如何使用IBM SoftLayer API使用Python编程语言来标记和列出设备。 标记使您能够识别您的云基础架构资产,这有助于简化其他业务流程,例如报告和计费。 我们提供了有关安装必需的Python和SoftLayer软件包的详细说明,并描述了涵盖各种场景的几种用例,例如设置和删除标签以及通过调用相应的API列出与标签关联的设备。
通过SoftLayer提供的标记服务使您能够使用关键字标记设备,这些关键字以后可以在搜索中使用。 标记是云世界中的一个重要概念,越来越多的开发人员正在使用它来满足关键业务需求。 基本上,业务需求有两个方面:
- 客户需要识别其云资产,例如虚拟机, 裸机存储节点等。 拥有数百种此类资产的客户将需要一种方便的方法来识别它们。
- 许多客户受到计费要求的困扰,计费要求可能会根据组织的结构而变得复杂(可能会分为业务线,成本中心,部门等)。通过使设备能够使用关键字进行标记以方便搜索,标记通常可以提供有用的解决方案。
我们将提供有关SoftLayer标记如何工作的实际演示。 我们将介绍与使用云资产实现标签(例如虚拟实例和裸机)有关的用例,并向您展示如何根据用户(普通用户或主用户)或标签名称的类型来检索资产。 然后可以将结果用于报告和计费。 此处使用的代码示例是用Python编写的。
基本条款
让我们定义在此上下文中使用的一些基本术语:
虚拟服务器实例(VSI)—与其他云服务提供商相比,SoftLayer VSI提供更高程度的自定义,透明性,可预测性和自动化。 它们与SoftLayer裸机服务器无缝集成。
SoftLayer标记服务 —如上所述,标记服务使用户能够使用以后可以用于搜索的关键字标记设备。 它提供了可以使用API调用的方法。
API用户名 -API用户名是有权访问设备并设置标签的用户。
API密钥名称 -API密钥是每个用户唯一的十六进制字符串。 该密钥用作使用API执行操作的身份验证。 如果提供了错误的密钥,则SoftLayer API将不允许请求的操作。
与标签相关的关键信息
- 标签最多可包含128个字符。
- 尚未记录可添加到设备的标签数量的上限,但是我们成功添加了多达100个标签。
- 标签只能添加到小写的设备中。 如果传递了大写标签名称,则它将自动转换为小写。
- 标记中可以使用下划线,但其他特殊字符将被忽略。 例如,名称“ a * b&c”在被标记之前将转换为“ abc”; 标签中出现的特殊字符将被忽略。
- 主用户可以列出属于主用户下创建的用户的标签的设备。
- 标记API不支持删除标记。 可以使用GUI删除设备的各个标签。 或者,可以通过将标签名称传递为空白来使用
SetTags
方法删除所有标签。
获取代码:ServerTagging.py 获取代码:SetServerTags.py
你需要什么
- 访问SoftLayer API密钥:
- 访问SoftLayer门户并使用有效的凭证登录。
- 导航到帐户 > 用户 。 然后,您将看到可用用户列表。
- 要查看任何用户的API密钥,请单击“ API密钥”列下方相应行上的“ 查看链接 ”。
- Python 2.7或更高版本 -Python是一种简单易学的面向对象语言,非常适合脚本编写。 SoftLayer提供了基于Python的API程序包,可用于进行API调用。
- get-pip.py — pip是一个软件包管理系统,用于安装以Python编写的软件包。 通过下载并安装get-pip.py文件,您将安装pip,而pip可以用于安装SoftLayer软件包(请参见下文)。
- ServerTagging.py和SetServerTags.py-这些是Python脚本。 SetServerTags.py设置设备上的标签,ServerTagging.py根据传递给它的参数检索与标签关联的设备。
在本教程的其余部分,我们将从列出您需要安装和运行的软件开始,以探索SoftLayer标记服务的各种用途。 然后,我们向您展示了一系列用于创建和使用标签的命令,以及一些将设备与标签相关联的示例代码清单。
安装软件
步骤1.安装Python 2.7或更高版本
- 以root用户身份登录系统。
- 确保在系统上安装了以下软件包:
- 海湾合作委员会
- 的openssl
- openssl-开发
- 下载Python 2.7:
wget -c https://www.python.org/ftp/python/2.7.10/Python-2.7.10.tgz
- 解压Python 2.7二进制文件:
tar xzf Python-2.7.10.tgz
- 配置和安装Python:
cd Python-2.7.10 ./configure make altinstall
- 检查Python 2.7是否已成功安装:
python2.7 -V
步骤2.安装点
下载get-pip.py文件并安装:
wget -c https://bootstrap.pypa.io/get-pip.py
python2.7 get-pip.py
步骤3.,安装SoftLayer软件包
python2.7 -m pip install SoftLayer
步骤4.安装参数解析器
python2.7 -m pip install argparse
用例
标记用例可以分为三类:
- 将标签添加到设备
- 根据标签列出设备
- 从设备上删除标签
将标签添加到设备
将标签添加到单个设备
#python2.7 SetServerTags.py -user masteruser1 -apiKey
<Api Key> -tag 'tagA' -fqdn sepbmi1.ibm.com
该命令产生以下输出。 后面的命令将产生类似的输出。
将多个标签添加到给定设备
python2.7 SetServerTags.py -user masteruser1 -apiKey <Api Key> -tag 'tag1,tag2,tag3' -fqdn hostbmi1.example.com
将多个标签添加到多个设备
#python2.7 SetServerTags.py -user masteruser1 -apiKey <Api Key> -tag 'tag1,tag2,tag3' -fqdn 'hostbmi1.example.com,sepbmi1.ibm.com'
将标签添加到属于用户的所有设备
#python2.7 SetServerTags.py -user masteruser1 -apiKey <Api Key> -tag 'tagB'
列出具有给定标签的所有设备
#python2.7 ServerTagging.py -user masteruser1 -apiKey <Api Key> -tag 'tag1'
从设备上删除标签
从给定设备中删除标签
python2.7 SetServerTags.py -user masteruser1 -apiKey <Api Key> -tag '' -fqdn hostbmi1.example.com
从多个设备删除标签
#python2.7 SetServerTags.py -user masteruser1 -apiKey <Api Key> -tag '' -fqdn 'hostbmi1.example.com,sepbmi1.ibm.com'
从所有设备删除所有标签
# python2.7 SetServerTags.py -user masteruser1 -apiKey <Api Key> -tag ''
样例代码
本部分包含基于Python的应用程序代码,这些代码演示了如何使用SoftLayer API进行标记。 这些代码示例将用户名( ‑user
),API密钥( ‑apiKey
),标签( ‑tag
)和设备的主机名( ‑fqdn
)传递为上述SetServerTags.py和ServerTagging.py脚本的参数。 SetServerTags.py设置设备上的标签,ServerTagging.py根据传递的参数检索与标签关联的设备。 然后,脚本将导入SoftLayer程序包并解析参数。 用户名和API密钥用于执行身份验证和创建客户端对象,此后,将调用适当的API在设备上设置标签或检索与特定标签关联的设备。
Python代码以获取与标签关联的设备
#Importing required libraries
import argparse
import SoftLayer
import sys
#Set up the argument parser to accept the command line arguments passed to the Python script.
parser = argparse.ArgumentParser(description='Welcome !! This script fetches Server details based on Tagging')
parser.add_argument('-user',action='append', type=str, help='Input for User name')
parser.add_argument('-apiKey',action='append', type=str, help='Input for API Key')
parser.add_argument('-tag',action='append', type=str, help='Input for tag name')
parser.add_argument('-fqdn',action='append', type=str, help='Input for Device fqdn')
args = parser.parse_args()
apiUsername = args.user[0]
apiKey = args.apiKey[0]
tagName = args.tag[0]
#Pass Username and apiKey to the SoftLayer.client method to get Client details
client = SoftLayer.Client(username=apiUsername, api_key=apiKey)
#Check if the authentication is successful using the client object
userId = client['Account'].getCurrentUser(mask='id')
#Get the tag data from the client object by calling getTagByTagName method
tagData = client['Tag'].getTagByTagName(tagName,filter={'references':{'usrRecordId':userId}})
# Get the ID of the tag and store all the references of the tag in the devices variable
tagId = tagData[0]['id']
devices = client['Tag'].getReferences(id=tagId,mask='resourceTableId')
#Use a for loop to browse through all the devices, and fetch the device fqdn
for each in devices:
devicefqdn=client['Hardware'].getObject(id=each['resourceTableId'],mask='fullyQualifiedDomainName')
将设备与标签关联的Python代码
#Steps are same here till the checking of authentication
# Get all servers belonging to the User using the getHardware method
serverIds = client['Account'].getHardware(mask='id,fullyQualifiedDomainName')
# To set tag on a device or multiple devices
for each in serverIds:
if (each['fullyQualifiedDomainName'] in fqdn or each['fullyQualifiedDomainName'] == fqdn): #tag is added to required fqdn
try:
setTag = client['Tag'].setTags(tagName,'HARDWARE',each['id'],'lll')
setTag = client['Tag'].setTags(tagName,'HARDWARE',each['id'],'lll')
# To set tags on all the devices belonging to a user
for each in serverIds:
try:
setTag = client['Tag'].setTags(tagName,'HARDWARE',each['id'],'lll')
结论
本教程向您介绍了SoftLayer标签,并向您展示了如何使用API关联标签以及如何从API检索标签。 此外,我们还探讨了涉及添加,列出和删除标签的各种用例。 我们希望对SoftLayer标记功能的简短讨论能增进您对标记的理解,并向您展示如何帮助您简化业务运营。
最后,我们要感谢两位同事的大力支持和帮助:
- Vivekanandan Subramanian – IBM云技术销售执行架构师
- Prabhakar Attaluri – IBM云技术销售杰出工程师
翻译自: https://www.ibm.com/developerworks/cloud/library/cl-softlayer-tagging-trs/index.html