Help us improve your experience.

Let us know what you think.

Do you have time for a two-minute survey?

 
 

libslaxデフォルト拡張ライブラリ:ビット、curl、db、os、xutil

libslax bit拡張ライブラリ

libslax ビット拡張ライブラリには、 ビット 文字列を作成および操作する関数が含まれています。この関数は、64 ビット整数引数をサポートしています。 ビット 拡張ライブラリの関数を SLAX スクリプトに組み込むには、そのライブラリの名前空間ステートメントをスクリプトに含めます。

プレフィックスと関数名を使用して bit ビット拡張機能を呼び出します。例えば:

表 1 は、Junos OS リリース 12.2 以降の SLAX 1.1 スクリプトでサポートされている ビット 拡張ライブラリで利用可能な機能を示しています。

表 1:libslax ビット拡張ライブラリ内の関数

関数と引数

説明

bit:and(b1, b2)

2 つのビット文字列の論理 AND を返します。

bit:and("101100", "100101")戻り値: "100100"

bit:clear(b1,bitnum)

ビット文字列内の指定されたビットをゼロに設定し、新しいビット文字列を返します。ビットの番号はゼロから始まります。整数引数がビット文字列長よりも大きい場合、ビット文字列は拡張されます。

bit:clear("11111", 0)戻り値:"11110"

bit:clear("11111", 6)戻り値: "0011111"

bit:compare(value1, value2)

2 つの値を比較し、最初の引数がそれぞれ 2 番目の引数より小さい、等しい、またはより大きいと見なされた場合は、0 より小さい、等しい、またはゼロより大きい整数を返します。

bit:compare("10000", 16)戻り値: 0

bit:compare("11111", "10000")戻り値:1

bit:from-hex(string, len?)

ヘキサデミック引数の値をビット文字列として返します。オプションの 2 番目の引数は、指定された長さになるまでビット文字列に先頭のゼロ(0)を埋め込みます。

bit:from-hex("0x45", 8)戻り値: "01000101"

bit:from-int(integer, len?)

整数引数の値をビット文字列として返します。オプションの 2 番目の引数は、指定された長さになるまでビット・ストリングに先行ゼロを埋め込みます。

bit:from-int(65,8)戻り値: "01000001"

bit:mask(count, len?)

指定された下位ビット数が 1 に設定されたビット文字列を返します。オプションの 2 番目の引数は、指定された長さになるまでビット・ストリングに先行ゼロを埋め込みます。

bit:mask(4, 8)戻り値: "00001111"

bit:nand(b1, b2)

2 つのビット文字列の論理 NAND を返します。

bit:nand("101100", "100101")戻り値: "010010"

bit:nor(b1, b2)

2 つのビット文字列の論理 NOR を返します。

bit:nor("101100", "100101")戻り値: "011011"

bit:not(b1)

ビット文字列の反転(NOT)を返します。

bit:not("101100")戻り値: "010011"

bit:or(b1, b2)

2 つのビット文字列の論理 OR を返します。

bit:or("101100", "100101")戻り値: "101101"

bit:set(b1, bitnum)

ビット文字列に指定されたビットを設定し、新しいビット文字列を返します。ビットの番号はゼロから始まります。整数引数がビット文字列長よりも大きい場合、ビット文字列は拡張されます。

bit:set("1001", 2) 戻り値:"1101"

bit:set("1001", 6) 戻り値: "1001001"

bit:to-int(b1)

ビット文字列引数の値を整数として返します。

bit:to-int("101100")戻り値:44

bit:to-hex(b1)

16 進値の文字列表現としてビット文字列引数の値を返します。

bit:to-hex("101100")戻り値: "0x2c"

bit:xor(b1, b2)

2 つのビット文字列の論理 XOR を返します。

bit:xor("101100", "100101")戻り値: "001001"

bit:xnor(b1, b2)

2 つのビット文字列の論理 XNOR を返します。

bit:xnor("101100",  "100101")戻り値:"110110"

libslax curlエクステンションライブラリ

libslax curl 拡張ライブラリを理解する

cURLは、libcurlライブラリを使用し、FTP、FTPS、HTTP、HTTPS、SCP、SMTPなどの多くのプロトコルを使用してデータ転送をサポートするコマンドラインツールです。cURLの詳細については、http://curl.haxx.se/ のcURL Webサイトをご覧 ください

libslax ディストリビューションには、cURL 操作を実行する関数が含まれる curl 拡張ライブラリが含まれています。libslax curl 拡張ライブラリの関数を SLAX スクリプトに組み込むには、そのライブラリの名前空間ステートメントをスクリプトに含めます。

次に、プレフィックスと関数名をcurl使用して curl 拡張関数を呼び出すことができます。cURL 操作は、拡張機能関数に渡された要素のセットを使用して送信されます。

表 2 は、curl 拡張ライブラリでサポートされている操作を示し、各関数の説明が含まれています。表 3表 4 は、サポートされるエレメントを示し、各エレメントの構文と説明を示しています。具体的には、表 3 に Web サービス操作に使用する要素を、表 4 に電子メール操作に使用する要素を示します。curl 拡張ライブラリの使用例と詳細については、「curl 拡張ライブラリ」を参照してください。

表 2:libslax curl 拡張ライブラリの機能

関数

説明

curl:close

オープン接続を閉じます。それ以上の操作は接続を介して実行できません。 curl:閉じるをご覧ください

curl:open

リモート サーバーへの接続を開き、1 つの接続を介した複数の操作を可能にします。 「curl:open」をご覧ください

curl:perform

によって提供される永続的な接続ハンドルを使用して、簡単な転送を curl:open実行します。 curl:performをご覧ください。

curl:set

接続の寿命が持続するパラメーターのセットを記録します。 curl:set をご覧ください。

curl:single

永続的な接続を使用せずに転送操作を実行します。 「curl:single」をご覧ください。

表 3:libslax curl 拡張ライブラリ内の Web サービス要素

要素

説明

構文

<connect-timeout>

接続試行が失敗したと見なされるまでの秒数。

<connect-timeout> 10;

<content-type>

転送ペイロードの MIME タイプ。

<content-type> "mime/type";

<errors>

HTML および XML 解析エラーの処理方法を制御します。

エラーの処理を参照してください。

<fail-on-error>

重要でないエラーを含むエラーが検出された場合、転送が失敗する必要があることを示します。

<fail-on-error>;

<format>

curl 拡張子が ネイティブ形式でコンテンツを自動的に利用できるようにする、返される結果の予期される形式を指定します。形式には、「html」、「名前」、「テキスト」、「urlエンコード済み」、および「xml」が含まれます。

<format> "xml";

<header>

要求に追加のヘッダー フィールドを指定します。

<header name="name"> "value";

<insecure>

安全でない通信の運用に対して寛容であることを示します。具体的には、共通名を確認せずに SSL 証明書を許可します。

<insecure>;

<method>

データ転送に使用される方法。これにより、HTTP 要求タイプと、他の転送メカニズムのトリガーが制御されます。

受け入れ可能な方法名には、「取得」、「投稿」、「削除」、「ヘッド」、「電子メール」、「入れる」、「アップロード」などがあります。「get」がデフォルトです。

<method> "get";

<param>

要求に追加のパラメーター値を指定します。これらのパラメーターは通常、URL にエンコードされます。

<param name="x"> "y";

<password>

転送に使用するユーザーのパスワード。

<password> "password";

<secure>

HTTPSやFTPSを含むプロトコルのセキュアバージョンの使用を要求します。

<secure>;

<timeout>

オープン接続が失敗したと見なされるまでの秒数。

<timeout> 10;

<upload>

これはファイルアップロード要求であることを示します。

<upload>;

<url>

リクエストのベース URL。

<url> "target-url";

<username>

転送に使用するユーザー名。

<username> "username";

<verbose>

転送の操作と通信に関する詳細なデバッグ情報を要求します。

<verbose>;

表 4:libslax curl 拡張ライブラリ内の電子メール要素

要素

説明

構文

<cc>

電子メール(SMTP)要求の「Cc」アドレス。複数のアドレスの場合は、複数の<cc>要素を使用します。

<cc> "cc-user@email.example.com";

<contents>

転送するコンテンツ。

<contents> "multi-\nline\ncontents\n";

<from>

電子メール(SMTP)要求の「差出人」アドレス。

<from> "source-user@email.example.com";

<local>

電子メール(SMTP)リクエストに使用されるローカル ホスト名。

<local> "local host name";

<server>

送信 SMTP サーバー名。現在、MX レコードは処理されていません。

<server> "email-server.example.com";

<subject>

電子メール(SMTP)要求の「件名」フィールド。

<subject> "email subject string";

<to>

電子メール(SMTP)要求の「宛先」アドレス。複数のアドレスの場合は、複数の<から>要素を使用します。

<to> "to-user@email.example.com";

libcurl要素は、libcurlの関数でネイティブC libcurl APIが curl_easy_setopt() 使用するオプションを密接に模倣しています。オプションが設定されると、要求された転送を実行する curl_easy_perform() 呼び出し。関数の詳細については curl_easy_setopt()http://curl.haxx.se/libcurl/c/curl_easy_setopt.html を参照してください。

libslax curl 拡張ライブラリでは、libcurl API オプションは個々の要素として表されます。たとえば、 <url> 要素は CURLOPT_URL オプション、 要素 <method> は CURLOPT_CUSTOMREQUEST オプションなどにマッピングされます。

これらの要素は、次の 3 つの方法で使用できます。

  • curl:single()拡張機能は、永続的な接続ハンドルを持たない単一の転送操作で一連のオプションのセットを使用してサポートします。

  • curl:perform()拡張機能は、永続的な接続ハンドルを持つオプションのセットを使用してサポートします。ハンドルは、拡張機能関数からcurl:open()返され、拡張機能関数でcurl:close()閉じることができます。

  • 拡張機能の関数はcurl:set()、接続ハンドルのオプションのセットを記録し、接続の有効期間中、これらのオプションをアクティブに保持します。たとえば、スクリプトが多数のファイルを転送する必要がある場合、 および <password> オプションを<username>記録し、すべてのcurl:perform()呼び出しで繰り返さないようにすることができます。

curl:閉じる

拡張機能は curl:close() 、開いている接続を閉じます。一度閉じた接続では、それ以上の操作を実行することはできません。

構文は次のとおりです。

引数は、閉じる接続ハンドルです。

curl:Open

拡張機能は curl:open() 、リモート サーバーへの接続を開き、1 つの接続を介した複数の操作を可能にします。

構文は次のとおりです。

返されるオブジェクトは、 または curl:close()curl:perform()渡すことができる接続ハンドルです。

curl:パフォーマンス

拡張機能は curl:perform() 、によって提供される永続的な接続ハンドルを使用して簡単な転送を curl:open()実行します。

構文は次のとおりです。

引数は、接続ハンドルと一連のオプション要素です。サポートされている curl 拡張ライブラリ要素は 、表 3 および 表 4 で定義されています。

返されるオブジェクトは、転送の結果を含む XML 階層です。 表 5 は応答で使用可能なエレメントをリストし、 表 6 はエレメント内に含まれる使用可能なエレメントを <header> リストしています。

表 5:curl:応答要素の実行

要素

内容

<curl-success>

成功を示す空の要素

<data>

解析されたデータ

<error>

エラーメッセージ テキスト(存在する場合)

<header>

解析済みヘッダー フィールド

<raw-data>

返信からの未加工データ

<raw-headers>

返信からの未加工ヘッダー フィールド

<url>

要求された URL

表 6:curl:<ヘッダー>要素を実行する

要素

内容

<code>

HTTP 応答コード

<field>

HTTP応答フィールド(@nameと値付き)

<message>

HTTP 返信メッセージ

<version>

HTTP応答バージョン文字列

以下の例では、ヘッダー・フィールドを <header> エレメントに解析したエレメントを <field> 示しています。

curl:セット

拡張機能の関数は curl:set() 、接続の寿命が持続するパラメーターのセットを記録します。

構文は次のとおりです。

引数は、接続ハンドルと一連のオプション要素です。サポートされている curl 拡張ライブラリ要素は 、表 3 および 表 4 で定義されています。

curl:シングル

拡張機能は curl:single() 、永続的な接続を使用せずに転送操作を実行します。

構文は次のとおりです。

返されたオブジェクトは、構造体内で、 によって curl:perform()返されるオブジェクトと同一です。詳細は curl:perform をご覧ください。

サポートされているフォーマット要素

Junos OSリリース14.2以降のリリースでサポートされているSLAX言語のバージョン1.2以降、 format この要素は、「html」、「テキスト」、「xml」に加えて、「名前」と「urlエンコード済み」の2つの新しいフォーマットをサポートしています。「名前」エンコーディングは、改行で区切られる名前=値ペアに使用され、名前=値ペアがアンパサンド(&)で区切られている場合は、「urlエンコード」エンコードが使用されます。

解析されたデータは、要素を <data> 使用して <name> 、要素内で返されます。以下の例では、「 format urlエンコード」に設定されています。

curl の例

以下の例は、libslax 拡張ライブラリ関数を使用して操作を実行する SLAX curl スクリプトを示しています。

次の SLAX スクリプトは、単純な GET 操作を実行して Web ページを取得します。このスクリプトは、HTTP ヘッダーのヘッダー フィールドと、要求された URL に組み込まれるパラメーターを指定します。

次の SLAX スクリプトは、パラメーターとして提供されるサーバーを通じて電子メールを送信します。

次の SLAX op スクリプトは、指定された認証情報を使用して Web アプリケーションに接続し、ログインします。

Flask を使用して、スクリプトをテストする単純な Web アプリケーションを作成できます。 PyPI で使用可能な Flask は、軽量の Web サーバー ゲートウェイ インターフェイス(WSGI)Web アプリケーション フレームワークです。 https://pythonspot.com/login-authentication-with-flask の以下の Python スクリプトは、ログイン ページを含むシンプルな Web アプリケーションを作成します。

op スクリプトをテストするには、まずリモート デバイスで Web アプリケーション スクリプトを開始します。

次に、Junos OS を実行しているデバイスで op スクリプトを有効にして実行します。結果は op-script.log ファイルに記録されます。

エラーの処理

Junos OSリリース14.2以降のリリースでサポートされているSLAX言語のバージョン1.2以降では、 要素を使用 <errors> して、HTMLおよびXML解析エラーの処理を制御できます。デフォルトの動作は、標準エラー出力ストリーム(stderr)にエラーを表示することです。要素に異なる値を <errors> 指定することで、エラーの無視、ログ記録、または記録も選択できます。 表 7 は、 要素に使用できる値を errors 示しています。

表 7: エラー要素

特別な行動

既定

stderr にエラーが表示される

無視

エラーの破棄

ログ

slaxLog()を介してエラーがログに記録される

レコード

エラーの記録

<errors> 値を 「record」に設定すると、すべてのエラーが XML ノード内の要素の <errors> 下の文字列に表示されます(例えば、 が curl:perform返されます)。エラーが生成されない場合、要素 <errors> は存在せず、エラーのテストとして使用できます。

libslax db 拡張ライブラリ

Junos OS リリース 17.4R1 以降でサポートされている libslax db 拡張ライブラリは、SLAX スクリプトがデータベースに格納されているデータを保存、操作、取得、削除する方法を提供します。 SLAX スクリプトで db 拡張ライブラリの関数を使用するには、そのライブラリの名前空間ステートメントをスクリプトに含めます。

表 8 は、 db 拡張ライブラリーで使用可能な機能を要約しています。 db 拡張関数の例および追加情報については、「 db 拡張機能」を参照してください。

表 8:libslax db 拡張ライブラリ内の関数

関数

説明

db:close()

データベース接続を閉じ、このハンドルで実行された以前の操作に関連するすべての構造を解放します。

db:create()

指定されたフィールド情報を使用して、オープン データベース ハンドルに関連付けられたデータベース内にコレクションを作成します。

db:delete()

開いているデータベース ハンドルに関連付けられているデータベース内の指定された条件に一致するコレクション内のインスタンスを削除します。

db:fetch()

または db:query 呼び出しから戻されたカーソルを使用して、結果インスタンスをdb:find()フェッチします。

db:find()

指定された条件に一致するインスタンスの結果セットにカーソルを戻します。 db:fetch() 各結果のインスタンスを取得するために使用する必要があります。

db:find-and-fetch()

指定された条件に一致するすべてのインスタンスを検索して読み取ります。

db:insert()

開いているデータベース ハンドルに関連付けられているデータベース内のコレクションにデータを挿入します。

db:open()

提供されたオプション(バックエンドデータベースエンジンとデータベース名を含む)を使用して、データベース接続を開きます。

db:query()

カスタム クエリを実行します。

db:update()

指定されたインスタンスで指定された条件に一致するインスタンスのセットを更新します。

表 9 は、 db 拡張関数のオプションおよびデータで使用できるエレメントを要約しています。 db エレメントの例および追加情報については、「 db エレメント」を参照してください。

表 9: db 拡張ライブラリ内の要素

要素

説明

<collection>

操作を実行するデータ収集を指定します。これは SQL データベース テーブルに対応します。

<collection> "employee";

<condition>

データストアからのデータインスタンスで動作する際に満たさなければならない条件を指定します。これは、SQL データストアで動作する際に WHERE 句で使用される条件を形成します。必須の要素は次のとおりです。

  • <selector>— この条件が適用されるフィールドの名前

  • <operator>比較または論理演算子(<、 、 ><=>==LIKE、 、 IN) NOT

  • <value>— このフィールドの演算子で使用される値

<condition> {
    <selector> "id;
    <operator> "in";
    <value> "(1, 10)";
}

<conditions>

または <or> を親ノードとして複数の条件を<and>指定します。

<conditions> {
    <and> {
        <condition> {
            ... /* c1 */
        } 
        <condition> {
            ... /* c2 */
        } 
        <or> {
            <condition> {
                ... /* c3 */
            }
            <condition> {
                ... /* c4 */
            }
        }
    }
}

<database>

動作するデータベースの名前を指定します。

<database> "test.db";

<engine>

データの格納とアクセスに使用するバックエンドデータベースエンジンを指定します。

<engine> "sqlite";

<field>

コレクション内の各フィールドのメタデータを定義します。

<field> {
    <name> "name";
    <type> "integer";
    <primary>;        
}

<fields>

子要素を使用して、コレクション内のフィールドに関するメタデータを <field> 指定します。

<fields> {
    <field> {
        ...
    }
}

<instance>

データ ストア内のデータを挿入または操作するときに、コレクション内の 1 つのインスタンスを表します。要素には、そのレコード内のフィールドとその対応する値が含まれています。

<instance> {
    <id> 5;
    <name> "John";
}

<instances>

データ ストア内のデータを挿入または操作するときに、コレクション内に複数のインスタンスを定義します。

<instances> {
    <instance> {
        ...
        ...
    }
    ...
}

<limit>

結果に含めることができるインスタンスの数を制限します。

<limit> 10;

<result>

ほとんどの db 拡張関数から戻される出力ノード。このノードには要素が <status> 含まれており、1 つ以上の <instance> 要素を含めることができます。

<result> {
    <status> {
        <ok>
    }
}

<retrieve>

データストアにクエリを実行する際に、結果セットの一部として表示されるフィールドのみを指定します。

<retrieve> {
    <id>;
    <name>;
}

<skip>

ユーザーに戻る前に、結果セット内の指定されたインスタンス数をスキップします。

<skip> 5;

<sort>

フィールドと、結果セットのソート順序を指定します。

要素を含めてフィールドを <by> 指定し、並べ替え順序を指定するには、 の <order> 値を "asc" (昇順) または "desc" (降順) に設定します。

<sort> {
    <by> "id";
    <by> "age";
    <order> "desc";
}

libslax os拡張ライブラリ

libslax os 拡張ライブラリには、ローカル ホストでオペレーティング システム関連の操作を呼び出すための一連の関数が用意されています。SLAX スクリプトで拡張機能ライブラリの関数を os 使用するには、そのライブラリの名前空間ステートメントをスクリプトに含めます。

表 10 は 、os 拡張ライブラリで使用可能な機能をまとめたものです。多くの os 拡張機能の戻り値は、0 個以上のエラー ノードのセットで構成されています。各ノードには、追加の子要素を <error> 含む要素を含めることができます。拡張関数の例や追加情報については osos 拡張機能を参照してください。

表 10:libslax os 拡張ライブラリ内の機能

関数

説明

最初にサポートされる Junos OS リリース

os:chmod

1 つ以上のファイルのアクセス許可を変更します。

17.4

os:chown

1 つ以上のファイルのファイル所有者とグループを変更します。

17.4

os:exit-code

スクリプトを実行するプロセスの終了コードを設定します。

14.1

os:mkdir

指定された名前、パス、および権限を持つ新しいディレクトリを作成します。

<create>パスの最後の要素が存在する場合にエラーを返す オプションは、Junos OS リリース 17.4R1 以降でサポートされています。

14.1

os:remove

ファイルまたは空のディレクトリを削除します。

17.4

os:stat

各ファイルの詳細を含む要素のノードセット内の <entry> ファイルとディレクトリに関する情報を返します。

14.1

os:user-info

スクリプトを実行している <user-info> ユーザーに関する情報を含む要素を返します。

17.4

libslax xutil 拡張ライブラリ

libslax xutil 拡張ライブラリには、文字列と XML ノード セット間で変換する関数が含まれています。 xutil 拡張ライブラリの関数を SLAX スクリプトに組み込むには、そのライブラリの名前空間ステートメントをスクリプトに含めます。

xutil プレフィックスと関数名を使用して xutil 拡張関数を呼び出します。表 11、SLAX 1.1 以降のスクリプトでサポートされている xutil 拡張ライブラリで利用可能な機能を示しています。xutil 拡張関数の例や追加情報については、 xutil 拡張機能を参照してください。

表 11:libslax xutil 拡張ライブラリ内の関数

関数と引数

説明

最初にサポートされる Junos OS リリース

xutil:json-to-xml(string)

JSON データを含む文字列を XML 内のデータのネイティブ表現に変換します。

14.2

xutil:max-call-depth(number)

再帰的呼び出しの深さを制限します。デフォルトの制限は3000です。

14.1

xutil:string-to-xml(string+)

XML データを含む文字列を、そのデータのネイティブ表現に変換します。

12.2

xutil:xml-to-json(node-set+)

XML データを JSON データを含む文字列に変換します。この関数は、タグを文字列内の JSON オブジェクトとしてエンコードします。

14.2

xutil:xml-to-string(node-set+)

XML データを文字列に変換します。

12.2