Ansible 日常维护和使用知识( 三 )


安装软件包:
ansibleall-myum-a'name=nginxstate=installed’
卸载软件包:
ansibleall-myum-a'name=nginxstate=removed'
临时启用localyum源安装最新版软件包:
ansibleall-myum-a'name=nginxstate=latestenablerepo=local'
用户管理
在AnsibleAd-Hoc中 , 可以通过User模块帮助我们管理远程主机上的用户 , 比如创建用户、修改用户、删除用户、为用户创建密钥对等操作 。 该模块的几个常用参数如下:

Ansible 日常维护和使用知识
文章图片
增加用户、组和密码:
ansibleip-mgroup-a"name=testg”
ansibleip-muser-a"name=testgroup=testgpassword=123456home=/home/test”
删除用户和用户主目录:
ansibleip-muser-a"name=teststate=absentremove=yes"
3、AnsiblePlaybook使用
在AnsibleAd-Hoc中 , 可以通过Yum模块实现在远程主机上通过Yum源管理软件包 , 包括安装、升级、降级、删除和列出软件包等 。 该模块的几个常用参数如下:
我们在使用Ansible时 , 绝大部分时间将花费在编写Playbook上 , Playbook是一个Ansible术语 , 指的是用于配置管理的脚本 。 Ansible的Playbook是使用YAML语法编写的 。 YAML是一种类似于Json的文件格式 , 不过YAML更适合人来读写 。 我们在开始编写Playbook时 , 需要对YAML的语法有一定的了解 , 否则将经常碰到语法错误 。 下面首先通过一个安装和配置ntpd服务的Playbook案例来介绍:

Ansible 日常维护和使用知识
文章图片

Ansible 日常维护和使用知识
文章图片
第一行仅表示该文件为YAML格式文件 , 非必须 。
第二行定义了该Playbook所针对的主机 , all表示所有 , 也可以填写Inventory文件中的IP地址或者主机组名称 。
第三行表示下面开始定义Task任务 。
第四、五行定义了一个具体Task任务(通过Yum安装ntpd服务) , 包含任务名称和执行动作 , 其中任务名称为非必须 , 可以直接定义执行动作 。
第六、七、八、九行定义了另一个具体Task任务(同步ntpd配置文件模板) , 并更改文件的属主、属组和文件权限 。 notify和下面的handlers为配对使用 , 当ntpd配置文件模板同步至远端主机后 , 文件的MD5值将发生变化 , 触发restartntpdservice这个handler 。
第十、十一、十二行定义了上述handler的具体内容 , 包括名称和执行动作 , 也就是利用service模块来重启ntpd服务 。
编制好了Playbook , 我们需要使用--syntax-check参数来对该脚本进行语法检查:
ansible-playbookntpd.yaml--syntax-check
playbook:ntpd.yaml
语法检测过后 , 可以用--list-task参数来查看该Playbook中的所有Task:

Ansible 日常维护和使用知识
文章图片
确认无误后 , 开始使用命令运行名为ntpd.yaml的Playbook:
ansible-playbookntpd.yaml
后续如果我们的ntpd.conf.j2配置模板需要变更 , 并需要批量分发下去 , 我们可以指定copyntp.conf这个Task , 只运行该Task:
ansible-playbookntpd.yaml--start-at-task=’copyntp.conf’
除了上述参数之外 , ansible-playbook还有几个常用的参数:
Ansible 日常维护和使用知识】--step同一时间只执行一个Task , 每个Task执行前都会提示确认一遍 。
--tags=TAGS当Play和Task的Tag为该参数指定的值时才执行 , 多个Tag以逗号分隔 。
--skip-tags=SKIP_TAGS当Play和Task的Tag不匹配该参数指定的值时才执行 。
根据前面的案例 , 我们对Playbook的大体写法和用法有了一个大致的认识 , 下面重点介绍几个Play-book常用的使用要点:
Playbook的组成一个Playbook包括一个或多个Play 。 一个Play由Host的无序集合与Task的有序列表组成 。 每一个Task仅由一个模块构成 。 见下图所示:

Ansible 日常维护和使用知识
文章图片
TasksList和ActionPlay的主体部分是Task列表 , Task列表中的各任务按次序逐个在Hosts中指定的主机上执行 , 即在所有主机上完成第一个任务后再开始第二个任务 。 在运行Playbook时(从上到下执行) , 如果一个Host执行Task失败 , 整个Task都会回滚 , 我们需要修正Playbook中的错误 , 然后重新执行即可 。 Task的目的是使用指定的参数执行模块 , 而在模块参数中可以使用变量 , 模块执行时幂等等 , 这意味着多次执行是安全的 , 因为其结果一致 。
另外 , 按照规范写法 , 每一个Task必须有一个名称Name , 虽然这不是必须的 , 但这样在运行Playbook时 , 从其输出的任务执行信息中可以很好的辨别出是属于哪一个Task 。 如果没有定义Name , Action的值将会用作输出信息中标记特定的Task , 结果不好分辨 。 定义一个Task , 常见的格式为“module:options” , 例如:“yum:name=httpd” 。 值得注意的是 , Ansible的自带模块中 , Command模块和Shell模块无需使用key=value格式 , 直接编写要执行的命令即可 。