在ansible playbook中添加sudo_user会使命令永远存在

时间:2015-04-20 21:44:01

标签: linux ubuntu-14.04 ansible ansible-playbook

我正在使用名为homesick的gem来自动将我的dotfiles符号链接到我的主目录中,并使用它作为ansible playbook的一部分来引导我的开发环境。我有以下任务使用思乡的gem和命令模块来克隆dotfiles。

- name: Use homesick to clone dotfiles repo
  command: homesick clone smcabrera/castillo-cabrera
  sudo_user: "{{ username }}"
  args:
    chdir: /home/{{ username }}
    creates: /home/{{ username }}/.homesick/repos/castillo-cabrera

这很好用。非常简单 - 思乡的宝石有一个名为clone的子命令,它从github克隆一个dotfile repo。我花了一点时间弄清楚我需要sudo_user因为否则它将使用root用户和root用户的主目录(/ root)并且dotfiles将被克隆在那里 - 而不是我想要的。使用sudo_user解决了这个问题。

然后我尝试做同样的事情来执行符号链接,它不起作用。见下文:

- name: Use homesick to symlink dotfiles to home directory
  command: homesick symlink castillo-cabrera
  sudo_user: {{ username }}
  args:
    chdir: /home/{{ username }}
    creates: /home/{{ username }}/.zshrc

很难知道什么是错的,因为它甚至没有完成和失败,所以我可以看到错误消息 - 它只是挂了半个小时才决定尝试别的东西。可能这只是一个需要很长时间的过程 - 除非如果我在没有sudo_user的情况下运行相同的任务,它就会花费时间并且我收到一条消息。

- name: Use homesick to symlink dotfiles to home directory
  command: homesick symlink castillo-cabrera
  args:
    chdir: /home/{{ username }}
    creates: /home/{{ username }}/.zshrc

changed: [localhost] => {"changed": true, "cmd": ["homesick", "symlink", "castillo-cabrera"], "delta": "0:00:00.623685", "end": "2015-04-20 16:40:29.100744", "item": "", "rc": 0, "start": "2015-04-20 16:40:28.477059", "stderr": "", "stdout": "   identical  /root/.oh-my-zsh-custom\n   identical  /root/.irbrc\n

...(等)

知道会发生什么事吗?

编辑:这是我为剧本运行的命令:

sudo ansible-playbook -s playbook.yml -i inventory -v

1 个答案:

答案 0 :(得分:2)

尝试使用sudo做一些事情通常需要密码,因此Ansible可能会卡在密码提示下,认为还有更多的事情要做,而不会意识到必须输入内容。有两种方法可以告诉Ansible用于sudo的密码:

  • 使用ansible-playbook-K选项运行--ask-sudo-pass,以便提示您输入密码。
  • 通过在主机名之后添加密码,将密码存储在清单文件中,如下所示:

    server.example.com ansible_sudo_pass=hunter2