らくがきちょう

なんとなく ~所属組織/団体とは無関係であり、個人の見解です~

Cisco ACI で取得可能なスナップショットは「50」世代まで

Cisco ACI のスナップショット機能に関して、以前に以下のメモを書きました。

スナップショット機能は実装当初から使いやすい機能で、最新のバージョンに至るまで殆ど変更の無い、完成された機能だと思います。 今回はスナップショット機能について改めてまとめておきます。

目次

結論

先に結論を記載しておきます。

  • DailyAutoBackup について
    • ACI 初期状態で設定済み
    • 8 時間おきに定期実行され、スナップショットを取得する
    • スナップショットは 3 世代取得される (初期状態では後述の maxSnapshotCount が「3」になっている為)
    • 3 世代を超える場合は、スナップショット全体のうち最も古いファイルが削除される
  • ファブリック全体で取得可能なスナップショット最大数について
    • 全ての Export Policy 合計で 50 世代までスナップショットを取得可能
    • 50 世代を超える場合は、スナップショット全体のうち最も古いファイルが削除される
  • Export Policy 毎に取得可能なスナップショットの最大数について
    • Export PolicyJSON / XML で出力した際に含まれる maxSnapshotCount の設定値で決まる
    • maxSnapshotCountglobal-limit の場合、その Export Policy は「50」世代までスナップショットを取得可能
    • maxSnapshotCount の値を超える数のスナップショットを取得すると、スナップショット全体のうち最も古いファイルが削除される
  • maxSnapshotCount の設定方法について
    • Web GUI からは指定出来ず、自動的に global-limit になる
    • CLI からは指定出来ず、自動的に global-limit になる
    • Ansible からは 1 ~ 10 の値を必ず指定出来る (但し、Ansible 2.8 時点だとソースコードを見た限り、global-limit は指定出来ないように見えた)
    • REST API であれば maxSnapshotCount へ以下を設定可能
      • 「1 ~ 10」の数字
      • global-limit (「50」と同じ意味)

Web GUI での Export Policy 設定方法

スナップショットは Export Policy をトリガーすることで取得される為、まず Export Policy を設定する必要があります。 ACI 4.2(2e) でも設定方法は従来と同じです。

Step.1

AdminImport/ExportExport PoliciesConfigurationPolicyCreate Configuration Export Policy をクリックします。

f:id:sig9:20191014183632p:plain

Step.2

Create Configuration Export Policy というウインドウが表示されます。 初期状態では Shapshot が未チェックになっており、その代わりに Export Destination 欄が表示されています。

f:id:sig9:20191014183643p:plain

Snapshot にチェックを入れると Export Destination 欄は表示されなくなります (スナップショットは APIC 内部に保存されるので、必然的に保存場所を指定する必要がなくなる為)。 これで設定自体は完了です。 すぐにスナップショットを取得したい場合は Start NowYes に設定します。 但し、Start Now は「すぐにスナップショットを取得する」だけであり、設定として保持するわけでは無いので、実行してもすぐに Start Now: No に戻ります。

f:id:sig9:20191014183654p:plain

取得済みのスナップショットの一覧を確認する

Web GUICLI 各々から取得済みのスナップショットを一覧表示する方法をまとめます。

Web GUI

AdminConfig Rollbacks と辿ると取得済みのスナップショット一覧を表示することが出来ます。

f:id:sig9:20191014183622p:plain

CLI

CLI であれば show snapshot files で確認することが出来ます。

apic# show snapshot files
File    : ce2_DailyAutoBackup-2019-10-07T01-00-11.tar.gz
Created : 2019-10-07T01:00:13.041
Root    :
Size    : 52718

File    : ce2_DailyAutoBackup-2019-10-07T09-00-00.tar.gz
Created : 2019-10-07T09:00:02.228
Root    :
Size    : 52806

File    : ce2_DailyAutoBackup-2019-10-07T17-00-17.tar.gz
Created : 2019-10-07T17:00:19.011
Root    :
Size    : 55012

CLI からスナップショットの数を数える

取得したスナップショットファイルは全てのコントローラの /data2/snapshots/ ディレクトリに保存されるようです (APIC x 3 台環境で確認)。

apic# ls -l /data2/snapshots
合計 160
-rw-r--r-- 1 ifc admin 52718 107 01:00 ce2_DailyAutoBackup-2019-10-07T01-00-11.tar.gz
-rw-r--r-- 1 ifc admin 52806 107 09:00 ce2_DailyAutoBackup-2019-10-07T09-00-00.tar.gz
-rw-r--r-- 1 ifc admin 55012 107 17:00 ce2_DailyAutoBackup-2019-10-07T17-00-17.tar.gz

スナップショット数を数えるには /data2/snapshots/ ディレクトリ配下のファイル数を数えれば良いのですが、オプションを指定しない ls では上記出力例のように 合計 という余計な表示が含まれてしまいます。 その為、ls -1 (数字の「イチ」オプション) を指定して 合計 が表示されないようにし、出力結果の行数を wc -l でカウントすることで「スナップショットファイルの数」を数えます。

apic# ls -1 /data2/snapshots | wc -l
3

CLI からスナップショットを取得する

CLI からスナップショットを取得するには以下のように実行します。

trigger snapshot export [ExportPolicy]

CLI からスナップショットを削除する

CLI からスナップショットを削除するには以下のように実行します。 尚、ファイル名の指定時に正規表現は利用出来ないようです。

clear snapshot file [SnapshotFile]

初期状態で存在する DailyAutoBackup の設定内容

(ACI でスナップショット機能を実装して以降) ACI のバージョンに関わず、初期状態で DailyAutoBackup という設定が存在します。 この設定を確認していきます。

Web GUI

Web GUI では以下のように表示されます。 以下の設定になっていることが分かります。

  1. JSON 形式でコンフィグを保存する
  2. (外部へのバックアップでは無く) スナップショットをバックアップする
  3. 8 時間間隔で定期的にコンフィグをバックアップする

f:id:sig9:20191014184758p:plain

CLI

CLI 上から設定を確認すると以下のように表示されます。

apic# show running-config snapshot export DailyAutoBackup
# Command: show running-config snapshot export DailyAutoBackup
# Time: Mon Oct 14 14:49:15 2019
  snapshot export DailyAutoBackup
    schedule EveryEightHours
    exit

all オプションを付与し、暗黙的なデフォルト値も表示させると以下のように表示されます。

apic# show running-config all snapshot export DailyAutoBackup
# Command: show running-config all snapshot export DailyAutoBackup
# Time: Mon Oct 14 14:49:11 2019
  snapshot export DailyAutoBackup
    format json
    schedule EveryEightHours
    no target
    exit

REST API

REST API で取得した .json ファイルは以下の内容になっていました。 Web GUICLI では確認出来ない、maxSnapshotCount : 3 という設定が存在しているのが分かります。 ACI ではこのように、Web GUICLI では確認出来ないが、REST API からは確認出来る設定が幾つか存在するようです。

{
    "imdata": [
        {
            "configExportP": {
                "attributes": {
                    "adminSt": "untriggered",
                    "annotation": "",
                    "descr": "",
                    "dn": "uni/fabric/configexp-DailyAutoBackup",
                    "format": "json",
                    "includeSecureFields": "yes",
                    "maxSnapshotCount": "3",
                    "name": "DailyAutoBackup",
                    "nameAlias": "",
                    "snapshot": "yes",
                    "targetDn": ""
                },
                "children": [
                    {
                        "configRsExportScheduler": {
                            "attributes": {
                                "annotation": "",
                                "tnTrigSchedPName": "EveryEightHours"
                            }
                        }
                    }
                ]
            }
        }
    ],
    "totalCount": "1"
}

Web GUI から作成した Export Policy の内容

Web GUI 上から作成した Export Policy の内容を確認してみます。

CLI

CLI から確認すると設定は以下のようになっています。 設定時にスケジューラを指定しなかったので、schedule 設定が無いこと以外は DailyAutoBackup と同じ内容です。

apic# show running-config snapshot export SnapshotTest
# Command: show running-config snapshot export SnapshotTest
# Time: Mon Oct 14 17:25:58 2019
  snapshot export SnapshotTest
    exit

all オプションを指定すると以下のように表示されます。

apic# show running-config all snapshot export SnapshotTest
# Command: show running-config all snapshot export SnapshotTest
# Time: Mon Oct 14 17:25:48 2019
  snapshot export SnapshotTest
    format json
    no target
    exit

REST API

REST API で .json ファイルを取得すると以下の内容になっていました。 先ほどの DailyAutoBackup とは違い、maxSnapshotCount: global-limit になっていることが分かります。

{
    "imdata": [
        {
            "configExportP": {
                "attributes": {
                    "adminSt": "untriggered",
                    "annotation": "",
                    "descr": "",
                    "dn": "uni/fabric/configexp-SnapshotTest",
                    "format": "json",
                    "includeSecureFields": "yes",
                    "maxSnapshotCount": "global-limit",
                    "name": "SnapshotTest",
                    "nameAlias": "",
                    "snapshot": "yes",
                    "targetDn": ""
                }
            }
        }
    ],
    "totalCount": "1"
}

スナップショットの最大数は「50」世代まで

スナップショットが何世代まで取得可能なのか、試してみます。 まず、50 世代までスナップショットを取得してみました。 スナップショットの内訳は以下のようになっています。

トリガーした Export Policy スナップショット数
DailyAutoBackup 3
SnapshotTest 47

f:id:sig9:20191014192345p:plain

実際に APICCLI からスナップショット数の合計が「50」であることを確認しておきます。

apic# ls -1 /data2/snapshots | wc -l
50

この状態から更にもう一世代、SnapshotTest をトリガーしてスナップショットを取得します。

apic# trigger snapshot export SnapshotTest

Web GUI の表示は以下のようになりました。 最も古い日付のスナップショットがひとつ、減っていることが分かります。

f:id:sig9:20191014192356p:plain

しかし、スナップショット自体の合計は「50」のままです。

apic# ls -1 /data2/snapshots | wc -l
50

スナップショットの内訳は以下のようになっていました。

apic# ls -1 /data2/snapshots/ce2_DailyAutoBackup* | wc -l
2
apic# ls -1 /data2/snapshots/ce2_SnapshotTest* | wc -l
48

これらの結果からスナップショットは以下の仕様であることが分かります。

  • スナップショットは 50 世代まで取得可能
  • 50 世代を超えた場合は、最も古いスナップショットが削除される

世代数を決めるパラメータは maxSnapshotCount

該当の Export Policy が「何世代までスナップショットを取得可能か?」を決定しているのは maxSnapshotCount というパラメータのようです。 ここまでの検証で分かるように、maxSnapshotCount は以下の動作をするようです。 加えて、maxSnapshotCount に指定可能な数値は「1 ~ 10 まで」という制限もあります。

  • その Export Policy が取得出来るスナップショットの世代数は maxSnapshotCount の値まで
  • maxSnapshotCount を超えるスナップショット数を超えると、全てのスナップショットを通じて最も古いスナップショットが削除される
  • Web GUI から Export Policy を新規作成 / 変更する場合、maxSnapshotCount は指定できず、暗黙的に global-limit という値になる
  • maxSnapshotCountglobal-limit の場合、スナップショットは 50 世代まで取得可能
  • maxSnapshotCount は以下の値を設定可能
    • 1 ~ 10
    • global-limit (「50」と同じ意味)

REST APImaxSnapshotCount を変更する

上述の通り、Web GUICLI では maxSnapshotCount の値を変更することは出来ませんが、REST API であれば設定変更可能です。 ここでは curl を使って DailyAutoBackupmaxSnapshotCount を「5」へ変更してみます。

まず、ACI へログインします。

ACI へログインする

curl -k \
     -X POST https://10.0.0.1/api/aaaLogin.json \
     --data '{"aaaUser":{"attributes":{"name":"admin","pwd":"password"}}}' \
     -c cookie.txt

maxSnapshotCount : 5」に設定する

次が本番です。 以下のように maxSnapshotCount : 5 を指定した JSONDailyAutoBackup に対して POST すれば設定完了です。

curl -k \
     -X POST https://10.0.0.1/api/mo/uni/fabric/configexp-DailyAutoBackup.json \
     --data '{"configExportP": {"attributes": {"maxSnapshotCount": "5"}}}' \
     -b cookie.txt

maxSnapshotCount : global-limit」に設定する

バックアップ世代数を「50」(global-limit) に設定するには以下のように実行します。

curl -k \
     -X POST https://10.0.0.1/api/mo/uni/fabric/configexp-DailyAutoBackup.json \
     --data '{"configExportP": {"attributes": {"maxSnapshotCount": "global-limit"}}}' \
     -b cookie.txt