Configuration 当用户作为剧本的一部分失去访问权限时,优雅地不能保持幂等性
我正在处理两个Ansible角色:一个引导系统,另一个更新操作系统并重新启动 这些角色由Configuration 当用户作为剧本的一部分失去访问权限时,优雅地不能保持幂等性,configuration,ansible,devops,Configuration,Ansible,Devops,我正在处理两个Ansible角色:一个引导系统,另一个更新操作系统并重新启动 这些角色由master.yml文件启动: --- - hosts: all remote_user: root roles: - rh_bootstrap - hosts: all remote_user: devops become: true roles: - os_update ... 引导角色为selinux安装必要的包,添加devops用户,复制ssh密钥,并强化ssh ---
master.yml
文件启动:
---
- hosts: all
remote_user: root
roles:
- rh_bootstrap
- hosts: all
remote_user: devops
become: true
roles:
- os_update
...
引导角色为selinux安装必要的包,添加devops用户,复制ssh密钥,并强化ssh
---
- name: Ensure that libselinux is installed
yum:
name: libselinux-python
state: installed
- name: Create devops user
user:
name: devops
state: present
comment: Create devops user
- name: Install SSH key for devops user
authorized_key:
user: devops
key: "ssh-rsa MYKEYHERE"
state: present
- name: Make sure devops user is sudoer with no pw requirements
lineinfile:
dest: /etc/sudoers
state: present
regexp: '^devops ALL\='
line: 'devops ALL=(ALL) NOPASSWD:ALL'
validate: 'visudo -cf %s'
- name: Ensure SELinux is Enforcing
selinux:
policy: targeted
state: enforcing
- name: Disable empty password login
lineinfile: dest={{ sshd_config }} regexp="^#?PermitEmptyPasswords" line="PermitEmptyPasswords no"
notify: restart sshd
- name: Disable root SSH login
lineinfile: dest={{ sshd_config }} regexp="^#?PermitRootLogin" line="PermitRootLogin no"
notify: restart sshd
- name: Disable password login
lineinfile: dest={{ sshd_config }} regexp="^#?PasswordAuthentication" line="PasswordAuthentication no"
notify: restart sshd
...
此时,master.yml切换到devops用户。devops用户在myansible.cfg默认值中定义了一个密钥
问题是,如果我尝试重新运行master.yml
,root用户将无法再连接到主机,因为我已完全禁用root登录,因此会出错。是否有任何优雅的方式来处理无法登录的用户
---
- hosts: all
remote_user: root
gather_facts: false
pre_tasks:
- block:
- wait_for_connection:
timeout: 5
rescue:
- meta: clear_host_errors
- meta: end_play
roles:
- rh_bootstrap
- hosts: all
remote_user: devops
become: true
roles:
- os_update
简言之:
- 您需要防止在播放中的任何其他处理之前发生的事实收集(如果
被阻止,将导致第一个失败)李>root
- 在pre_tasks部分中,检查连接(失败时会有一个小的超时,因为时间在这里并不重要-预期的情况是二进制的-它可以连接也可以不连接)李>
- 在区块救援区段执行上述任务,如果(预期)发生连接故障,则停止处理播放李>
- 继续第一个游戏,否则应用
角色rh_bootstrap
旁注:
- 不要使用
使用lineinfle
模板
<> Li >我认为这是一个设计缺陷而不是“重新运行”<代码> RHYBooStuts角色稍后。
rh_引导程序中看不到任何不能在以后运行中使用的任务。就这么做吧。如果游戏禁用根连接,你就不能在以后的运行中以根用户身份连接。因此,再次尝试运行它会导致SSH连接失败(除非我误解了你)。谁说只有在与root
帐户连接时才需要运行rh_bootstrap
?