SlideShare ist ein Scribd-Unternehmen logo
1 von 14
ansible_specでテストをする話
自動化大好きエンジニアLT会 第2回
■自己紹介
 [名前]: 上畑圭史(うえはたけいじ)
 [Twitter]: いじけまん(@ijikeman)
 [職業]:株式会社ラクスのインフラエンジニア
 [趣味1]: 自作キーボード大好き
アクリル板(4mm)にキーの穴(60個)を手であけた自キー(自作
キーボード界隈)ではちょっとした有名人
 [趣味2]: ピアノ歴2ヵ月(コロナを契機に)
セパレートキーボード使っている効果?か
以外と両手が動いてびっくりしてますw
2
■ansible_specとは
※serverspecはDSL風な簡易な記述でサーバの状態を検証することができます。
# httpdポートの確認を検証
describe port(‘80’) do
it { should be_listening }
end
1. Ansibleのディレクトリ構造に合わせて、テストファイル(spec)が設
置できる。
2. “Ansibleのインベントリファイルとプレイブックを使用して”
serverspecが実行できる。
# httpdパッケージのインストールを検証
describe package(‘httpd’) do
it { should be_installed }
end
1. Ansibleのディレクトリ構造に合わせ
て、テストファイル(spec)が設置できる。
└ roles/
└ [role_name]/
└ handlers/
└ files/
└ tasks/
└ templates/
└ spec/*_spec.rb
└ vars/
ロール単位でspecファイルを設置できる為、テストファイルの位置わか
りやすい
2. Ansibleのインベントリファイルとプレ
イブックを使用してserverspecが実行でき
る。
# httpdサービスの起動と有効化を検証
describe port(property[‘HTTPD_CONFIG’][‘PORT’]) do
it { should be_listening }
end
group_varsやhost_vars等varsに記載されているパラメータを
propertyとして記述ができる。
複数のホストを構成管理したAnsibleにおいて、ホスト毎のテストを書く
必要がなくなる。
# group_vars/centos7-server.yml
HTTPD_CONFIG:
PORT: ‘8080’
# group_vars/centos8-server.yml
HTTPD_CONFIG
PORT: ‘10080’
Run serverspec for ansiblespec_test-centos7
Port "8080" is expected to be listening
Finished in 1.56 seconds (files took 1.19 seconds to load)
1 example, 0 failures
Run serverspec for ansiblespec_test-centos8
Port "10080" is expected to be listening
Finished in 1.62 seconds (files took 0.84468 seconds to load)
1 example, 0 failures
■デモ①
■ansible_specで読み込まれるvars
リモートサーバに
アプリをアップロード
アプリを展開
PATH 備考
group_vars/all.yml
group_vars/[group_name].yml
group_vars/[group_name]/all.yml [group_name].ymlより優先され
[group_name].ymlは読み込まれない
host_vars/[hostname].yml
host_vars/[hostname]/all.yml [hostname].ymlより優先され
[hostname].ymlは読み込まれない
roles/[role]/default/main.yml
roles/[role]/vars/main.yml
playbook内のvars
■Ansible Best Practice(Alternative
Directory Layout)のディレクトリ構造
└ inventories/
└ production/
└ group_vars/
└ host_vars/
└ roles/
└ [role_name]
└ playbook.yml
■Ansible Best Practice(Alternative
Directory Layout)のディレクトリ構造
└ inventories/
└ production/
└ group_vars/
└ host_vars/
└ roles/
└ [role_name]
└ playbook.yml
対象外なんです…
■ansible_spec改良①
ということで修正依頼中
■ansible_spec改良②
1つのAnsibleコードで、複数種のサーバを管理した場合に全てのホスト共通のテ
ストであれば、実装しやすい。
・同じホストグループだが特定のホストだけ別のテストを実行したいといった場
合(例: Webサーバ群の内、WebサーバBは追加でテストを実施)
・ansible_spec改良①でインベントリ配下のvarsを使って可変テストが書けると、
ホスト単位やホストグループ単位のテストを書きたくなる
➡ 現状ではroles/[role_name]/spec/*_spec.rbを全部読み込んで実行する。
解決方法として
・spec内で対象ホストを分岐して処理を書く
・専用のテストroleを作って指定
といったことをしなければならない。
11
■ansible_spec改良②
そこで以下のような実装に変更してみました。
12
└ roles/ [role_name]/spec/
└ all_spec.rb ... このroleを指定した場合のテスト
└ group_name1/
└ all_spec.rb ... group_name1グループのホストのテスト
└ hostname1_spec.rb ... group_name1のhostname1のテスト
└ hostname2_spec.rb ... group_name1のhostname2のテスト
└ group_name2/
└ all_spec.rb ... group_name2グループのホストのテスト
└ hostname3_spec.rb ... group_name2のhostname3のテスト
各テストコマンド毎にどのテストが実行されるかを表にしてみました。
■ansible_spec改良②
13
N
O
テストコマンド テスト対象 実行されるテスト
① rake spec:group_name1:hostname1 hostname1 [role_name]/spec/all_spec.rb
[role_name]/spec/group_name1/all_spec.rb
[role_name]/spec/group_name1/hostname1_spec.rb
② rake spec:group_name1:hostname2 hostname2 [role_name]/spec/all_spec.rb
[role_name]/spec/group_name1/all_spec.rb
[role_name]/spec/group_name1/hostname2_spec.rb
③ rake spec:group_name1 hostname1
hostname2
①
②
④ rake spec:group_name2:hostname3 hostname3 [role_name]/spec/all_spec.rb
[role_name]/spec/group_name1/all_spec.rb
[role_name]/spec/group_name1/hostname3_spec.rb
⑤ rake spec:group_name2 hostname3 ④
⑥ rake spec:all hostname1
hostname2
hostname3
①
②
④
■Demo
ansible_spec改修②で改修したプログ
ラムに関してはQiita(ijikeman)に記事
をあげさせていただきます。
最終的に本家に取り込まれるに様に働
きかけをしていこうと思います。

Weitere ähnliche Inhalte

Was ist angesagt?

チケット管理システム大決戦 JIRA vs Redmine vs Trac ユーザーが語る、なぜ私はこのツールを使うのか
チケット管理システム大決戦 JIRA vs Redmine vs Trac ユーザーが語る、なぜ私はこのツールを使うのかチケット管理システム大決戦 JIRA vs Redmine vs Trac ユーザーが語る、なぜ私はこのツールを使うのか
チケット管理システム大決戦 JIRA vs Redmine vs Trac ユーザーが語る、なぜ私はこのツールを使うのか
Shunsuke (Sean) Osawa
 

Was ist angesagt? (20)

Ansibleの最近の動向を追ってみた
Ansibleの最近の動向を追ってみたAnsibleの最近の動向を追ってみた
Ansibleの最近の動向を追ってみた
 
Ansible 2.8 アップデート情報 -機能追加と注意点-
Ansible 2.8 アップデート情報 -機能追加と注意点-Ansible 2.8 アップデート情報 -機能追加と注意点-
Ansible 2.8 アップデート情報 -機能追加と注意点-
 
Itamae-Serverspec入門
Itamae-Serverspec入門Itamae-Serverspec入門
Itamae-Serverspec入門
 
Ansibleで始めるインフラ構築自動化
Ansibleで始めるインフラ構築自動化Ansibleで始めるインフラ構築自動化
Ansibleで始めるインフラ構築自動化
 
serverspecを使用したサーバ設定テストの実例
serverspecを使用したサーバ設定テストの実例serverspecを使用したサーバ設定テストの実例
serverspecを使用したサーバ設定テストの実例
 
Ansible ネットワーク自動化チュートリアル (JANOG42)
Ansible ネットワーク自動化チュートリアル (JANOG42)Ansible ネットワーク自動化チュートリアル (JANOG42)
Ansible ネットワーク自動化チュートリアル (JANOG42)
 
Parser combinatorってなんなのさ
Parser combinatorってなんなのさParser combinatorってなんなのさ
Parser combinatorってなんなのさ
 
Marp Tutorial
Marp TutorialMarp Tutorial
Marp Tutorial
 
NGS解析を始めた時にぶつかりがちな小さい壁あれこれ
NGS解析を始めた時にぶつかりがちな小さい壁あれこれNGS解析を始めた時にぶつかりがちな小さい壁あれこれ
NGS解析を始めた時にぶつかりがちな小さい壁あれこれ
 
コンテナの作り方「Dockerは裏方で何をしているのか?」
コンテナの作り方「Dockerは裏方で何をしているのか?」コンテナの作り方「Dockerは裏方で何をしているのか?」
コンテナの作り方「Dockerは裏方で何をしているのか?」
 
遺伝研スパコンを使った解析の並列化.pptx
遺伝研スパコンを使った解析の並列化.pptx遺伝研スパコンを使った解析の並列化.pptx
遺伝研スパコンを使った解析の並列化.pptx
 
本当は恐ろしい分散システムの話
本当は恐ろしい分散システムの話本当は恐ろしい分散システムの話
本当は恐ろしい分散システムの話
 
ネットワーク自動化、なに使う? ~自動化ツール紹介~(2017/08/18追加開催)
ネットワーク自動化、なに使う? ~自動化ツール紹介~(2017/08/18追加開催) ネットワーク自動化、なに使う? ~自動化ツール紹介~(2017/08/18追加開催)
ネットワーク自動化、なに使う? ~自動化ツール紹介~(2017/08/18追加開催)
 
コンテナネットワーキング(CNI)最前線
コンテナネットワーキング(CNI)最前線コンテナネットワーキング(CNI)最前線
コンテナネットワーキング(CNI)最前線
 
Marp入門
Marp入門Marp入門
Marp入門
 
チケット管理システム大決戦 JIRA vs Redmine vs Trac ユーザーが語る、なぜ私はこのツールを使うのか
チケット管理システム大決戦 JIRA vs Redmine vs Trac ユーザーが語る、なぜ私はこのツールを使うのかチケット管理システム大決戦 JIRA vs Redmine vs Trac ユーザーが語る、なぜ私はこのツールを使うのか
チケット管理システム大決戦 JIRA vs Redmine vs Trac ユーザーが語る、なぜ私はこのツールを使うのか
 
Logstashを愛して5年、370ページを超えるガチ本を書いてしまった男の話.
Logstashを愛して5年、370ページを超えるガチ本を書いてしまった男の話.Logstashを愛して5年、370ページを超えるガチ本を書いてしまった男の話.
Logstashを愛して5年、370ページを超えるガチ本を書いてしまった男の話.
 
インフラエンジニアの綺麗で優しい手順書の書き方
インフラエンジニアの綺麗で優しい手順書の書き方インフラエンジニアの綺麗で優しい手順書の書き方
インフラエンジニアの綺麗で優しい手順書の書き方
 
SageMakerでもAUTOMATIC1111したい
SageMakerでもAUTOMATIC1111したいSageMakerでもAUTOMATIC1111したい
SageMakerでもAUTOMATIC1111したい
 
Ansibleではじめるサーバー・ネットワークの自動化(2018/07/05)
Ansibleではじめるサーバー・ネットワークの自動化(2018/07/05)Ansibleではじめるサーバー・ネットワークの自動化(2018/07/05)
Ansibleではじめるサーバー・ネットワークの自動化(2018/07/05)
 

Mehr von KeijiUehata1 (7)

20221102_automation_lt09.pptx
20221102_automation_lt09.pptx20221102_automation_lt09.pptx
20221102_automation_lt09.pptx
 
20221102_automation_lt09.pptx
20221102_automation_lt09.pptx20221102_automation_lt09.pptx
20221102_automation_lt09.pptx
 
Ansibleの実行速度を1/3にした話
Ansibleの実行速度を1/3にした話Ansibleの実行速度を1/3にした話
Ansibleの実行速度を1/3にした話
 
Kubernetes サーバレス知識ゼロのエンジニアがKnative環境構築してみた
Kubernetes サーバレス知識ゼロのエンジニアがKnative環境構築してみたKubernetes サーバレス知識ゼロのエンジニアがKnative環境構築してみた
Kubernetes サーバレス知識ゼロのエンジニアがKnative環境構築してみた
 
既存サーバを後からAnsibleで構成管理する
既存サーバを後からAnsibleで構成管理する既存サーバを後からAnsibleで構成管理する
既存サーバを後からAnsibleで構成管理する
 
Python製BDDツールで自動化してみた
Python製BDDツールで自動化してみたPython製BDDツールで自動化してみた
Python製BDDツールで自動化してみた
 
ラクス共通Ansibleコードテンプレートを作った話
ラクス共通Ansibleコードテンプレートを作った話ラクス共通Ansibleコードテンプレートを作った話
ラクス共通Ansibleコードテンプレートを作った話
 

Ansible specでテストをする話