天下風雲出我輩
一入江湖歲月催

Ansible-playbook使用

playbook是Ansible的配置,部署和编排的语言。playbook是基于YAML语言格式配置。他们可以描述你所希望的远程系统强制执行的政策,或者在一般的IT流程的一组步骤;形象点的说就是:如果ansible的各模块(能实现各种功能)是车间里的各工具;playbook就是指导手册,目标远程主机就是库存和原料对象.

1、playbook的核心元素
hosts : playbook配置文件作用的主机
tasks: 任务列表
variables: 变量
templates:包含模板语法的文本文件
handlers :由特定条件触发的任务
roles :用于层次性、结构化地组织playbook。roles 能够根据层次型结构自动装载变量文件、tasks以及handlers等

2、playbook运行方式
ansible-playbook  –check    #只检测可能会发生的改变,但不真执行操作
ansible-playbook  –list-hosts    #列出运行任务的主机
ansible-playbook  –syntax-check playbook.yaml  #语法检测
ansible-playbook  -t TAGS_NAME playbook.yaml   # 只执行TAGS_NAME任务
ansible-playbook  playbook.yaml    #运行

3、通过playbook安装管理redis服务

[[email protected] playbooks]# cat redis_install.yml

---
- hosts: all                   #所有远程主机
  remote_user: root      #以远程主机上root用户执行
  tasks:                        #任务
  - name: install redis      #声明安装redis服务
    yum: name=redis state=present        #动作调用yum模块安装
  - name: copy config file     #复制同步配置文件到远程目标主机
    copy: src=/root/playbooks/redis.conf dest=/etc/redis.conf owner=redis
    notify: restart redis      #触发的动作
    tags: configfile         #任务标记名configfile
  - name: start redis      #任务之启动redis
    service: name=redis state=started    #动作调用sevice模块
  handlers:              #特定情况下,接收到其他任务的通知时被触发
    - name: restart redis
    service: name=redis state=restarted

语法检测:

[[email protected]]# ansible-playbook --syntax-check redis_install.yml

playbook: redis_install.yml
说明语法没有 问题

执行

[[email protected] ]# ansible-playbook redis_install.yml

PLAY [all] ******************************************************
TASK [Gathering Facts] ******************************************
ok: [172.16.3.152]
ok: [172.16.3.216]
TASK [install redis] ********************************************
ok: [172.16.3.216]
ok: [172.16.3.152]
TASK [copy config file] *****************************************
changed: [172.16.3.152]
changed: [172.16.3.216]
TASK [start redis] **********************************************
ok: [172.16.3.152]
ok: [172.16.3.216]
RUNNING HANDLER [restart redis] *********************************
changed: [172.16.3.152]
changed: [172.16.3.216]
PLAY RECAP ******************************************************
172.16.3.152               : ok=5    changed=2    unreachable=0    failed=0   
172.16.3.216               : ok=5    changed=2    unreachable=0    failed=0

指定执行标签的任务,这里打的标签是copy配置文件,然后又触发了重启服务。

[[email protected]]# ansible-playbook -t configfile redis_install.yml

PLAY [all] *************************************************************
TASK [Gathering Facts] *************************************************
ok: [172.16.3.216]
TASK [copy config file] ************************************************
changed: [172.16.3.216]
changed: [172.16.3.152]
RUNNING HANDLER [restart redis] ****************************************
changed: [172.16.3.152]
changed: [172.16.3.216]
PLAY RECAP *************************************************************
172.16.3.152 : ok=3 changed=2 unreachable=0 failed=0 
172.16.3.216 : ok=3 changed=2 unreachable=0 failed=0

 

4、Ansible-playbook高级用法

# – name: handlers用法

lineinfile:
     path:"{{ domain_conf }}"
     regexp:"^listen"
     line:"listen 8088;"
     backrefs:yes
     backup:yes
notify:reload nginx
handlers:
- name: reload nginx
service:name=nginx state=reloaded

#- name: when 用法

shell: netstat -ntlup|grep nginx
register: nginx_conf
shell: systemctl stop nginx
when: "'nginx' in nginx_conf.stdout"

# name: 交互式提示

vars_prompt:
  - name: share_user
  prompt: "What is your network username"
  - name: share_pass
  prompt: "What is your network password"
  private: yes

# block块分组

- name: install nginx
   block:
        - yum: name=nginx state=present
        - template: src=test.conf.j2 dest=/etc/nginx/conf.d/default.conf
        - service: name=nginx state=started enabled=yes
   when: ansible_os_family == 'RedHat'

#====================================================
#include引用——-restart_php.yml文件—————-

---
- hosts:phpserver
tasks:
  - name: restartPHP
    service: name=php-fpm state=restarted
#------------------文件引用----------------------------
---
- hosts: web
tasks:
  - name: test include yml
    shell: find / -name php | xargs rm -rf
- name: start php
  import_playbook: restartphp.yml

#=======================Roles==========================
template.yml

---
- hosts: all
 roles:
 - role: template
roles/
├── template
│   ├── tasks
│   │   ├── main.yml # - include: template.yml
│   │   └── template.yml #template: src=order.j2 dest=/etc/nginx/conf.d/{{ name_conf }}
│   ├── templates
│   │   └── order.j2 #模板内容
│   └── vars
│   └── main.yml #变量
└── template.yml #任务调度文件

#—————————-Ansible-galaxy———————————-

ansible-galaxy init,info,install,list,remove

 

赞(3) 打赏
未经允许不得转载:Anonym0x1 » Ansible-playbook使用

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏