てくなべ (tekunabe)

ansible / network automation / 学習メモ

ネットワーク自動化の勉強って何やればよい?

はじめに

なんとなく興味を持って、業務としても携わっているネットワーク自動化ですが、なにをべんきょうすればよいの?と聞かれたときのために自分なりの方法をまとめておきます。

(ここにあげげたことをすべて私がマスターしているわけではありません・・)


関連情報にアンテナをはる

新しい情報はだいたい海外からくるので、海外の情報をメインにアンテナをはる。

Blog

slack


ネットワークの基礎を身につける

業務をシステム化するのには業務を知る必要があるように、ネットワーク自動化するためにはネットワークの基礎を知る必要がある。


ネットワークの設計、構築、運用業務を知る

業務をシステム化するのには業務を知る必要があるように、ネットワーク自動化するためにはネットワークの業務を知る必要がある。

  • 設計、構築、運用でどのような作業があるかを知る
  • 作業の特性も知っておく(頻度が多い/少ない作業、リスクが低い/高いなどの区別)

参考書籍

運用業務を知るにはこの書籍が参考になります。


プログラミングの基礎を身につける

Ansible のようなツールのみを使う場合は、プログラミング言語の知識はほとんど不要だが、動作を詳しく知ったり、カスタマイズする場合には必要。

  • 言語は Python がおすすめ
    • ネットワーク自動化のライブラリ(netmiko/NAPALMなど)がいくつかあるため。
  • 参考書を読んで分かった気にならない
  • 実際に読んで見る、書いてみる、動かしてみる。

参考書籍

Python はたくさん書籍が出版されていますが、以前私が Python の資格を受験するときはこの書籍を読みました。ボリュームが程よくてよかったです。

Pythonチュートリアル 第3版

Pythonチュートリアル 第3版

  • 作者:Guido van Rossum
  • 発売日: 2016/03/24
  • メディア: 単行本(ソフトカバー)


インターフェースやフォーマットについて理解する

どのようなツールやライブラリを利用するにしても、各種インターフェースやフォーマットを意識する必要がある。

  • CLIGUI 特徴、メリット、デメリットを知る
  • データフォーマット(JSON/YAML/XMLなど)を知る
  • REST API を知る
  • YANG、NETCONF、RESTCONF を知る

参考書籍・サイト

www.oreilly.com

Cisco が提供している無料の学習サイト developer.cisco.com

NRE Labs、Ansible、NAPALM などをオンラインで学習できるサイト。仮想の Junos 環境付き。 go.nrelabs.io


Ansible などの自動化ツールの基礎を身につける

簡単なことを簡単にすませるには自動化ツールが有効。

Cisco が提供している無料の学習サイト(再掲) developer.cisco.com


資格をとってみる

2020年2月から始まった Cisco Certified DevNet Associate。自動化やプログラマビリティを扱う。Cisco 依存は多くない。 www.cisco.com

tekunabe.hatenablog.jp

参考書籍

本記事執筆時は未発売ですが、公式はこちら。


ネットワーク自動化ライブラリで小さなモノを作る

自動化ツールが対応していないネットワークOSに対しては、コードで開所する必要がある

  • netmiko、NAPALM、nornir などのライブラリで、情報取得系、設定系それぞれ作ってみる

CLIの延長ではない世界に触れる

[Ansible] 記号類をURLエンコードする urlencode()

はじめに

@ などをURLエンコード%40%20)したいと思い、Ansible の Filter のページ を参照しましたが、それらしいフィルターはありませでした。 ならばと思って、Jinja2 のドキュメントを見ると urlencode() というフィルターがありました。

この記事では簡単なサンプルで紹介します。

  • 検証環境
    • Ansible 2.9.9
    • Jinja2 2.11.2

サンプル

---
- hosts: localhost
  gather_facts: false

  tasks:
    - name: debug 
      debug:
        msg: "{{ item | urlencode() }}"
      loop:
        - kingyo@example.com
        - Hello World

実行

$ ansible-playbook -i locahost, urlencode.yml 

PLAY [localhost] ****************************************************************************************************

TASK [debug] ********************************************************************************************************
ok: [localhost] => (item=kingyo@example.com) => {
    "msg": "kingyo%40example.com"
}
ok: [localhost] => (item=Hello World) => {
    "msg": "Hello%20World"
}

PLAY RECAP **********************************************************************************************************
localhost                  : ok=1    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

@%40 に、$20 にURLエンコードされて表示されました。

おわりに

Ansible ドキュメントで目的のフィルターが見つからないときは、Jinja2のドキュメントを確認するのが吉です。

自動化に適したプログラマブルなホスト名を考える

はじめに

ホスト名の付け方には、視認性や区別のしやすさ向上等の目的で、様々な工夫をされているかと思います。

自動化を前提と場合に、何か考慮するべき点があるか考えてみたのまとめます。

多く分けて以下の 2点です。

  1. 機械的に読み込みやすくしておく
  2. 機械的に生成しやすくしておく

なお、ペットより家畜的に扱い、あまりホスト名を付ける意味さえない場合もあると思います。この記事である程度ペットのように扱う、ネットワーク機器のホスト名を想定しています。


■ 1. 機械的に読み込みやすくしておく

自動化するためには様々なデータを、人だけでなく、機械にやさしい状態にしておく必要があります。

そのためには、ホスト名の規則や文字種を決めておき、機械が読み込みやすくしておきます。

変数名やファイル名にも利用できる文字種にする

ホスト名を変数名やディクショナリのキーとして利用したり、ファイル名の一部にホスト名を埋め込むことがあります。 そのため、Ansible に限らず各処理系の「変数名やファイル名にも利用できる文字種にする」というのは一定の基準になります。

ファイル名として、避けるべき代表例は / です。ディレクトリの区切りとみなされるためです。特にこのような記号類には要注意です。

デリミタを予め決めておく

ここでいうデリミタとは、RT_01_ のように、意味のある単位に区切る文字のことです。 多くの場合は、-_ といった記号になるでしょう。このようなデリミタは予め決めておくのが良いです。

決めておけば機械的に処理する際に、シンプルな正規表現(またはより単純なパターンマッチ)でグルーピングや区別などがしやすくなります。

デリミタを何にするか

デリミタを - にするか _ にするかは流儀が分かれるかもしれません。

システム(名前解決など)によって利用できる記号が限られてたり、非推奨とされる記号があったりする場合は、それに従うのが良いでしょう。 全体としては _ より - のほうが制約を受けにくい印象があります。

なお、Ansible としては _ のほうが好まれる傾向があります。ホスト名と直接は関係ありませんが、具体的には以下の理由です。

グループ名のデリミタを _ にするのであれば、ホスト名も _ にするのが自然だろうという考え方もできます。また、気休めレベルですが、どこかで - がマイナスという演算子と判断されて、意図しない挙動することを防ぐ目的もあります。

他にも、1号機、2号機を示す、#1#2# も別の記号に置き換えたほうが安全で扱いやすいように思います。

(記事投稿後、Ansible の事情に偏りすぎていたので論調を変えました)

数値部分は固定長

RT1、RT2・・・RT9 の次が RT10 のように、数値部分の桁数がガタつくのは機械的に処理しにくくなりがちです。 各桁に意味持たせたり、ゼロパディングしたりして固定長にしておきます。

文字部分もできれば固定長

できれば、文字部分も固定長がよいでしょう。たとえば国名であれば、ISO 3166-1 という3文字で表記する規格があります。他にも、地域名、機器区分、機種名などの意味を持つ文字列がホスト名に含まれる。これらも固定長にできればすると扱いやすくなります。

機器区分を省略して固定長にする方法としては、Switch を SWFirewallFW のようにする方法などがあります。

ただし、無理に固定長にこだわりすぎて、直感的に分かりにくくなってしまうのは避けたいところです。 難しい場合は、平易な表現とデリミタを組み合わせると良いと思います。

ケースセンシティブ(大文字小文字を区別)に備える

手作業でホスト名を確認する際、大文字小文字はあまり意識しないかもしれません。 たとえば、実際のコンフィグが hostname rt01 だった場合、手作業の手順書にある「ログイン先が RT01 であること」という項目は OK になるのではないでしょうか。 また、rt01RT02 のようにホストによって大文字小文字が統一されてなくても、あまり不都合はなかったかもしれません。

ところが、自動化する場合は大文字小文字を区別される場面がが多いです。この認識のギャップがバグのもとになりえます。

コンフィグ上も資料上も、予め大文字小文字を区別して管理するのが良いでしょう。


■ 2. 機械的に生成しやすくしておく

自動化によってスケールしやすくなると、ホスト名自体も自動生成したくなるのではないでしょうか。

モノの名前だけでなく数値を組み合わせる

MoonJupiterMercury のようなモノの名前だけに頼ってホスト名を付けると、辞書(定義)が必要になって限界が来やすいです。

また、次のホスト名を決めずらい面もあります。 上記の場合、太陽に近い順といった定義をすればメンテナンスが煩雑になりがちになります。

それよりも、シンプルで明確な、数値を組み合わせるのが良いと思います。 数値であれば、基本的に数値を単純にカウントアップするだけです。

このあたりは、手作業の運用と勘所は同じかもしれません。


おわりに

この手のテーマは、地味ですがとても重要に思います。

一方で、ある種の設計要素の面もあるため、なかなか表に出て来ます。

みなさんがどのようにされているのか興味深く思います。

[Ansible] 「つまずき Ansible 【Part10】インベントリーのあれこれ」ふりかえり

はじめに

2020/07/11 に、YouTube Live で「つまずき Ansible 【Part10】インベントリーのあれこれ」という配信をしました。 実際に作業しながらエラーと戦って進めるシリーズです。

tekunabe.connpass.com

今回は、インベントリ関する TIPS 的なことをご紹介しました。

やったことや、わかったこと(つまずいたエラーと原因、対処など)をふりかえります。

動画

youtu.be


■ やったこと

ansible-inventory によるインベントリ確認

ansible-inventory コマンドはインベントリの確認するのにとても便利。

--graph オプションで親子関係の確認

$ ansible-inventory -i inventory.ini --graph
@all:
  |--@eos:
  |  |--eos1
  |--@ios:
  |  |--rt01
  |  |--rt02
  |--@junos:
  |  |--vsrx1
  |--@ungrouped:

--list オプションで変数などの確認

$ ansible-inventory -i inventory.ini --list 
{
    "_meta": {
        "hostvars": {
            "eos1": {
                "ansible_become": true,
                "ansible_become_method": "enable",
                "ansible_become_password": "secret",
                "ansible_connection": "httpapi",
                "ansible_host": "192.168.1.133",
                "ansible_httpapi_port": 5080,
                "ansible_network_os": "eos",
                "ansible_password": "xxxx",
                "ansible_user": "ansible"
            },
            "rt01": {
                "ansible_become": true,
                "ansible_become_method": "enable",
                "ansible_become_password": "secret",
                "ansible_connection": "network_cli",
                "ansible_host": "192.168.1.11",
                "ansible_network_os": "ios",
                "ansible_password": "xxxx",
                "ansible_user": "admin"
            },
            "rt02": {
                "ansible_become": true,
                "ansible_become_method": "enable",
                "ansible_become_password": "secret",
                "ansible_connection": "network_cli",
                "ansible_host": "192.168.1.12",
                "ansible_network_os": "ios",
                "ansible_password": "xxxx",
                "ansible_user": "admin"
            },
            "vsrx1": {
                "ansible_connection": "network_cli",
                "ansible_network_os": "junos",
                "ansible_password": "xxxx",
                "ansible_port": 33003,
                "ansible_user": "ansible"
            }
        }
    },
    "all": {
        "children": [
            "eos",
            "ios",
            "junos",
            "ungrouped"
        ]
    },
    "eos": {
        "hosts": [
            "eos1"
        ]
    },
    "ios": {
        "hosts": [
            "rt01",
            "rt02"
        ]
    },
    "junos": {
        "hosts": [
            "vsrx1"
        ]
    }
}

ini ファイルに定義する変数

bool 値の注意

ini の true は文字扱い

rt01 ansible_host=192.168.1.11 testvar=true
$ ansible-inventory -i inventory.ini --host rt01
{
    // 略
    "testvar": "true"
}
  • ini の Truebool 扱い
rt01 ansible_host=192.168.1.11 testvar=True
$ ansible-inventory -i inventory.ini --host rt01
{
    // 略
    "testvar": true   
}

参考

インベントリを yaml で書く

世の中のインベントリファイルのサンプルは ini が多いが、YAML でも書ける。

参考

また、ansible-inventory--list-y をあわせて実行すると、既存のインベントリファイルを YAML 形式で表示でき、書きっぷりを参考にできる。

$ ansible-inventory -i inventory.ini --list -y
all:
  children:
    eos:
      hosts:
        eos1:
          ansible_become: true
          ansible_become_method: enable
          ansible_become_password: secret
          ansible_connection: httpapi
          ansible_host: 192.168.1.133
          ansible_httpapi_port: 5080
          ansible_network_os: eos
          ansible_password: xxxx
          ansible_user: ansible
    ios:
      hosts:
        rt01:
          ansible_become: true
          ansible_become_method: enable
          ansible_become_password: secret
          ansible_connection: network_cli
          ansible_host: 192.168.1.11
          ansible_network_os: ios
          ansible_password: xxxx
          ansible_user: admin
          testvar: true
        rt02:
          ansible_become: true
          ansible_become_method: enable
          ansible_become_password: secret
          ansible_connection: network_cli
          ansible_host: 192.168.1.12
          ansible_network_os: ios
          ansible_password: xxxx
          ansible_user: admin
    junos:
      hosts:
        vsrx1:
          ansible_connection: network_cli
          ansible_network_os: junos
          ansible_password: xxxx
          ansible_port: 33003
          ansible_user: ansible
    ungrouped: {}

ファイル不要なインベントリ

host_list inventory pluginによる機能。

ファイルを作るまでもない時に便利。個人的には -i localhost, をよく利用。1つの場合は、末尾に , が必要。

複数のインベントリファイルを読み込む

-i オプションを複数指定する

$ ansible-inventory -i inventory.ini -i inventory2.ini --list 

-i オプションでディレクトリを指定する

$ ansible-inventory -i inventories --list

ただし、ディレクトリ指定の場合は .ini 拡張子のファイルは読み込まないので注意。

参考

外部システムをインベントリとして利用

Ansible は他システムの情報を取得して、動的なインベントリとして利用できる機能がある。Inventory Plugin を切り替えて利用する。

Inventory Plugins — Ansible Documentation

Netbox

NetBox は、OSSの IPAM/DCIM ツール。

f:id:akira6592:20200711211736p:plain
Device 一覧、これをAnsibleのインベントリとして利用できる
netbox inventory plugin を利用する以下の yaml を定義。

  • netbox.yml
---
plugin: netbox
api_endpoint: http://netbox01
token: 0123456789abcdef0123456789abcdef01234567
group_by:
  - manufacturers   # グループ化方法

-i オプションに上記の yaml ファイルを指定する。

$ ansible-inventory -i netbox.yml --list
{
    "_meta": {
        "hostvars": {
            "rt01": {
                "ansible_connection": "network_cli",
                "ansible_host": "192.168.1.11",
                "ansible_network_os": "ios",
                "ansible_password": "xxxx",
                "ansible_user": "admin",
                "device_roles": [
                    "core"
                ],
                "device_types": [
                    "calalyst"
                ],
                "manufacturers": [
                    "cisco"
                ],
                "primary_ip4": "192.168.1.11",
                "sites": [
                    "my_site"
                ]
            },
            "rt02": {
                "ansible_connection": "network_cli",
                "ansible_host": "192.168.1.12",
                "ansible_network_os": "ios",
                "ansible_password": "xxxx",
                "ansible_user": "admin",
                "device_roles": [
                    "core"
                ],
                "device_types": [
                    "calalyst"
                ],
                "manufacturers": [
                    "cisco"
                ],
                "primary_ip4": "192.168.1.12",
                "sites": [
                    "my_site"
                ]
            }
        }
    },
    "all": {
        "children": [
            "manufacturers_cisco",
            "ungrouped"
        ]
    },
    "manufacturers_cisco": {
        "hosts": [
            "rt01",
            "rt02"
        ]
    }
}

もちろん ansible-playbook-i オプションにも指定できる。

参考


■ わかったこと (出会ったエラーと原因と対処)

今回は解説がメインだったため、これといったつまずきはありませんでした。 しいて言えばコマンドのオプションのつけ忘れでしょうか・・。

むしろいただいたフィードバックをから「なるほど!」と思いました。

他、ansible-inventory コマンド自体を今回始めて知った方もいらっしゃったので、ご紹介できてよかったです。


Part11 にむけて

以下のネタを検討中です。気が向いたものをやります。

  • connection: local ななにか
  • Ansible Toewr / AWX をコマンドがら操作する
  • ansible.cfg
  • Jinja2、フィルター
  • Windows
  • ESXi で VM作成

第10世代 Intel NUC への ESXi 7.0b のインストールと初期設定

先日購入したIntel NUC の NUC10I7FNH に、ESXi 7.0b をインストールしました。自分が行った手順を作業記録としてまとます。

【目次】


■ カスタムイメージの作成(ESXi 7.0b + NIC ドライバ)

NUC に ESXi をインストールするには、NICのドライバを追加したカスタムイメージが必要ということは事前に聞いていました。対応ドライバがないと、インストール序盤で NIC がないというエラーになるためです。

当初は ESXi 7.0 (bなし)ベースの、以下のページを参考にしてカスタムイメージを作成しようとしました。

www.virten.net

一回お試してやってみて、この手順でもできたことはできたのですが、VMware 製品に詳しい方からこんな情報をいただきました。

Nested ESXi というものをやる予定もなかったのですが、せっかくなので、紹介していただいた記事の「Option B: Image Builder using PowerCLI」を参考に、 ESXi 7.0b + NICドライバでカスタムイメージを作成することにします。

資材のダウンロード

ESXi 7.0b patch Offline Bundle (VMware-ESXi-7.0b-16324942-depot.zip) をダウンロードします。

f:id:akira6592:20200711103221p:plain:w400
b がついてます

続いて、 NICドライバ (ESXi670-NE1000-32543355-offline_bundle-15486963.zip)をダウンロードします。

PowerCLI のインストール

私の環境では、PowerCLI が未インストールでしたので、インストールします。

管理権限で PowerShell を開き、以下のコマンドを実行します。

Install-Module -Name VMware.PowerCLI -Scope CurrentUser

イメージの作成

引き続き、PowerShell のターミナルでの作業です。前述の 2ファイルをダウンロードしたディレクトリに移動し、以下のコマンドを実行します。

$esxiOfflineBundle = "VMware-ESXi-7.0b-16324942-depot.zip"
$intelNicOfflineBundle = "ESXi670-NE1000-32543355-offline_bundle-15486963.zip"
$esxiImageProfileName = "ESXi-7.0b-16324942-standard"
$newImageProfileName = "ESXi-7.0b-IntelNUC10"
Add-EsxSoftwareDepot $esxiOfflineBundle
Add-EsxSoftwareDepot $intelNicOfflineBundle

$IntelNUCVib = Get-EsxSoftwarePackage | where {$_.name -eq "ne1000" -and $_.version -eq "0.8.4-3vmw.670.3.99.32543355"}
New-EsxImageProfile -CloneProfile $esxiImageProfileName -Name $newImageProfileName -Vendor vGhetto
Remove-EsxSoftwarePackage -ImageProfile $newImageProfileName -SoftwarePackage ne1000
Add-EsxSoftwarePackage -ImageProfile $newImageProfileName -SoftwarePackage $IntelNUCVib

Export-EsxImageProfile -ImageProfile $newImageProfileName -ExportToIso -FilePath "ESXi-7.0b-IntelNUC.iso"

実行ログ

PS C:\Users\sakana\Desktop\vmware\b> $esxiOfflineBundle = "VMware-ESXi-7.0b-16324942-depot.zip"
PS C:\Users\sakana\Desktop\vmware\b> $intelNicOfflineBundle = "ESXi670-NE1000-32543355-offline_bundle-15486963.zip"
PS C:\Users\sakana\Desktop\vmware\b> $esxiImageProfileName = "ESXi-7.0b-16324942-standard"
PS C:\Users\sakana\Desktop\vmware\b> Add-EsxSoftwareDepot $esxiOfflineBundle

Depot Url
---------
zip:C:\Users\sakana\Desktop\vmware\b\VMware-ESXi-7.0b-16324942-depot.zip?index.xml



Depot Url
---------
zip:C:\Users\sakana\Desktop\vmware\b\ESXi670-NE1000-32543355-offline_bundle-15486963.zip?index.xml


PS C:\Users\sakana\Desktop\vmware\b> New-EsxImageProfile -CloneProfile $esxiImageProfileName -Name $newImageProfileName -Vendor vGhetto

Name                           Vendor          Last Modified   Acceptance Level
----                           ------          -------------   ----------------
ESXi-7.0b-IntelNUC10           vGhetto         2020/06/02 1... PartnerSupported


PS C:\Users\sakana\Desktop\vmware\b> Remove-EsxSoftwarePackage -ImageProfile $newImageProfileName -SoftwarePackage ne1000

Name                           Vendor          Last Modified   Acceptance Level
----                           ------          -------------   ----------------
ESXi-7.0b-IntelNUC10           vGhetto         2020/07/11 1... PartnerSupported


PS C:\Users\sakana\Desktop\vmware\b> Add-EsxSoftwarePackage -ImageProfile $newImageProfileName -SoftwarePackage $IntelNUCVib

Name                           Vendor          Last Modified   Acceptance Level
----                           ------          -------------   ----------------
ESXi-7.0b-IntelNUC10           vGhetto         2020/07/11 1... PartnerSupported


PS C:\Users\sakana\Desktop\vmware\b> Export-EsxImageProfile -ImageProfile $newImageProfileName -ExportToIso -FilePath "ESXi-7.0b-IntelNUC.iso"

同じディレクトに生成された ESXi-7.0b-IntelNUC.iso が目当てのカスタムイメージです。


■ インストール用USBメモリの作成

カスタムイメージが作成できたので、次はそれを起動可能な形式でUSBメモリにコピーします。今回はたまたま手元にあった 1GB のモノを利用します。

f:id:akira6592:20200711115517p:plain:w400
何かでいただいた fluke の USB メモリ、かわいい

IOS ファイルをそのまま USB メモリにコピーしても起動可能な状態にはなりませんので、Rufus のようなツールを使ってコピーします。

対象の USB メモリと ISO ファイルを指定するだけです。

f:id:akira6592:20200711105944p:plain:w400
完了


■ ESXi のインストール

先ほど作成した、USB メモリを NUC に接続して電源をいれます。

インストーラーが起動するので、画面の指示に従って進めます。

f:id:akira6592:20200711110936p:plain:w400
インストーラーの起動中、ビルド番号は 16324942

f:id:akira6592:20200711111028p:plain:w400
よろしくお願いします

f:id:akira6592:20200711111051p:plain:w400
EULAの確認

f:id:akira6592:20200711111119p:plain:w400
キーボードは日本語で

f:id:akira6592:20200711111148p:plain:w400
ルートパスワードの設定

f:id:akira6592:20200711111207p:plain:w400
インストール対象ストレージの確認

f:id:akira6592:20200711111255p:plain:w400
インストール処理の実行中、1分もかからなかった気がします

f:id:akira6592:20200711111322p:plain:w400
一応 USB メモリを抜いて、再起動

このあたりで、LAN ケーブルを接続しました。

f:id:akira6592:20200711111522p:plain:w400
無事に再起動したあと

これでカスタムイメージによる ESXi7.0b のインストールができました


固定IPアドレスの設定

初期設定では DHCPIPアドレスを取得していました。このままではサーバーらしくないので、固定のIPアドレスを設定します。

先ほどの、再起動したあとの画面で F12 を押します。

f:id:akira6592:20200711112145p:plain:w400
設定したばかりの root のパスワードを入力

表示された設定画面で設定をしていきます。

f:id:akira6592:20200711112242p:plain:w400
Configure Management Network を選択

f:id:akira6592:20200711112617p:plain:w400
IPv4 Configuration を選択

f:id:akira6592:20200711112644p:plain:w400
固定IPアドレスを指定、ここでは末尾 .90

f:id:akira6592:20200711112717p:plain:w400
設定したアドレスになっている(まだ表示上のみ)ことをかくにんして Esc を押す

f:id:akira6592:20200711112819p:plain:w400
設定を反映したいので Y

f:id:akira6592:20200711112845p:plain:w400
設定画面トップに戻るので、再度 Ecs

f:id:akira6592:20200711112916p:plain:w400
元に画面にもどった

これで、固定IPアドレスの設定ができました。


■ ライセンスの割り当て

無料とはいえ、ライセンスの割り当てが必要です。

VMware vSphere Hypervisor 7.0 ダウンロード センターからライセンスキーを確認して控えておきます。

f:id:akira6592:20200711113413p:plain:w400
ライセンスキーの確認

ブラウザで https://ESXiのIPアドレス を開いて root でログインします。

管理 > ライセンス > ライセンスの割り当て をクリックします。

f:id:akira6592:20200711113848p:plain:w400
ライセンス画面

先ほど控えたライセンスキーを入力して割り当てます。

f:id:akira6592:20200711113931p:plain:w400
割り当て完了

f:id:akira6592:20200711114036p:plain:w400
無事


■ おわりに

ということで、以下のような環境ができました。

f:id:akira6592:20200711114211p:plain:w400
サマリ

NUC セットアップの記事でも書きましたが、まだ挿してない もう一枚の 32GBがあるので、これをどうにかして 64 GB にしたいと思います。

とりあえず32GB のままでいいので、CML-P あたりのデプロイも進める予定です。

第10世代 Intel NUC NUC10I7FNH を買いました

はじめに

最近このブログの出張版としてやっている YouTube Live では、一つのマシンで CML-PVirtualBox、それから配信ソフトである OBS Studio をいっぺんに利用することが多くあります。

メモリ 16GB の MacBook Pro を利用しているのですが、だんだんとしんどくなってきました。

やっぱりサーバーが欲しくなりました。

ESXi が乗って、静かで小さいものが欲しかったのですが、以前から気になっていた NUC にすることにしました。(ただし、この組み合わせの場合 ESXi は要カスタムイメージ)

買ったもの

NUC 本体

www.amazon.co.jp

公式

https://www.intel.co.jp/content/www/jp/ja/products/boards-kits/nuc/kits/nuc10i7fnh.html

片手でつかめるほどの大きさです。一応比較のために、Juniper SSG5 の上に載せてみます。

f:id:akira6592:20200710233034p:plain
小さい

コミュニティの方たちと Zoom で話してる時に「これなんですけど」となんの緊張感もなく開封してしまいした・・。

メモリ(32GB * 2)

www.amazon.co.jp

SSD 1TB

メモリかと思っちゃうこんなコンパクトなSSDがあるのですね・・

www.amazon.co.jp

電源ケーブル

この部分が本体にはついていないので。

www.amazon.co.jp

本体以外のものは、下の記事を参考にさせていただきました!

tenko.hatenablog.jp

組み立て

組み立てといっても、下からパカッとあけて、メモリと SSD をサクッと指すだけです。

メモリが・・2枚同じものを買った1枚がどうしても認識せず。スペック上の上限は 64GB です。組み合わせ、刺す場所、1枚のみ、などいろいろ試しても、特定の1枚が絡むと起動せず。症状的には、電源 LED が 3回点滅を繰り返しています。

https://www.intel.co.jp/content/www/jp/ja/support/articles/000005854/intel-nuc.html

対応を検討中ですが、とりあえず 1枚(32GB)で始めようと思います。

[2020/07/23 追記] メモリは無事に返品でき、再度同じ 32GB を購入しました。今度は無事に計 64GB 認識しました。

f:id:akira6592:20200723194946p:plain:w300
メモリの余裕は心の余裕

ことあとは?

ESXi をインストールする予定です。

追記

tekunabe.hatenablog.jp

Ansibleについて語る会【ビヨンド勉強会#25】に参加、登壇させていただきました

はじめに

2020/07/08 に開催された Ansibleについて語る会【ビヨンド勉強会#25】 にリモート参加、登壇させていただきました。

beyondjapan.connpass.com togetter.com

発表の内容などを簡単にまとめます。


主催のビヨンドさんと勉強会について

「サーバーのことは全部丸投げ」というコピーで、サーバー、クラウドの設計、構築、運用、監視などをされている会社。

beyondjapan.com

ビヨンド勉強会」という形で、様々なテーマで開催されています。ハッシュタグ#bydstudy

もともとは大阪での開催だったおようですが、最近はリモートで開催されているため、前回の Terraformについて語る会【ビヨンド勉強会#24】にも参加させていただきました。

今回はご縁があり、 Ansible ユーザー会の方から来た人という立場で、登壇の機会をいただきました。


第1セッション: AnsibleでSSL証明書を自動更新してみた

株式会社ビヨンド 宮崎さんのご発表。

  • 資料

www.slideshare.net

  • 動画(2020/07/26追記)

www.youtube.com

最初のセッションであったこともあってか、Ansibleの入門的な話から始まりました。

Ansibleの特徴、インベントリ、Playbookとは何かなどなど。ロールやログの見方もていねいに説明していただきました。

実例として、SSL証明書の自動更新の例を紹介されていました。

個人的な新たな発見としては、Playbook のドライランを -C オプションでも実行できること。 --check しか知らなかったので、得した気分になりました。

また、ドライランだからこそ発生してしまうエラーを when: not ansible_check_mode でスキップできるのもポイントだと思いました。


第2セッション: Ansibleで Master/Slave構成のjmeterをdeployしよう!

株式会社ビヨンド 讃岐さんのご発表。

  • 資料

www.slideshare.net

  • 動画(2020/07/27追記)

www.youtube.com

負荷テストツールである JMeter を Master/Slave 構成でデプロイする事例を紹介されていました。

私自身、時々忘れてしまうのですが、

- hosts: master
  tasks:
    # 略

- hosts: slave
  tasks:
    # 略

のように、1つのPlaybookの中でターゲットを変えて処理できることを思い出させてくれました。(Playbookは Play をまとめたもの)

あとはもう何といいますか、発表がおもしろくて(funnyの方)笑っちゃいました。

また、ビヨンドさんでは、会社のブログのアクセス数が多い人にインセンティブがあるそうです。 いいですね。

beyondjapan.com

beyondjapan.com


第3セッション: Ansible ではじめるネットワーク自動化(Ansible 2.9 版)

私の発表。

  • 資料

www.slideshare.net

  • 動画(2020/07/26追記)

www.youtube.com (変な透け方しているのはZoomの設定で「グリーンスクリーンがあります」にチェックが入っていたのが原因です・・)

2年前に発表したものをベースにして、Ansible 2.9 に合わせたり、サンプルを新しくしたり、自身の経験を踏まえた内容も入れたものにしました。

ネットワークモジュールを使うためのモジュールの探し方や、必要な変数の定義、サンプルやハマりどころをご紹介しました。

どこかでお伝えしたかった、telnet モジュールのしんどさをお伝えできてよかったです。


おわりに

今回は、参加と登壇の機会をいたき、また、準備や当日の運営もありがとうございました!

実は本当は3月ごろに出張してお邪魔する予定だったのですが、昨今の事情によりオンラインとなりました。

一方で、私の居住地からは離れた大阪であっても気軽に参加できるというメリットも実感できた機会でもありました。

今後もビヨンド勉強会のイベントをウォッチしていきたいと思います。

beyondjapan.connpass.com