Intersight Cloud Orchestrator (ICO) で Cisco HyperFlex のシャットダウンを自動化

**この記事は Cisco Systems 合同会社 社員有志 による 2021年Advent Calendar 2 の7日目分として投稿しています。**

**2021年版その1** https://qiita.com/advent-calendar/2021/cisco
**2021年版その2** https://qiita.com/advent-calendar/2021/cisco2

**過去のカレンダーはこちら**
2017年版 https://qiita.com/advent-calendar/2017/cisco
2018年版 https://qiita.com/advent-calendar/2018/cisco
2019年版 https://qiita.com/advent-calendar/2019/cisco
2020年版その1 https://qiita.com/advent-calendar/2020/cisco
2020年版その2 https://qiita.com/advent-calendar/2020/cisco2

**免責事項**
本サイトおよび対応するコメントにおいて表明される意見は、投稿者本人の個人的意見であり、シスコの意見ではありません。本サイトの内容は、情報の提供のみを目的として掲載されており、シスコや他の関係者による推奨や表明を目的としたものではありません。各利用者は、本Webサイトへの掲載により、投稿、リンクその他の方法でアップロードした全ての情報の内容に対して全責任を負い、本Web サイトの利用に関するあらゆる責任からシスコを免責することに同意したものとします。


#はじめに
ハードウェア交換や計画停電を行う際、サーバーは定まった手順でシャットダウンを行う必要があるかと思います。

**Cisco HyperFlex** はシスコのハイパーコンバージドインフラ(HCI) なのですが、ハイパーバイザー上でユーザーの仮想マシンだけでなく、SDS(Software-defined Storage)を提供する仮想マシン(Controller VM)や場合によってはクラスタを管理しているvCenter(HyperFlexの場合はこれを"Nested vCenter"といいます)も動いているため、電源をポチッ:point_up:というわけにもいかず、シャットダウンを正しい手順で行うことが肝心です。

Nested vCenter構成時のシャットダウン手順は [こちら](https://community.cisco.com/t5/%E3%83%87%E3%83%BC%E3%82%BF%E3%82%BB%E3%83%B3%E3%82%BF%E3%83%BC-%E3%83%89%E3%82%AD%E3%83%A5%E3%83%A1%E3%83%B3%E3%83%88/hyperflex-nested-vcenter-%E6%A7%8B%E6%88%90%E3%81%AE%E3%82%AF%E3%83%A9%E3%82%B9%E3%82%BF%E3%82%B7%E3%83%A3%E3%83%83%E3%83%88%E3%83%80%E3%82%A6%E3%83%B3%E3%81%A8%E8%B5%B7%E5%8B%95%E6%89%8B%E9%A0%86/ta-p/3303017) に分かりやすくまとめられており、この手順を自動化してみました！　
仮想マシンのシャットダウン、SSHコマンド実行…など色々複数ステップで構成されているのですが、自動化することで工数やミスを削減できるので、参考になれば幸いです。

今回自動化を行うために使用したツールが **Intersight Cloud Orchestrator (ICO)** です。シスコのコンピューティング系製品を管理が集約された SaaS プラットフォームである **Intersight** の機能の一つで、簡単に GUI ベースで自動化のワークフローを作成・実行できます。
プリセットのタスクも入っていたり、SSHコマンドやAnsibleの実行もできるのでシスコの製品だけが対象というわけではなく多様な使い方ができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/691389/8c9d9c9a-486c-0316-5401-f80f67550cd6.png)




#全体像と必要なセットアップ

![solution diagram.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/691389/28503cd4-db1f-8df3-be2a-5ddcce4774e1.png)


* Intersight アカウントを用意
* HyperFlex の各ノードをIntersight に登録
* Intersight Assist VM を展開して、Intersight アカウントに登録
* vCenter を Intersight に登録
* SSH コマンドを発行する必要のある対象(各ノードのController VM, ESXi)をSSH Endpoint として Intersight に登録 

**注意事項**
* Intersight Cloud Orchestrator の機能は Intersight Assist VM を仲介して行われるため、このシャットダウンのシナリオでは  HyperFlexクラスタ外部に作成することが筆者的には強く推奨です。
* Intersight や Intersight Assist のセットアップについては、[Intersight How To](https://community.cisco.com/t5/%E3%83%87%E3%83%BC%E3%82%BF%E3%82%BB%E3%83%B3%E3%82%BF%E3%83%BC-%E3%83%89%E3%82%AD%E3%83%A5%E3%83%A1%E3%83%B3%E3%83%88/cisco-intersight-how-to/ta-p/4072043) をご覧ください。


**※セットアップのスクリーンショットの一部**
ターゲットタイプを選ぶ
![solution diagram3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/691389/eace7969-32e8-0795-6fea-b9f42c492bc1.png)
アクセス方法のクレデンシャルを選ぶ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/691389/ab5d8765-b000-d523-634e-af6e02080d6e.png)



このセットアップを行うことで、ICOの自動化ワークフローでIntersight に登録しているHyperFlexノード・vCenterに対してプリセットタスク、SSH Endpoint として登録したホストに対しSSH コマンドを発行するタスクを実行できます。

![solution diagram2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/691389/f65f8b29-f4af-86e8-fbb5-2f4e217dce07.png)


#ワークフロー作成と実行

以下の通りシャットダウン手順をIntersight Cloud Orchestrator で作りこんでいきます。

1. **クラスタ上の全てのユーザ VM をシャットダウン**
→プリセットタスク ***Set VM Power State*** で定義

2. **vCenter をシャットダウン　※**
→SSH コマンドタスクで定義 `vim-cmd vmsvc/power.off <vm-id>`

3. **vCenter の VM がどのホスト上で起動するかを書き留めておく**
→SSH コマンドタスクで定義 `vim-cmd vmsvc/getallvms`
(note: vCenterが動いているノードが確認できればいいので、各ノードで動いているVMをリストアップするようにしました。)

4. **各ノードのコントローラ VM に順次SSHでアクセスし、"stop storfs"を実施**
→SSH コマンドタスクで定義　`stop storfs`

5. **各コントローラ VM をシャットダウン&パワーオフ ※**
→SSH コマンドタスクで定義　`shutdown -P now`

6. **各ESXiホストを Maintenance Mode にする　※**
→SSH コマンドタスク　`esxcli system maintenanceMode set -e true`

7. **ESXi ホストをシャットダウン**
→プリセットタスク ***Set Server Power State*** で定義

**注意事項**
※がついているタスクは、プリセットタスクがICOに用意されてはいるのですが、vCenter の介在が必要で、今回 Nested vCenter 構成でvCenterを途中でシャットダウンしてしまうため利用できませんでした。
HyperFlex を管理している vCenter がクラスタ外部にある場合は、プリセットタスクを利用可能です。

タスクは Drag & Drop で簡単に定義することができ、プリセットタスクについては予め入力パラメータが用意されているので、必要なものを選びます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/691389/f46c1d79-30be-c637-63e9-7a62d6f8552c.png)
SSHコマンドタスクは、コマンド発行先を登録されている SSH Endpoint の中から選択して、発行するコマンドの内容を定義するというシンプルな作りになっています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/691389/c2588268-4cee-f6b8-2bad-802c4cb1d812.png)

#いざ実行！

ワークフローを保存して、エラーがないことを確認したのち、画面右下から実行を選択するとワークフローが実行できます。
進捗状況もこのように確認できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/691389/2000522f-cf8f-0550-1f68-732972446803.png)
無事、ユーザVMのシャットダウンからサーバー本体のシャットダウンまで作りこむことができました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/691389/d0628f82-2c63-32e6-ee2d-10797c6672ad.png)

#おわりに

今回はHyperFlexのシャットダウンのシナリオを、Intersight Cloud Orchestrator で自動化してみました。ご参考になったら嬉しいです。
手順の概要を記載いたしましたが、**高度なプログラミングは不要で、行いたい操作をタスクとして定義して、GUIで順番を結ぶだけで簡単にワークフローが作成できました。**

色々な自動化ツールがある中で、個人的に Intersight Cloud Orchestratorの便利なポイントと感じたのは

+ **プリセットタスク**があるので仮想マシンのパワーオフなど簡単に実行できる
+ ***SSH コマンド実行の汎用性***が高い！ SSHコマンドが使えるならなんでも対象なので、スイッチも対象になるかと。
* SaaSのインタフェイスから作りこみを行うので、サーバーをたてる等、***実行環境を用意しなくていい***
でした。


少し特殊なハマりポイントだったのが、今回はシャットダウンのシナリオということで、プリセットタスクを仲介するvCenterをシャットダウンしてしまうため、プリセットタスクが使える範囲が少し狭くなってしまったと感じました。vCenterや Intersight Assist の電源を落とさないような場合はあまり意識しなくていいと思います。