Groovy スクリプト
このセクションでは、プライム ケーブル プロビジョニングがデバイス設定とデバイス管理に提供している Groovy スクリプト サポートについて説明します。このセクションの機能:
概要
プライム ケーブル プロビジョニングは、設定ファイルの生成のためテンプレートとは別に Groovy スクリプトを使用します。これは、DOCSIS、PacketCable、CableHome、OpenCable STB を含むプライム ケーブル プロビジョニング対応の CableLabs 標準に、動的ファイルを展開するのに役立ちます。このスクリプト インターフェイスでは、生成する TFTP ファイルを決定するのに役立つ検出済みの DHCP データとデバイス プロパティをにアクセスできます。プライム ケーブル プロビジョニング RDU は、テンプレートまたは Groovy スクリプトを使用して設定ファイルを生成します。RDU は、拡張子 .groovy で Groovy ファイルを識別します。Groovy サンプル スクリプト ファイルは BPR_HOME/rdu/samples/groovy ディレクトリに存在し、テストに使用できます。
Groovy スクリプト ファイルを作成するには、テンプレートを作成するための要件に加えて、Groovy スクリプト言語を十分に理解している必要があります。
Groovy スクリプト言語
Groovy スクリプトは、次のオプションを含めることができます。
Groovy スクリプト
オプション |
説明 |
例 |
---|---|---|
<comment> |
// [ascii-string] /* * 複数行コマンド */ |
// Config File Start/End / * configFile:型 DOCSISTFTPFile * services:型 ExtensionServices * discoveredData:型タイプ DHCPDataAccess * deviceProperties:型 CSRCProperties * option:型 DOCSISoptionfactory * device:型 IPDevice * context:型 ConfigContext */ |
<option-description> |
<option-with-no-suboptions> | <compound-option> |
|
<option-with-no- sub options> |
configFile.add (option.createOptionValue (<custom-value>, "<option-num>","<option-value>")); |
configFile.add (option.createOptionValue ("3", "1")); カスタム値: configFile.add (option.createOptionValue (OptionSyntaxHEX., "217.53","010868446146484A4737")); |
<compound-option> |
def = option .createOptionValue(""); <variable-name>.add(option .createOptionValue(<custom-value>, "<optionnum>","<option-value>")); configFile.add(<variable-name>); |
def option24 = option.createOptionValue("24"); option24.add(option.createOptionValue("24.8", "4194304")); configFile.add(option24); |
<custom-value> optional |
OptionSyntax.HEX |OptionSyntax.ASCII |OptionSyntax.SNMP |
|
<option-num> |
<unsigned-byte>[.<unsigned-byte>]* |
24 |
<option-value> |
<option-value-string> [、[,]< オプション値文字列 >] * |
「1」または [".docsDevNmAccessCommunity.1", "Octet String", "private"] as String[] |
Groovy 環境に表示されているバインディングは次のとおりです。
-
configFile:型 DOCSISTFTPFile
-
services:型 ExtensionServices
-
discoveredData:型 DHCPDataAccess
-
deviceProperties:型 CSRCProperties
-
option:型 DOCSISoptionfactory
-
device:型 IPDevice
-
context:型 ConfigContext
(注) |
CLI ファイル ユーティリティから Groovy スクリプトを実行中に、デバイス オブジェクト バインディングを使用できません。 |
(注) |
|
Groovy スクリプトをプライム ケーブル プロビジョニング RDU に追加する
プライム ケーブル プロビジョニング RDU に Groovy スクリプト ファイルを追加するには:
手順
ステップ 1 |
[Configuration] > [Files] を選択します。[Vies Files] ページが表示されます。 |
ステップ 2 |
[Add] をクリックします。[Add Files] ページが表示されます。page appears |
ステップ 3 |
[File Type] ドロップダウン リストから、CableLabs 設定スクリプト オプションを選択します。 |
ステップ 4 |
送信元のファイル名を参照します。 |
ステップ 5 |
[File Name] フィールドに、 < filename >.groovy ファイルを追加します。 |
ステップ 6 |
[Submit] をクリックします。` |
Groovy に設定ファイル ユーティリティを使用する
設定ファイル ユーティリティは、バイナリ設定ファイルに groovy ファイルを変換できます(その逆も可能)。設定および groovy ファイルの表示と検証にも使用できます。設定ファイル ユーティリティは、BPR_HOME/rdu/bin ディレクトリにインストールされます。Groovy ファイルおよびバイナリ ファイルは、設定ファイル ユーティリティが呼び出されるディレクトリで使用可能である必要があります。
(注) |
プライム ケーブル プロビジョニングは、バイナリを groovy ファイルに生成するためにのみ(その逆も可能)設定ユーティリティを使用し、その他のスクリプト言語をサポートしません。 |
ここでは、次の内容について説明します。
設定ファイル ユーティリティの実行
設定ファイル ユーティリティを実行するには、 BPR_HOME/rdu/bin ディレクトリからコマンドを実行します。
runCfgUtil.sh オプション
利用可能なオプションは下記の通りです。
-
-?:この使用のメッセージを印刷します。
-
-e:BACC groovy/テンプレート ファイル(デフォルト)のエンコーディングを実行します。
-
-d:バイナリ ファイルのデコードを実行します。
-
-g:バイナリ ファイルから groovy/テンプレート ファイルの生成を実行します。
-
-snmp:OptionSyntax.SNMP が有効になっているバイナリ ファイルから、テンプレートまたは動的スクリプト ファイルの生成を実行します。
-
-cshared:BACC groovy/テンプレート ファイル(デフォルトは cisco)を解析するときに使用する CMTS 共有秘密鍵。
-
-h host:port:RDU がある場所を指定します(デフォルトでは localhost:49187)。
-
-idevice ID:groovy/テンプレートの解析中に、マクロ変数置換を使用するデバイスを指定します。
-
mmacro:groovy/テンプレートを解析するときの代わりに使用するマクロ変数を指定します。
-
-s:人が読める形式で解析された groovy/テンプレートまたはバイナリ ファイルの内容を表示します。
-
o-filename:指定したファイル名で解析された groovy/テンプレートまたは人が読める形式の出力を保存します。
-
-lfilename:ローカル ファイル システム上に存在する入力ファイルを指定します。
-
-rfilename:RDU でリモート入力ファイルを指定します。
-
-pkt:PacketCable MTA 設定ファイルとして処理するファイルを指定します。
-
-ttype:PacketCable エンコーディング タイプを指定します(デフォルトでは Secure)。
-
-loclocale:na、euro、ietf など PacketCable ロケールを指定します(デフォルトでは na)。デフォルトは na です。MTA が欧州仕様 MTA の場合、ロケールは euro に設定する必要があります。
-
-cablehome:CableHome 設定ファイルとして処理するファイルを指定します。
-
-docsis:DOCSIS 設定ファイル(デフォルト)として処理するファイルを指定します。
-
-E:拡張 CMTS MIC(EMIC)計算を有効にして、EMIC 計算のデフォルトのオプションを特定します。デフォルトのオプションは次の通りです。
-
HMAC タイプ:MMH16
-
EMIC ダイジェスト タイプ:明示
-
Cisco としての EMIC 共有秘密鍵。
-
-
-Ei:CMTS MIC ダイジェスト サブタイプの拡張のために使用される [implicit] プレゼンテーションを指定します。
-
-EhHMACType:拡張 CMTS MIC を計算するために使用するハッシュ アルゴリズムを指定します。サポートされているアルゴリズムは MD5 と MMH16 です(デフォルトでは MMH16)。
-
Es-シークレット:拡張 CMTS MIC 計算に使用する CMTS 共有秘密鍵(デフォルトでは cisco)。
-
-uusername:RDU に接続するときに使用するユーザー名を指定します。
-
-ppassword:RDU に接続するときに使用するパスワードを指定します。
-
-vversion:入力ファイルを処理するテクノロジーのバージョンを指定します。
-
-propfilename:動的に使用される変数のキーと値を持つプロパティ ファイルを指定します。
(注)
-DDV4 または -DDV6 のいずれかをファイル名 -prop とともに常に指定して、検出データを送信します。
-
-disfilename:フォーム キーと値ペアの動的なスクリプトで使用できる検出ータを指定します。
-
-DDv4filename:フォーム キーと値ペアの動的なスクリプトで使用できる検出 DHCPv4 データを指定します。
-
-DDv6filename:フォーム キーと値ペアの動的なスクリプトで使用できる検出 DHCPv6 データを指定します。
-
-cpclasspath:動的スクリプトで参照される拡張 jar とスクリプト ファイルのパスを指定します。
-
b:複数の出力ファイル生成するために、オプションの一括処理を指定します。特定のディレクトリ(-L オプションを使用)のすべてのバイナリ ファイルが処理され、生成されたファイルが -o オプションで示される出力ディレクトリで使用できます。
-
-ft:ファイル タイプ(groovy または tmpl)を生成します。このオプションは、生成(-g オプション)生成に一括処理が有効になっているときに使用されます(-b オプションの使用)。(デフォルトのファイル タイプは tmpl です。)
runCfgUtil を使用した Groovy スクリプトの検証
プライム ケーブル プロビジョニング Groovy スクリプトをテストするための設定ファイル ユーティリティを使用するには。
手順
ステップ 1 |
Groovy スクリプトを作成します。Groovy スクリプトを他の Groovy スクリプトに拡張する場合は、参照されているすべての Groovy スクリプトが同じディレクトリにあることを確認します。 |
ステップ 2 |
ローカル ファイル システムで設定ファイル ユーティリティを実行します。Groovy スクリプトの構文を確認するか、設定ファイル ユーティリティ プロセスが CRS として出力を返すように Groovy スクリプトを処理できます。 Groovy スクリプトに動的変数または検出されたデータが含まれている場合、指定された順序でこれらの操作を行います。
|
ステップ 3 |
Groovy スクリプト(および使用される拡張 Groovy スクリプト)を RDU に追加します。 |
ステップ 4 |
設定ファイルユーティリティを実行して、ファイルを解析します。『Testing Groovy Script Processing for an External Groovy Script File(外部 Groovy スクリプト ファイルの Groovy スクリプト処理をテストする)』を参照してください。 Groovy スクリプトに動的変数または検出されたデータが含まれている場合、指定された順序でこれらの操作を行います。
|
ステップ 5 |
すべてのテストが成功した後、Groovy スクリプトを使用するサービス クラスを設定します。 |
バイナリ ファイルを Groovy スクリプト ファイルに変換する
バイナリ設定メモリ ファイルを Groovy スクリプト ファイルに変換するには、runCfgUtil.sh コマンドを使用します。プライム ケーブル プロビジョニングの動的設定生成は、作成された Groovy スクリプトに基づくものです。既存のテスト済みバイナリ ファイルを Groovy スクリプト ファイルに自動的に変換すると、プロセスを高速化し、エラーが発生する可能性を軽減します。
(注) |
RunCfgUtil.sh ツールを使用して、Groovy スクリプトに直接にテンプレートを変換することはできません(逆も不可能)。最初にテンプレートをバイナリ ファイルに変換して、Groovy スクリプトにバイナリ ファイルを変換する必要があります。テンプレートに Groovy スクリプトを変換する場合、最初に Groovy スクリプトをバイナリ ファイルに変換し、テンプレートにバイナリ ファイルを変換する必要があります。 構文の説明 |
runCfgUtil.sh -g -l binary_file -o groovy_file
-
-g :Groovy スクリプト ファイルを入力バイナリ ファイルから生成する必要があることを指定します。
-
-l binary_file :パス名を含むローカル入力ファイルを指定します。たとえば bronze.cm。
-
-o groovy_file :パス名を含む出力 Groovy スクリプト ファイルを指定します。すべてのケースで、出力 Groovy スクリプト ファイルには .groovy ファイル拡張子があります。たとえば、test.groovy。
バイナリ ファイルを Groovy スクリプト ファイルに変換するには。
手順
ステップ 1 |
ディレクトリを /opt/CSCObac/rdu/samples/docsis に変更します。 |
ステップ 2 |
使用する Groovy スクリプト ファイルを選択します。この例では、unprov.cm と呼ばれる既存のバイナリ ファイルを使用します。 |
ステップ 3 |
このコマンドを使用して設定ファイル ユーティリティを実行します。 /opt/CSCObac/rdu/bin # runCfgUtil.sh -g -l unprov.cm -o test.groovy -docsis -docsis:入力ファイルが DOCSIS 設定ファイルになるように指定します。 |
MIB に依存することなくバイナリ ファイルを Groovy スクリプト ファイルに変換する
MIB に依存することなくバイナリ設定メモリ ファイルを Groovy スクリプト ファイルに変換するには、オプション -snmp を持つrunCfgUtil.sh コマンドを使用します。このコマンドを -snmp オプションで実行する場合、SnmpVarBind を含むすべての TLV の OptionSyntax.SNMP が追加されます。TLV のタイプに基づき正しい値を指定してください。例:整数値(1)。
(注) |
OID は数値形式であり、MIB の依存関係を完全に削除する必要があります。たとえば、.1.3.44491.1.2.3。 |
構文の説明
runCfgUtil.sh -docsis -g -snmp -l binary_file -o groovy_file
-
-g :PacketCable MTA ファイルとして入力ファイルを特定します。
-
-snmp :バイナリ ファイルから生成された動的スクリプト ファイルで、OptionSyntax.SNMP が有効になることを指定します。
-
-l binary_file :パス名を含むローカル入力ファイルを指定します。すべてのケースで、入力バイナリ ファイル名には .cm ファイル拡張子があります。例:bronze.cm。
-
-o groovy_file :パス名を含む出力 Groovy スクリプト ファイルを指定します。すべてのケースで、出力 Groovy スクリプト ファイルには .groovy ファイル拡張子があります。たとえば、test.groovy。
MIB と依存関係のない状態でバイナリ ファイルを Groovy スクリプト ファイルに変換するには。
手順
ステップ 1 |
MIB をバックアップします。 |
||
ステップ 2 |
プロパティ
|
||
ステップ 3 |
このコマンドを使用して設定ファイル ユーティリティを実行します。 /opt/CSCObac/rdu/bin # runCfgUtil.sh -g-snmp-l example.cm -o example.cm.groovy
|
ローカル Groovy スクリプト ファイルの Groovy スクリプト処理をテストする
ローカル ファイル システムに保存されている Groovy スクリプト ファイルの処理をテストするには、runCfgUtil.sh コマンドを使用します。
構文の説明
runCfgUtil.sh -pkt -l file
-
-pkt :PacketCable MTA ファイルとして入力ファイルを特定します。
-
-l :入力ファイルをローカル ファイル システム上に置くように指定します。
-
file :解析されない入力 t Groovy スクリプト ファイルを識別します。
ローカル ファイル システム上にある Groovy スクリプト ファイルを解析するには。
手順
ステップ 1 |
/opt/CSCObac/rdu/samples/packet_cable にディレクトリを変更します。 |
ステップ 2 |
使用する Groovy スクリプト ファイルを選択します。この例では、既存の Groovy スクリプト ファイル unprov_packet_cable.groovy を使用します。これが PacketCable MTA Groovy スクリプトであるため、-pktオプションが使用されます。 |
ステップ 3 |
このコマンドを使用して設定ファイル ユーティリティを実行します。 /opt/CSCObac/rdu/bin/runCfgUtil.sh -pkt -l unprov_packet_cable.groovy unprov_packet_cable.groovy:解析されない入力 t Groovy スクリプト ファイルを識別します。 |
外部 Groovy スクリプト ファイルの Groovy スクリプト処理をテストする
外部 Groovy スクリプト ファイルの処理をテストするには、 runCfgUtil.sh コマンドを使用します。
構文の説明
runCfgUtil.sh -docsis -r file -u username -p password
-
-r :RDU に追加されているファイルとして入力ファイルを識別します。
-
file :解析されない入力 t Groovy スクリプト ファイルを識別します。
-
-u username :RDU に接続するときに使用するユーザー名を指定します。
-
-p password :RDU に接続するときに使用するパスワードを指定します。
-
-docsis:DOCSIS Groovy スクリプトとしてファイルを特定します。
RDU に追加されている Groovy スクリプト ファイルを解析するには。
手順
ステップ 1 |
使用する Groovy スクリプト ファイルを選択します。この例では、既存の Groovy スクリプト ファイル macro.groovy を使用します。DOCSIS Groovy スクリプトが使用されているため、-Docsis オプションが使用されます。 |
ステップ 2 |
このコマンドを使用して設定ファイル ユーティリティを実行します。 /opt/CSCObac/rdu/bin# runCfgUtil.sh -docsis -r unprov.groovy -u admin -p changeme
|
ローカル Groovy スクリプト ファイルを処理し共有秘密鍵を追加する Groovy スクリプトのテスト
Groovy スクリプト ファイルの処理をテストし、指定した共有秘密鍵を追加するには、 runCfgUtil.sh コマンドを使用します。
構文の説明
runCfgUtil.sh -e -docsis -l file -c shared
-
-e :エンコード オプションを特定します。
-
-docsis :DOCSIS Groovy スクリプト ファイルとして入力ファイルを識別します。
-
-l :入力ファイルをローカル ファイル システム上に置くように指定します。
-
file :解析されない入力 t Groovy スクリプト ファイルを識別します。
-
-c :DOCSIS Groovy スクリプト ファイルを解析すると、CMTS 共有秘密を指定します。
-
shared: 共有秘密鍵を指定します。デフォルトの共有秘密鍵は、cisco です。
ローカルに保存されている Groovy スクリプト ファイルを解析するには、ユーザー指定の共有秘密鍵のを設定します。
手順
ステップ 1 |
/opt/CSCObac/rdu/groovy にディレクトリを変更します。 |
ステップ 2 |
解析する Groovy スクリプト ファイルを選択します。この例では、既存の Groovy スクリプト ファイル macro.groovy を使用します。DOCSIS Groovy スクリプトが使用されているため、-Docsis オプションが使用されます。 |
ステップ 3 |
このコマンドを使用して設定ファイル ユーティリティを実行します。
|
ローカル Groovy スクリプト ファイルを処理し EMIC共有 秘密鍵 を追加する Groovy スクリプトのテスト
Groovy スクリプト ファイルの処理をテストし、指定した拡張 CMTS MIC(EMIC)共有秘密鍵を追加するには、 runCfgUtil.sh コマンドを使用します。
構文の説明
runCfgUtil.sh -E -docsis -l filename
-
-E :EMIC 計算を有効にします。
-
-docsis :DOCSIS Groovy スクリプト ファイルとして入力ファイルを識別します。
-
-l filename :パス名を含む入力 Groovy スクリプト ファイルを指定します。すべてのケースで、入力 Groovy スクリプト ファイルには .groovy ファイル拡張子があります。たとえば、test.groovy。
デフォルト設定で EMIC を計算するには。
手順
ステップ 1 |
使用する Groovy スクリプト ファイルを選択します。この例では、既存の Groovy スクリプト ファイル macro.groovy を使用します。-docsis オプションは、DOCSIS Groovy テンプレートが使用されているため使用されます。 |
ステップ 2 |
このコマンドを使用して設定ファイル ユーティリティを実行します。
|
Specifying Dynamic Variables at the Command Line
動的変数を指定するには、runCfgUtil.sh コマンドを使用します。
構文の説明
runCfgUtil.sh -e -l file -prop “file”
-
-e :エンコード オプションを識別します。
-
-l :入力ファイルがローカル ファイル システム上にあることを指定します。
-
file :解析されない入力 t Groovy スクリプト ファイルを識別します。
-
-prop :動的スクリプトで使用される変数のキーと値を持つプロパティ ファイルを指定します。
-
“file” :対象の動的変数を特定します。複数の動的変数が必要な場合は、各キー値のペアをその他の後に指定する必要があります。
コマンド ラインで動的変数の値を指定するには。
手順
ステップ 1 |
/opt/CSCObac/rdu/groovy にディレクトリを変更します。 |
ステップ 2 |
使用する Groovy スクリプト ファイルを選択します。 |
ステップ 3 |
Groovy スクリプトの動的変数を特定します。 |
ステップ 4 |
変数の値を特定します。 |
ステップ 5 |
このコマンドを使用して設定ファイル ユーティリティを実行します。
|
Specifying a Device for Dynamic Variables
runCfgUtil.sh コマンドを使用して、動的変数のデバイスを指定します。
構文の説明
runCfgUtil.sh -e -r file -i MAC -u username -p password
-
-e :エンコード オプションを識別します。キーを承認し、記載されてない場合デフォルト キーを使用します。
-
-r :RDU に追加されているファイルとして入力ファイルを識別します。
-
file :解析されない入力 t Groovy スクリプト ファイルを識別します。
-
-i :動的変数を解析するときに使用するデバイスを指定します。
-
MAC :そのデバイスの MAC アドレスを識別します。
-
-u username :RDU に接続するときに使用するユーザー名を指定します。
-
-p password — RDU に接続するときに使用するパスワードを指定します。
動的変数の置換に使用するデバイスを指定するには:
手順
ステップ 1 |
使用する Groovy スクリプト ファイルを選択します。この例では、既存の Groovy スクリプト ファイル macro.groovy を使用します。 |
||
ステップ 2 |
Groovy スクリプトの動的変数を特定します。 |
||
ステップ 3 |
使用するデバイスを識別します。この例では、デバイスが RDU に存在し、プロパティとして動的変数が設定されていることを前提としています。 |
||
ステップ 4 |
このコマンドを使用して設定ファイル ユーティリティを実行します。 /opt/CSCObac/rdu/bin# runCfgUtil.sh -e -r macro.groovy -i "1,6,00:01:02:03:04:05" -u admin -p changeme
|
Specifying Discovered Data at the Command Line
検出されたデータを指定するには、 runCfgUtil.sh コマンドを使用します。
構文の説明
runCfgUtil.sh -e -l file -dis “file”
-
-e :エンコード オプションを識別します。キーを承認し、記載されてない場合デフォルト キーを使用します。
-
-l :入力ファイルがローカル ファイル システム上にあることを指定します。
-
file :解析されない入力 t Groovy スクリプト ファイルを識別します。
-
-dis :フォーム キーと値ペアの動的なスクリプトで使用できる検出ータを指定します。
-
“file” :適切な検出データを特定します。
コマンド ラインで検出されたデータの値を指定するには。
手順
ステップ 1 |
使用する Groovy スクリプト ファイルを選択します。 |
ステップ 2 |
Groovy スクリプトで検出されたデータを特定します。 |
ステップ 3 |
検出されたデータの値を特定します。 |
ステップ 4 |
このコマンドを使用して設定ファイル ユーティリティを実行します。 /opt/CSCObac/rdu/bin# runCfgUtil.sh -e -l macro.groovy -dis dis.properties
|
Specifying a Device for Discovered Data
デバイスを指定し、設定ファイル生成のた検出されたデータを使用するには、 runCfgUtil.sh コマンドを使用します。
構文の説明
runCfgUtil.sh -e -r file -i MAC -u username -p password
-
-e :エンコード オプションを識別します。キーを承認し、記載されてない場合デフォルト キーを使用します。
-
-r :RDU に追加されているファイルとして入力ファイルを識別します。
-
file :解析されない入力 t Groovy スクリプト ファイルを識別します。
-
-i :検出されたデータを解析するときに使用するデバイスを指定します。
-
MAC :そのデバイスの MAC アドレスを識別します。
-
-u username :RDU に接続するときに使用するユーザー名を指定します。
-
-p password — RDU に接続するときに使用するパスワードを指定します。
検出されたデータの代入に使用するデバイスを指定するには。
手順
ステップ 1 |
使用する Groovy スクリプト ファイルを選択します。この例では、既存の Groovy スクリプト ファイル macro.groovy を使用します。 |
ステップ 2 |
Groovy スクリプトで検出されたデータを特定します。 |
ステップ 3 |
使用するデバイスを識別します。この例では、デバイスが RDU に存在し、プロパティとして検出されたデータが設定されていることを前提としています。 |
ステップ 4 |
このコマンドを使用して設定ファイル ユーティリティを実行します。 /opt/CSCObac/rdu/bin# runCfgUtil.sh -e -r macro.groovy -i "1,6,00:01:02:03:04:05" -u admin -p changeme
|
Groovy からバイナリ ファイルを生成する
runCfgUtil.sh コマンドを使用して、バイナリ ファイルとして解析された Groovy スクリプトの出力を指定します。
構文の説明
runCfgUtil.sh -l input_file -o output_file
-
-l :入力ファイルをローカル ファイル システム上に置くように指定します。
-
input_file :解析される入力 Groovy スクリプト ファイルを特定します。
-
-o :解析された Groovy スクリプト ファイルがバイナリ ファイルとして保存されることを指定します。
-
output_file :解析された Groovy スクリプト ファイルのバイナリの内容が保存されているファイルの名前を特定します。
Groovy スクリプトからバイナリ ファイルに解析する出力を指定します。
手順
ステップ 1 |
使用する Groovy スクリプト ファイルを選択します。 |
ステップ 2 |
出力ファイル名を特定します。この例では、unprov.cm を使用しています。 |
ステップ 3 |
このコマンドを使用して設定ファイル ユーティリティを実行します。 /opt/CSCObac/rdu/bin# runCfgUtil.sh -l unprov.groovy -o unprov.cm
|
ローカル バイナリ ファイルの表示
詳細については、『Viewing a Local Binary File(ローカル バイナリ ファイルの表示)』を参照してください。
外部バイナリ ファイルの表示
詳細については、『Viewing an External Binary File(外部のバイナリ ファイルの表示)』を参照してください。
PacketCable Basic フローのアクティブ化
詳細については、PacketCable Basic フローのアクティブ化を参照してください。
マルチベンダー サポート用 TLV 43s の生成
詳細については、『Generating TLV 43s for Multivendor Suppor』を参照してください。
動的 TFTP ファイル命名規則
TFTP ファイルの命名規則を使用して、動的 TFTP ファイル名とその順序の変数コンポーネントをカスタマイズできます。Groovy スクリプトは、公開されている DHCP 検出データおよびその他のインターフェイスなどのコンポーネントを使用して、TFTP ファイル名を生成します。スクリプトは、サービス クラス名、検出されたベンダー名、ダウン ストリーム速度など重要な情報を含むことができます。テクノロジー デフォルトまたはシステム デフォルトのどちらかでスクリプトを設定できます。デフォルトでは 127 文字まで指定できます。
CableLabs 設定ファイル名スクリプトが変更された場合は、変更を反映するため影響を受けるデバイスのリストの設定の再生成がトリガーされます。
BAC_HOME/rdu/samples/groovy で Groovy スクリプトのサンプルを確認できます。
例 19-1 サンプル TFTP ファイル名 Groovy スクリプト
/**
* example_extended_filename.groovy
*
* A sample CableLabs Configuration Filename Script that demonstrates how
* to create an extended filename. This example includes the following
* strings in the extended filename: DeviceType, Selected ClassOfService,
* and provisioning group. For DOCSIS device types, the default DOCSIS
* version is included after device type. The resulting extended filename
* string is:
*
* "<device-type>_<default-docsis-version>_<selected-cos>_<pg>"
* (e.g., "cm_11_goldcos_westpg", "pc_silvercos_eastpg").
*
* A CableLabs Configuration Filename Script specifies an extended filename
* label that is appended to the standard BAC dynamic configuration filename.
* In BAC 4.2 and later releases, the dynamic configurations have a filename
* consisting of the fixed/standard prefix. The script can be configured at
* System Defaults (preferred) and/or Technology Defaults.
*
* BAC properties:
* DocsisDefaultKeys.DOCSIS_DEFAULT_VERSION
*
* Variable bindings:
* configFileName - Extended Filename of type StringBuilder
* services - of type ExtensionServices
* discoveredData - of type DHCPDataAccess
* deviceProperties - of type CSRCProperties
* device - of type IPDevice
* context - of type ConfigContext
*/
import com.cisco.provisioning.cpe.constants.DocsisDefaultKeys
import com.cisco.provisioning.cpe.extensions.constants.CNRNames
import com.cisco.provisioning.cpe.extensions.services.DeviceType
/*
* A Groovy list is used to collect the ordered list of string fields
* that will comprise the extended filename. Once all the fields have been
* added to the list, the "join" method is used to concatenate the
* fields with a underscore ('_') separator character.
*/
def label = []
/*
* Add Device Type (abbreviated).
*
* The device type string is too verbose for a filename component, so an
* abbreviation is used instead. For example, the DOCSIS device type value
* "DOCSISModem" is abbreviated as "cm". If no abbreviation is defined,
* a default abbreviation of "xx" is used.
*/
def deviceType = device.getDeviceType().getName()
def deviceTypeMap = [
(DeviceType.DOCSIS_MODEM) : "cm",
(DeviceType.PACKET_CABLE_MTA) : "pc",
(DeviceType.CABLEHOME_WAN_MAN) : "ch",
(DeviceType.STB) : "st",
(DeviceType.CUSTOM_CPE): "cu"
]
label << deviceTypeMap[deviceType] ?: "xx"
/*
* Add default DOCSIS version number (exclude embedded "dot").
*
* For DOCSIS device types, the default DOCSIS version number specifies the
* maximum DOCSIS version supported by the CM and CMTS. This version number
* indicates the DOCSIS version grammar used when constructing the dynamic
* configuration file. The embedded "dot" is stripped from the version number
* (i.e., "3.0" --> "30").
*/
if (deviceType == DeviceType.DOCSIS_MODEM)
{
label << deviceProperties.getProperty(
DocsisDefaultKeys.DOCSIS_DEFAULT_VERSION, "1.0") - "."
}
/*
* Add Selected Class of Service name.
*/
label << device.getSelectedClassOfService().getClassOfServiceName()
/*
* Add Provisioning Group name.
*/
label << device.getProvGroup().getProvGroupId()
/*
* Convert the list of filename components into a string value with underscore
* ('_') characters separating the filename components. Add the resulting
* string to the configFileName StringBuilder binding.
*/
configFileName << label.join("_")
拡張機能を使用した動的 TFTP ファイルの名前付け
TFTP ファイルのネーミング機能は、RDU 拡張レベルでカスタマイズをサポートするため強化されています。プライム ケーブル プロビジョニング 5.2 リリース以前は、TFTP ファイル名は TFTP ファイル名生成 Groovy スクリプトを使用して、動的にのみ名前付けが可能です。プライム ケーブル プロビジョニング 5.2 リリースでは、サービス レベルの拡張機能、設定の生成拡張機能、設定の生成スクリプトで使用可能な共有コンテキストで、ユーザーが設定ファイル名を設定できます。
共有コンテキストで設定されているファイル名は、TFTP ファイル名の生成 Groovy スクリプトで設定されているファイル名上の、より優先順位の高いテクノロジーまたはシステム デフォルト レベルで設定できます。
共有コンテキスト ファイル名
共有コンテキスト(com.cisco.provisioning.cpe.extensions.configuration.SharedConfig)
が ConfigContext (com.cisco.provisioning.cpe.extensions.configuration.ConfigContext)に含まれており、サービス レベル拡張、設定生成拡張、設定生成 Groovy スクリプトで共有されます。新規の共有コンテキスト
オブジェクトでは、ファイル名を設定するために使用可能な設定方法 (setConfigFileName (String))
があります。次のサンプル コード スニペットでは、拡張の共有コンテキストで設定されているファイル名を説明します。
SharedConfig sharedConfig = configContext.getSharedConfig();
sharedConfig.setConfigFileName("<fillup_the_filename_here>");
ファイル名への設定と取得方法に加えて、共有コンテキスト オブジェクトにはマップ オブジェクトがあり(取得方法 <Map<String, Object> getSharedConfigMap() を使用してアクセス可能)、データを保存し拡張間で共有するためのコンテナとして使用できます。
共有コンテキストはデバイス検出コンテキスト(com.cisco.provisioning.cpe.extensions.detection.DeviceDetectionContext)
に含まれており、デバイス検出拡張機能で使用できます。デバイス検出拡張機能により入力されている共有コンテキストは、サービス レベル拡張機能と設定生成拡張機能で共有される設定コンテキストで事前入力されます。共有コンテキストがデバイス検出拡張機能により入力されている場合、設定コンテキストで事前入力され、サービス
レベル拡張機能と設定生成拡張機能で使用可能です。
デバイス中断コンテキスト(com.cisco.provisioning.cpe.extensions.disruption.DeviceDisruptionContext)
は、共有コンテキストをカプセル化します。ただし、これは設定コンテキストまたはファイルの名前付けには関係ありません。デバイス中断コンテキストに含まれる共有コンテキスト (com.cisco.provisioning.cpe.extensions.configuration.SharedContext)は、複数のデバイス中断拡張機能で使用できます。
動的 TFTP ファイル名の生成の基本的なフロー
ファイル名生成の基本的なフローを説明する一連の手順を次に示します。
-
RDU は設定の生成要求を受信します。
-
生成拡張によりデバイスに割り当てる必要がある動的 TFTP ファイルを決定している間、RDU はデバイスの設定生成を実行します。ファイルはテンプレート(例:docsis.tmpl)またはスクリプト(例:docsis.groovy)になる可能性があります。(例:silver.cm)
-
すべてのカスタム拡張機能を実行後、設定エンジンは共有コンテキスト内のファイル名の可用性を検索します。ファイル名に共有コンテキストとプロビジョニング グループ機能が入力されている場合、/provgroup/capability/dpe/tftp/filename/extensions" (ProvGroupCapabilitiesKeys.TFTP_DYNAMIC_FILENAME_USING_EXTENSIONS) が有効になり、その後手順 5 に従います。ファイル名が共有コンテキストに入力されていない場合、手順 4 で説明したように拡張 TFTP ファイル名の Groovy スクリプト ワークフローに従ってファイル名の生成を行います。
-
生成拡張は、テクノロジー デフォルトの CableLabs 設定ファイル名のスクリプト プロパティを検索します。見つからない場合、システム デフォルトに保存されます。このプロパティの値は、実行するスクリプトの名前です。スクリプトが実行され、動的 TFTP ファイル名に含まれる追加の文字列を返します。
-
生成拡張はこの値を使用し、デバイス用の動的 TFTP ファイル名を作成します。ファイル名の生成が完了した後、設定は DPE に送信されキャッシュされます。
共有コンテキストを介したファイル名生成に関する基本ポインタ
-
TFTP ファイル名 Groovy スクリプト機能と同様に、共有コンテキストに入力される名前には実際の TFTP 設定ファイル名の動的な部分が含まれます。
-
デフォルトのファイル名の最大長は 127 文字であり、ファイル名は制限を超える場合切り捨てられます。スペースと特殊文字の削除は、既存の TFTP 動的ファイル名の生成機能と同じです。
-
ファイル名がカスタム拡張子または設定生成スクリプト別に共有コンテキストに入力されなかった場合、ファイル名の生成は設定ファイル名生成 Groovy スクリプト ワークフロー経由で既存の TFTP 生成に従います。
共有コンテキストのファイル名を入力するサンプル サービス レベルの拡張機能
package com.cisco.provisioning.cpe.extensions.samples;
import java.util.Map;
import com.cisco.provisioning.cpe.extensions.ExtensionException;
import com.cisco.provisioning.cpe.extensions.configuration.ConfigContext;
import com.cisco.provisioning.cpe.extensions.configuration.ServiceLevel;
import com.cisco.provisioning.cpe.extensions.configuration.SharedConfig;
import com.cisco.provisioning.cpe.extensions.services.ExtensionServices;
import com.cisco.provisioning.cpe.extensions.services.IPDevice;
/**
* This class will demonstrate usage of Shared Context and the filename
* availability in the configuration context object. The PCP extensions will
* make use of the Shared Context and also have the feasibility of setting the
* filename from the extensions.
*
*/
public class SampleSharedContextServiceLevelSelectionExtension implements
com.cisco.provisioning.cpe.extensions.configuration.ServiceLevelSelector
{
@Override
public void selectServiceLevel(IPDevice device,
ConfigContext configContext, ServiceLevel serviceLevel,
ExtensionServices extensionServices) throws ExtensionException
{
final String extensionName =
SampleSharedContextServiceLevelSelectionExtension.class.getName();
com.cisco.provisioning.cpe.extensions.services.LogManager logManager =
extensionServices.getLogManager();
logManager.log(
com.cisco.provisioning.cpe.extensions.services.LogLevel.INFO,
extensionName, " Executing custom code here..");
long duration = System.currentTimeMillis();
/*
* Get the SharedConfig object from ConfigContext
*/
SharedConfig sharedConfig = configContext.getSharedConfig();
/*
* Get the sharedContext map from SharedConfig object
*/
Map<String, Object> sharedContextMap =
sharedConfig.getSharedConfigMap();
/*
* Set the generated token into the Shared Context map
*/
sharedContextMap.put("customToken_1", generateTokenXYZ());
logManager.log(
com.cisco.provisioning.cpe.extensions.services.LogLevel.INFO,
extensionName, " Shared Context Map after token generation "
+ sharedContextMap);
/*
* Setting the file name in SharedConfig object
*/
logManager.log(
com.cisco.provisioning.cpe.extensions.services.LogLevel.INFO,
extensionName, " Settinng the file name here...");
sharedConfig.setConfigFileName("SetBy" + this.getClass().getCanonicalName());
/*
*
* Set a token that is used by sample configuration script
* example_shared_context.groovy
*/
sharedContextMap.put("maxCPE","7");
logManager.log(
com.cisco.provisioning.cpe.extensions.services.LogLevel.INFO,
extensionName, " Shared Context Map after new token "
+ sharedContextMap);
logManager.log(
com.cisco.provisioning.cpe.extensions.services.LogLevel.INFO,
extensionName, " It took ["
+ (System.currentTimeMillis() - duration)
+ "] milliseconds to complete this extension ");
}
/**
* This method models a custom token generation
* @return the generated token as String
*/
private String generateTokenXYZ()
{
/*
* operation.
*/
return "dummyTokenValue";
}
}
¢
Sample Configuration Script to access Shared Context and populate filename in Shared Context
/**
* A sample CableLabs Configuration Script that demonstrates the Shared Context
availability in Groovy script. And also it demonstrate to populate the filename in Shared Context
*
*
* PCP properties:
* DocsisDefaultKeys.DOCSIS_DEFAULT_VERSION
* SNMPPropertyKeys.READ_COMMUNITY_STRING
* SNMPPropertyKeys.WRITE_COMMUNITY_STRING
*
* Variable bindings:
* configFile - of type DOCSISTFTPFile
* option - of type DOCSISOptionFactory
* services - of type ExtensionServices
* discoveredData - of type DhcpDataAccess
* deviceProperties - of type CSRCProperties
* device - of type IPDevice
* context - of type ConfigContext
*
* @see com.cisco.provisioning.cpe.extensions.configuration.DOCSISTFTPFile
* @see com.cisco.provisioning.cpe.extensions.configuration.DOCSISOptionFactory
* @see com.cisco.provisioning.cpe.extensions.services.ExtensionServices *
* @see com.cisco.provisioning.cpe.extensions.configuration.DhcpDataAccess
* @see com.cisco.provisioning.cpe.extensions.services.CSRCProperties
* @see com.cisco.provisioning.cpe.extensions.services.IPDevice
* @see com.cisco.provisioning.cpe.extensions.configuration.ConfigContext
*/
import com.cisco.provisioning.cpe.constants.SNMPPropertyKeys
import com.cisco.provisioning.cpe.extensions.configuration.SharedConfig
def TLV = option.&createOptionValue
/* 1. Accessing Shared Context */
/*
* This script tries to set the maxCPE value based on the tokens available at the Shared Context
* Populate the maxCPE property in Shared Context by using extensions to use this
demonstration.
/*
* Get the SharedConfig object from ConfigContext
*/
SharedConfig sharedConfigObj = context.getSharedConfig();
/*
* Get the sharedContext map from SharedConfig object
*/
Map<String, Object> sharedContextMapObj =
sharedConfigObj.getSharedConfigMap();
def maxCPE = TLV("18", "3")
if (sharedContextMapObj.containsKey("maxCPE"))
{
maxCPE = TLV("18", (String)sharedContextMapObj.get("maxCPE"))
}
configFile.add(maxCPE)
/* 2. Filename can also be set at this configuration script by using the Shared Context
*/
/** Sets the dynamic filename */
sharedConfigObj.setConfigFileName("samplenamesetByCfgScript");