2016-08-25 10 views
0

私は、マシン上でのプロジェクトのデプロイを自動化するために使用しています。 1つのケースでは、私は有能なexpectオプションを使用しています。可能性のある期待変数での検証を使用する

私は自分で持っている:

# initdb.yml 

- hosts: all 
    vars_prompt: 
    - name: "username" 
     prompt: "Username" 
     private: no 
    - name: "email" 
     prompt: "Email" 
     private: no 
    - name: "password" 
     prompt: "Password" 
     private: yes 
    roles: 
    - initdb 

と中:

# roles/.../main.yml 

- expect: 
    echo: yes 
    command: 'env/bin/python manage.py createsuperuser' 
    timeout: 5 
    responses: 
     'Username .*': '{{ username }}' 
     'Email .*': '{{ email }}' 
     'Password': '{{ password }}' 
     'Password (again)': '{{ password }}' 
    args: 
    chdir: '{{ repo.path }}' 
    tags: 
    - superuser 

これは、Djangoの初期化移行を適用した後、スーパーユーザを作成するためです。

今の時点に行ってみましょう:私はこれを実行すると、誰かが例えば短すぎるパスワードを入力しますとき

、全体のプロセスがハングアップすると私はtagsオプションを使用してそれを再度実行する必要があります。

質問

のは、それだけで、それは正しくない値と力のユーザーが正しい値を入力するのコンソールにプロンプ​​トが表示されますことを期待ansibleする検証をアタッチする方法はありますか?

答えて

3

いいえ、expectモジュールはあなたの検証を行うことができません。
あなたのプレイブックには対話性を避けるべきです。
あなたがパラメータを検証する必要がある場合は、assertであなたの脚本の最初にそれを手動で実行します。

- hosts: all 
    vars_prompt: 
    - name: "password" 
     prompt: "Password" 
     private: yes 
    pre_tasks: 
    - assert: 
     that: password | length > 6 
    roles: 
    - initdb 
+0

''あなたはplaybooks.''で任意の対話を避けるべきです。あなたは私にその時の使用を期待するための例を与えることができますか? – turkus

+0

@turkus私はユーザーとのやりとりを避ける(_forceユーザーに正しい値を入力すること_)。あなたの 'expect'の例は大丈夫です。あなたのvarsを最初から検証するだけで、すぐにプレイブックを再実行することができます。 –

関連する問題