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
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
