CML2を使いこなす。（その12：カスタムイメージの導入）

# はじめに
前回はカスタムイメージを登録する際に設定する`Node Definitions`の設定項目について読み解きました。

今回は実際にカスタムイメージ用の`Node Definitions`を設定して、実際にカスタムイメージを動作させてみようと思います。

- 【前】[CML2を使いこなす。（その11：Node Definitionsの設定）](https://qiita.com/sakai00kou/items/7f956625990ff0644acb)
- 【次】[CML2を使いこなす。（その13：トラフィックジェネレータの準備）](https://qiita.com/sakai00kou/items/9448f3d6ce4918d6d709)

# カスタムイメージ導入前の準備
前回説明した通り、今回は以下で公開されているCentOSのクラウドイメージを使用します。

【CentOS8クラウドイメージ 】
https://cloud.centos.org/centos/8/x86_64/images/CentOS-8-GenericCloud-8.4.2105-20210603.0.x86_64.qcow2

尚、上記クラウドイメージは**1.2GB**程度あり、さらにカスタムイメージを起動した際に**シンプロビジョニング**方式でディスクが使われるため、`CML2`ホストマシン側のディスク容量が少ない場合は以下を参考にディスク容量を増やしておきましょう。

- [CML2を使いこなす。（その９：ストレージの増設）](https://qiita.com/sakai00kou/items/28699d174bdd4ed28b76)

# カスタムイメージ用Node Definitionsの設定
`CML2`の画面より「**TOOLS**」→「**Node and Image Definitions**」を選択し、「**NODE DEFINITIONS**」から「**ADD**」を選択してカスタムイメージ用の`Node Definitions`を登録します。

`Ubuntu`の`Node Definitions`の設定を基に以下のようにしました。

各種項目の詳細は前回の記事や以下公式ドキュメントを参照。

- [Creating A New Node Definition](https://developer.cisco.com/docs/modeling-labs/#!creating-a-new-node-definition)

尚、`General`の`Available image definitions`については後ほど作成する`Image definitions`を指定するため、設定せずに`Node Definitions`を作成します。

「**Boot文字列**」は事前に起動時のログを調査し、ログに出力されていた「**Cloud-init target**」と「**CentOS Linux 8**」を起動完了と判定するBoot文字列として登録しました。

### General

|項目名|カスタムイメージの設定|
|:--|:--|
|ID|centos8.4|
|Description|CentOS 8.4 Cloud Init Platform|
|Nature|server|ノード種別|
|Available image definitions|※空欄|

### User Interface

|項目名|カスタムイメージの設定|
|:--|:--|
|Visible|有効|
|Description (Markdown)|CentOS-8-GenericCloud-8.4.2105-20210603.0.x86_64.qcow2|
|Prefix|centos-|
|Icon|server|
|Label|CentOS|

### Linux Native Simulation

|項目名|カスタムイメージの設定|
|:--|:--|
|Domain Driver|KVM|
|Simulation Driver|server|
|Disk Driver|VirtIO|
|Memory|2048MiB|
|CPUs|1|
|CPU Limit|100%|
|Network Driver|VirtIO|
|Data Disk Size|0GiB|
|Boot Disk Size|64GiB|
|Video Model|No Video Adapter|
|Video Memory|-|

### Interfaces

|項目名|カスタムイメージの設定|
|:--|:--|
|Has a Loopback Interface|無効|
|Number of serial ports|1|
|Default number of physical interfaces|1|
|インタフェース名|eth0～eth4|

### Boot

|項目名|カスタムイメージの設定|
|:--|:--|
|Timeout|180 seconds|
|Boot文字列1|Cloud-init target|
|Boot文字列2|CentOS Linux 8|

### pyATS (optional)

|項目名|カスタムイメージの設定|
|:--|:--|
|Enable pyATS|有効|
|Use in Testbed|有効|
|Operating System|linux|
|Series|-|
|Model|-|
|Username|-|
|Password|-|
|Config extract command|-|

### Property Inheritance

**Image Definition**

|項目名|カスタムイメージの設定|
|:--|:--|
|RAM|有効|
|CPUs|有効|
|CPU Limit|有効|
|Boot Disk Size|有効|
|Data Disk Size|有効|

**Per-node**

|項目名|カスタムイメージの設定|
|:--|:--|
|RAM|有効|
|CPUs|有効|
|CPU Limit|有効|
|Boot Disk Size|有効|
|Data Disk Size|有効|

### Configuration

|項目名|カスタムイメージの設定|
|:--|:--|
|Configuration Generator|-|

### Provisioning

|項目名|カスタムイメージの設定|
|:--|:--|
|Enable provisioning|有効|
|Media Type|ISO|
|Configuration Disk Volume Name|cidata|
|Name|meta-data|
|Editable|無効|
|Content|※下記参照|
|Name|user-data|
|Editable|有効|
|Content|※下記参照|

```yaml:meta-dataの内容
instance-id: centos
local-hostname: centos
```

```yaml:user-dataの内容
#cloud-config
hostname: inserthostname_here
manage_etc_hosts: True
system_info:
  default_user:
    name: cisco
password: cisco
chpasswd: { expire: False }
ssh_pwauth: True
ssh_authorized_keys:
   - your-ssh-pubkey-line-goes-here
```

## カスタムイメージのアップロード
`CML2`の画面より「**TOOLS**」→「**Node and Image Definitions**」を選択し、「**IMAGE DEFINITIONS**」から「**MANAGE**」を選択してカスタムイメージのアップロード画面に進みます。

「**Upload New Image File**」の「**Choose a file...**」を選択することでアップロードするファイルを指定できるため、ファイル指定後、「**UPLOAD IMAGE**」を選択してアップロードします。

## カスタムイメージ用Image Definitionsの設定
カスタムイメージのアップロードが完了すると、「**Uploaded Images**」にアップロードされたファイル名が表示されるため、「**CREATE NEW IMAGE DEFINITION**」からカスタムイメージ用Image Definitionsを作成します。

`Image Definitions`も`Ubuntu`の設定を基に以下のようにしました。

### General

|項目名|カスタムイメージの設定|
|:--|:--|
|ID|CentOS-8.4.2105-20210603.0|
|Label|CentOS-8-GenericCloud-8.4.2105|
|Description|8.4.2105|
|Disk Image|CentOS-8-GenericCloud-8.4.2105-20210603.0.x86_64.qcow2|
|Node Definition|CentOS|

### Linux Native Simulation

|項目名|カスタムイメージの設定|
|:--|:--|
|Memory|-|
|CPUs|-|
|CPU Limit|-|
|Data Disk Size|-|
|Boot Disk Size|-|

`Disk Image`は先ほどアップロードしたカスタムイメージを指定。

「**Node Definitions**」は、先ほど作成した`CentOS`の`Node Definitions`が選択できるようになっているため、`CentOS`を選択して、「**CREATE IMAGE DEFINITION**」で作成します。

# カスタムイメージの起動
登録したカスタムイメージの確認のため、適当なラボを作成し、「**ADD NODES**」から作成したカスタムイメージを配置します。

`External Connector`も配置していますが、`cloud-init`で初期構成する設定している場合、DHCPでアドレスが割り振られるようにしないと起動完了まで時間がかかるため配置しています。

![capture_21082021_180713.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569912/709d60ff-f43d-b2d2-8cb4-a51d15453dd0.jpeg)

各ノード起動後、`CentOS`のコンソール画面から`Node Definitions`で設定したユーザ名、パスワードでログインできればOKです。

# おわりに
今回はクラウドイメージのOSを使用したため、`cloud-init`でユーザ名、パスワードを指定するようにしましたが、すでに運用中のqcow2イメージや独自作成のイメージを使用すれば、様々なパッケージが導入済みのイメージをそのまま`CML2`上で起動させて、試験やアプリケーション動作の確認などを行うことも可能です。

`CML2`はデフォルトで登録されているサーバイメージも多いため、あえて追加しなくても十分使えますが、RHELサーバの機能検証やシステム全体での検証等行う場合には有用なので覚えておくと良いと思います。