ansibleで自分が欲しい情報が色んなページに散らばっていたので、メモ

ansible-playbookのオプション

  • -K: sudoのパスワード入力
  • -C (--check): 実際に実行しないでチェックしてくれる
  • -l name: hostsファイルに[name]と書かれたホストにのみ実行
  • -i hostsfile: 初期状態では/etc/ansible/hostsを見に行くので、自分で指定したい場合に
  • --syntax-check: playbookの書式チェック。書いて最初にやるといい
  • --list-tasks: playbookで行う内容をリストアップ

ansibleで鍵認証のsshで処理したい

-c paramikoでなく-c sshを使うとssh_configの値を使うことが出来る 

ansibleで鍵認証のsshで処理したい

-c paramikoでなく-c sshを使うとssh_configの値を使うことが出来る。 

参考:ansible is not using .ssh/config · Issue #1172 · ansible/ansible

チェック時の注意点

  • 何かをaptとかでインストールしてそのアプリを使って何かインストールしようとするとエラーが出る

  • aptにリポジトリ追加して、アップデートして何かインストールしようとするとエラーが出る

どちらも実際に動かすとエラーは出ない

postgresqlのデータベースロケール設定

ロケール設定してから一旦サービスを再起動する

    - name: Install language-pack-ja 
      apt: name=language-pack-ja
    - name: set locale
      locale_gen: name=ja_JP.UTF-8 state=present
    - name: first restart
      service:
        name: 'postgresql'
        state: 'restarted'
    - name: drop database stock if exist
      sudo_user: postgres
      postgresql_db: name=stock state=absent
    - name: create database stock
      sudo_user: postgres
      postgresql_db: >
        name=stock-
        encoding='UTF-8'
        lc_collate='ja_JP.UTF-8'
        lc_ctype='ja_JP.UTF-8'
        template='template0'

参考:Postgresql 9.2 "invalid locale name" on Ubuntu 12.04 - Server Fault

replaceとlineinfile

単純な置換、削除ならreplaceが直感的なので良い。 追加とかある場合はlineinfileが色々できて良い。

virtualenv関連

virtualenvのインストールだけならpipでいけるが、virtualenvの環境を初期化しておきたいのでこんな感じ

    - name: install virtualenv
      pip: name=virtualenv state=latest
    - name: initialize virtualenv
      command: virtualenv /path/to/env creates="/path/to/env"
    - name: install request on vertualenv
      pip:
        name=requests
        virtualenv=/path/to/env

requestsは最低でも入れておかないとssl関連のwarningが出る

参考:python - Why am I getting InsecurePlatformWarning on mac? - Stack Overflowpython - Ansible creating a virtualenv - Stack Overflow

GATHERING FACTSで止まる時

  • まずsudoを外して-Cで動くかチェック
  • いけるなら、host側のsudoパスワードが入力出来ていないのが原因なので、--ask-sudo-passを使う。