Memo/Ansible/Error

https://dexlab.net:443/pukiwiki/index.php?Memo/Ansible/Error
 

Error/Warning


Invoking "yum" only once while using a loop via squash_actions is deprecated

ansible2.0以降の「yum:」「apt:」で「name="{{ list }}"」が指定できるようになった。
with_itemsでループさせない。

[DEPRECATION WARNING]: Invoking "yum" only once while using a loop via squash_actions is deprecated. Instead of using a loop to supply multiple 
items and specifying `name: {{ item }}`, please use `name: [u'firewalld']` and remove the loop. This feature will be removed in version 2.11. 
Deprecation warnings can be disabled by setting deprecation_warnings=False in ansible.cfg.

too long for Unix domain socket

macOS v10.12(Sierra)で発生。 CentOS6/7では発生せず。

  • 解決方法
    • クライアントのOpenSSH 6.7以降なら「%%C」が使える。SSH_CONFIG (5)
      • ansible.cfg
        [ssh_connection]
        # '%C' by a hash of the concatenation: %l%h%p%r.
        control_path=%(directory)s/%%C
    • %l: ローカルのホスト名 (ドメイン名がある場合はそれも含む)
    • %h: 対象のリモートホスト名
    • %p: 宛先のポート
    • %r: リモート側のログイン名
    • 複数クライアント混在環境だとansible.cfgに「%%C」と書いてしまうと、例えばCentOS6/7環境ではエラーになる

Too many open filesでansibleの実行が停止する

  • CentOS 6でansible実行すると途中で停止する場合がある。ulimitの上限に達していた。
  • pam経由の場合と、daemonは別の設定が必要
  • CentOS 6:
    sudo tail -f /var/log/secure
    Jul  5 16:27:31 server sshd[1465]: error: accept from auth socket: Too many open files
    
    ulimit -n
    1024
    
    cat /etc/security/limits.d/90-nproc.conf
    *          soft    nproc     1024
    root       soft    nproc     unlimited
  • CentOS 7:
    ulimit -n
    1024
    
    cat /etc/security/limits.d/20-nproc.conf 
    *          soft    nproc     4096
    root       soft    nproc     unlimited
    # もしdaemonのserviceファイルを変えた場合は、以下も必要
    sudo systemctl daemon-reload
    sudo systemctl <daemon> restart
  • ansibleで変更する場合
    - pam_limits:
        domain: "{{ item.domain }}"
        limit_type: "{{ item.limit_type }}"
        limit_item: nofile
        value: 65536
      with_items:
        - domain: root
          limit_type: soft
        - domain: root
          limit_type: hard
        - domain: "*"
          limit_type: soft
        - domain: "*"
          limit_type: hard
  • playbook実行後、再起動
    sudo reboot
  • 再起動後
    ulimit -n
    65536
    
    cat /etc/security/limits.conf
    root    soft    nofile  65536
    root    hard    nofile  65536
    *       soft    nofile  65536
    *       hard    nofile  65536

to_nice_yaml でエラー


localhost対象時のエラー

  • ansible 2.1.1.0
  • localhost を対象にするつもりが、PLAY RECAPを見ると、「127.0.0.1」と「localhost」の2つ実行されており、「localhost」の時にgroup_vars/localhost.ymlを読んでいないようで、変数の未定義エラーが出る。
    cat group_vars/localhost.yml
    ...
    
    cat hosts.ini
    [localhost]
    127.0.0.1
    
    cat playbook.yml
    - hosts: localhost
      gather_facts: False
      connection: local
    ...
    
    ansible-playbook -i hosts.ini playbook.yml
    
    fatal: [localhost]: FAILED! => {"failed": true, "msg": "the field 'args' has an invalid value, which appears to include a variable that is undefined. The error was: ...
    
    PLAY RECAP *********************************************************************
    127.0.0.1                  : ok=2    changed=2    unreachable=0    failed=0
    localhost                  : ok=0    changed=0    unreachable=0    failed=1
  • 対策
    • playbook.ymlを「- hosts: 127.0.0.1」に変更
    • ansible-playbook -l 127.0.0.1 -i hosts.ini ...

error while evaluating conditional

  • 変数が未定義の場合でも出る
  • 例:libselinux-python がインストールされていない場合
    • -m setupの結果
      "ansible_selinux": false
    • when: ansible_selinux.status == "disabled" の部分で発生する

The Python 2 bindings for rpm/yum ...

  • 環境
    • CentOS 7.x
    • ansible 2.6.3をrbenvのpipで入れた場合に発生。
  • 解決: pip版ではなく、yum版を使う
    # pip版をアンインストール
    pip uninstall ansible
    
    # yum版をインストール
    sudo yum install ansible -y
    
    # pyenvを使っている場合
    pyenv global system
    exec $SHELL -l
    
    ansible --version
    ansible 2.6.3

WARNINGの抑制

  • shell/command moduleを使った時「[WARNING]: Consider using the yum, dnf or zypper module rather than running rpm ...」が出る時がある
  • 抑制したい場合:playbook.yml
  - shell: "rpm -q {{ rpm_name }}"
    args:
      warn: false

Encountered unknown tag

j2テンプレート中で「{% ... %}」を含む文字列を出力したい場合。

{% raw %} ... {% endraw %}

Syntax errors in policy.

  • JSONの構文的には正しいはずが、エラーが出る
  • 一時的な回避策1: 「| string」を足す。
"{{ lookup('template', '/path/to/template.json.j2') | string }}"
  • 一時的な回避策2: 「" {{ 〜 }} "」のように、スペースで挟む。しかし、これでも構文エラーが出るケースがあるので、回避策1が良い。

The security token included in the request is invalid

  • version
pip list
...
ansible (2.5.0) 
boto (2.48.0)
boto3 (1.6.17)
  • dynamodb_table, iam で発生
  • ansible 2.3.3 まで戻すと正常に動作する

group_by: ERROR! Unexpected Exception, this is probably a bug: 'localhost'

  • ansible 2.4.3.0, 2.5.0.0で発生
  • 以下のようにgroup_byを使う箇所で起きる
-- group_by: key="{{ inventory_group }}"
  • 一時的な修正
  tasks:    - name: add hosts to localhost group      add_host:        name: "127.0.0.1"        groups: "localhost"

when statements should not include jinja2 templating delimiters

  • ansible 2.4.3.0では「when:」句に「{{ }}」が含んでいると、WARNINGが出るようになった
[WARNING]: when statements should not include jinja2 templating delimiters such as {{ }} or {% %}. Found: ansible_devices.{{ item.src | basename}} is defined
  • 変更前:
  when: ansible_devices.{{ item.src | basename }} is defined
  • 変更後:
  when: ansible_devices[ item.src | basename ] is defined

could not locate file in lookup: ~/.ssh/id_rsa.pub

  • 環境:CentOS 6.x 64bit, ansible-1.8.4-1.el6.noarch
  • 現象:パスワード認証時(-c paramiko, -ask-pass)に発生した
  • 解決:~/.ssh/id_rsa.pub が存在すれば(サイズ0でも)動作した
  • 適当に公開鍵を作成する
ssh-keygen -N "" -t rsa

to use the 'ssh' connection type with passwords, you must install the sshpass program

  • 環境:CentOS 6.x 64bit, ansible-1.8.4-1.el6.noarch
  • 現象:パスワード認証時(--ask-pass)に発生した
  • 解決:-c paramikoを付けて実行する。公開鍵認証時には不要

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2018-12-06 (木) 18:57:52 (12d)