前言
实现的功能很简单,就是通过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的更多相关文章
-
用Python写一个简单的Web框架
一.概述 二.从demo_app开始 三.WSGI中的application 四.区分URL 五.重构 1.正则匹配URL 2.DRY 3.抽象出框架 六.参考 一.概述 在Python中,WSGI( ...
-
如何写一个简单的http服务器
最近几天用C++写了一个简单的HTTP服务器,作为学习网络编程和Linux环境编程的练手项目,这篇文章记录我在写一个HTTP服务器过程中遇到的问题和学习到的知识. 服务器的源代码放在Github. H ...
-
如何写一个简单的shell
如何写一个简单的shell 看完<UNIX环境高级编程>后我就一直想写一个简单的shell来作为练习,因为有事断断续续的写了好几个月,如今写了差不多来总结一下. 源代码放在了Github: ...
-
分享:计算机图形学期末作业!!利用WebGL的第三方库three.js写一个简单的网页版“我的世界小游戏”
这几天一直在忙着期末考试,所以一直没有更新我的博客,今天刚把我的期末作业完成了,心情澎湃,所以晚上不管怎么样,我也要写一篇博客纪念一下我上课都没有听,还是通过强大的度娘完成了我的作业的经历.(当然作业 ...
-
一步一步写一个简单通用的makefile(三)
上一篇一步一步写一个简单通用的makefile(二) 里面的makefile 实现对通用的代码进行编译,这一章我将会对上一次的makefile 进行进一步的优化. 优化后的makefile: #Hel ...
-
Java写一个简单学生管理系统
其实作为一名Java的程序猿,无论你是初学也好,大神也罢,学生管理系统一直都是一个非常好的例子,初学者主要是用数组.List等等来写出一个简易的学生管理系统,二.牛逼一点的大神则用数据库+swing来 ...
-
(2)自己写一个简单的servle容器
自己写一个简单的servlet,能够跑一个简单的servlet,说明一下逻辑. 首先是写一个简单的servlet,这就关联到javax.servlet和javax.servlet.http这两个包的类 ...
-
express 写一个简单的web app
之前写过一个简单的web app, 能够完成注册登录,展示列表,CURD 但是版本好像旧了,今天想写一个简单的API 供移动端调用 1.下载最新的node https://nodejs.org/zh- ...
-
写一个简单的C词法分析器
写一个简单的C词法分析器 在写本文过程中,我参考了<词法分析器的实现>中的一些内容.这里我们主要讨论写一个C语言的词法分析器. 一.关键字 首先,C语言中关键字有: auto.break. ...
随机推荐
-
[课程设计]Scrum 3.4 多鱼点餐系统开发进度(下单详细信息页面&;会员信息页面)
Scrum 3.4 多鱼点餐系统开发进度(下单详细信息页面&会员信息页面) 1.团队名称:重案组 2.团队目标:长期经营,积累客户充分准备,伺机而行 3.团队口号:矢志不渝,追求完美 4.团队 ...
-
EasyUI ComboGrid的绑定,上下键和回车事件,输入条件查询
首先我们先看一下前台的绑定事件 1.先定义标签 <input id="cmbXm" type="text" style="width: 100p ...
-
vmware虚拟机各个版本的安装破解(附安装包和注册机)
VMware 是平时我们常用的虚拟机软件,特别是我们平时想试试其他的系统,比如说linux系统的时候但是又不想安装双系统,那么这个时候我们就可以试试这款虚拟软 件,如果你的电脑配置(主要是内存)够好的 ...
-
安装QT5.02
1.下载QT5 SDK 下载地址:http://qt-project.org/downloads. 2.安装QT5 下载完后,假设放在Download/,切换到该目录,输入:./qt-linux-op ...
-
阿里云CentOS下nodejs安装
1. 下载node包(包含npm) cd /usr/local/src/ wget https://nodejs.org/dist/v10.11.0/node-v10.11.0-linux-x64.t ...
-
Appium Demo
import unittestimport timefrom appium import webdriverfrom public import configimport os #类继承unittes ...
-
node版本控制之nvm
windows下安装nvm 用nvm-noinstall.zip安装 1.nvm是个啥?nvm是一个可以让你在同一台机器上安装和切换不同版本node的工具linux系统的github地址:点我如果你是 ...
-
Innodb存储引擎的缓存命中率计算
数据库的慢查询是我们在生产环境中必须经常检测的,如果慢查询语句过多,说明我们应该增加buffer_pool的大小了.常常检查的指标就是查看缓存命中率是否过低. mysql> show statu ...
-
【NOIP2013】货车运输 最大生成树+倍增
题目大意:给你一张n个点m条边的图,有q次询问,每次让你找出一条从x至y的路径,使得路径上经过的边的最小值最大,输出这个最大的最小值. 显然,经过的路径必然在这张图的最大生成树上. 我们求出这个图的最 ...
-
关于使用eclipse maven UpdateProject时报错,无法更新本地仓库的问题解决方案
在做项目中,需要从同事电脑中把Maven项目copy过来,但是copy的过程中只copy了代码,setting.xml文件和pom.xml,使用eclipse把项目导入,有红色的感叹号提示,由于我没有 ...