前言

实现的功能很简单,就是通过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
其实一条命令就搞定了

ansible写一个简单的playbook的更多相关文章

  1. 用Python写一个简单的Web框架

    一.概述 二.从demo_app开始 三.WSGI中的application 四.区分URL 五.重构 1.正则匹配URL 2.DRY 3.抽象出框架 六.参考 一.概述 在Python中,WSGI( ...

  2. 如何写一个简单的http服务器

    最近几天用C++写了一个简单的HTTP服务器,作为学习网络编程和Linux环境编程的练手项目,这篇文章记录我在写一个HTTP服务器过程中遇到的问题和学习到的知识. 服务器的源代码放在Github. H ...

  3. 如何写一个简单的shell

    如何写一个简单的shell 看完<UNIX环境高级编程>后我就一直想写一个简单的shell来作为练习,因为有事断断续续的写了好几个月,如今写了差不多来总结一下. 源代码放在了Github: ...

  4. 分享:计算机图形学期末作业!!利用WebGL的第三方库three.js写一个简单的网页版“我的世界小游戏”

    这几天一直在忙着期末考试,所以一直没有更新我的博客,今天刚把我的期末作业完成了,心情澎湃,所以晚上不管怎么样,我也要写一篇博客纪念一下我上课都没有听,还是通过强大的度娘完成了我的作业的经历.(当然作业 ...

  5. 一步一步写一个简单通用的makefile(三)

    上一篇一步一步写一个简单通用的makefile(二) 里面的makefile 实现对通用的代码进行编译,这一章我将会对上一次的makefile 进行进一步的优化. 优化后的makefile: #Hel ...

  6. Java写一个简单学生管理系统

    其实作为一名Java的程序猿,无论你是初学也好,大神也罢,学生管理系统一直都是一个非常好的例子,初学者主要是用数组.List等等来写出一个简易的学生管理系统,二.牛逼一点的大神则用数据库+swing来 ...

  7. (2)自己写一个简单的servle容器

    自己写一个简单的servlet,能够跑一个简单的servlet,说明一下逻辑. 首先是写一个简单的servlet,这就关联到javax.servlet和javax.servlet.http这两个包的类 ...

  8. express 写一个简单的web app

    之前写过一个简单的web app, 能够完成注册登录,展示列表,CURD 但是版本好像旧了,今天想写一个简单的API 供移动端调用 1.下载最新的node https://nodejs.org/zh- ...

  9. 写一个简单的C词法分析器

    写一个简单的C词法分析器 在写本文过程中,我参考了<词法分析器的实现>中的一些内容.这里我们主要讨论写一个C语言的词法分析器. 一.关键字 首先,C语言中关键字有: auto.break. ...

随机推荐

  1. pthread——pthread_cleanup

    Pthread_cleanup用于注册线程清理函数,注册的清理函数将在线程被取消或者主动调用pthread_exit时被调用:     一个简单的示例: #include <pthread.h& ...

  2. 如何保证DBContext实例上下文唯一

    using System; using System.Collections.Generic; using System.Data.Entity; using System.Linq; using S ...

  3. 解剖SQLSERVER 第十三篇 Integers在行压缩和页压缩里的存储格式揭秘(译)

    解剖SQLSERVER 第十三篇    Integers在行压缩和页压缩里的存储格式揭秘(译) http://improve.dk/the-anatomy-of-row-amp-page-compre ...

  4. jQuery+ASP.NET MVC基于CORS实现带cookie的跨域ajax请求

    这是今天遇到的一个实际问题,在这篇随笔中记录一下解决方法. ASP.NET Web API提供了CORS支持,但ASP.NET MVC默认不支持,需要自己动手实现.可以写一个用于实现CORS的Acti ...

  5. DownloadManager

    在androi中,volley适合小文件的获取和大并发,如果支持大文件的下载可以用Android原生的DownloadManager.DownloadManager默认支持多线程下载.断点续传等. 基 ...

  6. java提高篇(六)-----使用序列化实现对象的拷贝

    我们知道在Java中存在这个接口Cloneable,实现该接口的类都会具备被拷贝的能力,同时拷贝是在内存中进行,在性能方面比我们直接通过new生成对象来的快,特别是在大对象的生成上,使得性能的提升非常 ...

  7. HBase Java简单示例

    Hbase采用Java实现,原生客户端也是Java实现,其他语言需要通过thritf接口服务间接访问Hbase的数据. Hbase作为大数据存储数据库,其写能力非常强,加上Hbase本身就脱胎于Had ...

  8. MongoDB官网驱动仓库封装

    定义IMongoRepositoryBase接口 public interface IMongoRepositoryBase     {         /// <summary>     ...

  9. 《OOC》笔记(1)——C语言const、static和extern的用法

    <OOC>笔记(1)——C语言const.static和extern的用法 C语言中const关键字用法不少,我只喜欢两种用法.一是用于修饰函数形参,二是用于修饰全局变量和局部变量. 用c ...

  10. CSDN CODE平台,中国版Github简要使用说明!(多图慎入)

    楼主说 以前一直看到别人在用github发布自己的代码,各种牛逼,各种羡慕嫉妒恨.最后终于受不了了,也去注册了一个,注册到没什么难度.然后就没有然后了... 完全看不懂,不知道怎么用. 一次偶然的机会 ...