2016-08-25 17 views
0

我使用ansible來自動化機器上的項目部署。在一個案例中,我使用了ansible的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用戶輸入正確的值_)。你的'期望'例子是好的,只需在開始時驗證你的變數,這樣你就可以立即重新運行劇本。 –