web-dev-qa-db-ja.com

現在のホスト名を取得し、それをansibleでconfファイルにプッシュします

サーバーの現在のホスト名を取得して構成ファイルに設定するために、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=????
4
pedrocalixto

一般に、変数の内部を調べるには、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 }}
14
udondan

コマンドラインで変数を渡す にする必要があります。

まず、変数を登録します

---
- 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サイト

1
- name: Set hostname on conf file
  command: sed -i s/whatComesAfterHostname=/{{ ansible_hostname }}/g /etc/teste/linux/zabbix_agentd.conf

私のために働いた。

0
Fox Lollato