如何在Ansible playbook

时间:2016-10-26 16:14:47

标签: ansible ansible-playbook ansible-2.x

我知道其他问题已经讨论过,我尝试了各种选择,但似乎没有解决我的问题。

我开始学习Ansible并尝试运行一本剧本。我有一个角色,里面有任务。我想在远程机器上以用户john的身份运行整个剧本。 Playbook以复制任务开始。在我开始使用become和become_user之前,一切正常。我尝试通过在主要的playbbok中指定来运行角色作为用户john:

---
- hosts: target-machine.com
   roles:
   - role: installSoftware
     become: yes
     become_user: john

然后在执行剧本时,我运行以下内容:

 ansible-playbook -s major.yml -K

提示我

SUDO password:

我输入远程目标机器中存在的用户john的密码。一旦它开始运行playbook,它就会挂起需要用户作为john并抱怨的任务:

fatal: [target.com]: FAILED! => {"failed": true, "msg": "Failed to get information on remote file (/home/john/software.zip): MODULE FAILURE"}

我也尝试了以下内容:

---
- hosts: target-machine.com
  become: yes
  become_user: john
  roles:
   - role: installSoftware

以用户john的身份运行整个剧本。它再次询问我的SUDO密码,然后在5分钟后抱怨:

fatal: [openam.ansible-target.com]: FAILED! => {"changed": false, "failed":       true, "module_stderr": "", "module_stdout": "\r\nSorry, try again                           .\r\n[sudo via ansible, key=kchjtpjorgnvaksspqvgwzzkgtjnxsyv] password: \r\nsudo: 1 incorrect password attempt\r\n", "msg": "MODULE FAILURE"}

虽然我输入的密码是正确的。在SO上建议增加我在ansible.cfg文件中执行的SSH超时:

 [ssh_connection]
 ssh_args = -o ServerAliveInterval=60 -o ControlMaster=auto -o ControlPersist=1m

我想镜像的就是我在目标机器上运行的东西:

   su john
   Enter Password:
   john$

任何帮助将不胜感激。谢谢。

1 个答案:

答案 0 :(得分:0)

默认情况下,string data = "2 5 8 7 6 7"; var numbers = data.Split(' ') .Select(int.Parse).ToList(); // Or if you might have more spaces: string data = "2 5 8 7 6 7"; var numbers = data.Split(new[] { " " }, StringSplitOptions.RemoveEmptyEntries) .Select(int.Parse).ToList(); 使用become,而非sudo。因此,密码Ansible会提示您输入您以身份登录的用户的密码,而不是您要更改的用户的密码。您可以将此by setting su更改为become_method

如果您希望始终以不同的用户身份在该主机上运行所有任务,则可能需要设置su。有关详细信息,请参阅the inventory documentation