1. ホーム
  2. ansible

[解決済み] Ansibleです。コマンドのstdoutを新しい変数に格納する?

2022-10-21 18:16:21

質問

プレイブック内で、外部コマンドの出力を保持する変数を作成したいと思います。その後、私はいくつかのテンプレートでその変数を使用したいと思います。

以下は、プレイブックの関連部分です。

  tasks:
    - name: Create variable from command
      command: "echo Hello"
      register: command_output
    - debug: msg="{{command_output.stdout}}"

    - name: Copy test service
      template: src=../templates/test.service.j2 dest=/tmp/test.service
    - name: Enable test service
      shell: systemctl enable /tmp/test.service
    - name: Start test service
      shell: systemctl start test.service

で、これが私のテンプレートだとします。

[Unit]
Description=MyApp
After=docker.service
Requires=docker.service

[Service]
TimeoutStartSec=0
ExecStartPre=-/usr/bin/docker kill busybox1
ExecStartPre=-/usr/bin/docker rm busybox1
ExecStartPre=/usr/bin/docker pull busybox
ExecStart=/usr/bin/docker run --name busybox1 busybox /bin/sh -c "while true; do echo {{ string_to_echo }}; sleep 1; done"

[Install]
WantedBy=multi-user.target

(この {{ string_to_echo }} )

つまり、私が求めているのは、基本的には command_output.stdout (最初のタスクで生成/取得される) の内容を新しい変数 string_to_echo .

その変数は、その後、複数のテンプレートで使いたいのですが。

を使えばいいんだろうけど {{command_output.stdout}} を使えばいいのでしょうが、私はこの .stdout を削除したいのです。

どのように解決するのですか?

あなたは をファクトとして保存します。 :

- set_fact:
    string_to_echo: "{{ command_output.stdout }}"