CloudEnvironment (以前称为 CloudConfiguration) 是一个便捷的 Swift 包,用于从各种云计算环境(例如但不限于 Cloud Foundry 和 Kubernetes)访问映射到 JSON 对象的环境变量。
例如,要获取访问 Cloudant 数据库的凭据,您需要在 Cloud Foundry 中运行的时候解析 VCAP_SERVICES
环境变量;而在 Kubernetes 中运行的时候,您可能需要解析一个名为 CLOUDANT_CREDENTIALS
的环境变量才能获取相同的凭据。换句话说,获取特定环境变量值的路径可能因不同的云环境而异。通过使用这个包,您可以使您的 Swift 应用程序在获取这些值时与环境无关。使用 CloudEnvironment 可以将这些底层细节从您的应用程序源代码中抽象出来。
最新版本的 CloudEnvironment 适用于 Swift 二进制文件的 4.0
及更高版本。 您可以通过此链接下载 Swift 二进制文件。
这个包允许您定义一个查找键,您的 Swift 应用程序可以在搜索其对应的值时使用它。这种抽象将您的应用程序与用于环境变量的实际名称解耦。例如,如果您创建了一个名为 my-awesome-cloudant-db
的 Cloudant 服务,您不必在 Swift 代码中使用此名称作为键来获取其凭据。相反,您可以定义一个查找键,例如 cloudant-credentials
,并将其映射到实际的服务名称 my-awesome-cloudant-db
。
此库还允许您定义一个搜索模式数组,用于查找映射到环境变量(例如服务凭据)的 JSON 对象。搜索模式数组中的每个元素都将被执行,直到找到该变量。 CloudEnvironment 支持使用以下三种搜索模式类型搜索值
cloudfoundry
- 允许您在 Cloud Foundry 的服务环境变量(即 VCAP_SERVICES
)中搜索值。env
- 允许您搜索映射到环境变量的值。file
- 允许您搜索 JSON 文件中的值。您可以在名为 mappings.json
的文件中指定查找键和搜索模式。该文件必须存在于 Swift 项目根目录下的 config
文件夹中。以下显示了 mappings.json
文件的示例
{
"cloudant-credentials": {
"credentials": {
"searchPatterns": [
"cloudfoundry:my-awesome-cloudant-db",
"env:my_awesome_cloudant_db_credentials",
"file:localdev/my-awesome-cloudant-db-credentials.json"
]
}
},
"object-storage-credentials": {
"credentials": {
"searchPatterns": [
"cloudfoundry:my-awesome-object-storage",
"env:my_awesome_object_storage_credentials",
"file:localdev/my-awesome-object-storage-credentials.json"
]
}
}
}
在上面的示例中,cloudant-credentials
和 object-storage-credentials
是您的 Swift 应用程序应该用来查找相应凭据的查找键。请注意,file
搜索模式旁边的路径必须相对于 Swift 应用程序的根文件夹。
将 CloudEnvironment
包添加到应用程序的 Package.swift
文件中的依赖项中。 将 "x.x.x"
替换为最新的 CloudEnvironment
版本。
.package(url: "https://github.com/Kitura/CloudEnvironment.git", from: "x.x.x")
将 CloudEnvironment
添加到目标的依赖项
.target(name: "example", dependencies: ["CloudEnvironment"]),
更新应用程序的 Package.swift
文件后,导入 CloudEnvironment
模块并初始化一个 CloudEnvironment
实例
import CloudEnvironment
let cloudEnv = CloudEnv()
一旦有了 cloudEnv
实例,您就可以使用它来查询其中一个受支持服务的凭据,例如 Cloudant 或 ObjectStorage,如下所示,这将返回与该服务关联的凭据
let cloudantCredentials = cloudEnv.getCloudantCredentials(name: "cloudant-credentials")
// cloudantCredentials.username, cloudantCredentials.password, cloudantCredentials.url, etc.
let objStorageCredentials = cloudEnv.getObjectStorageCredentials(name: "object-storage-credentials")
// objStorageCredentials.username, objStorageCredentials.password, objStorageCredentials.projectID, etc.
let service1Credentials = cloudEnv.getDictionary("service1-credentials")
let service1CredentialsStr = cloudEnv.getString("service1-credentials")
// Get a default PORT and URL
let port = cloudEnv.port
let url = cloudEnv.url
如上所示,该库简化了获取服务凭据的过程。 有关构成凭据集的不同元素(例如,username
、password
、url
等)和服务凭据的访问方法的详细信息,请查看 API 参考文档。
按照上述方法,您的应用程序可以以运行时环境无关的方式实现,从而抽象出不同云计算环境引入的环境变量管理方面的差异。
此库目前支持以下服务。 因此,您可以以最小的努力获得任何这些服务的服务凭据
如果您在上面没有看到您打算在 Swift 应用程序中使用的服务,您可以利用通用的 getDictionary(name: String)
方法来获取相应的凭据
import CloudEnvironment
let cloudEnv = CloudEnv()
if let credentials: [String:Any] = cloudEnv.getDictionary(name: "service1-credentials") {
// You can now get the corresponding values from the dictionary
}
有关更多信息,请访问我们的 API 参考。
我们喜欢讨论服务器端 Swift 和 Kitura。 加入我们的 Slack 来认识团队!
此库已获得 Apache 2.0 许可。 完整的许可证文本可在LICENSE中找到。