2017-01-24 33 views
1

我試圖建立一個寄存器即檢查,如果文件中ansibleAnsible獲取localhost用戶錯誤?

- name: check CRAN R script exists 
    stat: 
    path: "{{ playbook_dir }}/scripts/R/cran.R" 
    delegate_to: localhost 
    register: cran 

    tags: r_extras 

這個任務執行任務之前就存在的是劇本的一部分,作爲須藤

- name: installing common apt dependencies, pip python packages as well as java 
    hosts: base 
    remote_user: "{{ sudo_guy }}" 
    roles: 
      # need to have non previlidged installer guy 
      - make_sw_guy 
      # apt-get installation 
      - common 

    become: true 

當我運行劇本運行這樣

ansible-playbook -vvvv -i my_hosts all.yml --tags r_extras 

我得到這個錯誤

fatal: [bio_training -> localhost]: FAILED! => { 
    "changed": false, 
    "failed": true, 
    "invocation": { 
     "module_name": "stat" 
    }, 
    "module_stderr": "sudo: a password is required\n", 
    "module_stdout": "", 
    "msg": "MODULE FAILURE" 
} 

因爲Ansible認爲我是root ..這對我來說似乎有點愚蠢,但我可能會忽略這一點?

如何檢查本地文件是否存在?和/或如何獲得本地主機的$USER可變


我可以通過添加become_user: $USER「解決」這個問題,但我不知道如何使這個通用..

回答

1

become指令的設定角色對所有任務都有效,包括delegate_to

實際上,您嘗試使用前面的sudo命令在本地運行任務,並且需要提供在/etc/sudoers中設置的密碼。

沒有什麼什麼Ansible在這裏所做的愚蠢和不「想」你是root,其實如果它「認爲」你是根,它不會要求輸入密碼。

您可以將become: false添加到任務中。

+0

謝謝,我想我還沒有完全得到 - 忘記當你使用'become'變爲ansible時,它會運行所有以sudo爲前綴的地方..它對local_actions只是一個不直觀的東西,因爲你指定'sudo'爲遠程.. – serine

+0

我不能在你的問題中看到任何'local_action'任務。你先在上面的評論中使用這個短語。 – techraf

+0

我相信'delegate_to:localhost'和'local_action'是一回事。他們不是嗎? – serine