katapedia
  • README
  • doc
    • Ansible
    • Assert
    • Astah
    • Autohotkey
    • CI
    • C_Cpp
    • CentOS6x系でhttp認証に失敗する
    • Chef
    • Clipboard
    • コーディング
    • Configure
    • Console2_NYAOS
    • Debian系RedHat系の違い
    • DesignDoc目次サンプル
    • Docker
    • Doxygenコメント規約
    • Eclipse
    • Excel
    • FAQ
    • Footer
    • Git
    • GitBucket
    • GitBucketとJenkins連携
    • GitBucketとRocketChat連携
    • GitHub
    • GitLab
    • Gitで大量のファイルの中から必要ファイルのみをaddする方法
    • GitのGUI比較
    • Gitのリポジトリがでかくなったときの削減の昔のやり方
    • Gitワークフロー
    • Go
    • Googletest
    • Gradle
    • Grafana
    • Groovy
    • Haroopad
    • Haskell
    • Htmlpdfに直リンクする(ダウンロードしない)方法
    • IT業界
    • Java
    • Javascript
    • Javascriptrライブラリ・フレームワーク一覧
    • Jenkins
    • JetBrains_IDE
    • Linux
    • Linux Command
    • Linux Distribution
    • Makefile
    • Maven
    • MicrosoftProject
    • NoSQL
    • Omniauthによるアカウント統合
    • Outlook
    • PHP
    • Prometheus_Loki
    • Python
    • RDB
    • Redmine
    • RedmineDドライブへの保存
    • Redmineアップデート
    • Redmineプラグイン
    • Redmineメール通知
    • Redmine文字化け
    • Ruby
    • Rust
    • R言語
    • SVN
    • Sidebar
    • Solaris
    • Staticまとめ
    • Terraform
    • Thinkpad
    • Tmux
    • ToDoリスト
    • UML
    • Vagrant
    • Vim/Neovim
    • VirtualBox
    • Visio
    • Webアプリケーション
    • Webサーバ
    • Webブラウザ
    • Webブラウジング
    • Webページ備忘録
    • Windows
    • Word
    • Zabbix
    • Zsh
    • C#
    • dotfiles
    • html_css
    • Lua
    • sonarqube
    • terminal
    • tweetまとめ
    • xrdp
    • お預り証サンプル
    • その他Webサービス
    • その他ツール
    • よく使う英語
    • アジェンダサンプル
    • アジャイル宣言
    • アンチパターン
    • インシデント
    • エディタ・IDE
    • エンジニアリングスキル
    • オンプレミスサーバ管理
    • オープンソースライセンス
    • キックオフミーティング
    • コミットメッセージでよく使う英語
    • サーバデータ移行
    • サーバ環境構築
    • シェルスクリプト
    • セキュリティ
    • ソフトウェア開発
    • チャットツール
    • チーム構築
    • ツール調査履歴
    • テスト
    • デザイン
    • デザインパターン
    • ドキュメント
    • ネットワーク
    • ノート
    • バージョン番号
    • ビジネスモデル
    • プラクティス一覧
    • プラグイン調査
    • プログラマがやってはいけない97のこと
    • プログラミングテクニック
    • プログラム
    • プログラムエラー集
    • プロジェクトマネージメント
    • プロダクトマネージメント
    • ヘルプ文
    • ライフハック
    • リソース設計
    • リバースエンジニアリングツール
    • リリースノート
    • リリースノートサンプル1
    • リンク
    • レビュー
    • 人月の神話
    • 人間のあれこれ
    • 仕事のあれこれ
    • 会議
    • 作業報告項目サンプル
    • 例外処理
    • 勉強
    • 名言・教訓
    • 品質管理
    • 教育
    • 数学
    • 文書レビュー観点
    • 朝会
    • 未来技術
    • 林檎の木のものを持ってきた
    • 正規表現
    • 物理
    • 知識データベース
    • 紛らわしい・似たような用語
    • 経営
    • 経済
    • 自作template_class_でundefined_reference_to
    • 要求分析・要件定義
    • 見積もり
    • 設計
    • 評価
    • 認証
    • 議事録サンプル
    • 運用・保守
    • 開発インフラ
    • 開発環境
    • 開発計画
    • 関数名でよく使われる英単語
    • 関数命名規約
    • 関数型言語
    • 雑多メモ
    • 面接
Powered by GitBook
On this page
  • 基礎
  • 始め方
  • 導通確認
  • 構文確認
  • 実行
  • 途中から実行
  • Playbookの記述
  • ディレクトリ構成
  • モジュール
  • apt,yum
  • file
  • copy
  • template
  • スクリプト
  • get_url
  • ユースケース別タスクの書き方
  • 再起動させたい
  • Tips
  • FAILED! => {"msg": "to use the 'ssh' connection type with passwords, you must install the sshpass program"}
  • scriptとcommandとshellの違い
  • FAQ
  • 初回にでるフィンガープリントを無視する Are you sure you want to continue connecting
  • fatal: : FAILED! => {"changed": false, "failed": true, "module_stderr": "sudo: パスワードが必要ですn", "module_stdout": "", "msg": "MODULE FAILURE", "rc": 1}
  • Aborting, target uses selinux but python bindings (libselinux-python) aren't installed! というエラーがでる
  1. doc

Ansible

PreviousdocNextAssert

Last updated 7 years ago

基礎

始め方

導通確認

  1. echo -e "[server-grouping-name]ntarget_server_ip:port" > hosts

  2. ansible 127.0.0.1:2222 -m ping -i hosts -u root -k -s

  3. ansible -i hosts server-grouping-name -a 'uname -r'

構文確認

  1. ansible-playbook -i hosts simple-playbook.yml --syntax-check

  2. ansible-playbook -i hosts simple-playbook.yml --list-tasks

  3. ansible-playbook -i hosts simple-playbook.yml --check

実行

一回ログインしないと

fatal: : FAILED! => {"failed": true, "msg": "Using a SSH password instead of a key is not possible because Host Key checking is enabled and sshpass does not support this. Please add this host's fingerprint to your known_hosts file to manage this host."}

というエラーになる

ssh vagrant@xxx -p xxx

ansible-playbook -i hosts site.yml -k

ansible-playbook -i hosts site.yml -k --ask-become-pass ssh先でsudoする場合

-kを入れないとパスワード入力ができずエラーになる

途中から実行

ansible-playbook site.yml -l redmine --start-at="redmine : install plugins in github"

Playbookの記述

まずはメインのplaybookを作る

site.yml

---
- include: webservers.yml
- include: dbservers.yml

そしてsite.ymlから読み込むグループごとのプレイブックを同じくトップレベルのディレクトリに作成します。

webservers.yml

---
- hosts: webservers
roles:
- common

dbservers.yml

---
- hosts: dbservers
roles:
- common

ディレクトリ構成

production # inventory file for プロダクション
staging # inventory file for ステージ
group_vars/
group1 # グループごとの変数をまとめておく
host_vars/
hostname1 # ホスト固有の値を設定する
site.yml # 全ての起点のplaybook
webservers.yml # playbook for webサーバ
dbservers.yml # playbook for dbサーバ
roles/
nginx/ # ロールごとに作成(Chefでいうクックブック単位)
tasks/ # 実行したい処理
main.yml # nginxのインストール処理
handlers/ # main.yml # notifyで呼ばれるハンドラ
templates/
nginx.conf.j2 # nginxのコンフィグファイル
files/ bar.txt # 変数不要で配備したいファイル
vars/
main.yml # このロールの変数を設定

mkdir -p files filter_plugins group_vars handlers host_vars library production roles staging tasks templates vars

モジュール

apt,yum

tasks:
- apt: name=nginx
notify: restart nginx
handlers:
- name:
restart nginx
service:
name=nginx
state=restarted
tasks:
- apt:
name=nginx
state=latest
when: ansible_os_family == "Debian"

file

- file:
path=/etc/foo.conf
owner=foo
group=foo
mode=0644
- file: path=/etc/some_directory
state=directory
mode=0755

copy

- copy:
src=/srv/myfiles/foo.conf
dest=/etc/foo.conf
owner=foo
group=foo
mode=0644

複数ファイルをコピーする

- name: setup configuration
copy:
src: "{{ item.src }}"
dest: "{{ item.dest }}"
with_items:
- { src: './files/sysctl.conf', dest: '/etc/sysctl.conf' }
- { src: './files/i18n', dest: '/etc/sysconfig/i18n' }

template

- template:
src=/mytemplates/foo.j2
dest=/etc/file.conf
owner=bin
group=wheel
mode=0644
erb: <%= hoge %>
jinja2: {{ hoge }}

スクリプト

tasks:
# 冪等性無し
- script: my_command.sh
# 冪等性有り
- script: my_command.sh creates=/tmp/done.txt

get_url

tasks:
- name: download foo.conf
get_url: url=http://example.com/path/file.conf dest=/etc/foo.conf
mode=0440

ユースケース別タスクの書き方

再起動させたい

- name: reboot!
command: shutdown -r now

- name: wait for SSH port up
wait_for: host={{ inventory_hostname }} port={{ ansible_port }} state=started delay=30 timeout=60
delegate_to: 127.0.0.1
become: no

Tips

FAILED! => {"msg": "to use the 'ssh' connection type with passwords, you must install the sshpass program"}

sshpassをインストールする必要がある

sudo apt-get install sshpass

コマンドオプションで -c paramiko でもうまく行くみたい

scriptとcommandとshellの違い

shell:シェルコマンドを実行。これを使っておけば無難

script:シェルスクリプトを実行するときに使う

command:環境変数を読めなくてよい、リダイレクトやパイプをしないときに使う

FAQ

初回にでるフィンガープリントを無視する Are you sure you want to continue connecting

ansible.cfg

[defaults]
host_key_checking = False

fatal: : FAILED! => {"changed": false, "failed": true, "module_stderr": "sudo: パスワードが必要ですn", "module_stdout": "", "msg": "MODULE FAILURE", "rc": 1}

become: yesがあるためローカルのコマンドもsudoで打とうとする

そのタスクだけbecome: noにすると大丈夫

Aborting, target uses selinux but python bindings (libselinux-python) aren't installed! というエラーがでる

libselinux-pythonがないことが原因

インストールすること

https://galaxy.ansible.com/
http://tdoc.info/blog/2013/04/20/ansible.html
http://yteraoka.github.io/ansible-tutorial/
http://yteraoka.github.io/ansible-tutorial/
http://knowledge.sakura.ad.jp/tech/3084/
http://docs.ansible.com/ansible/playbooks_best_practices.html
http://www.infiniteloop.co.jp/blog/2013/08/ansible/
https://stackoverflow.com/questions/36696952/copy-multiple-files-with-ansible
http://d.hatena.ne.jp/yk5656/20141016/1415403630