在实际生产环境中,应用程序的用户为不容许用户直接登录,即为登录用户user1 ,操做应用程序为user2,须要完成对应用程序的启动关闭,须要登录user1 切换user2 操做应用程序。shell
在ansible 实际应用中怎么解决此类问题呢,经过多方查看资料发现能够ansible_become这个参数能够完美的解决这个问题。ssh
配置文件修改成一下ide
[pro1] 192.168.0.226 ansible_ssh_user=user1 ansible_ssh_pass='passwd' ansible_become=true ansible_become_user=user2 ansible_become_pass='passwd' [pro2] 10.111.36.72 ansible_ssh_user=manager ansible_ssh_pass='O5e2#L9w'
注释以下:测试
ansible_user # ssh用户 ansible_ssh_pass # 密码 ansible_port # ssh端口 ansible_become # true or false,是否切换用户 ansible_become_method # 切换用户使用的方法,如sudo、su ansible_become_user # 要切换的用户 ansible_become_pass # 切换用户是须要的密码
注意:
这里还有一个很是重要的问题!!!
博主今天遇到了!!!
就是同一台主机,同一个用户登录操做不一样的应用程序
user1 能够正常登录 正常操做应用程序
user1 能够正常登录 切换user2 操做应用程序
这里就出现了冲突矛盾的问题!!!
在ansible 应用组里面 即便指定了组 可是user1 执行任何程序的时候仍是会自动切换成user2 用户!!code
须要怎么如何解决这个问题呢????
经过查看资料以及好友的帮助有两条解决问题的方法:ip
方法一:it
在hosts 文件中不使用bcome 参数,在语句中进行附加class
ansible-playbook /etc/ansible/pro1.yml -e "ansible_become='yes'ansible_become=true ansible_become_user='user2' ansible_become_pass='passwd'"
方法二:配置
这里博主是使用了方法二,由于密码有特殊字符很差处理。程序
当查看主机的时候发现主机有多网卡,因而就把pro2的ip地址改为另外一个内网地址,通过测试,两个项目都能正常使用了!!!
总结:
通过测试,ansible_become=true 这个参数,对同一个主机地址,同一个用户都会有效果,即便指定不一样的分组,优先级甚是高!解决问题方法的思路不少种,有时候换一下角度考虑,问题就能迎刃而解。