注意事項
この記事は、Notion AIに対して
- 問題と解決策の概要
- 例示用のコード
を渡して生成した実験的な記事になります。
はじめに
最近、私はRTX1300の設定ファイルを定期的にバックアップするためにArgo WorkflowsのCRDであるCron Workflowを使って指定されたスケジュールでワークフローを実行するようにしました。
今回は正確に言えばバックアップではなく、あくまでログに設定ファイルを残しておいて、バックアップ代わりにしているのが性買うです。
バックアップする
以前、Rubyを使用してshow config
を行う方法を紹介しましたが、sshとexpectを使用して設定を取得する方法を紹介します。
前回でも出していた話ですが、RTX1300のSSHサーバはRFC4254のSec 6.5にあるexecを実装していないため、ssh rtx1300 show config
のようなコマンドの実行を行うことはできません。
そういった理由もあり、expectを使っていきます。
backup.sh
バックアップする処理をシェルスクリプトとして定義しておきます。
実際にはConfigMapに定義しています。
#!/bin/bash -Ceuo pipefail # 必要なパッケージをインストール export DEBIAN_FRONTEND=noninteractive apt-get update -qq apt-get install -qq --no-install-recommends expect openssh-client >/dev/null # /tmp/result.txtに一連の出力を書き出す echo "Connecting $BACKUP_USERNAME@$BACKUP_HOSTNAME" expect <<EOF >/tmp/result.txt set timeout 10 spawn ssh $BACKUP_USERNAME@$BACKUP_HOSTNAME expect "(yes/no" send "yes\r" expect "password: " send "$BACKUP_PASSWORD\r" expect "> " send "show config\r" expect "> " send "exit\r" expect eof EOF # /tmp/result.txtから「> show config」から「> exit」までの行(設定)を標準出力に出力する sed -n '/> show config/,/> exit/{/> show config/!{/> exit/!p}}' /tmp/result.txt
専用のコンテナイメージを用意するのが面倒だったこともあり、スクリプトの中でパッケージをインストールしていて大変行儀がよろしくないですね。
詳細は割愛しますが、expectを使ってRTX1300にSSHで接続し、出力された内容に応じてyes
といったり、パスワードを入力してログインしたり、show config
を実行しています。
Cron Workflow
以下が、先ほどのbackup.shを実行するためのCron Workflowです。
あまり馴染みはないかもしれないですが、workflowSpec.templates
の各要素は微妙にPodのSpecに準拠しています。
apiVersion: argoproj.io/v1alpha1 kind: CronWorkflow metadata: name: backup spec: timezone: 'Asia/Tokyo' schedule: "0 0 * * *" concurrencyPolicy: "Allow" startingDeadlineSeconds: 0 workflowSpec: entrypoint: backup templates: - name: backup volumes: - name: scripts configMap: name: backup-scripts container: image: ubuntu:22.04 stdin: true tty: true envFrom: - secretRef: name: backup-credentials volumeMounts: - name: scripts mountPath: /scripts command: - sh - /scripts/backup.sh
実行は、JSTの00:00に実行するように定義しています。
なので、それまで待っても良いですし、Argo WorkflowsのWebUIを有効にしているなら、
単発で実行することもできて非常に便利です。
おわりに
以上が、RTX1300の設定ファイルをバックアップするためのCron Workflowについての紹介でした。
この設定を使うことで、設定ファイルのバックアップを自動的に作成することができます。
Cron Workflowではなく、この程度であれば標準リソースであるCronJobで書いても良いです。
この記事がRTX1300の設定ファイルをバックアップする方法についての情報源として役立つことを願っています。