GitLab CIとMoleculeでRoleテスト自動化

はじめに Ansible には Role のテストを支援してくれる「Molecule」というツールがあります。今回は Molecule と GitLab CI を用いて Role のテスト自動化ができるように環境を整えていきます。 Molecule の詳細については、ひよこ大佐本こと「Ansible構築・運用ガイドブック」や「ソフトウェアデザイン 2020年6月号」に載っています。(Molecule 実践ガイドまだ?) 主に備忘録のため参照される場合は適宜読み替えてください。 作業内容 今回は「自宅ラボ」と称している仮想化基盤(ESXi)上の「作業用マシン(CentOS 7)」で moleculeコマンドの実行 GitLab Runnerコンテナの起動 GitLab CIでmolecule testの自動化 をできるようにします。なお前提として、作業用マシンにはdockerインストール済みで、GitLabは仮想化基盤上の別サーバに導入済みです。 環境構築 Moleculeインストール 作業用マシンでMoleculeのコマンドを実行できるようにします。Molecule 公式サイトに複数のインストール方法が載っていますが、今回はvirtualenv内にmoleculeコマンドをインストールします。 $ sudo python3 -m pip install virtualenv $ virtualenv molecule $ source molecule/bin/activate (molecule) $ python -m pip install "molecule[lint]" "docker" (molecule) $ molecule --version molecule 3.0.4 ansible==2.9.9 python==3.6 公式サイトではインストール時に--userオプションを付いていたのですが、自分の環境ではエラーが出てしまったので外しています(TODO: エラー原因調査)。また、pipでmoleculeをインストールするとansibleもついてきます。pipでansibleをインストールする場合はmoleculeに置き換えてもいいかもしれませんね。 Ansible Role作成 さきほどインストールした molecule コマンドを使って Ansible の Role を作成します。 ansible-galaxy コマンドと同様に、Role に必要なディレクトリのテンプレートを作成することができ、Molecule で使用する molecule ディレクトリも作成されます。 今回は「test-role」という名前の Role にしています。...

May 31, 2020 · 2 min · nnstt1

AWX が Ansible Galaxy を使う動きを追ってみた

前回の投稿でAWXのProjects自動同期方法を調べたのですが、その中で一つ気になることが出てきました。 それは 「AWXではAnsible GalaxyのRoleはどのように参照されるのか」 という点です。 CLIで使うAnsibleでは ansible-galaxy install コマンドで外部Role(Galaxyに公開されているRoleや特定リポジトリのRole)をPlaybookから参照/実行できます。参照するRoleを指定する方法の1つに、参照情報を記載したYAMLファイルを読み込む方法があります。その際のコマンドは ansible-galaxy install -r [参照ファイルパス] です。AWXでも同じように参照されるのか、確認してみました。 マニュアルを読む Ansible TowerでAnsible Galaxyを使う方法はUser Guideに書かれています。AWXも同じ方法です。それによると、<project-top-level-directory>/roles/requirements.yml ファイルを見つけると自動的に ansible-galaxy installコマンドが実行されるようです。 [https://docs.ansible.com/ansible-tower/latest/html/userguide/projects.html#ansible-galaxy-support:embed:cite] なるほど、CLI版とほぼ同じでansible-galaxy installコマンドを使って、参照するファイルの名前や保存先は指定されていると。そして実行タイミングはProject Update(プロジェクトの同期)の最後。じゃあ特段気にすることはないな、と思っていたのですが…。 実際に確認 前回の調査で知ったのですが、Project Update自体もAWXの Internal Job となっています。(正式用語かわかりませんがプログラム内のコメントでは Internal Job と記載されていたのでここでもそう呼びます) そして、Internal JobもPlaybookを参照して実行されるようで、Project Updateは project_update.yml というPlaybookを参照しています。このPlaybookはawx_taskコンテナの/var/lib/awx/venv/awx/lib/python3.6/site-packages/awx/playbooks/project_update.ymlにあります。project_update.ymlの中身を見ると、 name: Update source tree if necessary name: Install content with ansible-galaxy command if necessary という2つのtasksで構成されていることが分かります。前者がAWX上で指定したSCMの更新で、後者がrequirements.ymlで指定した外部Roleの更新なんですね。実際に後者のタスクでcommand: ansible-galaxy installの記述があるので、マニュアルで書かれていた内容はこのPlaybookで実現しているようです。 外部Role更新タスクの実行条件として when: roles_enabled|bool と tags: install_roles がありました。変数roles_enabledは Settings -> Jobs -> Enable Role Download のON/OFFで決まるようです。tagsのほうはInternal Job実行時に install_roles が付いていれば実行されるタスクのようですが、ここは未確認です(理由は後述)。...

May 24, 2020 · 1 min · @nnstt1

仮想化基盤のパーツ購入&構築

先月の投稿で自宅ラボの機器選定をしました。結論を言うと、DeskMini A300 を買いました。 仮想化基盤のハードウェア選定 つよつよエンジニアには「自宅ラボ」という検証環境をお持ちの方が多いようです。 「自宅ラボある⇒つよつよエンジニアになる」ではないですが、自宅ラボあれば勉強する機会が増えるのではということで、自宅ラボ構築を目指します。 「逸般の誤家庭」と呼ばれる常軌を逸した環境(褒め言葉)を構築されている方もいらっしゃるようですが、お財布のほうも常軌を逸してしまいそうなのでコスパ重視で自宅ラボを構築を検討します。 今回は、仮想化基盤用マシンのハードウェア選定をしていきます。ネットワークについては別途検討予定。 目的(なぜ仮想化基盤用のマシンを用意するのか) 自宅でも快適にKubernetesクラスタを検証するためです。 現在は自宅PC(Win10)にVMware Workstation Playerを入れ、その上にESXiを入れてしてネスト仮想化基盤を構築しています。 しかし、PCのスペックがそこまで高くうえにネスト構成にしたためESXiのVMは激重になってしまいました。 当初はOpenShift4を動かしてみるつもりでしたが、インストール作業が終わりませんでした。OpenShiftは要求スペックが高いですね…。 Chapter 1. Installing on bare metal OpenShift Container Platform 4.3 | Red Hat Customer Portal Access Red Hat’s knowledge, guidance, and support through your subscription. 代わりにkubeadmでK8sクラスタ(master3台, worker3台)を組んでみたのですが、クラスタできたもののPrometheus-Operatorを入れてみたら無事に死亡しました。 そのようなこともあり、快適にK8sクラスタを動かすことができる自宅ラボを構築することが目的となっています。 機器選定 マザーボードと電源が一体となった「ベアボーン」 or パーツをそれぞれ自分で選ぶ「自作PC」の2通りから考えます。 (ベアボーンも自作PCに含まれると思いますが、適切な表現が不明なので分けて記載します。) 本当はラックサーバが欲しかったのですが、自宅の要件(電力だったり騒音だったり)に合いそうにないため除外しています。また、タワーサーバは中古市場であれば比較的安価なものが出回っているようですが、十分に調べきれていないためこちらも除外しています。 ストレージ ストレージは各候補ともに共通の製品を選択予定です。 パーツ 型番 特徴 価格.comの最安値 ストレージ WD Blue SN550 NVMe WDS500G2B0C m.2 NVMe 8,448 ASRock Deskmini A300 パーツ 型番 特徴 価格....

May 18, 2020 · 1 min · @nnstt1

AWXのプロジェクトを自動同期させたい

Ansible/AWXを利用していて、少し煩わしいと思ったことがあります。 それは「Playbookをリポジトリに追加したら、AWXのプロジェクトの同期を手動実行しないとジョブテンプレートからそのPlaybookを選択できない」という点です。 プロジェクトを同期していないと、ジョブテンプレートのPlaybook選択するプルダウンに追加したPlaybookが出てこないのです。 現在の手順は以下のような感じです。 新規Playbookをリポジトリに追加 プロジェクト手動同期 ジョブテンプレートで新規playbookを選択 簡単な手順ではあるのですが、わざわざ「2. プロジェクト手動同期」をする度にモヤモヤーってしています。このモヤモヤを取り除きたいと思います。 [f🆔nnstt1:20200517200209p:plain] (どんだけ面倒くさがりなんだ……) やりたいこと 簡潔にいうとタイトルの通り 「AWXのプロジェクトを自動同期させたい」 です。自分の検証環境ではGitLabでPlaybookを管理しているので、具体的には以下のような流れで自動同期をしてみます。 GitLabのリポジトリを更新する(Playbookの追加に限定しません) AWXになんとかして更新を通知する AWXのプロジェクトを更新させる 「AWXになんとかして更新を通知する」方法として、AWXの「Webhook」と「API」の2通り検討しました。 前提 今回使用した環境は以下です。 それぞれ個別のサーバに構築 AWX 11.0.0(Ansible 2.9.5) GitLab CE 12.10.3 AWXのプロジェクトはGitLabと連携済み GitLab Runnerは Shell Executer を登録済み 同期方法 Webhook AWXにはWebhook経由でジョブテンプレートを実行するための設定があります。 ジョブテンプレート編集画面でENABLE WEBHOOKにチェックし、WEBHOOK SERVICEでGitLabを選択するとWEBHOOK URLとWEBHOOK KEYに値が表示されます。(WEBHOOK KEYはジョブテンプレート保存後に表示) Towerのマニュアルになりますが、詳細はこちら。 22. Working with Webhooks &mdash; Ansible Tower User Guide v3.8.6 マニュアルにある通りGitLabの設定をしたら、Webhookを使用してジョブテンプレートを実行することができます。しかし、AWXのプロジェクトをWebhookで実行することはできないようです。上記のジョブテンプレート編集画面のようなWebhookを設定する画面は見つかりませんでした。(AWXのソースを見ても無さそうです) Webhook経由で無理やりプロジェクトを同期させる方法としては「Update Revision on Launchを有効にしたプロジェクトを使用するジョブテンプレートをWebhookで実行する」があるかと思います。AWXのプロジェクトの設定でUpdate Revision on Launchを有効にしていると、当該プロジェクトを使用するジョブテンプレートを実行するときにプロジェクトの同期も実行されます。 この機能を利用してWebhookからジョブテンプレートを実行し、間接的にプロジェクトを同期することで AWXのプロジェクトを自動同期させたい を達成可能です。ジョブテンプレートの中身は何でも良いですが、目的がプロジェクトの同期なので処理が軽めの同期用ジョブテンプレートを用意するのが良いと思います。また、Webhookはワークフローテンプレートの実行も可能なので、複数プロジェクトを一斉に同期ということも可能です。(やる機会は無さそうですが) API AWXではAPIが提供されており、こちらからジョブテンプレートの実行やインベントリのホスト一覧を取得などができます。その中でプロジェクトの同期も可能となっています。 Ansible Tower API Guide v3....

May 17, 2020 · 1 min · @nnstt1

仮想化基盤のハードウェア選定

つよつよエンジニアには「自宅ラボ」という検証環境をお持ちの方が多いようです。 「自宅ラボある⇒つよつよエンジニアになる」ではないですが、自宅ラボあれば勉強する機会が増えるのではということで、自宅ラボ構築を目指します。 「逸般の誤家庭」と呼ばれる常軌を逸した環境(褒め言葉)を構築されている方もいらっしゃるようですが、お財布のほうも常軌を逸してしまいそうなのでコスパ重視で自宅ラボを構築を検討します。 今回は、仮想化基盤用マシンのハードウェア選定をしていきます。ネットワークについては別途検討予定。 目的(なぜ仮想化基盤用のマシンを用意するのか) 自宅でも快適にKubernetesクラスタを検証するためです。 現在は自宅PC(Win10)にVMware Workstation Playerを入れ、その上にESXiを入れてしてネスト仮想化基盤を構築しています。 しかし、PCのスペックがそこまで高くうえにネスト構成にしたためESXiのVMは激重になってしまいました。 当初はOpenShift4を動かしてみるつもりでしたが、インストール作業が終わりませんでした。OpenShiftは要求スペックが高いですね…。 Chapter 1. Installing on bare metal OpenShift Container Platform 4.3 | Red Hat Customer Portal Access Red Hat’s knowledge, guidance, and support through your subscription. 代わりにkubeadmでK8sクラスタ(master3台, worker3台)を組んでみたのですが、クラスタできたもののPrometheus-Operatorを入れてみたら無事に死亡しました。 そのようなこともあり、快適にK8sクラスタを動かすことができる自宅ラボを構築することが目的となっています。 機器選定 マザーボードと電源が一体となった「ベアボーン」 or パーツをそれぞれ自分で選ぶ「自作PC」の2通りから考えます。 (ベアボーンも自作PCに含まれると思いますが、適切な表現が不明なので分けて記載します。) 本当はラックサーバが欲しかったのですが、自宅の要件(電力だったり騒音だったり)に合いそうにないため除外しています。また、タワーサーバは中古市場であれば比較的安価なものが出回っているようですが、十分に調べきれていないためこちらも除外しています。 ストレージ ストレージは各候補ともに共通の製品を選択予定です。 パーツ 型番 特徴 価格.comの最安値 ストレージ WD Blue SN550 NVMe WDS500G2B0C m.2 NVMe 8,448 ASRock Deskmini A300 パーツ 型番 特徴 価格.comの最安値 ベアボーン Deskmini A300 NIC(Realtek) 18,673 CPU Ryzen 5 3400G 4コア8スレッド 20,680 メモリ crucial CT8G4SFS8266 [SODIMM DDR4 PC4-21300 8GB] スロット全部使用 15,960(3,990x4) 合計 55,315 ASRock Deskmini 310 パーツ 型番 特徴 価格....

April 5, 2020 · 1 min · @nnstt1

OpenShift 構築奮闘記 #0

OpenShift の構築に試行錯誤した記録を残すため「OpenShift構築奮闘記」というタイトルで連載を始めます。 手始めに OpenShift を構築することにした経緯と、インストールする構成を残しておきます。 どのような課題が発生している/していたかは #1 以降で記載します。 なお、執筆時点で構築完了していないため連載回数は未定です。 事の始まり 弊社(弊部署)には毎月hh時間は技術向上のために遊んでよい(業務外のことをしてよい)、という取り組みがあります。 その一環で、自分は Kubernetes や Ansible といった技術の検証(勉強)を進めていました。 検証のためのVMは用意してもらっていましたが、1台しかないため色々試したいことが試せず悶々とした日々を過ごしていました。 e.g. 1サーバに GitLab(omnibus) と Kubernetesクラスタ を同居させて、 GitLab から Kubernetes に連携しようとしても「同じサーバ上にあるからダメー」と怒られたり…。 そんな折の今年1月末に突如、「保守期限切れになったサーバ(正確にはワークステーションらしい)を廃棄する前に自由に使っていいよ」とボスから声を掛けていただきました。 ↓その日の定時後の様子 なんか知らんけど保守切れ物理サーバ5台を自由に使っていいことになった!なんのご褒美だ?何して遊ぼうかな、やっぱりKubernetesかなー — ののし (@nnstt1) January 31, 2020 5台も使えることになったのですが、前職を含めても物理サーバを直接触ったこともないド初心者です。 とりあえず1台分だけ VMware ESXi を導入してVMの作っては壊しをできるようにして、その VMware 上に当初から考えていた Kubernetes クラスタを構築を目指しました。 社内ネットワークということもありプロキシやら認証やらで手こずりながらも、なんとか kubeadm を使った Kubernetes クラスタを構築することができました。(この内容もいずれ記事に残したいです) そんなこんなして遊んでいたら、Red HatのウェビナーやSoftware Design 3月号で紹介されていた OpenShift の詳細を知る機会があり、興味が湧いてきました。 OpenShift、いいですよね(説明を見聞きしただけで触ったことはない)。 使うだけならARO(Azure Red Hat OpenShift)が楽だと思いますが、せっかくなので VMware 上に OpenShift を構築することを次の目標にしました。 構築にあたり以下の記事を参考にさせていただいてます、ありがとうございます。 failed to fetch remote resource: Forbidden OpenShift 4....

March 3, 2020 · 1 min · @nnstt1

2019年の振り返り&2020年の目標

はじめまして、ののしと申します。 今更ですがブログ開設してみました。 アウトプットの場としてはQiitaという便利なサイトがありますが、チラシの裏にでも書くべきような内容を吐き出す場として、ブログという選択肢を作りました。 ブログ自体は今まで何度も作っては放置し、作っては放置し…と無駄に世の中のリソースを喰い潰していました。 しかし、今回は本気です。立派にチラシの裏として活用していきます。 取り急ぎ、新年を迎えたので「2019年の振り返り&2020年の目標」ネタで投稿してみようと思います。 その前に簡単な自己紹介。 自己紹介 〜2017年 会社: デー子 職種: (たぶん)SIer 居住地: 東京 寿退社しました。 2018年〜 会社: 製造業 職種: インフラエンジニア(社内SE) 居住地: 四国 2019年やったこと 2月 デブサミ2019参加、Kubernetesと出会う。 4月 IPAに寄付。 6月 コンテナ技術講座(Kubernetes基礎編) 参加。 デブサミ参加の報告をしていたため、上司から「こんな研修があるみたいだけど、ののし君どう?」と勧めてもらえました。内容を見てみたら Kubernetes完全ガイド著者の青山氏が直々に教鞭をとってくれる 神講座!2つ返事で参加申し込みしました。 感想:青山氏のターミナル操作めっちゃはえぇ… その後、費用や日程を把握していなかった上司と応用編を受けて良いか揉めたのは別のお話…。 7月 コンテナ技術講座(Kubernetes応用編) 参加。 感想:Ingressなんも分からん… 9月 Ansibleと出会う。 10月 Ansibleもくもく会に初参加(リモート)。 Ansibleユーザー会はリモート参加可能なイベントが多く、田舎民にとってはとてもありがたいコミュニティです。 感想:中村氏のキータイプ音めっちゃ気持ちいぃ… 12月 Ansibleアドベントカレンダー投稿×2。 拙筆ながらエントリーさせていただきました。エントリーしたものの技術的なネタを書けなかったため、自分の技術力不足を感じました。 2019年の振り返り 2019年のキーワードは Kubernetes と Ansible でした。 デブサミでKubernetesを知ったことが、2019年に色々取り組むことになったきっかけでした。 前職では業務が忙しくて新しい知識を入れる暇も無く、2018年は転職直後で新しい業務を覚えることで必死でした。(生活環境も変わったし) 2年目から余裕が出てきたところにKubernetesを知り、最近のIT界隈はこんなことになってるのか!と自分の知識とのギャップに驚き、とてもモチベーションが湧きました。 しかし、現職ではそもそもコンテナも使っていないWindows Serverメインの環境なので、いくらKubernetes周りを勉強しても業務に活かすビジョンが見えずモチベーションが下がり気味でした。 Ansibleは、今からでも業務で活用できそうな技術ということもありモチベーションも高く、意欲的に取り組むことができました。 2020年の目標、やりたいこと ここ数年、新しい資格をとっていないため、2020年は資格取得をメインの目標にしようと思います。IPAへのお布施はたくさんありました だんだん抽象的になっていってます。資格取得って、明確な目標を簡単に立てられてよいですね。 LPIC-1 取得 データベーススペシャリスト 取得(2020.4) ネットワークスペシャリスト 取得(2020.10) Ansible勉強する Kubernetes勉強する アウトプットがんばる 資格はどれか1つでも取れたら良いかな。...

January 3, 2020 · 1 min · @nnstt1

CILIUM_CLI_VERSION=$(curl -s https://raw.githubusercontent.com/cilium/cilium-cli/master/stable.txt) CLI_ARCH=amd64 if [ "$(uname -m)" = "aarch64" ]; then CLI_ARCH=arm64; fi curl -L --fail --remote-name-all https://github.com/cilium/cilium-cli/releases/download/${CILIUM_CLI_VERSION}/cilium-linux-${CLI_ARCH}.tar.gz{,.sha256sum} sha256sum --check cilium-linux-${CLI_ARCH}.tar.gz.sha256sum sudo tar xzvfC cilium-linux-${CLI_ARCH}.tar.gz /usr/local/bin rm cilium-linux-${CLI_ARCH}.tar.gz{,.sha256sum} $ cilium install ℹ️ Using Cilium version 1.12.2 🔮 Auto-detected cluster name: nuc-kubernetes 🔮 Auto-detected datapath mode: tunnel 🔮 Auto-detected kube-proxy has been installed ℹ️ helm template --namespace kube-system cilium cilium/cilium --version 1.12.2 --set cluster.id=0,cluster.name=nuc-kubernetes,encryption.nodeEncryption=false,kubeProxyReplacement=disabled,operator.replicas=1,serviceAccounts.cilium.name=cilium,serviceAccounts.operator.name=cilium-operator,tunnel=vxlan ℹ️ Storing helm values file in kube-system/cilium-cli-helm-values Secret 🔑 Created CA in secret cilium-ca 🔑 Generating certificates for Hubble....

5 min · nnstt1