環境変数に含まれていない場合、スーパーセキュアパスワード変数の入力を要求できるようにしたいと思います。 (定義を.bash_profileまたは他のスポットのいずれかに入れたくないかもしれないと考えています。)
これは機能していません。常にプロンプトが表示されます。
vars:
THISUSER: "{{ lookup('env','LOGNAME') }}"
SSHPWD: "{{ lookup('env','MY_PWD') }}"
vars_Prompt:
- name: "release_version"
Prompt: "Product release version"
default: "1.0"
when: SSHPWD == null
注:私はMacを使っていますが、プラットフォームに依存しないソリューションが欲しいです。
devs からの返信と最新バージョンで行った簡単なテストによると、vars_Prompt
が実行されますbefore「事実の収集」。これは、SSHPWD
を使用したチェック時には、env var null
は常にwhen
であることを意味します。
残念ながら、タスクレベルでvars_Prompt
ステートメントを許可する方法はないようです。
Michael DeHaanの理由は、タスクレベルでプロンプトを許可すると、多くの質問をする役割への扉が開かれるからです。これにより、これを行うAnsible Galaxyロールの使用が困難になります。
Ansibleの自動化には明確な重点が置かれており、タスクレベルで質問することは私たちが本当にやりたいことではありません。
ただし、再生レベルでvars_Promptの質問を行い、タスク全体でこれらの変数を使用できます。ロールで質問することはできません。
そして本当に、それは私が強制したいものです-多くのギャラクシーの役割が質問を始めたら、私は迷惑であることがわかります:)
私はパーティーに遅れるかもしれませんが、vars_Prompt
を避ける簡単な方法は、その簡単なトリックを行うことでinteractive mode
を無効にすることです:
echo -n | ansible-playbook -e MyVar=blih site.yaml
これにより、回避するvars_Promptを制御できませんが、default: "my_default"
と組み合わせて、スクリプトで使用できます。
ここに完全な例:
---
- hosts: localhost
vars_Prompt:
- Prompt: Enter blah value
- default: "{{ my_blah }}"
- name: blah
echo -n | ansible-playbook -e my_blah=blih site.yaml
編集:
私はpause
モジュールとPrompt
引数を使用すると、私が望んでいたことをしていることがわかりました。
---
- pause:
Prompt: "Sudo password for localhost "
when: ( env == 'local' ) and
( inventory_hostname == "localhost" ) and
( hostvars["localhost"]["ansible_become_password"] is not defined )
register: Sudo_password
no_log: true
tags:
- always
実際、これはAnsibleのデフォルトでは不可能です。私はそれを許可しない背後にある理由を理解していますが、いくつかのコンテキストではが適切だと思います。ブルー/グリーンデプロイシステムを使用して、AWS EC2デプロイスクリプトを記述してきました。ロールのある時点で、何か問題が発生した場合にロールバックを行う必要があるかどうかをユーザーに尋ねる必要があります。前述のように、これを行う方法はありません(条件付きおよび/または非フグリ)。
そこで、標準ライブラリの一時停止アクションに基づいて、非常にシンプルなAnsible(2.x)アクションプラグインを作成しました。キーを1回押すだけでよいという点で少し質素ですが、役に立つかもしれません。 Github Gist here で見つけることができます。 Gistファイル全体を action_plugins
プレイブックディレクトリのディレクトリ。ファイル内のドキュメントを参照してください。
tehmoon's いくつかの修正を加えた答えに基づいて、私はそのようにしました:
- hosts:
- hostA
become: yes
pre_tasks:
- pause:
Prompt: "Give your username"
register: Prompt
no_log: yes
run_once: yes
- set_fact:
username: "{{Prompt.user_input}}"
no_log: yes
run_once: yes
- pause:
Prompt: "Give your password"
echo: no
register: Prompt
no_log: yes
run_once: yes
- set_fact:
password: "{{Prompt.user_input}}"
no_log: yes
run_once: yes
tags: [my_role_using_user_pass]
roles:
- role: my_role_using_user_pass
これは私のために動作します(2.3).. 1つのファイルで2ビットを実行します。これにより、jenkins経由でPlaybookを実行するときにtmp varsファイルを構築できますが、コマンドラインでプロンプトを表示することもできます。
そして、あなたは使用された1つの変数のみでそれを行うことができます
---
- name: first bit
hosts: all
connection: local
tasks:
- set_fact:
favColour: "{{ favColour }}"
when: favColour is defined
- name: second bit
hosts: all
connection: local
vars_Prompt:
favColour:
Prompt: "Whats ya favorite colour: "
when: favColour is not defined
tasks:
- debug: msg="{{favColour}}"