首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当用户失去作为剧本一部分的访问权限时,优雅地失败不能维护幂等性。

当用户失去作为剧本一部分的访问权限时,优雅地失败不能维护幂等性。
EN

Stack Overflow用户
提问于 2017-12-15 02:25:53
回答 1查看 315关注 0票数 1

我正在处理两个Ansible角色:一个用于引导系统,另一个用于更新操作系统和重新启动。

这些角色是由master.yml文件启动的:

代码语言:javascript
复制
---
- hosts: all
  remote_user: root
  roles:
  - rh_bootstrap

- hosts: all
  remote_user: devops
  become: true
  roles:
  - os_update
...

引导程序角色为selinux安装必要的包,添加devops用户,复制ssh密钥,并增强ssh。

代码语言:javascript
复制
---
- 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用户在我的ansible.cfg默认值中定义了一个键。

问题是,如果我试图重新运行master.yml,根用户将无法再连接到主机,因为我已经完全禁用了根登录,因此它出错了。是否有任何优雅的方法来处理无法登录的用户?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-12-15 02:40:03

代码语言:javascript
复制
---
- 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角色。

西德诺特:

  • 不要使用lineinfile,使用template
  • 我认为以后不“重新运行”rh_bootstrap角色是一个设计缺陷。
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47824952

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档