サーバーの現在のホスト名を取得して構成ファイルに設定するために、Ansibleプレイブックを作成しています。 lineinfileモジュールを使用してシェルの出力をプッシュする方法を理解できません。
- name: Get hostname
Shell: echo $HOSTNAME
register: result
- name: Set hostname on conf file
lineinfile: dest=/etc/teste/linux/zabbix_agentd.conf regexp="^Hostname=.*" insertafter="^# Hostname=" line=Hostname=????
一般に、変数の内部を調べるには、debug
モジュールを使用できます。
- debug:
var: result
これにより、stdout
を含むオブジェクトとそのプロパティが表示されます。これが前のコマンドの完全な結果です。したがって、最初のタスクの出力を使用するには、result.stdout
を使用します。
変数を使用するには、Jinja2式{{ whatever }}
を使用します。したがって、タスクは次のようになります。
- name: Set hostname on conf file
lineinfile:
dest: /etc/teste/linux/zabbix_agentd.conf
regexp: ^Hostname=.*
insertafter: ^# Hostname=
line: Hostname={{ result.stdout }}
理論についてはこれくらいですしかし、ここに本当の答えがあります。そのようにしないでください。もちろん、Ansibleはすでにホスト名を知っています。
インベントリで定義されているホスト名は{{ inventory_hostname }}
です。サーバーから報告されるホスト名は{{ ansible_hostname }}
です。さらに、{{ ansible_fqdn }}
があります。したがって、追加のタスクを実行する代わりに、これらのいずれかを使用します。
- name: Set hostname on conf file
lineinfile:
dest: /etc/teste/linux/zabbix_agentd.conf
regexp: ^Hostname=.*
insertafter: ^# Hostname=
line: Hostname={{ ansible_hostname }}
コマンドラインで変数を渡す にする必要があります。
まず、変数を登録します
---
- hosts: 127.0.0.1
connection: local
vars:
- person: John Snow
- filename: v1.j2
vars_files:
- vars.yml
tasks:
- name: Who I am?
action: command /usr/bin/whoami
register: myname
- name: Run jpprog.sh
action: command ./jpprog.sh
register: v
- name: Populate template
action: template src={{filename}} dest=/tmp/out
このプレイブックは2つのコマンドを実行します。最初のコマンドは出力をmynameと呼ばれる変数に格納し、2番目のコマンドは変数vに格納します。whoamiの結果は、変数名.stdoutとしてテンプレートで使用できる単一の文字列です。 jpprog.shの結果は、文字列として表されるJSONオブジェクトです。
{
"number": 18,
"name": "john"
}
テンプレートは次のとおりです。
-> I am {{ myname.stdout }}
{% set t = v.stdout|from_json %}
JSON struct T: {{ t }}
name = {{ t.name }}
number = {{ t['number'] }}
そして出力は:
-> I am jpm
JSON struct T: {u'number': 18, u'name': u'john'}
name = john
number = 18
出典: Jan-Piet Mens Webサイト 。
- name: Set hostname on conf file
command: sed -i s/whatComesAfterHostname=/{{ ansible_hostname }}/g /etc/teste/linux/zabbix_agentd.conf
私のために働いた。