Ansible:检查我的用户是否存在于远程主机上,否则使用root用户连
发布时间:2020-12-14 01:02:45 所属栏目:Linux 来源:网络整理
导读:我正在编写一个Ansible脚本,它应该在运行Debian或CentOS的每个主机上更新openssl.在主机上,我们的SSH密钥是为我自己的用户或root用户存放的.我想检查我的用户是否存在于主机上,如果不是,我想要与root用户进行身份验证.有可能这样做吗?我尝试使用bash命令,但
我正在编写一个Ansible脚本,它应该在运行Debian或CentOS的每个主机上更新openssl.在主机上,我们的SSH密钥是为我自己的用户或root用户存放的.我想检查我的用户是否存在于主机上,如果不是,我想要与root用户进行身份验证.有可能这样做吗?我尝试使用bash命令,但我想在运行任务之前检查我的用户是否存在.也许我的问题有其他解决方案,但我不知道.运行此playbook会引发语法错误.我的脚本现在看起来像这样:
--- - hosts: "{{ host_group }}" remote_user: "{{ username }}" tasks: # Check whether there's a existinig user or whether you have to use root - name: Check whether there's your user on the machine action: shell /usr/bin/getent passwd $username | /usr/bin/wc -l | tr -d '' register: user_exist remote_user: root when: user_exist.stdout == 0 tags: - users # Install openssl on Ubuntu or Debian - name: Install openssl on Ubuntu or Debian become: True become_user: root apt: name=openssl state=latest when: ansible_distribution == 'Debian' or ansible_distribution == 'Ubuntu' # Install openssl on CentOS or RHEL - name: Install openssl on CentOS or RHEL become: True become_user: root yum: name=openssl state=latest when: ansible_distribution == 'CentOS' or ansible_distribution == 'Red Hat Enterprise Linux' 解决方法
您可以先使用local_action测试连接.
Ansible需要知道如何连接到主机,否则它将触发主机无法访问错误并跳过该主机的剩余任务. 像这样的东西: - hosts: myservers gather_facts: no # or it will fail on the setup step tasks: - name: Test user local_action: "command ssh -q -o BatchMode=yes -o ConnectTimeout=3 {{ inventory_hostname }} 'echo ok'" register: test_user ignore_errors: true changed_when: false - name: Do useful stuff remote_user: "{{ test_user | success | ternary(omit,'root') }}" command: echo ok (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |