StyleBookの設定

組み込み関数

StyleBooks の式では、組み込み関数を使用できます。

たとえば、組み込み関数str()を使用して、数値を文字列に変換できます。

str($parameters.order)

または、組み込み関数int()を使用して、文字列を整数に変換することもできます。

int($parameters.priority)

以下は、StyleBookの式でサポートされる組み込み関数とその使用例の一覧です。

str()

str()関数は、入力引数を文字列値に変換します。

許可される引数の種類は次のとおりです。

  • string
  • number
  • tcp-port
  • boolean
  • ipaddress

  • "set-" + str(10)関数は"set-10"を返します。
  • str(10)関数は10を返します。
  • str(1.1.1.1)関数は1.1.1.1を返します。
  • str(T rue)関数は"T rue"を返します。
  • str(ADM)関数は"mas"を返します。

int()

このint()関数は、文字列、数値、IP アドレス、またはtcpportを引数として取り、整数を返します。

  • int("10")関数は10を返します。
  • int(10)関数は10を返します。
  • int(ip('0.0.4.1'))関数は1025を返します。

bool()

bool()関数は、引数として任意の型を取ります。引数の値がfalse、空の場合、または存在しない場合、この関数はfalseを返します。

それ以外の場合は、trueを返します。

  • bool(true)関数はtrueを返します。
  • bool(false)関数はfalseを返します。
  • bool($parameters.a)関数は、 $parameters.afalse 、空、または存在しない場合にfalseを返します。

len()

len()関数は、引数として文字列またはリストを受け取り、文字列内の文字数またはリスト内の項目数を返します。

例 1

次のように置換を定義した場合、

items: ["123", "abc", "xyz"]

len($substitutions.items)関数は 3を返します

例 2

len("NetScaler Console")関数は10を返します。

サンプル 3

$parameters.vipsに値['1.1.1.1', '1.1.1.2', '1.1.1.3']がある場合、len($parameters.vips)関数は3を返します。

min()

min()関数は、リスト、一連の数値、または TCP ポートのいずれかを引数として取り、最小の項目を返します。

一連の数字/TCP ポートの例:

  • min(80, 100, 1000)関数は80を返します。
  • min(-20, 100, 400)関数は-20を返します。
  • min(-80, -20, -10)関数は-80を返します。
  • min(0, 100, -400)関数は-400を返します。

番号/TCPポートのリストを含む例

  • $parameters.portsのサポートはTCPポートのリストで、値は次のとおりです。 [80, 81, 8080]

    min($parameters.ports)関数は80を返します。

max()

max()関数は、リスト、一連の数値、または TCP ポートのいずれかを引数として取り、最大の項目を返します。

一連の数字/TCP ポートの例:

  • max(80, 100, 1000)関数は1000を返します。
  • max(-20, 100, 400)関数は400を返します。
  • max(-80, -20, -10)関数は-10を返します。
  • max(0, 100, -400)関数は100を返します。

番号/TCPポートのリストを含む例

  • $parameters.portsのサポートはTCPポートのリストで、値は次のとおりです:. [80, 81, 8080]

    max($parameters.ports)関数は8080を返します。

bin()

bin()関数は、引数として数値を取り、バイナリ形式で数値を表す文字列を返します。

式の例:

bin(100)関数は0b1100100を返します。

oct()

oct()関数は、引数として数値を取り、8 進形式で数値を表す文字列を返します。

式の例:

oct(100)関数は0144を返します。

hex()

hex()関数は、引数として数値を取り、16 進数形式で数値を表す小文字の文字列を返します。

式の例:

hex(100)関数は0x64を返します。

lower()

lower()関数は、引数として文字列を受け取り、小文字で同じ文字列を返します。

lower("ADM")関数はadmを返します。

upper()

upper()関数は、引数として文字列を受け取り、大文字で同じ文字列を返します。

upper("NetScaler Console")関数はNetScaler Consoleを返します。

sum()

このsum()関数は、数値のリストまたはtcpportsを引数として取り、リスト内の数値の合計を返します。

例 1

置換を次のように定義した場合: 置換:

list-of-numbers = [11, 22, 55]

sum($substitutions.list-of-numbers)関数は88を返します。

例 2

$parameters.ports[80, 81, 82]の場合 、sum($parameters.ports)関数は243を返します 。

pow()

pow()関数は、引数として2つの数字を取り、2番目の1の累乗に上げられた最初の引数を表す数値を返します。

pow(3,2)関数は9を返します。

ip()

ip()関数は、引数として整数、文字列、または IP アドレスを受け取り、入力値に基づいて IP アドレスを返します。

  • ip 関数で IP アドレスを指定します。

    ip(3.1.1.1)関数は3.1.1.1を返します。

  • ip 関数に文字列を指定します。

    ip('2.1.1.1')関数は 2.1.1.1を返します

  • ip 関数に整数を指定します。

    • ip(12)関数は0.0.0.12を返します。

    • ip 関数で文字列として整数を指定すると、入力と同等の IP アドレスを返します。

      ip('1025')関数は0.0.4.1を返します。

    この関数は、整数の加算および減算操作もサポートし、結果の IP アドレスを返します。

    • 追記: ip(1025) + ip(12)関数は0.0.4.13を返します。

    • 減算: ip('1025') - ip(12)関数は0.0.3.245を返します。

    • 加算と減算を組み合わせる: ip('1.1.1.1') + ip('1.1.1.1') – ip(2)2.2.2.0を返します。

ip_network ()

ip_network関数は、引数として IP アドレスとネットマスク長を取り、IP ネットワーク表記を返します。

例 1

ip_network(1.1.1.1, 28)関数は1.1.1.1/28を返します。

例 2

$parameters.ipaddrの価値1.1.1.1を考えてみましょう。ip_network($parameters.ipaddr, 30)関数は1.1.1.1/30を返します。

例 3

$parameters.netmask-lenの価値24を考えてみましょう。ip_network(23.1.12.76, $parameters.netmask-len)関数は23.1.12.76/24を返します。

network_ip ()

network_ip() この関数は、指定された IP ネットワークの最初の IP アドレスを返します。

network_ip(1.1.1.1/28)関数は1.1.1.0を返します。この例では、 1.1.1.0 は指定されたネットワーク内の最初の IP アドレスです。

subnets()

subnets()関数は、指定された IP ネットワークとネットマスク長からのサブネットのリストを返します。

subnets(1.1.1.1/28, 30)関数は、指定された IP ネットワークとネットマスク長からサブネットリストを返します。出力は次のようになります。

[1.1.1.0/30', '1.1.1.4/30', '1.1.1.8/30', '1.1.1.12/30']

netmask_ip ()

netmask_ip()関数は、指定された IP ネットワークのネットマスク IP アドレスを返します。

netmask_ip(1.1.1.1/28)関数は255.255.255.240を返します。指定された IP ネットワークの、 255.255.255.240 はネットマスク IP アドレスです。

is_netmask_ip ()

is_netmask_ip()関数は、 ipaddressを入力として受け入れます。また、指定された値が有効なネットマスク IPアドレスであればTrueを返します。

例 1

指定された値が有効なネットマスク IP アドレスであるため、is_netmask_ip(255.255.255.240)関数はTrueを返します。

例 2

指定された値が有効なネットマスク IP アドレスではないため、is_netmask_ip(255.255.255.232)関数はFalseを返します。

broadcast_ip ()

broadcast_ip()関数は、指定された IP ネットワークのブロードキャスト IP アドレスを返します。

broadcast_ip(1.1.1.1/28)関数は1.1.1.15を返します。指定した IP ネットワークで、1.1.1.15はブロードキャスト IP アドレスです。

cidr ()

cidr()関数は、指定された IP ネットワークの CIDR 表記を返します。

cidr(1.1.1.1/28) 関数は、1.1.1.0/28を返します。指定した IP ネットワークの場合、 1.1.1.0/28 は CIDR 表記です。

is_cidr ()

is_cidr()関数は、 ipnetworkを入力として受け入れます。そして、指定された値が IP ネットワークの CIDR 表記と一致した場合にTrueが返されます。

例 1

指定された値が指定されたネットワークのCIDR表記であるため、is_cidr(1.1.1.0/24)関数はTrueを返します。

例 2

指定されたネットワークの CIDR表記が指定された値と異なるため、is_cidr(1.1.1.1/28)関数はFalseを返します。

is_in_network ()

is_in_network()関数は、ipnetworkおよびipaddressの値を受け入れます。そして、指定された値が IP ネットワークの CIDR 表記と一致した場合にTrueが返されます。

例 1

1.1.1.121アドレスが1.1.1.1/24ネットワークの一部であるため、is_in_network(1.1.1.1/24, 1.1.1.121)関数はTrueを返します。

例 2

2.1.1.1アドレスが1.1.1.1/28ネットワークの一部ではないため、 is_in_network(1.1.1.1/28, 2.1.1.1)関数はFasleを返します。

base64.encode()

base64.encode() この関数は、文字列引数を受け取り、base64 でエンコードされた文字列を返します。

base64.encode("abcd")関数はYWJjZA==を返します。

base64.decode()

base64.decode関数は、base64 でエンコードされた文字列を引数として取り、デコードされた文字列を返します。

base64.decode("YWJjZA==")関数はabcdを返します。

exists()

exists()関数は、任意の型の引数を受け取り、ブール値を返します。入力に値がある場合戻り値はTrueです。戻り値は、入力引数が値を持たない場合 (つまり、値がない場合)False です。

$parameters.monitor はオプションのパラメータであるとします。構成パックの作成時にこのパラメータに値を指定すると、($parameters.monitor)関数はTrueを返します。

それ以外の場合は、Falseを返します。

filter()

filter()関数は 2 つの引数を取ります。

引数1:1つの引数を受け取ってブーリアン型の値を返す置換関数です。

引数2:一覧です。

この関数は、最初の引数の置換関数に渡されたときに各要素がTrueに評価される元のリストのサブセットを返します。

置換関数を次のように定義したとします。

Substitutions:

x(a): $a != 81

この関数は、入力値が81と等しくない場合にTrueを返します。それ以外の場合は、Falseを返します。

$parameters.ports[81, 80, 81, 89]と想定します。

filter($substitutions.x, $parameters.ports)は、リストからすべての81のオカレンスを削除して[80, 89]を返します 。

if-then-else()

if-then-else()関数は 3つの引数を取ります。

引数 1: ブール式

引数 2: 任意の式

引数 3: 任意の式 (オプション)

引数 1 の式がTrueと評価された場合、関数は引数 2 として指定された式の値を返します。

それ以外の場合は、引数3が指定されている場合、この関数は引数3の式の値を返します。

引数 3 が指定されていない場合、関数はnoを返します。

例 1

$parameters.servicetypeが値HTTPを持っている場合、if-then-else($parameters.servicetype == HTTP, 80, 443)関数は80を返します 。それ以外の場合、関数は443を返します。

例 2

if-then-else($parameters.servicetype == HTTP, $parameters.hport, $parameters.sport) 関数は、$parameters.servicetypeHTTP値を持っている場合、$parameters.hportの値を返します 。

それ以外の場合、関数は$parameters.sportの値を返します。

サンプル 3

$parameters.servicetypeが値HTTPを持っている場合、if-then-else($parameters.servicetype == HTTP, 80)80を返します 。

それ以外の場合、関数は値を返しません。

join()

join()関数は、次の 2 つの引数を取ります。

引数 1: numbertcp-portstringipaddressのリスト

引数 2: 区切り文字列 (オプション)

この関数は、引数 1 として指定されたリストの要素を文字列に結合します。各要素は、引数 2 として指定された区切り文字列で区切られます。引数 2 が指定されていない場合、リスト内の要素は 1 つの文字列として結合されます。

  • $parameters.ports[81, 82, 83]です。

    • デリミタ引数付き:

      join($parameters.ports, '-')関数は81-82-83を返します。

    • デリミタ引数なし:

      join($parameters.ports)関数は818283を返します。

split()

split()関数は、指定された区切り文字に応じて、複数のリストに入力文字列を分割します。セパレータを指定しなかったり、空白 ('') を指定した場合、この関数はスペースをセパレータとみなし、文字列をリストに分割します。

例:

  • split('Example_string_split', 's')関数は['Example_','tring_','plit']を返します。

  • split('Example string split')関数は['Example','string','split']を返します。

  • split('Example string split', '')関数は['Example','string','split']を返します。

  • split('Example string')関数は['Example','string']を返します。

    この関数は、連続空間を 1 つのスペースとみなします。

map()

map()関数は 2 つの引数を取ります。

引数 1: 任意の関数

引数 2: 要素のリスト

この関数は、リスト内の各要素が引数 2の対応する要素に関数map() (引数 1) を適用した結果であるリストを返します。

引数1で許可される関数は次のとおりです。

  • 1つの引数を取る組み込み関数:

    base64.encode, base64.decode, bin, bool, exists, hex, int, ip, len, lower, upper, oct, quotewrap, str, trim, upper, url.encode, url.decode

  • 1つ以上の引数を受け取る置換関数。

$parameters.numsが[81, 82, 83]だと仮定します。

  • Map using a built-in function, str

    map(str, $parameters.nums)関数は ["81", "82", "83"]を返します

    map関数の結果は文字列の一覧であり、文字列の各要素は、入力した一覧($parameters.nums)の対応する要素にstr関数を適用して処理されています。

  • 置換関数を使用したmap

    • Substitutions:

      add-10(port): $port + 10

    • 表現:

      map($substitutions.add-10, $parameters.nums)関数は、数値のリストを返します。 [ 91, 92, 93 ]

このマップ関数の結果は、数値のリストです。各要素は、入力リスト($parameters.nums)内の対応する要素に置換関数$substitutions.add-10を適用することによって計算されます。

quotewrap()

quotewrap()関数は、引数として文字列を受け取り、入力値の前後に二重引用符を追加した後に文字列を返します。

quotewrap("ADM")関数は "ADM"を返します

replace()

replace()関数は、次の 3 つの引数を取ります。

引数 1: a string または以下の組み込み型のリスト:

  • string
  • number
  • ipaddress
  • tcp-port
  • boolean

引数 2: 単一の値、または引数 1 で指定された型と一致する型を持つ値のリスト

引数 3: 引数 1 で指定されたものと同じ型の単一値 (オプション)

replace()関数は、引数 2 のすべての出現箇所を引数 1 の引数 3 に置き換えます。

引数 3 が指定されていない場合、引数 2 のすべての出現箇所が引数 1 から削除されます。

  • replace('abcdef', 'def', 'xyz')関数がabcxyzを戻します。

    defのすべてのオカレンスはxyzに置き換えられます。

  • replace('abcdefabc', 'def')abcabcを返します。

    引数 3 がないため、defは結果の文字列から削除されます。

  • replace('An#example@to%replace!characters', ['@', '#', '!', '%'], '_')関数がAn_example_to_replace_charactersを戻します。

    出力文字列には、 ['@', '#', '!', '%']で指定した文字の代わりにアンダースコア (_) が付きます。

  • replace([10.10.10.1, 10.10.10.2, 10.10.10.3, 10.10.10.4], [10.10.10.2, 10.10.10.4])関数が[10.10.10.1, 10.10.10.3]を戻します。

    引数 3 がないので、10.10.10.210.10.10.4は結果のIPアドレスのリストから削除されます。

  • replace([8080, 8081, 8082, 8083, 8084], 8083, 80)関数が[8080, 8081, 8082, 80, 8084]を戻します。

    8083のすべてのオカレンスは80に置き換えられます。

trim()

trim()関数は、入力文字列から先頭と末尾の空白を取り除いた文字列を返します。

trim(' abc ')関数はabcを返します。

truncate()

truncate()関数は、次の 2 つの引数を取ります。

引数 1: 文字列

引数 2: 数値

この関数は、引数 1 の入力文字列を引数 2 で指定された長さに切り捨てた文字列を返します。

truncate('NetScaler Console', 6)Citrixを返します。

distinct()

distinct()関数は、リスト入力から一意の項目を抽出します。

例: $parameters.input_list['ADM', 'ADC', 'VPX', 'ADC', 'ADM', 'CPX']の場合、distinct($parameters.input_list)関数は['ADM', 'ADC', 'VPX', 'CPX']を返します 。

url.encode()

url.encode()関数は、RFC 3986 に従って ASCII 文字セットを使用して文字が変換される文字列を返します。

url.encode("a/b/c")関数はa%2Fb%2Fcを返します。

url.decode()

url.decode()関数は、URL エンコードされた引数が RFC 3986 に従って通常の文字列にデコードされる文字列を返します。

url.decode("a%2Fb%2Fc")関数はa/b/cを返します。

is-ipv4 ()

is-ipv4()関数は、引数として IP アドレスを受け取り、IP アドレスが IPv4 形式の場合はブール値Trueを返します。

is-ipv4(10.10.10.10)関数は Trueを返します

is-ipv6 ()

is-ipv6()関数は、引数として IP アドレスを受け取り、IP アドレスが IPv6形式の場合はブール値Trueを返します。

is-ipv6(2001:DB8::)関数は Trueを返します

startsWwith ()

startswith()関数は、文字列が指定されたプレフィックスで始まるかどうかを決定します。この関数には、2 つの必須文字列引数が必要です。

startswith(str, sub_str)

この関数は、文字列(str )が部分文字列(sub_str)で始まる ときにTrueを返します。

  • startswith('Citrix', 'Ci')関数はTrueを返します。
  • startswith('Citrix', 'iC')関数は Falseを返します
  • startswith('Citrix', 'Ab')関数は Falseを返します

endswith ()

endswith()関数は、文字列が指定された接尾辞で終わるかどうかを決定します。この関数には、2 つの必須文字列引数が必要です。

endswith(str, sub_str)

この関数は、文字列(str )が部分文字列(sub_str)で終わる ときにTrueを返します。

  • endswith('Citrix', 'ix')関数はTrueを返します。
  • endswith('Citrix', 'Ix')関数はFalseを返します。
  • endswith('Citrix', 'ab')関数はFalseを返します。

() を含む

contains()関数は、文字列に指定された部分文字列が含まれているかどうかを判定します。この関数には、2 つの必須文字列引数が必要です。

許可される引数の種類は次のとおりです。

  • string
  • number
  • tcp-port
  • boolean
  • ipaddress

contains(str, sub_str)

この関数は、substring (sub_str) が文字列 (str) 内のどこかに含まれている場合に、Trueを返します。

  • contains('Citrix', 'tri')関数はTrueを返します。
  • contains('Citrix', 'Ci')関数はTrueを返します。
  • contains('Citrix', 'ti')関数は Falseを返します

この関数を使用して、特定のアイテムがリストに属しているかどうかを確認することもできます。

list_of_strings = [“Citrix”, “Core”, ”Values”, ”Integrity”]

contains($parameters.list_of_strings, “Values”)
<!--NeedCopy-->

この例では、リストにValues項目が含まれているため、contains()関数がTrueを返します。

部分文字列 ()

substring() 関数を使用して、文字列から部分文字列を抽出します。

substring(str, start_index, end_index)

この関数には、2 つの必須引数と 1 つのオプションの整数引数が必要です。

  • str (必須)
  • start_index (必須)
  • end_index (オプション)

この関数は、指定されたインデックス位置の間にある文字列 (str) から部分文字列を返します。終了インデックス位置を指定しない場合、関数は開始インデックスから文字列の末尾までの部分文字列を抽出します。

注:

end_indexを指定すると、end_index位置の文字は部分文字列から除外されます。

例:

  • substring('Citrix', 2)関数は trixを返します

  • substring('Citrix', 10)関数は (") を返します

    この例では、無効なstart_index位置があるため、関数は空白の文字列を返します。

  • substring('Citrix', 2, 4)関数は trを返します

    この例では、関数は 2 ~ 4 つのインデックス位置の間の文字を抽出します。

  • substring('Citrix', -3)関数は rixを返します

    文字列の末尾にある文字を抽出する場合は、 start_index 引数に負の値を指定します。

    この例では、関数は、文字列の最後の 3 文字を含む部分文字列を抽出します。

match()

match()関数は、入力文字列が定義された正規表現パターンと一致するかどうかをチェックします。この関数は、正規表現パターンと検索文字列を引数として受け入れます。オプションで、ブール型を指定して、大文字と小文字を区別するパターンを無視することもできます。

  • match(“^[A-Z0-9]{2}_[A-Z0-9]{2,10}$”, “A2_B2”)Trueを返します。

  • match(“^[A-Z0-9]{2}_[A-Z0-9]{2,10}$”, “a2_b2”)Falseを返します。

  • match(“^[A-Z0-9]{2}_[A-Z0-9]{2,10}$”, “a2_B2”, $parameters.ignore_case)Trueを返します。

sha256()

この関数を使用して、任意の文字列の SHA-256 ハッシュを計算します。この関数は、任意の長さの文字列入力を受け入れ、固定長 (64 文字) のハッシュ文字列を返します。

components:
    -
        name: lbvserver-comp
        type: ns::lbvserver
        properties:
            name: sha256(lbserver-name)
            servicetype: SSL
            ipv46: 10.10.10.10
<!--NeedCopy-->

この例では、 lbserver-nameがNetScalerオブジェクトのハッシュ文字列として表示されます。

この関数はエクスプレッションを入力として受け入れることもできます。

components:
    -
        name: lbvserver-comp
        type: ns::lbvserver
        properties:
            name: sha256($parameters.lb-appname)
            servicetype: SSL
            ipv46: 10.10.10.10
<!--NeedCopy-->

relate()

relate()関数は、一連のリストから辞書オブジェクトのリストを作成します。

これには次の 2 つの引数があります。

引数 1: キー名を表す文字列のリスト。

引数 2: リストのリスト。各リストには、引数 1 の対応するキー名の値が含まれます。引数 2 の各リストは同じ長さでなければなりません。引数 2 のリストの数は、引数 1 の文字列の数と等しくなければなりません。

name: test_relate_3
description: "Hello World StyleBook."
namespace: com.citrix.adc.stylebooks
schema-version: "1.0"
version: "1.1"

import-stylebooks:
    -
        namespace: netscaler.nitro.config
        prefix: ns
        version: "10.5"
    -
        namespace: com.citrix.adc.stylebooks
        prefix: stlb
        version: "1.0"
        parameters:
    -
        name: namesofservers
        description: "Provide the names of LB VServers"
        type: string[]
    -
        name: listofips
        description: "Provide the list of IP Addresses"
        type: string[]
    -
        name: list_of_keys
        type: string[]
        default:
        - "name"
        - "ip"

    substitutions:
        list_of_values: [$parameters.namesofservers,$parameters.listofips]
    components:
    -
        name: svc-comp
        type: object
        properties:
        svcdetails: relate($parameters.list_of_keys,$substitutions.list_of_values)

    -
        name: lb-comp
        type: ns::lbvserver
        repeat: $components.svc-comp.properties.svcdetails
        repeat-item: svcd
        properties:
            name: $svcd['name']
            servicetype: HTTP
            ipv46: $svcd['ip']
            port: 80
<!--NeedCopy-->

この例の構成は次のとおりです。

  • parametersセクションには、nameipを含むlist_of_keysというリストがあります 。

  • substitutionsセクションには、次の 2つのリストを含むlist_of_valuesというリストがあります。

    • 仮想サーバー名のリスト (string)
    • IP アドレスのリスト (string)。

relate()組み込み関数は、list_of_keysおよびlist_of_valuesを引数として受け入れます。次に、この関数は辞書オブジェクトのリストを作成します。各オブジェクトには、最初のリストの名前と 2 番目のリストの IP アドレスがあります。

次の仮想サーバーのリストを提供する場合:

["lb1","lb2"]
<!--NeedCopy-->

および仮想サーバーの IP アドレスのリストは次のとおりです。

["1.1.1.1","2.2.3.3"]
<!--NeedCopy-->

その後、relate()関数は次のリストを返します。

[{"name": "lb1", "ip": "1.1.1.1"},{"name": "lb2", "ip": "2.2.3.3"}]
<!--NeedCopy-->

StyleBookは、 components セクション内のこの辞書オブジェクトのリストを繰り返し処理して、対応する仮想サーバーを作成します。

複数 ()

multiple()関数は、次の 2 つの引数を取ります。

引数 1: a numberstringbooleanipaddresstcp-port、またはpassword

引数 2: a number

multiple(argument1, argument2)関数は、引数 1 のコピーを多数含むリストを返します。コピーの数は、引数 2 に渡された数と同じです。

  • multiple(10.10.10.10, 3)関数は[10.10.10.10, 10.10.10.10, 10.10.10.10]を返します。

  • multiple(8080, 4)関数は[8080, 8080, 8080, 8080]を返します。