美文网首页ansible-剧本
ansible剧本变量,条件语句,循环语句

ansible剧本变量,条件语句,循环语句

作者: A宽宽 | 来源:发表于2019-06-03 19:25 被阅读0次

ansible 中变量的使用

定义一个ip地址变量,创建目录的时候引用

[root@m01 ~]# cat 01-var.yaml
---
   - hosts: all
     vars:
       ip: 172.16.1.31
     tasks:
     - name: mkdir
       file:
         path: /fanzhi/{{ip}}
         state: directory

在nfs01 backup 创建/backup/lidao的目录 把 /etc/目录打包压缩到/backup/lidao目录下面 etc.tar.gz

编写剧本

[root@m01 ~]# vim 02.var.yaml
---
   - hosts: all
     vars:
       dir: /backup/lidao
     tasks:
     - name: mkdir
       file:
         path: "{{dir}}"
     - name: tar
       archive:
         path: /etc
         dest: "{{dir}}/etc.tar.gz"

检查


[root@m01 ~]# ansible all -a 'tree /backup'
172.16.1.31 | CHANGED | rc=0 >>
/backup
/backup
├── lidao
│       └── etc.tar.gz
└── md5.log

172.16.1.41 | CHANGED | rc=0 >>
/backup
├── lidao
│       └── etc.tar.gz
└── md5.log

ansible-palybook中使用变量是在{{}}中使用的,需要注意的是如果在开头某个模块的开头使用变量需要用引号引起来

在nfs01 backup 创建/backup/lidao/时间 的目录 把 /etc/目录打包压缩到/backup/lidao/时间 目录下面 etc.tar.gz

打包压缩 /etc/到时间命名的目录中。
创建变量存放时间(写死为2019-05-31)
创建变量存放目录名

编写剧本

[root@m01 ~]# vim 03.var.yaml
---
   - hosts: 172.16.1.31 172.16.1.41
     vars:
       dir: /backup/lidao
       time: "2019-05-30"
     tasks:
       - name: mkdir
         file:
           path: "{{dir}}/{{time}}"
           state: "directory"
       - name: tar etc
         archive:
           path: /etc
           dest: "{{dir}}/{{time}}/etc.tar.gz"

检查

[root@m01 ~]# ansible all -a 'tree /backup'
172.16.1.41 | CHANGED | rc=0 >>
/backup
└── lidao
    └── 2019-05-30
        └── etc.tar.gz

2 directories, 1 file

172.16.1.31 | CHANGED | rc=0 >>
/backup
└── lidao
    └── 2019-05-30
        └── etc.tar.gz

把/etc/打包备份到/backup/ip地址命名目录/etc-时间.tar.gz

ip是每台机器的内网ip
时间是当天的日期:年-月-日

预备知识:

将register结果定向到文件

[root@m01 /etc/ansible]# cat 03-var-reg.yml 
---
  - hosts: all
    tasks:
      - name: ip
        shell:  hostname -I|awk '{print $NF}'
        register: ipaddr
      - name: print ip
        shell: echo {{ipaddr}}>/tmp/ip.txt

register是用来注册变量的,他在剧本中可以吧上一条命令的结果注册为一个变量。

内容如下

[root@m01 /etc/ansible]#    
ipaddr变量的内容
[root@nfs01 ~]# cat /tmp/ip.txt 
{stderr_lines: []
 uchanged: True
 uend: u2019-05-31 11:24:45.080356
 failed: False
 ustdout: u172.16.1.31,
 ucmd: uhostname -I|awk '{print }', 
 urc: 0, 
 ustart: u2019-05-31 11:24:45.073817, 
 ustderr: u, 
 udelta: u0:00:00.006539, 
 stdout_lines: [u172.16.1.31]
 }

这么多内容我们就需要,stdout的值。他的含义是标准输出 。就是我们想要的前面命令的结果。就像我们在命令行中使用反引号一样。

注册变量进行调试

[root@m01 ~]# vim 04.var.yaml
---
   - hosts: all
     tasks:
       - name: ip
         shell: hostname -I|awk '{print $NF}'
         register: ipaddr
       - name: time
         shell: date +%F
         register: time
       - name: debug
         debug: msg={{ipaddr.stdout}}
       - name: debug2
         debug: msg={{time.stdout}}

检查

[root@m01 ~]# ansible-playbook 04.var.yaml
省略若干--
TASK [debug] *******************************************************************
ok: [172.16.1.41] => {
    "msg": "172.16.1.41"
}
ok: [172.16.1.31] => {
    "msg": "172.16.1.31"
}

TASK [debug2] ******************************************************************
ok: [172.16.1.41] => {
    "msg": "2019-05-31"
}
ok: [172.16.1.31] => {
    "msg": "2019-05-31"

debug 模块是用来调试的,他可以让变量的内容显示到屏幕,一般定义变量是可以用它先进行测试

编写剧本

[root@m01 ~]# vim 04.var.yaml
---
   - hosts: all
     tasks:
       - name: ip
         shell: hostname -I|awk '{print $NF}'
         register: ipaddr
       - name: time
         shell: date +%F
         register: time
       - name: mkdir
         file:
           path: /backup/{{ipaddr.stdout}}
           state: directory
       - name: tar
         archive:
           path: /etc
           dest: /backup/{{ipaddr.stdout}}/etc-{{time.stdout}}.tar.gz
~                                                                           

检查

[root@m01 ~]# ansible all -a 'tree /backup'
172.16.1.41 | CHANGED | rc=0 >>
/backup
├── 172.16.1.41
│   └── etc-2019-05-31.tar.gz
└── lidao
    └── 2019-05-30
        └── etc.tar.gz

3 directories, 2 files

172.16.1.31 | CHANGED | rc=0 >>
/backup
├── 172.16.1.31
│   └── etc-2019-05-31.tar.gz
└── lidao
    └── 2019-05-30
        └── etc.tar.gz

循环的使用

---
- hosts: all
  remote_user: root
  tasks:
    - name: Installed Pkg
      yum: name={{ item }} state=present
      with_items:
        - wget
        - tree
        - lrzsz

判断的使用

[root@m01 ~]# vim 05.var.yaml
---
   - hosts: all
     tasks:
       - name: yum
         yum:
          name: tree
          state: installed
         when: (ansible_hostname == 'nfs01')

image

相关文章

网友评论

    本文标题:ansible剧本变量,条件语句,循环语句

    本文链接:https://www.haomeiwen.com/subject/sfehxctx.html