Ansible之playbook剧本-2

简介: Ansible之playbook剧本

2.6 迭代

Ansible提供了很多种循环结构,一般都命名为with_items,作用等同于 loop 循环。


vim test4.yaml
- hosts: dbservers
  gather_facts: false
  tasks: 
    - name: create directories
      file:
        path: "{{item}}"
        state: directory
      with_items:          #等同于 loop:
        - /tmp/test1
        - /tmp/test2
    - name: add users
      user: name={{item.name}} state=present groups={{item.groups}}
      with_items:
        - name: test1
          groups: wheel
        - name: test2
          groups: root
          with_items:
        - {name:'test1', groups:'wheel'}
        - {name:'test2', groups:'root'}
ansible-playbook test3.yaml

2a8fdfa5dba648029459914a845c02a8.png1e509e43e59d496da658c2a4bcbf7d1d.png

2207e9fc69d14dcfbe5c430e14715e2a.png

f07b73c85c304812be263f7f0d7ff74f.png


2.7 Templates 模块

Jinja是基于Python的模板引擎。Template类是Jinja的一个重要组件,可以看作是一个编译过的模板文件,用来产生目标文本,传递Python的变量给模板去替换模板中的标记。


1.先准备一个以 .j2 为后缀的 template 模板文件,设置引用的变量

cp /etc/httpd/conf/httpd.conf /opt/httpd.conf.j2
vim /opt/httpd.conf.j2
Listen {{http_port}}        #42行,修改
ServerName {{server_name}}      #95行,修改
DocumentRoot "{{root_dir}}"          #119行,修改

a7a066897a554b9b8a77b00c4fada2fa.png

88a97b7504a9431596f197ee750c0fbd.png

20fa0de6825c461281e525a53c7f15a2.png

febc236f67484999b36fe5a8715e933c.png

2.修改主机清单文件,使用主机变量定义一个变量名相同,而值不同的变量

vim /etc/ansible/hosts       
[webservers]
192.168.147.106 http_port=192.168.147.106:80 server_name=www.zhangsan.com:80 root_dir=/etc/httpd/htdocs
[dbservers]
192.168.147.107 http_port=192.168.147.107:80 server_name=www.lisi.com:80 root_dir=/etc/httpd/htdocs

340e7b630abc45919338084e3e614494.png


3.编写 playbook

vim apache.yaml
---
- hosts: all
  remote_user: root
  vars:
    - package: httpd
    - service: httpd
  tasks:
    - name: install httpd package
      yum: name={{package}} state=latest
    - name: install configure file
      template: src=/opt/httpd.conf.j2 dest=/etc/httpd/conf/httpd.conf     #使用template模板
      notify:
        - restart httpd
    - name: create root dir
    file: path=/etc/httpd/htdocs state=directory
    - name: start httpd server
      service: name={{service}} enabled=true state=started
  handlers:
    - name: restart httpd
      service: name={{service}} state=restarted
ansible-playbook apache.yaml

93ee1ef2980149aaa0fbb85d3bc12b78.png

5f069c92bea14fc798a35114ae2dfa61.png

aca0bdd1d138440ea1fee80a6f8e8ac6.png


57ce659a61e54d8b8bca5a5cc722d77f.png


2.8 tags 模块

可以在一个 playbook 中为某个或某些任务定义“标签”,在执行此 playbook 时通过 ansible-playbook 命令使用 --tags 选项能实现仅运行指定的tasks。


playbook还提供了一个特殊的 tags 为 always 。作用就是当使用 always 当 tags 的 task 时,无论执行哪一个 tags 时,定义有 always 的tags 都会执行。


vim webhosts.yaml
- hosts: webservers
  remote_user: root
  tasks:
    - name: Copy hosts file
      copy: src=/etc/hosts dest=/opt/hosts
      tags:
      - only     #可自定义
    - name: touch file
      file: path=/opt/testhost state=touch
      tags:
    - always    #表示始终要运行的代码
ansible-playbook webhosts.yaml --tags="only"


295360e6c3ed4faeb79bf1c6a77f0da3.png

7ed4d0cbb9ba44a29ca357543c0c2666.png1f8b26c404104586be091b9195fd55d9.png



vim dbhosts.yaml
- hosts: dbservers
  remote_user: root
  tasks:
    - name: Copy hosts file
      copy: src=/etc/hosts dest=/opt/hosts
      tags:
        - only
    - name: touch file
      file: path=/opt/testhost state=touch
ansible-playbook dbhosts.yaml --tags="only"

a3383bf105d54130addebd35b59e6c77.png2a26ded925fd4ca1be323393de45e7db.png


b2741a7a102742f28db18303cb6a9de0.png


分别去两台被管理主机上去查看文件创建情况

d3f837073e4345d99fdea5814b75046e.png

669ea84067ab4333ad8cbfde95bc86ac.png


目录
相关文章
|
8月前
Ansible之playbook剧本-1
Ansible之playbook剧本
88 0
|
8月前
Ansible之playbook剧本-3
Ansible之playbook剧本
47 0
|
9月前
|
运维 关系型数据库 应用服务中间件
【运维知识进阶篇】Ansible自动化运维-PlayBook详解
【运维知识进阶篇】Ansible自动化运维-PlayBook详解
128 0
|
10月前
|
应用服务中间件 Linux 数据安全/隐私保护
ansible:playbook学习笔记
ansible:playbook学习笔记
98 0
|
11月前
|
Shell 网络安全 开发工具
|
12月前
|
运维 监控 应用服务中间件
自动化运维工具-Ansible的Playbook的使用
自动化运维工具-Ansible的Playbook的使用
170 0
|
应用服务中间件 nginx
Ansible之Playbook(二)
Ansible之Playbook(二)
79 0
|
Shell Linux Python
Ansible之Playbook(一)
Ansible之Playbook
90 0
Ansible之Playbook(一)
|
7月前
|
运维 Shell Linux
Ansible自动化运维工具之常用模块使用实战(5)
Ansible自动化运维工具之常用模块使用实战(5)
|
9月前
|
网络协议 网络安全
Ansible模块介绍——防火墙模块
Ansible模块介绍——防火墙模块
145 0