前言
實現的功能很簡單,就是通過ansible批量完成某個賬戶sudo權限的開通或關閉
目錄結構
├── group_vars #放置各種變量的目錄,我這里沒用
├── hosts #主機和組配置,默認為/etc/ansible/hosts
├── roles #角色目錄,里邊可以有多個角色,這里只配置了一個common
│ └── common
│ ├── files #用於目錄分發的目錄
│ ├── handlers #放置處理程序,如重啟某個服務
│ │ └── main.yml
│ ├── tasks #任務列表
│ │ └── main.yml
│ └── templates #放置模板目錄,這里未用
└── site.yml #主入口配置,ansible-playbook 執行的第一個參數,也可以叫別的名稱
文件內容
hosts
[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.yml
---
- hosts: [ctx-bj, ctx-db] #可以選擇多個分組,這個要和hosts中能找到
remote_user: sre #因為需要通過遠端普通用戶使用sudo的方式,所以還需要配置sudo
sudo: yes
roles:
- common #將hosts和common這個角色綁定,這個common需要在roles目錄中存在
roles/common
其中包括很多目錄,因為需求很簡單,只配置了tasks/main.yml
---
# 安裝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
其實一條命令就搞定了