組み込み関数
StyleBooks の式では、組み込み関数を使用できます。
たとえば、組み込み関数str()
を使用して、数値を文字列に変換できます。
str($parameters.order)
または、組み込み関数int()
を使用して、文字列を整数に変換することもできます。
int($parameters.priority)
以下は、StyleBookの式でサポートされる組み込み関数とその使用例の一覧です。
str()
str()
関数は、入力引数を文字列値に変換します。
許可される引数の種類は次のとおりです。
string
number
TCP-port
boolean
IP address
例:
-
"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.a
がfalse
、空、または存在しない場合にfalse
を返します。
len()
len()
関数は、引数として文字列またはリストを受け取り、文字列内の文字数またはリスト内の項目数を返します。
例 1:
次のように置換を定義した場合、
items: ["123", "abc", "xyz"]
len($substitutions.items)
関数は 3
を返します
例 2:
len("NetScaler ADM")
関数は10
を返します。
例 3:
$parameters.vips
に値['1.1.1.1', '1.1.1.2', '1.1.1.3']
がある場合、len($parameters.vips)
関数は3
を返します。
min()
min()
関数は、 リストまたは一連の数値またはtcp-ports
を引数として受け取り、最小の項目を返します。
一連の番号/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-ports
のリストであり、次の値を持ちます:[80, 81, 8080]
.min($parameters.ports)
関数は80
を返します。
max()
max()
関数は、 引数として、リストまたは一連の数値またはtcp-ports
のいずれかを取って、最大の項目を返します。
一連の番号/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-ports
のリストであり、次の値があります:[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 ADM")
関数はNetScaler ADM
を返します。
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 ネットワーク表記を返します。
Example-1:
ip_network(1.1.1.1, 28)
関数は1.1.1.1/28
を返します。
Example-2:
$parameters.ipaddr
の価値1.1.1.1
を考えてみましょう。ip_network($parameters.ipaddr, 30)
関数は1.1.1.1/30
を返します。
Example-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
が返されます。
Example-1:
指定された値が指定されたネットワークのCIDR表記であるため、is_cidr(1.1.1.0/24)
関数はTrue
を返します。
Example-2:
指定されたネットワークの CIDR表記が指定された値と異なるため、is_cidr(1.1.1.1/28)
関数はFalse
を返します。
is_in_network ()
is_in_network()
関数は、ipnetwork
およびipaddress
の値を受け入れます。そして、指定された値が IP ネットワークの CIDR 表記と一致した場合にTrue
が返されます。
Example-1:
1.1.1.121
アドレスが1.1.1.1/24
ネットワークの一部であるため、is_in_network(1.1.1.1/24, 1.1.1.121)
関数はTrue
を返します。
Example-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.servicetype
がHTTP
値を持っている場合、$parameters.hport
の値を返します 。
それ以外の場合、関数は$parameters.sport
の値を返します。
例 3:
$parameters.servicetype
が値HTTP
を持っている場合、if-then-else($parameters.servicetype == HTTP, 80)
は80
を返します 。
それ以外の場合、関数は値を返しません。
join()
join()
関数は、次の 2 つの引数を取ります。
引数 1: 数値、tcp-ports
、文字列、または IP アドレスのリスト
引数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")
関数は "mas"
を返します
replace()
replace()
関数は、次の 3 つの引数を取ります。
引数1:文字列
引数2:文字列またはリスト
引数3:文字列(オプション)
この関数は、引数1の中にある引数2のすべてのアイテムを引数3で置き換えます。
引数 3 が指定されていない場合、引数 2 のすべての出現は引数 1 から削除されます (つまり、空の文字列に置き換えられます)。
文字列の一部を、別の文字列の一部で置き換えます。
-
replace('abcdef', 'def', 'xyz')
関数はabcxyz
を返します。def
のすべてのオカレンスはxyz
に置き換えられます。 -
replace('abcdefabc', 'def')
はabcabc
を返します。3 番目の引数がないので、結果の文字列から
def
が削除されます。
置換する文字リストを文字列で指定します。
$parameters.spl_chars = ['@', '#', '!', '%']
このリストには、入力文字列で置換する必要がある値が含まれています。
replace('An#example@to%replace!characters', $parameters.spl_chars, '_')
関数はAn_example_to_replace_characters
を返します。
出力文字列には、 $parameters.spl_chars
リストで指定された文字の代わりにアンダースコア (_
) が表示されます。
trim()
trim()
関数は、入力文字列から先頭と末尾の空白を取り除いた文字列を返します。
例:
trim(' abc ')
関数はabc
を返します。
truncate()
truncate()
関数は、次の 2 つの引数を取ります。
引数1:文字列
引数2:数字
この関数は、引数1の入力文字列を、引数2で指定された長さに切り捨てた文字列を返します。
例:
truncate('NetScaler ADM', 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 つの必須文字列引数が必要です。
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
を返します。
許可される引数の種類は次のとおりです。
string
number
TCP-port
boolean
IP address
部分文字列 ()
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
は ADCオブジェクトのハッシュ文字列として表示されます。
この関数はエクスプレッションを入力として受け入れることもできます。
例:
components:
-
name: lbvserver-comp
type: ns::lbvserver
properties:
name: sha256($parameters.lb-appname)
servicetype: SSL
ipv46: 10.10.10.10
<!--NeedCopy-->
relate()
この関数を使用して、リストのセットからディクショナリオブジェクトを作成します。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-->
この例には 2 つのリストがあります。
-
parameters
セクションにはname
およびip
を持つlist_of_keys
があります。構成パックを作成する際、StyleBookユーザーはこれらの値を指定します。 -
substitutions
セクションには、list_of_keys
に適用される値のlist_of_values
があります。
relate()
組み込み関数は、list_of_keys
から入力を受け取り、それをlist_of_values
内の対応する項目に適用します。
StyleBookユーザーが以下の値を指定した場合:
[["lb1","lb2"],["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-->
この記事の概要
- str()
- int()
- bool()
- len()
- min()
- max()
- bin()
- oct()
- hex()
- lower()
- upper()
- sum()
- pow()
- ip()
- ip_network ()
- network_ip ()
- subnets()
- netmask_ip ()
- is_netmask_ip ()
- broadcast_ip ()
- cidr ()
- is_cidr ()
- is_in_network ()
- base64.encode()
- base64.decode()
- exists()
- filter()
- if-then-else()
- join()
- split()
- map()
- quotewrap()
- replace()
- trim()
- truncate()
- distinct()
- url.encode ()
- url.decode ()
- is-ipv4()
- is-ipv6()
- startsWwith ()
- endswith ()
- () を含む
- 部分文字列 ()
- match()
- sha256()
- relate()