实例角色
StyleBooks 支持在 NetScaler 实例上进行以下配置:
-
对称配置 - 当配置包应用于多个 NetScaler 实例时,所有实例上部署的配置都相同。
-
非对称配置 - 当配置包应用于多个 NetScaler 实例时,所有实例上部署的配置都不同。例如,在默认的 Microsoft Skype for Business StyleBook 中,每个 NetScaler 实例都必须部署不同的配置。
StyleBooks 的“实例角色”功能可帮助您创建非对称配置。在此功能中,配置包中的每个 NetScaler 实例都可以分配不同的角色。该角色决定了 NetScaler 实例接收的配置包的配置对象。
注意事项:
-
StyleBook 中的实例角色集在创建 StyleBook 时定义。
-
在创建或更新配置包时,角色会分配给特定的 NetScaler 实例。
目标角色部分
在 StyleBook 中,“target-roles”通常放置在“import-StyleBooks”部分之后和“parameters”部分之前。StyleBook 支持的所有角色都在“target-roles”部分中声明。
在以下 StyleBook 示例中,“target-roles”部分中定义了两个角色 - A 和 B。
target-roles:
-
name: A
name: B
min-targets: 2
max-targets: 5
您可以看到角色 B 还定义了两个可选子属性:
min-targets 和 max-targets。
min-targets 指定从该 StyleBook 创建配置包时分配此角色的最小强制 NetScaler 实例数。max-targets 指定从该 StyleBook 创建配置包时可分配此角色的最大 NetScaler 实例数。
如果未指定这些子属性,则可为该角色配置的 NetScaler 实例数量没有限制。对于 min-targets = 0,与该角色关联的配置是可选的。对于 min-targets = 1,配置是强制性的,并且必须至少为一个 NetScaler 实例配置该角色。
角色“default”
除了显式定义的角色之外,所有 StyleBook 都具有一个隐式角色。此隐式角色称为默认角色,其用法与 StyleBook 中的任何其他角色相同。创建配置包时,如果未为 NetScaler 实例分配特定角色,则该实例将隐式分配给“default”角色。然后,该实例会接收由具有“default”角色的组件生成的任何配置对象。
具有角色的组件
定义 StyleBook 支持的角色(包括“default”角色)后,这些角色可以在 StyleBook 的组件部分中使用。如果您希望某个组件仅部署在扮演特定角色的 NetScaler 实例上,则可以指定 roles 属性作为组件的一部分,如以下组件示例所示:
-
name: C1
type: ns::lbvserver
roles:
- A
properties:
name: lb1
servicetype: HTTP
ipv46: 1.1.1.1
port: 80
在此示例中,组件生成一个
lbvserver,并部署在扮演角色 A 的实例上。组件的 roles 属性是一个 list,并且可以为组件分配多个角色。这些角色应已在 StyleBook 的 target-roles 部分中声明。
注意
如果 StyleBook 中的组件未指定角色属性,则该组件生成的配置对象将在所有 NetScaler 实例上创建,无论其角色如何。您可以有效利用此功能来创建可应用于配置包所有实例的配置对象。
考虑一个具有两个角色和四个组件的 StyleBook。
-
组件 C1 具有角色 A 和 B
-
组件 C2 具有角色 B
-
组件 C3 未定义任何角色
-
组件 C4 具有“default”角色
此 StyleBook 的组件部分如下所示:
components:
-
name: C1
type: ns::lbvserver
roles:
- A
- B
properties:
name: lb1
servicetype: HTTP
ipv46: 1.1.1.1
port: 80
-
name: C2
type: ns::lbvserver
roles:
- B
properties:
name: lb2
servicetype: HTTP
ipv46: 12.12.12.12
port: 80
-
name: C3
type: ns::lbvserver
properties:
name: lb3
servicetype: HTTP
ipv46: 13.13.13.13
port: 80
-
name: C4
type: ns::lbvserver
roles:
- default
properties:
name: lb4
servicetype: HTTP
ipv46: 14.14.14.14
port: 80
组件 C3 未定义角色,这意味着该组件将部署在所有实例上,无论其角色如何。另一方面,组件 C4 具有“default”角色,这意味着它将应用于未明确分配角色的任何实例。
现在,假设您要使用此 StyleBook 创建一个配置包,并将其部署在五个 NetScaler 实例上。您可以按以下方式为实例分配角色:
-
角色 A 分配给实例 T1、T2、T3 和 T4
-
角色 B 分配给实例 T2、T3 和 T4
-
实例 T5 未分配任何角色
下图总结了角色分配,并显示了每个 NetScaler 实例接收到的最终配置:
组件 C3 部署在所有实例上,无论角色如何,因为此组件没有
roles 属性。
使用“试运行”功能查看和验证:
-
角色的分配
-
在每个 NetScaler 实例上创建的配置对象
构建您的 StyleBook
StyleBook “demo-target-roles” 的完整内容如下:
---
name: demo-target-roles
namespace: com.example.stylebooks
version: "1.2"
schema-version: "1.0"
import-stylebooks:
-
namespace: netscaler.nitro.config
prefix: ns
version: "10.5"
parameters:
-
name: appname
type: string
required: true
key: true
target-roles:
-
name: A
-
name: B
min-targets: 2
max-targets: 5
components:
-
name: C1
type: ns::lbvserver
roles:
- A
- B
properties:
name: lb1
servicetype: HTTP
ipv46: 1.1.1.1
port: 80
-
name: C2
type: ns::lbvserver
roles:
- B
properties:
name: lb2
servicetype: HTTP
ipv46: 12.12.12.12
port: 80
-
name: C3
type: ns::lbvserver
properties:
name: lb3
servicetype: HTTP
ipv46: 13.13.13.13
port: 80
-
name: C4
type: ns::lbvserver
roles:
- default
properties:
name: lb4
servicetype: HTTP
ipv46: 14.14.14.14
port: 80
下图显示了为示例配置包创建的对象:
使用 API
使用 REST API 时,您可以在创建或更新配置包时为每个 NetScaler 实例指定角色,如下所示。在“targets”块中,指定要部署各个组件的特定 NetScaler 实例的 UUID。
"targets": [
{
"id": "<ADC-UUID>",
"roles": ["A"]
},
]
提供了完整的 REST API 示例供您参考。
POST /
<IP>/stylebook/nitro/v1/config/stylebooks/com.example.stylebooks/1.2/demo-target-roles/configpacks
{
"configpack": {
"parameters": {
"appname": "app1"
},
"targets": [
{
"id": "f53c35c3-a6bc-4619-b4b4-ad7ab6a94ddb",
"roles": ["A"]
},
{
"id": "c08caa1c-1011-48aa-b8c7-9aed1cd38ed0",
"roles": ["A", "B"]
},
{
"id": "88ac90cb-a5cb-445b-8617-f83d0ef6174e",
"roles": ["A", "B"]
},
{
"id": "bf7b0f74-7a83-4856-86f4-dcc951d3141e",
"roles": ["A", "B"]
},
{
"id": "fa5d97ab-ca29-4adf-b451-06e7a234e3da",
"roles": ["default"]
}
]
}
}