ansible连载之playbook使用

ansible-playbook的使用

1. ansible playbook介绍:

简单的说就是定义一个配置文件,文件中写入你需要安装的服务,配置文件,变量等信息,使他们可以按照事先定义好的机制完成一个任务。
ansible Playbook使用YAML语法结构,所以配置阅读起来都比较简单。

2. ansible playbook组成结构:

  • target section: 定义将要执行playbook的远程主机组
  • variable section: 定义playbook运行时需要使用的变量
  • task section: 定义将要在远程主机上执行的任务列表
  • handler section: 定义task执行完成以后需要调用的任务

3. ansible playbook主要参数:

3.1. Target section常用参数:

  • hosts:定义远程主机组
  • remote_user:执行该任务的用户
  • sudo: 设置为yes的时候,执行任务的时候使用root权限
  • sudo_user 如果你设置用户为 admin ,那么你执行的时候会使用 admin 用户的权限
  • connection 通过什么方式连接到远程主机,默认是ssh
  • gather_facks 是否启用在远程主机执行setup模块,默认是会执行的,可用同setup模块获取远程主机的信息,在定义变量的时候使用

3.2 Variabler section常用参数:

  • vars: 定义格式 变量名:变量值
  • vars_files: 指定变量文件
  • vars_prompt: 用户交互模式自定义变量
  • setup: 模块取远程主机的值

3.3 Task section常用参数:

  • name:输出到屏幕的信息
  • action:定义执行的动作调用ansible的模块例如:yum name=http state=installed就是安装apache服务
  • copy:复制本地文件到远程主机
  • template:复制.j2格式的变量文件到远程主机,并且复制之后的文件替换变量的值
  • service :定义服务的状态

3.4 handler section常用参数:

可以理解为处理器,主要为 task section 进行调用,为任务列表操作完毕后的后续动作,当关注的资源发生变化时执行的操作

4. ansible playbook测试案例:

4.1 案例1: 安装httpd服务

vim httpd_v1.yaml
- hosts: websrvs
  remote_user: root
  tasks:
  - name: install httpd service
    yum: name=httpd state=present
  - name: copy httpd conf
    copy: src=/etc/httpd/conf/httpd.conf dest=/etc/httpd/conf/httpd.conf
  - name: start httpd service
    service: name=httpd state=started
ansible-playbook --syntax-check httpd_v1.yaml #检查代码语法
ansible-playbook httpd_v1.yaml

案例1主要是安装apache httpd web服务器,通过yum模块安装,copy模块将配置文件拷贝到远程主机,并且启动服务

4.2 案例2: 配置文件更新后自动重启httpd服务:

vim httpd_v2.yaml
- hosts: websrvs
  remote_user: root
  tasks:
  - name: install httpd service
    yum: name=httpd state=present
  - name: copy httpd conf
    copy: src=/etc/httpd/conf/httpd.conf dest=/etc/httpd/conf/httpd.conf
    tags: config
    notify:
      - restart httpd service
  - name: start httpd service
    service: name=httpd state=started
  handlers:
  - name: restart httpd service
    service: name=httpd state=restarted
ansible-playbook --syntax-check httpd_v2.yaml
ansible-playbook -t config httpd_v2.yaml

案例2使用了handlers模块,只要httpd.conf配置文件更新了,比如我们更改了httpd的暴露端口,默认是80端口,现在我更改成8080,那么就可以触发服务重启handlers. 同时针对复制配置文件专门打了tag,执行ansible-playbook -t config httpd_v2.yaml 可以实现只执行copy文件的这一个tasks;

4.3 案例3: 通过变量的方式修改配置文件的值:

vim httpd_v3.yaml
- hosts: websrvs
  remote_user: root
  vars:
    http_port: "8899"
    src_httpd_dir: /etc/httpd/conf
    dst_httpd_dir: "/etc/httpd/conf"
  tasks:
  - name: install httpd service
    yum: name=httpd state=present
  - name: copy httpd conf
    template: src="{{src_httpd_dir}}/httpd.conf.j2" dest="{{dst_httpd_dir}}/httpd.conf"
    notify:
      - restart httpd service
  - name: start httpd service
    service: name=httpd state=started
  handlers:
  - name: restart httpd service
    service: name=httpd state=restarted
cp -r /etc/httpd/conf/httpd.conf /etc/httpd/conf/httpd.conf.j2 #定义httpd的模板配置文件
vim /etc/httpd/conf/httpd.conf.j2  #修改模板配置文件,主要修改监听的端口和主机名两个地方
Listen {{ansible_default_ipv4['address']}}:{{http_port}}
ServerName {{ansible_nodename}}:{{http_port}}

此处用到了template模块,可以拷贝含有变量的文件到目标机器,这里实际上用到的是python的jinja2语法。源机器的配置文件里面用到了自动以变量httpd_port,也用到了setup 中的 facts,facts的查看可以使用如下命令:

[root@rainbondmanager playbooks]# ansible websrvs -m setup -a "filter=ansible_all_ipv4_addresses"
10.83.32.130 | SUCCESS => {
    "ansible_facts": {
        "ansible_all_ipv4_addresses": [
            "10.83.32.130"
        ],
        "discovered_interpreter_python": "/usr/bin/python"
    },
    "changed": false
}
10.83.32.131 | SUCCESS => {
    "ansible_facts": {
        "ansible_all_ipv4_addresses": [
            "10.83.32.131"
        ],
        "discovered_interpreter_python": "/usr/bin/python"
    },
    "changed": false
}

如果不使用filter过滤的话,会把所有的facts查询出来,这些都是系统默认的,ansible默认可以获取到的远程主机信息,包括cpu、内存、磁盘、网卡、ip等信息;
今天的博文就写到这里了,下期还会继续带大家一起探讨和学习ansible的使用。最近一个人生活,老婆和小孩都回老家了,所以有了更多的时间来看书、学习、运动,还有就是写博文了。感谢大家一直以来的持续关注,最近我准备再出一系列专门针对新手的linux运维专栏,主要从最简单的LNMP安装 LAMP安装 tomcat安装 MYSQL安装 linux基础命令等入手。

博文的更详细内容请关注我的个人微信公众号 “云时代IT运维”,本公众号旨在共享互联网运维新技术,新趋势; 包括IT运维行业的咨询,运维技术文档分享。重点关注devops、jenkins、zabbix监控、kubernetes、ELK、各种中间件的使用,比如redis、MQ等;shell和python等运维编程语言;本人从事IT运维相关的工作有十多年。2008年开始专职从事Linux/Unix系统运维工作;对运维相关技术有一定程度的理解。本公众号所有博文均是我的实际工作经验总结,基本都是原创博文。我很乐意将我积累的经验、心得、技术与大家分享交流!希望和大家在IT运维职业道路上一起成长和进步;

ansible连载之playbook使用

猜你喜欢

转载自blog.51cto.com/zgui2000/2424222