實現的功能很簡單,就是經過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 其實一條命令就搞定了