ansible(2)
一、ansible模块(yum、pip、service、conr、user、group)
上篇中我们已经学了ansible的几个模块,接下来再来学习几个,那么你是否知道ansible一共有多少模块呢?可以用以下命令查看:
[root@localhost ~]# ansible-doc -l|wc -l # 统计ansible有多少模块
2080
1、yum模块
请先自行回顾以下yum是什么?yum和rpm(redhat package manager)的区别是什么?
[epel]
name=Extra Packages for Enterprise Linux 7 - $basearch # 名字
baseurl=http://mirrors.aliyun.com/epel/7/$basearch # rpm源的地址,可以写http,https,ftp,Samba,file:
failovermethod=priority
enabled=1 # 是否开启,1代表开启,0表示关闭
gpgcheck=0 # 是否校验签名,1代表校验,0表示不校验
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7
yum源配置文件中部分内容
回顾yum相关知识:
yum list # 查看所有已经安装和可以安装的程序包
yum list|grep pip # 查看 pip 相关程序包
yum grouplist # 查看包组信息,包含已经安装和未安装的包组信息
yum groupinstall "包组名" # 安装包组
rpm -q 包名 # 查看是否已经安装了某包,如wget
查看ansible提供的yum模块的帮助信息:
[root@localhost ~]# ansible-doc -s yum # 查看帮助信息,部分参数如下
disablerepo # 禁用源
enablerepo # 启用源
name # 包名
state # Whether to install (`present' or `installed', `latest'), or remove (`absent' or `removed') a package.
示例:
ansible web -m yum -a 'name=wget' # 安装wget
ansible web -m yum -a 'name=python2-pip' # 安装python2-pip
ansible web -m yum -a 'name=wget state=absent' # 卸载软件包
ansible web -m yum -a 'name="@Development Tools"' # 安装包组,注意带“@”符号
2、pip模块
回顾pip相关知识:
pip install 包名 # 安装python包,如flask
pip freeze > requirements.txt # 将python的环境打包到文件中
pip install -r requirements.txt # 安装文件中的包
pip list # 查看所有的已安装成功的包
查看ansible提供的pip模块的帮助信息:
[root@localhost ~]# ansible-doc -s pip # 查看帮助信息,部分参数如下:
chdir
name # 包名
requirements # 指定文件,安装文件中所有的包
virtualenv
示例:
ansible web -m pip -a 'name=flask' # 安装flask模块
3、service模块
回顾linux关于查看进程和端口号、开启服务等相关知识:
ps -ef|grep nginx # 查看nginx进程
ss -tnlp # 查看端口信息
systemctl start nginx # centos7 设置开机自启动nginx
service nginx start # centos6 设置开机自启动nginx
systemctl enabled nginx # centos7 开机自启动nginx
chkconfig nginx on # centos6开机自启动nginx
查看ansible提供的service模块帮助文档:
[root@localhost ~]# ansible-doc -s service # 查看service模块帮助文档,部分参数如下:
name # 服务名
state # 状态,有started,stopped,restarted,reloaded
enabled # 设置开机自启动
示例:
ansible web -m service -a 'name=nginx state=started' # 启动nginx
ansible web -m service -a 'name=nginx state=stopped' # 关闭nginx
4、cron模块
回顾linux定时任务相关知识:
* * * * * job
分 时 日 月 周 任务
0 */2 * * * job # 每隔两个小时
0 12,13 * * * job # 12点和13点
0 12-17 * * * job # 12点到17点
0 12-17/2 * * 1,3,6,0 # 周1,周3,周6,周7 的 12点到17点每隔两个小时,注意:0和7都代表周日
crontab -e # 编辑计划任务,进入编辑模式
crontab -l # 查看计划任务
crontab -r # 删除计划任务
查看ansible的cron模块帮助文档:
[root@localhost ~]# ansible-doc -s cron # 查看cron模块,部分参数如下:
day # 天
disabled # 禁用
hour # 小时
job # 任务
minute # 分钟
month # 月
name # 任务名字
weekday # 周
示例:
ansible db -m cron -a 'minute=26 job="touch /tmp/xzmly.txt" name=touchfile' # 新建一个计划任务
ansible db -m cron -a 'name=touchfile state=absent' # 删除一个计划任务
ansible db -m cron -a 'minute=26 job="touch /tmp/xzmly.txt" name=touchfile disabled=yes' # 禁用计划任务,以#开始表示禁用
5、user模块
回顾linux用户和用户组的相关知识:
用户:
管理员 root 0
普通用户
系统用户 不能登录 1-999 centos7 1-499 centos6
登录用户 可以登录 1000-65535 centos7 500-65535 centos6
用户组:
管理员组 root 0
系统用户组 1-999 centos7 1-499 centos6
登录用户组 1000-65535 centos7 500-65535 centos6 -d 指定用户的家目录
-g 指定用户的组
-G 执行用户的附加组
-s 指定登录后使用的shell
-r 创建一个系统组
useradd -r wusir # 创建系统用户,从999开始倒序
useradd -s /sbin/nologin alexsb # 创建的是普通用户,从1000开始升序
useradd -d /opt/alexsb2 alexsb2 # 创建用户时指定用户的家目录
useradd -u 3000 alexsb6 # 创建用户并指定用户的uid
userdel alex # 删除用户
userdel -r alexsb2 # 删除用户并删除用户的家目录 groupadd yuchao # 创建用户组
groupdel yuchao # 删除用户组
查看ansible的user模块帮助文档:
[root@localhost ~]# ansible-doc -s user # 查看user模块的帮助文档,部分参数如下:
group # 组
groups # 附加组
home # 家目录
name # 用户名
password # 密码
remove # This only affects `state=absent', it attempts to remove directories associated with. 即仅当state=absent时有影响,删除用户的同时删除用户家目录
shell # 用户登录后使用的shell
system # 创建一个系统用户
uid # 用来指定用户的id
state # 状态
示例:
ansible db -m user -a 'name=wulaoshi uid=4000 home=/opt/wulaoshi groups=root shell=/sbin/nologin' # 创建一个用户,并指定用户的id,用户的家目录,用户的附加组,用户的shell
ansible db -m user -a 'name=wulaoshi state=absent' # 删除用户但是不删除用户的家目录
ansible db -m user -a 'name=wulaoshi3 state=absent remove=yes' # 删除用户并删除用户的家目录
6、group模块
查看ansible的group模块帮助文档:
[root@localhost ~]# ansible-doc -s group # 查看group的帮助文档,部分参数如下:
gid # 组的id
name # 组名
system # 系统组
state # 状态
示例:
ansible db -m group -a 'name=wulaoshi system=yes' # 创建系统组
ansible db -m group -a 'name=wulaoshi state=absent' # 删除组
二、ansible剧本
首先用我们现有的ansible知识解决如下需求:
管控机通过ansible为web组的被管控机作如下操作:
创建一个用户组alex10
创建一个用户wusir10
把/etc/fstab文件复制到远程主机(即被管控机)上/tmp/f
安装nginx,并启动,设置开机自启动
ansible web -m group -a 'name=alex10'
ansible web -m user -a 'name=wusir10'
ansible web -m copy -a 'src=/etc/fstab dest=/tmp/f'
ansible web -m yum -a 'name=nginx'
ansible web -m service -a 'name=nginx enabled=yes'
解决方法
思考:观察上面的解决方法,你有没有发现什么问题?如何解决?
没错,就是有很多重复的部分,而且想要再执行一遍就要再运行一遍命令!那么我们是不是可以写一个脚本来一次性执行,且想要什么时候执行就什么时候执行,问题又来了,如何写?用什么语言写?答案就是用yaml语言来写!
1、yaml
我们见过的用来写配置文件的语言有xml,还有uwsgi的配置文件后缀是.ini,而接下来要学习使用的一种编程语言是yaml,它可以用来写配置文件。语法格式如下:
字典: key: value
列表: [] -
后缀名:.yaml 或者 .yml
注意:它的语法格式非常严格,冒号后边必须有空格,等号后边一定不能有空格,等等,自己去尝试一下!
2、ansible-playbook命令格式
[root@localhost ~]# ansible-playbook -h # 查看ansible-playbook的命令格式,ansible-playbook [options] playbook.yml [playbook2 ...] ,部分参数如下:
-C, --check # 检查,白跑,干跑
-f FORKS, --forks=FORKS # 用来做并发
--list-hosts # 列出主机列表
--syntax-check # 语法检查
示例:使用yaml编写配置文件的方式解决上面问题
[root@localhost ~]# mkdir yaml # 创建yaml目录,并进入该目录
[root@localhost yaml]# vi p1.yml # 创建配置文件p1.yml,写入如下内容,严格安装下面格式
- hosts: web
tasks:
- name: creategroup
group: name=sb
- name: createuser
user: name=alex
[root@localhost yaml]# ansible-playbook p1.yml
执行顺序:从上往下
特性:幂等性,即不管执行多少遍,结果都是一样的
3、传参
[root@localhost yaml]# vi p2.yml # 创建配置文件p2.yml,写入如下内容,注意有参数
- hosts: db
tasks:
- name: create{{ user }}
user: name={{ user }}
分析:上面的配置文件中含有参数,那么我们该如何传参?有以下五种方法:
第一种:命令的方式,即使用参数 "-e"
[root@localhost yaml]# ansible-playbook -e 'user=alexsb10' p2.yml
第二种:yml文件中vars的方式
- hosts: db
vars:
- user: alexsb14
tasks:
- name: create{{ user }}
user: name={{ user}}
第三种:ansible的hosts文件之一
[db]
192.168.107.132 user=alexsb11
192.168.107.133 user=alexsb12
第四种:ansible的hosts文件之二
[db:vars] # 表示组的参数
user=alexsb13
第五种:yml文件中注册的方式
- hosts: db
tasks:
- name: sum
shell: echo 7+8|bc
register: user
- name: createuser
user: name={{user.stdout}}
总结:传参方式之间有优先级:-e > playbook vars > hosts文件
4、补充:linux中计算
ansible(2)的更多相关文章
- 进击的 Ansible(二):如何快速搞定生产环境 Ansible 项目布局?
Tips:与前文 <进击的 Ansible(一):Ansible 快速入门> 一样,本文使用的 Ansible 版本 2.5.4,项目演示环境 MacOS.由于 Ansible 项目开发活 ...
- 自动化运维工之Ansible(1)
1.1 ansible简介 1.1.1 .Ansible软件介绍: Ansible提供一种最简单的方式用于发布.管理和编排计算机系统的工具,可在数分钟内搞定.Ansible由Python语言开发, 默 ...
- ansible(3)
一.setup模块 ansible的setup模块主要用来收集信息,查看参数: [root@localhost ~]# ansible-doc -s setup # 查看参数,部分参数如下: filt ...
- ansible(1)
一.初识ansible 1.准备工作: 准备四台干净的虚拟机,如下: 192.168.133.129(主控节点,下面三个为被控节点) 192.168.133.130 192.168.133.131 1 ...
- Ansible(1)- 简单介绍
什么是 Ansible 开源部署工具,也是一个自动化运维工具 开发语言:Python Ansible 的特性 模块化部署管理:调用特定的模块,完成特定任务 三个关键模块:Paramiko(python ...
- 学习ansible(一)
1.介绍 1 ansible基于Python开发的自动化运维工具 2 ansible基于ssh协议实现远程管理的工具,没有客户端 3 ansible软件可以实现多种批量管理操作 2.环境 主机 IP ...
- ansible(一)
Ansible简介 Ansible:Ansible的核心程序Host Lnventory:记录了每一个由Ansible管理的主机信息,信息包括ssh端口,root帐号密码,ip地址等等.可以通过fil ...
- ansible(二)
软件相关模块 yum rpm和yum的区别 rpm:redhat package manager yum可以解决依赖关系 yum源配置 [epel] name=Extra Packages - $ba ...
- Ansible (一)
epel rpm -ivh http://mirrors.ustc.edu.cn/fedora/epel/6/x86_64/epel-release-6-8.noarch.rpm yum -y ins ...
随机推荐
- FragmentTabHost的应用
原创)FragmentTabHost的应用(fragment学习系列文章之二) 时间 2014-04-14 00:11:46 CSDN博客 原文 http://blog.csdn.net/flyi ...
- c#开源项目[转]
一.AOP框架 Encase 是C#编写开发的为.NET平台提供的AOP框架.Encase 独特的提供了把方面(aspects)部署到运行时代码,而其它AOP框架依赖配置文件的方式.这种部署方面(as ...
- 应有dataGridView控件
using System.Data.SqlClient; namespace UseDataGridView { public partial class Form1 : Form { public ...
- windows下端口占用解决方法-查看和杀死占用端口进程
在Windows下启动程序时有时会遇到端口被占用的情况,由于一个端口同时只能运行一个进程,所以要想启动新的程序就要先把占用该端口的进程给kill掉,具体的命令分为以下三步, 以杀死占用了80端口的进程 ...
- 隐马尔科夫模型(hidden Markov model, HMM)
- 用newInstance与用new是区别的
用newInstance与用new是区别的,区别在于创建对象的方式不一样,前者是使用类加载机制,那么为什么会有两种创建对象方式?这个就要从可伸缩.可扩展,可重用等软件思想上解释了.Java中工厂模式经 ...
- 【BZOJ】1053: [HAOI2007]反素数ant(贪心+dfs)
http://www.lydsy.com/JudgeOnline/problem.php?id=1053 约数个数等于分解出的质因数的(指数+1)的乘积这个就不用说了吧... 然后好神的题在于贪心.. ...
- 探索PowerShell----函数
http://marui.blog.51cto.com/1034148/294775/
- 分页技巧_改进JSP页面中的公共分页代码_实现分页时可以有自定义的过滤与排序条件
分页技巧__改进JSP页面中的公共分页代码 自定义过滤条件问题 只有一个url地址不一样写了很多行代码 public>>pageView.jspf添加 分页技巧__实现分页时可以有自定义的 ...
- Struts2_day03--课程安排_OGNL概述入门_什么是值栈_获取值栈对象_值栈内部结构
Struts2_day03 上节内容 今天内容 OGNL概述 OGNL入门案例 什么是值栈 获取值栈对象 值栈内部结构 向值栈放数据 向值栈放对象 向值栈放list集合 从值栈获取数据 获取字符串 获 ...