Kitura

APIDoc Build Status - Master macOS Linux Apache 2 Slack Status

CloudEnvironment

CloudEnvironment (以前称为 CloudConfiguration) 是一个便捷的 Swift 包,用于从各种云计算环境(例如但不限于 Cloud Foundry 和 Kubernetes)访问映射到 JSON 对象的环境变量。

例如,要获取访问 Cloudant 数据库的凭据,您需要在 Cloud Foundry 中运行的时候解析 VCAP_SERVICES 环境变量;而在 Kubernetes 中运行的时候,您可能需要解析一个名为 CLOUDANT_CREDENTIALS 的环境变量才能获取相同的凭据。换句话说,获取特定环境变量值的路径可能因不同的云环境而异。通过使用这个包,您可以使您的 Swift 应用程序在获取这些值时与环境无关。使用 CloudEnvironment 可以将这些底层细节从您的应用程序源代码中抽象出来。

Swift 版本

最新版本的 CloudEnvironment 适用于 Swift 二进制文件的 4.0 及更高版本。 您可以通过此链接下载 Swift 二进制文件。

抽象和支持的搜索模式类型

这个包允许您定义一个查找键,您的 Swift 应用程序可以在搜索其对应的值时使用它。这种抽象将您的应用程序与用于环境变量的实际名称解耦。例如,如果您创建了一个名为 my-awesome-cloudant-db 的 Cloudant 服务,您不必在 Swift 代码中使用此名称作为键来获取其凭据。相反,您可以定义一个查找键,例如 cloudant-credentials,并将其映射到实际的服务名称 my-awesome-cloudant-db

此库还允许您定义一个搜索模式数组,用于查找映射到环境变量(例如服务凭据)的 JSON 对象。搜索模式数组中的每个元素都将被执行,直到找到该变量。 CloudEnvironment 支持使用以下三种搜索模式类型搜索值

您可以在名为 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-credentialsobject-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

如上所示,该库简化了获取服务凭据的过程。 有关构成凭据集的不同元素(例如,usernamepasswordurl 等)和服务凭据的访问方法的详细信息,请查看 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 文档

有关更多信息,请访问我们的 API 参考

社区

我们喜欢讨论服务器端 Swift 和 Kitura。 加入我们的 Slack 来认识团队!

许可

此库已获得 Apache 2.0 许可。 完整的许可证文本可在LICENSE中找到。