ansible写一个简单的playbook
前言
实现的功能很简单,就是通过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. ...
随机推荐
- phoenix 开发API系列 目录
phoenix 开发API系列(一)创建简单的http api phoenix 开发API系列(二)phoenix 各类 api 实现方式 phoenix 开发API系列(三)phoenix api ...
- EmberJs之数组绑定@each&[]
写在前面 好长时间没有写博客了,昨天花了些时间又整理了下之前发布过的<Ember.js之computed Property>文章,并创建了一个测试代码库,花了些时间,希望能使用测试代码的方 ...
- 【WEB】Tomcat基础使用知识
由于当前项目性质原因,从开始到现在使用的WEB服务器都是WAS,而Tomcat的基础知识也慢慢地被遗忘.由于种种原因,让我参与到了另外一个全新的项目,使用的是Tomcat6.X,所以复习是必须的,而写 ...
- 开发者必知的几款App快速开发工具
“我有一个好创意,就差一个CTO……” ,这是今年炒的比较火的一句话. “原生APP开发难度大,周期长,成本高,还没上线市场已经被占领了.这个有没有解决方案?” “APP版本迭代更新,都是企业的一道难 ...
- 在.net中使用aquiles访问Cassandra(四)
数据的持久化我们都已经完成了,和所有应有程序一样,最重要的是要向用户展示数据.下面我们就推出这部分代码,读取任意行任何列: public IList<TRowResult> Execute ...
- Winform文件下载之WebClient
最近升级了公司内部使用的一个下载小工具,主要提升了下面几点: 1. 在一些分公司的局域网中,连接不上外网 2. 服务器上的文件更新后,下载到的还是更新前的文件 3. 没有下载进度提示 4. 不能终止下 ...
- C-Lodop 非典型应用
Lodop是什么? 有人说她是报表打印工具,因为那个add_print_table语句把报表统计的那点事弄了个明明白白: 有人说她是条码打印工具,因为用了她再也不用后台生成条码图片了,前端一行指令就动 ...
- fildder 使用方法汇总
作为网络开发人员,怎能不使用一些抓包工具呢?fildder是个不错的选择. 不过,一般情况下,我们往往使用浏览器自带的控制台的[网络]选项就可以达到查看数据的通信情况了,当然,一些浏览器不容易捕捉的事 ...
- Mysql 函数分类
比较重要的 1 REVERSE(s) 将字符串s的顺序反过来 2 TRIM(s) 去掉字符串s开始和结尾处的空格 一.数学函数 数学函数主要用于处理数字,包括整型.浮点数等. ...
- Android Studio 使用技巧
1.导入Android Studio 工程的一些技巧 因为Gradle版本的问题,我们在使用AS导入工程的时候,经常会碰到本地没有该项目的Gradle版本,这时候AS就会去下载这个版本的Gradle, ...