web-dev-qa-db-ja.com

Ansibleを使用したリモートコマンドの出力の表示

Ansibleロールでは、ユーザーのSSHキーを生成します。その後、画面に印刷して一時停止し、ユーザーが他の場所にコピーして貼り付けられるようにします。これまでのところ、私はこのようなものを持っています:

- name: Generate SSH keys for vagrant user
  user: name=vagrant generate_ssh_key=yes ssh_key_bits=2048
- name: Show SSH public key
  command: /bin/cat $home_directory/.ssh/id_rsa.pub
- name: Wait for user to copy SSH public key
  pause: Prompt="Please add the SSH public key above to your GitHub account"

「SSH公開キーの表示」タスクは完了しますが、出力は表示されません。

TASK: [Show SSH public key] *************************************************** 
changed: [default]

これについてはもっと良い方法があるかもしれません。常に「変​​更された」ステータスを表示するという事実はあまり好きではありません。私はこのプルリクエストをansibleに見つけました- https://github.com/ansible/ansible/pull/267 -しかし、自分のモジュールを書かずにそれを使用できるかどうかはわかりません。

59
Damian Moore

私はあなたの特定のコマンドの構文(例えば、浮浪者など)についてはわかりませんが、一般的に...

Ansibleの(通常は表示されない)JSON出力を変数に登録し、各変数のstdout_lines属性を表示するだけです:

- name: Generate SSH keys for vagrant user
  user: name=vagrant generate_ssh_key=yes ssh_key_bits=2048
  register: vagrant
- debug: var=vagrant.stdout_lines

- name: Show SSH public key
  command: /bin/cat $home_directory/.ssh/id_rsa.pub
  register: cat
- debug: var=cat.stdout_lines

- name: Wait for user to copy SSH public key
  pause: Prompt="Please add the SSH public key above to your GitHub account"
  register: pause
- debug: var=pause.stdout_lines
77
elimisteve

-vフラグをansible-playbookコマンドに渡すと、ansibleは端末に出力を表示します。

ユースケースでは、 fetch モジュールを使用して、公開鍵をサーバーからローカルマシンにコピーしてみてください。これにより、ファイルが変更されたときにのみ「変更済み」ステータスが表示されます。

18
Lorin Hochstein

pubkeyを出力し、changed_when: Falsecatタスクに追加することにより、ステータスの変更を回避します。

- name: Generate SSH keys for vagrant user   
  user: name=vagrant generate_ssh_key=yes ssh_key_bits=2048

- name: Check SSH public key   
  command: /bin/cat $home_directory/.ssh/id_rsa.pub
  register: cat
  changed_when: False

- name: Print SSH public key
  debug: var=cat.stdout

- name: Wait for user to copy SSH public key   
  pause: Prompt="Please add the SSH public key above to your GitHub account"
6
luissquall