实现的功能很简单,就是经过ansible批量完成某个帐户sudo权限的开通或关闭python
├── group_vars #放置各类变量的目录,我这里没用 ├── hosts #主机和组配置,默认为/etc/ansible/hosts ├── roles #角色目录,里边能够有多个角色,这里只配置了一个common │ └── common │ ├── files #用于目录分发的目录 │ ├── handlers #放置处理程序,如重启某个服务 │ │ └── main.yml │ ├── tasks #任务列表 │ │ └── main.yml │ └── templates #放置模板目录,这里未用 └── site.yml #主入口配置,ansible-playbook 执行的第一个参数,也能够叫别的名称
hostslinux
[ctx-lf-web] 10.199.72.34 [ctx-bj-web] 10.0.32.34 [ctx-lf-db] 10.199.134.21 [ctx-bj-db] 10.0.32.39 [ctx-web:children] #经过这种方式,将lf和bj这2个组的主机都归类为ctx-web中,这样后续site.yml的host绑定ctx-web就能够操做如下两个分组 ctx-lf-web ctx-bj-web [ctx-db:children] ctx-lf-db ctx-bj-db [ctx-bj:children] ctx-bj-web ctx-bj-db [ctx-lf:children] ctx-lf-web ctx-lf-db
site.ymlweb
--- - hosts: [ctx-bj, ctx-db] #能够选择多个分组,这个要和hosts中能找到 remote_user: sre #由于须要经过远端普通用户使用sudo的方式,因此还须要配置sudo sudo: yes roles: - common #将hosts和common这个角色绑定,这个common须要在roles目录中存在
roles/common
其中包括不少目录,由于需求很简单,只配置了tasks/main.ymlapp
--- # 安装libselinux-python,若是目标机打开了selinux,须要安装这个包才能够执行写的操做 - name: ensure libselinux-python yum: name=libselinux-python state=latest tags: #tags打上一个标签,这样当ansible-playbook执行脚本的时候,若是不加--tags 参数,将会执行全部tasks,如加上--tags 某个tags名,则只会执行打上对应tags的tasks - comment_appuser_sudo - add_appuser_sudo # 注释appuser sudo - name: Commented-Out appuser sudo lineinfile: dest=/etc/sudoers state=absent regexp="^(appuser.*)$" validate="visudo -cf %s" #sudoers中删除以appuser开头的用户,其实更科学应该设置一个vars,把appuser做为一个变量这样更灵活 tags: - comment_appuser_sudo # 添加appuser sudo - name: Add appuser sudo lineinfile: dest=/etc/sudoers insertafter="^sre" line="appuser ALL=(ALL) NOPASSWD:ALL" validate="visudo -cf %s" #在sre开头那行后边加入line的信息 tags: - add_appuser_sudo
ansible-playbook -i hosts site.yml --tags comment_appuser_sudo -f 4 #-f并行处理的个数,默认5个,-i指定hosts文件,后接入口yml文件,注意tags,这里选择了comment...将会执行ensure libselinux-python 和Commented-Out appuser sudo这2个tasks,如不接tags参数,则全部tasks都执行
ansible ctx-bj-web -i hosts -m lineinfile -a "dest=/etc/sudoers state=absent regexp='^(appuser.*)$' validate='visudo -cf %s'" -u sre -s 其实一条命令就搞定了