博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ansible(2)
阅读量:2240 次
发布时间:2019-05-09

本文共 7795 字,大约阅读时间需要 25 分钟。

一、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=priorityenabled=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'                      # 安装wgetansible web -m yum -a 'name=python2-pip'               # 安装python2-pipansible web -m yum -a 'name=wget state=absent'         # 卸载软件包ansible web -m yum -a 'name="@Development Tools"'      # 安装包组,注意带“@”符号
2、pip模块

  回顾pip相关知识:

pip install 包名                       # 安装python包,如flaskpip freeze > requirements.txt         # 将python的环境打包到文件中pip install -r requirements.txt       # 安装文件中的包pip list                              # 查看所有的已安装成功的包

  查看ansible提供的pip模块的帮助信息:

[root@localhost ~]# ansible-doc -s pip   # 查看帮助信息,部分参数如下:chdirname                                     # 包名requirements                             # 指定文件,安装文件中所有的包virtualenv

  示例:

ansible web -m pip -a 'name=flask'           # 安装flask模块
3、service模块

  回顾linux关于查看进程和端口号、开启服务等相关知识:

ps -ef|grep nginx              # 查看nginx进程ss -tnlp                       # 查看端口信息systemctl start nginx           # centos7 设置开机自启动nginxservice nginx start              # centos6 设置开机自启动nginxsystemctl enabled nginx          # centos7 开机自启动nginxchkconfig 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'         # 启动nginxansible 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            # 用户登录后使用的shellsystem              # 创建一个系统用户uid                 # 用来指定用户的idstate              # 状态

  示例:

ansible db -m user -a 'name=wulaoshi uid=4000 home=/opt/wulaoshi groups=root shell=/sbin/nologin'                 # 创建一个用户,并指定用户的id,用户的家目录,用户的附加组,用户的shellansible 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             # 组的idname            # 组名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=alexsb11192.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中计算

 

转载于:https://www.cnblogs.com/li-li/p/10408089.html

你可能感兴趣的文章
Java集合详解4:一文读懂HashMap和HashTable的区别以及常见面试题
查看>>
Java集合详解5:深入理解LinkedHashMap和LRU缓存
查看>>
Java集合详解6:这次,从头到尾带你解读Java中的红黑树
查看>>
Java集合详解8:Java集合类细节精讲,细节决定成败
查看>>
Java并发指南1:并发基础与Java多线程
查看>>
Java并发指南2:深入理解Java内存模型JMM
查看>>
Java并发指南5:JMM中的final关键字解析
查看>>
Java并发指南6:Java内存模型JMM总结
查看>>
Java并发指南7:JUC的核心类AQS详解
查看>>
Java并发指南8:AQS中的公平锁与非公平锁,Condtion
查看>>
Java网络编程和NIO详解6:Linux epoll实现原理详解
查看>>
Java网络编程和NIO详解7:浅谈 Linux 中NIO Selector 的实现原理
查看>>
Java网络编程与NIO详解8:浅析mmap和Direct Buffer
查看>>
Java网络编程与NIO详解10:深度解读Tomcat中的NIO模型
查看>>
Java网络编程与NIO详解11:Tomcat中的Connector源码分析(NIO)
查看>>
深入理解JVM虚拟机1:JVM内存的结构与消失的永久代
查看>>
深入理解JVM虚拟机3:垃圾回收器详解
查看>>
深入理解JVM虚拟机4:Java class介绍与解析实践
查看>>
深入理解JVM虚拟机5:虚拟机字节码执行引擎
查看>>
深入理解JVM虚拟机6:深入理解JVM类加载机制
查看>>