ansible变量(ansible第三天)

一.变量

# 在webservers组中的主机上,安装httpd、php、php-mysqlnd
[root@pubserver ansible]# vim pkg.yml
---
- name: install pkgs
  hosts: webservers
  tasks:
    - name: install web pkgs  # 此任务通过yum安装三个包
      yum:
        name: httpd,php,php-mysqlnd
        state: present
 

# 根据功能等,可以将一系列软件放到一个组中,安装软件包组,将会把很多软件一起安装上。比如gcc、java等都是开发工具,安装开发工具包组,将会把它们一起安装。
[root@node1 ~]# yum grouplist   # 列出所有的软件包组
[root@node1 ~]# yum groupinstall "Development Tools"
 

# 继续编辑pkg.yml,在webservers组中的主机上安装Development tools组
[root@pubserver ansible]# vim pkg.yml
---
- name: install pkgs
  hosts: webservers
  tasks:
    - name: install web pkgs    # 此任务通过yum安装三个包
      yum:
        name:
          - httpd
          - php
          - php-mysqlnd
        state: present

    - name: install dev group    # 此任务通过yum安装一组包
      yum:
        name: "@Development Tools"   # @表示后面的名字是组名
        state: present

[root@pubserver ansible]# ansible-playbook pkg.yml

# 系统升级命令
[root@pubserver ansible]# yum update
# 继续编辑pkg.yml,在webservers组中的主机上升级所有的包到最新版本
---
- name: install pkgs
  hosts: webservers
  tasks:
    - name: install web pkgs
      yum:
        name:
          - httpd
          - php
          - php-mysqlnd
        state: present

    - name: install dev group
      yum:
        name: "@Development Tools"
        state: present

    - name: update system    # 相当于yum update命令
      yum:
        name: "*"       # 表示系统已经安装的所有包
        state: latest

[root@pubserver ansible]# ansible-playbook pkg.yml


ansible变量

 facts变量:facts变量是ansible自带的预定义变量,用于描述被控端软硬件信息,facts变量通过setup模块获得

# 可以通过setup模块查看所有facts变量
[root@pubserver ansible]# ansible webservers -m setup

# 查看可用内存
[root@pubserver ansible]# ansible webservers -m setup -a "filter=ansible_memfree_mb“

常用的facts变量

ansible_all_ipv4_addresses:所有的IPV4地址
ansible_bios_version:BIOS版本信息
ansible_memtotal_mb:总内存大小
ansible_hostname:主机名

#ansible [被控主机] -m setup  | grep  {关键词查找} 

在playbook中使用变量

如:

# 显示远程主机的主机名和内存大小。在ansible中,变量使用{{}}表示
# debug模块用于输出信息,常用的参数是msg,用于输出指定内容
[root@pubserver ansible]# vim debug.yml
---
- name: display host info
  hosts: webservers
  tasks:
    - name: display hostname and memory
      debug:    # debug是模块,它的选项msg可以输出指定信息
        msg: "hostname: {{ansible_hostname}}; mem: {{ansible_memtotal_mb}} MB"

[root@pubserver ansible]# ansible-playbook debug.yml

二.补充模块

firewalld模块:port:声明端口  permanent:永久生效,但不会立即生效  immediate:立即生效,临时生效  state:enabled,放行;disabled拒绝

防火墙一般默认拒绝,明确写入允许的服务

有一些服务有名字,有些服务没有名字。但是最终都是基于TCP或UDP的某些端口。比如http服务基于TCP80端口。服务名和端口号对应关系的说明文件是:/etc/services     ,配置服务器的防火墙,一般来说只要配置开放哪些服务或端口即可。没有明确开放的,都默认拒绝

在webservers组中的主机上安装并启动nginx
客户端访问服务器的nginx服务
在webservers组中的主机上安装并启动firewalld
客户端访问服务器的nginx服务
在webservers组中的主机上开放nginx服务

# 配置nginx服务

[root@pubserver ansible]# vim firewall.yml
---
- name: configure webservers
  hosts: webservers
  tasks:
    - name: install nginx pkg   # 这里通过yum模块装httpd
      yum:
        name: nginx
        state: present

    - name: start nginx service   # 这里通过service模块启httpd服务
      service:
        name: nginx
        state: started
        enabled: yes
        
[root@pubserver ansible]# ansible-playbook firewall.yml
[root@pubserver ansible]# curl http://192.168.88.11/  # 可访问

# 安装并启动firewalld

[root@pubserver ansible]# vim firewall.yml
--- 安装nginx 和 firewalld,起服务 开起防火墙

[root@pubserver ansible]# ansible-playbook firewall.yml
[root@pubserver ansible]# curl http://192.168.88.11/  # 被拒绝

# 配置防火墙规则,放行http协议

[root@pubserver ansible]# vim firewall.yml
--- 安装nginx 和 firewalld,起服务 开起防火墙

   - name: set firewalld rules   # 通过firewalld模块开放80端口
      firewalld:
        port: 80/tcp
        permanent: yes
        immediate: yes
        state: enabled

[root@pubserver ansible]# ansible-playbook firewall.yml 
[root@pubserver ansible]# curl http://192.168.88.11/  # 可访问

template模块:

copy模块可以上传文件,但是文件内容固定  template模块可以上传具有特定格式的文件(如文件中包含变量)  当远程主机接收到文件之后,文件中的变量将会变成具体的值   template模块上传的文件,使用的语法叫Jinja2。

src:要上传的文件  dest:目标文件路径

# 使用template模块将含有变量的文件上传到webservers组中的主机
[root@pubserver ansible]# vim index.html
Welcome to {{ansible_hostname}} on {{ansible_eth0.ipv4.address}}

[root@pubserver ansible]# vim templ.yml
---
- name: upload index
  hosts: webservers
  tasks:
    - name: create web index
      template:
        src: index.html
        dest: /usr/share/nginx/html/index.html

[root@pubserver ansible]# ansible-playbook templ.yml
[root@pubserver ansible]# curl http://192.168.88.11/
Welcome to web1 on 192.168.88.11

进阶语法

当Playbook中包含很多任务时,当某一个任务遇到错误,它将崩溃,终止执行

可以指定某一个任务如果出现错误,则忽略它

 ignore_errors

# 编辑myerr.yml,如果myslqd服务无法启动,则忽略它
[root@pubserver ansible]# vim myerr.yml
---
- name: my errors
  hosts: webservers
  tasks:
    - name: start mysqld service
      service:
        name: mysqld
        state: started
        enabled: yes
      ignore_errors: yes    # 即使这个任务失败了,也要继续执行下去

    - name: touch a file
      file:
        path: /tmp/service.txt
        state: touch

[root@pubserver ansible]# ansible-playbook myerr.yml
[root@web1 ~]# ls /tmp/service.txt   # 第2个任务已执行
/tmp/service.txt

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值