>  > 【CUSCO】【クスコ】【ボディ補強パーツ】【ストラットバー】【タイプ ST】【CR-X】【HONDA】【ホンダ】【型式 AS】【年式 83.7~87.8】フロント用
HAAN WHEELS ハーンホイール ホイール本体 リアオフロードコンプリートホイール R2.15/18インチ カラー:シルバー カラー:ブラック RMZ 250 ENDURO (07-14)

FORCIA CUBEフォルシアの情報を多面的に発信するブログ

ブログTOPへ戻る

【CUSCO】【クスコ】【ボディ補強パーツ】【ストラットバー】【タイプ ST】【CR-X】【HONDA】【ホンダ】【型式 AS】【年式 83.7~87.8】フロント用

2018.12.11

アドベントカレンダー2018 テクノロジー

QiitaのAnsible Advent Calendar 2018 12日目の記事です。

 技術本部の西山です。FORCIAでは少数精鋭で顧客のサービスを担当するため、フルスタックエンジニアとしての活躍が求められます。私自身もWebエンジニアですが、インフラ寄りも積極的にキャッチアップしており、最近ではAnsibleやServerspecを利用してのサーバ構築自動化プロジェクトにも従事していました。
 今回は、Ansibleのplaybookを健全化するためにAnsible-lintを導入した話を紹介します。

【CUSCO】【クスコ】【ボディ補強パーツ】【ストラットバー】【タイプ SJ8 ST】【CR-X】【HONDA】【ホンダ】【型式 AS】【年式 83.7~87.8】フロント用 D401

 FORCIAではサーバ構築時にAnsibleを利用しており、現在では下記の様にAnsibleのplaybookが肥大化してきています。

 [forcia@localhost]$ pwd
/data/git-repos/configuration ### repository root
 [forcia@localhost]$ find ./ -type f -name "*.yml" -exec wc -l {} \; | awk '{sum+=>
FORCIA CUBEフォルシアの情報を多面的に発信するブログ

Ansibleのplaybookを健全に保つためにAnsible-lintを導入した話

2018.12.11

アドベントカレンダー2018 テクノロジー

QiitaのAnsible Advent Calendar 2018 12日目の記事です。

 技術本部の西山です。FORCIAでは少数精鋭で顧客のサービスを担当するため、フルスタックエンジニアとしての活躍が求められます。私自身もWebエンジニアですが、インフラ寄りも積極的にキャッチアップしており、最近ではAnsibleやServerspecを利用してのサーバ構築自動化プロジェクトにも従事していました。
 今回は、Ansibleのplaybookを健全化するためにAnsible-lintを導入した話を紹介します。

導入の背景

 FORCIAではサーバ構築時にAnsibleを利用しており、現在では下記の様にAnsibleのplaybookが肥大化してきています。

 [forcia@localhost]$ pwd
/data/git-repos/configuration ### repository root
 [forcia@localhost]$ find ./ -type f -name "*.yml" -exec wc -l {} \; | awk '{sum+=$1} END {print sum}'
5465 ### playbookの合計行数

 今後のAnsibleの実装を進めていくに当たり、playbookのlinterであるAnsible-lintを導入してコードの秩序を保っていきたいと思います。

導入手順

Ansible-lintのinstall

 Ansible-lintのdocumentを参照してインストールする。

  • 依存モジュールを明確にするため、requirements.txtを利用
ansible-lint==3.5.1
  • pipでinstall
[forcia@localhost]$ pip3 install -r requirements.txt

configuration fileの用意

 documentを参照して設定ファイル(.ansible-lint)を用意する。

  • .ansible-lintの中身
exclude_paths:
 - ./common_script/
 - ./ansible/bin/
 - ./ansible/module/
 - ./ansible/apps/
parseable: true
quiet: true
skip_list:
 - skip_this_tag # skipするタグを指定
 - skip_this_id # skipするidを指定
use_default_rules: true
verbosity: 1

※設定項目の意味はこちらを参照

CLIで実際に動かしてみる

[forcia@localhost]$ pip3 install -r requirements.txt

 動きました。

[forcia@localhost]$ ansible-lint ./ansible/**/*.yml -p | wc -l
35

 35個のエラー。思ったよりは多くないですがlinterを導入した甲斐がありました。

CIの設定

precommitの設定

 フォルシアでは、nodeを触る機会が多いので、package.jsonにnpm run precommitの定義を書くことが多いですが、今回はAnsibleなので、Pythonのお作法に則ります。

※設定方法は公式を参照

  • requirements.txtにpre-commitモジュールを追加
ansible-lint==3.5.1
pre-commit==1.12.0
  • pre-commitモジュールをインストール
[forcia@localhost]$ pip install -r requirements.txt
  • .pre-commit-config.yamlの作成
- repo: https://github.com/ansible/ansible-lint.git
 rev: v3.5.1
 hooks:
 - id: ansible-lint
 files: \.(yaml|yml)$
  • pre-commitの設定内容をgitに反映
[forcia@localhost]$ pre-commit install

 以上でcommitの度にlinterが走るようになりました。

Ansible-lintに触れて感じたこと

 Ansible-lintを導入してみて良かった点は playbookの記述方法をルール化できたことです。今回は下記のエラーが見つかり、修正できました。

[forcia@localhost]$ ansible-lint ./ansible/**/*.yml -p | awk '{ print $2 }' | sort | uniq -c
 14 [E201] ### Trailing whitespace
 3 [E202] ### Octal file permissions must contain leading zero
 5 [E301] ### Commands should not change things if nothing needs doing
 10 [E305] ### Use shell only when shell functionality is required
 3 [E502] ### All tasks should be named

 E202: permission設定する場合は755でなく0755のように4桁で書きなさいなど、yamlのlinterでは気づけない、playbook特有の事項も指摘してくれるので大変使い勝手が良いと感じました。
 一方、下記を課題に感じたのでcontributionしていけたらと思っています。

  • Ansible-lintにエラー箇所を自動修正してくれるformatter機能があると修正が楽で嬉しい
  • 実行時間が長く(設定方法が悪いのかもしれませんが)、linter実行速度に改善の余地がありそう

さいごに

 今後は、今回対応できなかった下記の点について、順次対応を進めていきたいと考えています。

  • 社内jenkinsサーバでもlinterをチェックするjobの設定する
  • こちらを参考に、独自ruleを作成する
  • documentのreadmeに一部記述が古い箇所があったのでプルリクを出す(早速contributionチャンス!)

 Ansibleのlinterを検討している方の参考になれば幸いです。

この記事を書いた人

西山諒平

技術本部 2015年度新卒入社。
大手旅行会社のシステムを担当。
フロントサイド~サーバサイド・DB・サーバ構築など何にでも興味津津な雑食系エンジニア。

  • HOME
  • FORCIA CUBE
  • Ansibleのplaybookを健全に保つためにAnsible-lintを導入した話
} END {print sum}' 5465 ### playbookの合計行数

 今後のAnsibleの実装を進めていくに当たり、playbookのlinterであるAnsible-lintを導入してコードの秩序を保っていきたいと思います。

導入手順

Ansible-lintのinstall

 Ansible-lintのdocumentを参照してインストールする。

  • 依存モジュールを明確にするため、requirements.txtを利用
ansible-lint==3.5.1
  • pipでinstall
[forcia@localhost]$ pip3 install -r requirements.txt

configuration fileの用意

 documentを参照して設定ファイル(.ansible-lint)を用意する。

  • .ansible-lintの中身
exclude_paths:
 - ./common_script/
 - ./ansible/bin/
 - ./ansible/module/
 - ./ansible/apps/
parseable: true
quiet: true
skip_list:
 - skip_this_tag # skipするタグを指定
 - skip_this_id # skipするidを指定
use_default_rules: true
verbosity: 1

※設定項目の意味はこちらを参照

CLIで実際に動かしてみる

[forcia@localhost]$ pip3 install -r requirements.txt

 動きました。

[forcia@localhost]$ ansible-lint ./ansible/**/*.yml -p | wc -l
35

 35個のエラー。思ったよりは多くないですがlinterを導入した甲斐がありました A.R.T エーアールティー ホイール関連パーツ ホイールスペーサー 4x144/+ 30mm (ART Wheel Spacers 4x144 / + 30 mm【ヨーロッパ直輸入品】)。

【CUSCO】【クスコ】【ボディ補強パーツ】【ストラットバー】【タイプ ST】【CR-X】【HONDA】【ホンダ】【型式 AS】【年式 83.7~87.8】フロント用
RR7464 HOTウインドガードデニムパンツ ワンウォッシュネイビー LLサイズ ラフアンドロード(Rough&Road)!ブリッツ SUS POWER カローラ ZZE122/ZZE124 [1ZZ-FE] SUS POWER AIR CLEANER.マナレイ ユーロスピードS810 4本セット ホイール ルークス【14×4.5J 4-100 INSET45 ガンメタ】ML21S MANARAY SPORT EuroSpeed マナレイスポーツ MiD アルミホイール 4枚 1台分【店頭受取対応商品】,●ハルトデザイン●VW New Beetle(ビートル) レザーマット前後4枚セット 左ハンドル ベース色:ブラック フチの色:イエロー (ダイヤWステッチ)

【CUSCO】【クスコ】【ボディ補強パーツ】【ストラットバー】【タイプ ST】【CR-X】【HONDA】【ホンダ】【型式 AS】【年式 83.7~87.8】フロント用

CIの設定

precommitの設定

 フォルシアでは、nodeを触る機会が多いので、package.jsonにnpm run precommitの定義を書くことが多いですが、今回はAnsibleなので、Pythonのお作法に則ります。

※設定方法は公式を参照

  • requirements.txtにpre-commitモジュールを追加
ansible-lint==3.5.1
pre-commit==1.12.0
  • pre-commitモジュールをインストール
[forcia@localhost]$ pip install -r requirements.txt
  • .pre-commit-config.yamlの作成
- repo: https://github.com/ansible/ansible-lint.git
 rev: v3.5.1
 hooks:
 - id: ansible-lint
 files: \.(yaml|yml)$
  • pre-commitの設定内容をgitに反映
[forcia@localhost]$ pre-commit install

 以上でcommitの度にlinterが走るようになりました。

Ansible-lintに触れて感じたこと

 Ansible-lintを導入してみて良かった点は playbookの記述方法をルール化できたことです。今回は下記のエラーが見つかり、修正できました。

[forcia@localhost]$ ansible-lint ./ansible/**/*.yml -p | awk '{ print $2 }' | sort | uniq -c
 14 [E201] ### Trailing whitespace
 3 [E202] ### Octal file permissions must contain leading zero
 5 [E301] ### Commands should not change things if nothing needs doing
 10 [E305] ### Use shell only when shell functionality is required
 3 [E502] ### All tasks should be named

 E202: permission設定する場合は755でなく0755のように4桁で書きなさいなど、yamlのlinterでは気づけない、playbook特有の事項も指摘してくれるので大変使い勝手が良いと感じました。
 一方、下記を課題に感じたのでcontributionしていけたらと思っています スロットルキットType1 インナー巻取径Φ36 ホルダーカラー:ガンメタ ワイヤー:ステンレス金具 ACTIVE(アクティブ) YZF-R1(09~11年) 。

  • Ansible-lintにエラー箇所を自動修正してくれるformatter機能があると修正が楽で嬉しい
  • 実行時間が長く(設定方法が悪いのかもしれませんが)、linter実行速度に改善の余地がありそう

さいごに

 今後は、今回対応できなかった下記の点について、順次対応を進めていきたいと考えています。

  • 社内jenkinsサーバでもlinterをチェックするjobの設定する
  • こちらを参考に、独自ruleを作成する
  • documentのreadmeに一部記述が古い箇所があったのでプルリクを出す(早速contributionチャンス!)

 Ansibleのlinterを検討している方の参考になれば幸いです ●クスコ / CUSCO●ランサーエボリューション 4-6 CN9A/CP9A (96.8~99.12) MT LSD リア 標準デフ:機械式 AYC無 Type MZ 2WAY (1&2WAY)。

この記事を書いた人

西山諒平

技術本部 2015年度新卒入社 カードでポイント最大34倍 3/21(木)20:00~3/26(火)1:59迄 YOKOHAMA ADVAN sport V105 S サマータイヤ 235/50R18 MANARAY EUROSPEED ユーロスピード G10 ホイールセット 4本 18インチ 18 X 8 +35 5穴 114.3。
大手旅行会社のシステムを担当。
フロントサイド~サーバサイド・DB・サーバ構築など何にでも興味津津な雑食系エンジニア TOYOTA【トヨタ】VOXY【ヴォクシー】スイッチベースパネルZWR80G ZWR80W ZRR80G ZRR85G ZRR80W ZRR85W 純正 用品 部品 パーツ アクセサリ オプション【宅配便 小サイズ】。

【CUSCO】【クスコ】【ボディ補強パーツ】【ストラットバー】【タイプ ST】【CR-X】【HONDA】【ホンダ】【型式 AS】【年式 83.7~87.8】フロント用

【CUSCO】【クスコ】【ボディ補強パーツ】【ストラットバー】【タイプ ST】【CR-X】【HONDA】【ホンダ】【型式 83.7~87.8】フロント用 【CUSCO】【クスコ】【ボディ補強パーツ】【ストラットバー】【タイプ 83.7~87.8】フロント用 AS】【年式

{yahoojp} {forcia.com}
{yahoojp}jpprem01-zenjp40-wl-zd-6736