ansible执行任务的两种模式

ad-hoc模式: ad-hoc 模式(点对点模式),ad-hoc 命令是一种可以快速输入的命令,而且不需要保存起来的命令。就相当于 bash 中的一句 shell即上一章讲解的模式为ad-hoc.playbook模式:被称为剧本模式,playbook 通过多个 tasks 集合完成一类功能,如 Web 服务的安装部署、数据库服务器的批量备份等。可以简单地把 playbook 理解为通过组合多条 ad-hoc 操作的配置文件。

ansible 多行和单行 ansible有哪些执行模式_tomcat


如图所示的流程

playbook特点

1.0易度的编排语言-YAML
2.0适合配置管理和应用部署
3.0非常适合部署复杂的工作

开始实战

systemctl stop firewalld.service 
systemctl disable firewalld.service
setenforce  0
sed -i  's/SELINUX=enforcing/SELINUX=disabled/g'  /etc/selinux/config
1.0编写一个nginx部署yml文件,并用ansible部署到web组,并测试结果
1.1 编写nginx文件

mkdir ansible-nginx &&cd ansible-nginx
cat nginx.yml

---
- hosts: web   #指定标签组
  vars:
    hello: Ansible  #定义变量

  tasks:
  - name: "配置nginx源"
    yum_repository:
      name: nginx
      description: nginx repo
      baseurl: http://nginx.org/packages/centos/7/$basearch/
      gpgcheck: no
      enabled: 1
  - name: "安装nginx"
    yum:
      name: nginx
      state: latest
  - name: "编写虚拟主机的配置文件"
    copy:
      src: ./site.conf
      dest: /etc/nginx/conf.d/site.conf
  - name: "创建虚拟主机目录"
    file:
      dest: /var/www/html
      state: directory
  - name: "启动nginx"
    service:
      name: nginx
      state: started
  - name:  "测试nginx页面"
    shell: echo "hello  {{hello}}" > /var/www/html/index.html
    #引用变量{{}}表示

#测试nginx.yml文件是否有问题

ansible-playbook  nginx.yml  --syntax-check   #测试语法

ansible 多行和单行 ansible有哪些执行模式_ansible 多行和单行_02

1.12 编写虚拟主机配置文件,注意同级目录
cat site.conf 
server {
    listen       88;
    server_name  www.baidu.com;
    location / {
        root   /var/www/html;
        index  index.html index.htm;
    }
}
1.2 开始用ansible将nginx部署到web组
ansible-playbook  nginx.yml

ansible 多行和单行 ansible有哪些执行模式_html_03


刚才编写的六个任务都在ansible主机上执行成功了,测试结果也都ok

ansible 多行和单行 ansible有哪些执行模式_tomcat_04

1.3用handlers对yml文件实现任务控制,不改变的文件不执行操作
cat test.conf 
server {
    listen       80;
    server_name  www.test.com;
    location / {
        root   /var/www/html;
        index  index.html index.htm;
    }
}

#curl 192.168.1.21:80 -H “Host:www.test.com” 测试
1.31 默认配置
cat ng.yml

---
- hosts: web    #指定主机组
  gather_facts: no    #不收集目标主机的信息
  remote_user: root   #指定用户
 
  tasks:
  - name: copy nginx  config file   #拷贝nginx配置文件
    copy:
      src:  test.conf
      dest: /etc/nginx/conf.d
  - name: restart nginx
    service: name=nginx  state=reloaded   #重启nginx

ansible 多行和单行 ansible有哪些执行模式_tomcat_05


1.32 增加handlers配置

cat ng.yml ca’t

---
- hosts: web    #指定主机组
  gather_facts: no    #不收集目标主机的信息
  remote_user: root   #指定用户
 
  tasks:
  - name: copy nginx  config file   #拷贝nginx配置文件
    copy:
      src:  test.conf
      dest: /etc/nginx/conf.d
    notify: restart nginx     #此任务执行才会执行“restart nginx”命名的任务
  handlers:  
  - name: restart nginx
    service: name=nginx  state=reloaded   #重启nginx
ansible-playbook  ng.yml

ansible 多行和单行 ansible有哪些执行模式_html_06


绿色表示没有执行,黄色表示执行成功,说明handlers实现了tasks任务的控制,不执行上一个任务,下一个任务可以控制不执行

1.4 tags给每个任务打标签,打完标签后可以选择指定过滤的指定的任务执行或者不执行

ansible 多行和单行 ansible有哪些执行模式_tomcat_07


#单独执行这两个任务

ansible-playbook  nginx.yml  --tags "install,echo"

ansible 多行和单行 ansible有哪些执行模式_tomcat_08


#过滤这两个任务,执行剩下的任务

ansible-playbook nginx.yml --skip-tags “install,echo”

ansible 多行和单行 ansible有哪些执行模式_nginx_09

1.5 用debug检查变量是否引用正确

ansible 多行和单行 ansible有哪些执行模式_nginx_10

ansible-playbook   nginx.yml  --tags echo

ansible 多行和单行 ansible有哪些执行模式_tomcat_11


输出变量值为ansible

1.6 实战部署tomcat
mkdir /root/tomcat_install  &&  cd /root/tomcat_install

cat tomcat.yml

---
- hosts: web
  gather_facts: no
  vars:
    tomcat_version: 8.5.61
    tomcat_install_dir: /usr/local

  tasks:
    - name: "安装 jdk1.8" 
      yum: name=java-1.8.0-openjdk state=present
   
    - name: "下载 tomcat"
      get_url: url=http://mirrors.hust.edu.cn/apache/tomcat/tomcat-8/v{{tomcat_version}}/bin/apache-tomcat-{{tomcat_version}}.tar.gz  dest=/tmp

    - name: "解压  tomcat"
      unarchive:
        src: /tmp/apache-tomcat-{{tomcat_version}}.tar.gz
        dest: "{{tomcat_install_dir}}"
        copy: no   #yes表示拷贝本地的,no表示拷贝目标主机上的文件 
    - name: "启动tomcat"
      shell: cd  {{tomcat_install_dir}}  && 
             mv   apache-tomcat-{{tomcat_version}}  tomcat8 && 
             cd   tomcat8/bin && nohup  ./startup.sh  &

ansible 多行和单行 ansible有哪些执行模式_html_12


ansible 多行和单行 ansible有哪些执行模式_nginx_13


两台机器分别完成了tomcat的自动部署,playbook简单应用至此完成