Linux运维-day44-综合架构-playbook剧本的变量

2019-06-01  本文已影响0人  文娟_狼剩

环境准备:

m01管理服务器(外网:10.0.0.61;内网:172.16.1.61)
backup(外网:10.0.0.41;内网:172.16.1.41)
nfs01(外网:10.0.0.31;内网:172.16.1.31)

/etc/ansible/hosts主机清单中的配置为:
[oldboy]
172.16.1.41
172.16.1.31

注:养成良好的编写习惯,编写完剧本一定要先检查剧本剧本的执行情况
检查剧本执行情况:ansible-playbook -C 剧本名
执行剧本:ansible-playbook 剧本名

一、playbook变量

1.1 普通变量

1.1.1 #批量在backup服务器和nfs01服务器上创建/oldboy/ip,这里的ip写死为10.0.0.200
1>使用变量编写剧本

[root@m01 /server/ansible-playbook]# cat ansible-var01.yml 
---
  - hosts: oldboy
    vars:    \\定义变量
      ip: 10.0.0.200
    tasks:
    - name: mkdir dir
      file:
        path: /oldboy/{{ ip }}
        state: directory
[root@m01 /server/ansible-playbook]# 

2>查询创建的是否有问题

[root@m01 /server/ansible-playbook]# ansible oldboy -a "tree /oldboy"
172.16.1.41 | CHANGED | rc=0 >>
/oldboy
└── 10.0.0.200
1 directory, 0 files
172.16.1.31 | CHANGED | rc=0 >>
/oldboy
└── 10.0.0.200
1 directory, 0 files

[root@m01 /server/ansible-playbook]# 

1.2 #在nfs01、backup中创建/backup/lidao的目录,把/etc/目录打包压缩到/backup/lidao目录下面etc.tar.gz,目录名存放在变量中

\\编写的剧本内容
[root@m01 /server/ansible-playbook]# cat ansible-var02.yml 
---
   - hosts: oldboy
     vars:
       dirs: /backup/lidao
     tasks:
     - name: make dir
       file:
         path: "{{ dirs }}"
         state: directory
     - name: tar /etc
       archive:
         path: /etc
         dest: "{{ dirs }}/etc.tar.gz"

\\执行剧本之后结果查询
[root@m01 /server/ansible-playbook]# ansible oldboy -a "tree /backup"
172.16.1.41 | CHANGED | rc=0 >>
/backup
└── lidao
    └── etc.tar.gz

1 directory, 1 file

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

1 directory, 1 file

[root@m01 /server/ansible-playbook]#

1.2 playbook变量注册(register)

注册变量:register关键字可以存储指定命令的输出结果到一个自定义的变量中
1.2.1 在nfs01和backup 中创建/backup/lidao/时间的目录,把 /etc/目录打包压缩到/backup/lidao/时间的目录下面 etc.tar.gz

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

\\\--------擦看编写的剧本内容
[root@m01 /server/ansible-playbook]# cat ansible-var03.yml 
---
  - hosts: oldboy
    vars:
      dirs: /backup/lidao/
      times: 2019-05-31
    tasks:
    - name: make dir
      file:
        path: "{{ dirs }}/{{ times }}"
        state: directory
    - name: tar /etc
      archive:
        path: /etc
        dest: "{{ dirs }}/{{ times }}/etc.tar.gz"
[root@m01 /server/ansible-playbook]# 

\\----------检查剧本的执行结果
[root@m01 /server/ansible-playbook]# ansible oldboy -a "tree /backup"
172.16.1.41 | CHANGED | rc=0 >>
/backup
└── lidao
    └── 2019-05-31
        └── etc.tar.gz
2 directories, 1 file
172.16.1.31 | CHANGED | rc=0 >>
/backup
└── lidao
    └── 2019-05-31
        └── etc.tar.gz
2 directories, 1 file
[root@m01 /server/ansible-playbook]# 

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

分析:
ip是每台机器的内网ip
时间是当天的日期:年-月-日
需要用到叫register的内容

\\\--------------编写的剧本内容
[root@m01 /server/ansible-playbook]# cat ansible-var04.yml 
---
  - hosts: oldboy
    vars: 
      dirs: /backup
    tasks:
    - name: ip var
      shell: hostname -I|awk '{print $NF}'
      register: ipaddr

    - name: date var
      shell: date +%F
      register: time

    - name: cesgu
      debug: msg={{ ipaddr.stdout }}
   
    - name: make dir
      file:
        path: "{{ dirs }}/{{ ipaddr.stdout }}"
        state: directory
    
    - name: tar /etc
      archive:
        path: /etc
        dest: "{{ dirs }}/{{ ipaddr.stdout }}/etc-{{ time.stdout }}.tar.gz" 

\\\---------------------执行剧本的结果
[root@m01 /server/ansible-playbook]# ansible-playbook  ansible-var04.yml 

PLAY [oldboy] ************************************************************************************************************************

TASK [Gathering Facts] ***************************************************************************************************************
ok: [172.16.1.41]
ok: [172.16.1.31]

TASK [ip var] ************************************************************************************************************************
changed: [172.16.1.41]
changed: [172.16.1.31]

TASK [date var] **********************************************************************************************************************
changed: [172.16.1.41]
changed: [172.16.1.31]

TASK [cesgu] *************************************************************************************************************************
ok: [172.16.1.41] => {
    "msg": "172.16.1.41"
}
ok: [172.16.1.31] => {
    "msg": "172.16.1.31"
}

TASK [make dir] **********************************************************************************************************************
changed: [172.16.1.31]
changed: [172.16.1.41]

TASK [tar /etc] **********************************************************************************************************************
changed: [172.16.1.31]
changed: [172.16.1.41]

PLAY RECAP ***************************************************************************************************************************
172.16.1.31                : ok=6    changed=4    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
172.16.1.41                : ok=6    changed=4    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
[root@m01 /server/ansible-playbook]# 

1.3 playbook内置变量

****常用的ansible内置变量

含义 内置变量(未精简) 内置变量(精简之后)
查询主机名 ansible_facts.hostname ansible_hostname
查询所有的IP ansible_facts.all_ipv4_addresses ansible_all_ipv4_addresses
查询第一块网卡的IP地址 ansible_facts.eth0.ipv4.address ansible_eth0.ipv4.addresses
查询系统发行版,如CentOS本 ansible_facts.distribution ansible_facts_distribution
\\\\-------在剧本中查询所有的内置变量
- hosts: oldboy
    tasks:
      - debug: msg={{ansible_facts}}

二、playbook条件语句

playbook中条件判断语句使用when;when与ansible内置变量搭配

2.1 #在nfs01和backup服务器上的/backup下创建以自己主机名命名的文件,其他服务器不创建

\\\----------------------查看剧本内容
[root@m01 /server/ansible-playbook]# cat ansible-var06.yml 
---
  - hosts: all
    tasks:
      - name: create file
        file: path=/backup/{{ ansible_hostname }}.txt state=touch
        when: (ansible_hostname =="nfs01") or (ansible_hostname =="backup")
[root@m01 /server/ansible-playbook]# 

\\\------------剧本的执行
[root@m01 /server/ansible-playbook]# ansible-playbook  ansible-var06.yml 

PLAY [all] ***************************************************************************************************************************
TASK [Gathering Facts] ***************************************************************************************************************
ok: [172.16.1.31]
ok: [172.16.1.7]
ok: [172.16.1.8]
ok: [172.16.1.41]

TASK [create file] *******************************************************************************************************************
skipping: [172.16.1.7]
skipping: [172.16.1.8]
changed: [172.16.1.41]
changed: [172.16.1.31]

PLAY RECAP ***************************************************************************************************************************
172.16.1.31                : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
172.16.1.41                : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
172.16.1.7                 : ok=1    changed=0    unreachable=0    failed=0    skipped=1    rescued=0    ignored=0   
172.16.1.8                 : ok=1    changed=0    unreachable=0    failed=0    skipped=1    rescued=0    ignored=0 

\\\--------------------查看剧本的执行之后是否创建成功
[root@m01 /server/ansible-playbook]# ansible all -a "ls -l /backup/"
172.16.1.31 | CHANGED | rc=0 >>
total 0
-rw-r--r-- 1 root root 0 Jun  1 12:10 nfs01.txt

172.16.1.41 | CHANGED | rc=0 >>
total 0
-rw-r--r-- 1 root root 0 Jun  1 12:10 backup.txt

172.16.1.7 | FAILED | rc=2 >>
ls: cannot access /backup/: No such file or directorynon-zero return code

172.16.1.8 | FAILED | rc=2 >>
ls: cannot access /backup/: No such file or directorynon-zero return code

[root@m01 /server/ansible-playbook]# 

三、playbook循环语句

3.1 #批量创建安装软件

\\\--------没安装之前
[root@m01 ~]# ansible oldboy -a "rpm -qa nfs*  tree lrzsz"
172.16.1.31 | CHANGED | rc=0 >>
172.16.1.41 | CHANGED | rc=0 >>
[root@m01 ~]# 

\\\-------查看编写的剧本内容
[root@m01 ~]# cat /server/ansible-playbook/ansible-var05.yml 
---
  - hosts: oldboy
    tasks:
    - name: install ruanjiain
      yum: name={{ item }} state=present
      with_items:
        - tree  
        - lrzsz
        - nfs-utils
[root@m01 ~]# 

//--------------------执行剧本
[root@m01 /server/ansible-playbook]# ansible-playbook ansible-var05.yml 

PLAY [oldboy] ************************************************************************************************************************

TASK [Gathering Facts] ***************************************************************************************************************
ok: [172.16.1.31]
ok: [172.16.1.41]

TASK [install ruanjiain] *************************************************************************************************************

changed: [172.16.1.41] => (item=[u'tree', u'lrzsz', u'nfs-utils'])
changed: [172.16.1.31] => (item=[u'tree', u'lrzsz', u'nfs-utils'])

PLAY RECAP ***************************************************************************************************************************
172.16.1.31                : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
172.16.1.41                : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

[root@m01 /server/ansible-playbook]# 

\\\-------------------执行剧本之后的查询结果
[root@m01 ~]# ansible oldboy -a "rpm -qa nfs*  tree lrzsz"
 [WARNING]: Consider using the yum, dnf or zypper module rather than running 'rpm'.  If you need to use command because yum, dnf or
zypper is insufficient you can add 'warn: false' to this command task or set 'command_warnings=False' in ansible.cfg to get rid of
this message.

172.16.1.31 | CHANGED | rc=0 >>
lrzsz-0.12.20-36.el7.x86_64
tree-1.6.0-10.el7.x86_64
nfs-utils-1.3.0-0.61.el7.x86_64

172.16.1.41 | CHANGED | rc=0 >>
lrzsz-0.12.20-36.el7.x86_64
tree-1.6.0-10.el7.x86_64
nfs-utils-1.3.0-0.61.el7.x86_64

[root@m01 ~]# 

3.2 #批量创建文件并指定所有者、所有属组及权限

 11     - name: batch create file
 12       file:
 13         path: "{{ item.path }}"
 14         state: touch
 15         mode: "{{item.mode }}"
 16         owner: "{{ item.owner }}"
 17         group: "{{item.group }}"
 18       with_items:
 19         - {path: /backup/aaa.txt, mode: "600", owner: oldboy, group: oldboy }
 20         - {path: /backup/bbb.txt, mode: "644", owner: nfsnobody, group: nfsnobody }
 21         - {path: /backup/ccc.txt, mode: "777", owner: root, group: root }
~    

\\\--------------------执行结果
[root@m01 /server/ansible-playbook]# ansible-playbook  ansible-var05.yml --start-at-task='batch create file'

PLAY [oldboy] ************************************************************************************************************************

TASK [Gathering Facts] ***************************************************************************************************************
ok: [172.16.1.41]
ok: [172.16.1.31]

TASK [batch create file] *************************************************************************************************************
changed: [172.16.1.31] => (item={u'owner': u'oldboy', u'path': u'/backup/aaa.txt', u'group': u'oldboy', u'mode': u'600'})
changed: [172.16.1.41] => (item={u'owner': u'oldboy', u'path': u'/backup/aaa.txt', u'group': u'oldboy', u'mode': u'600'})
changed: [172.16.1.31] => (item={u'owner': u'nfsnobody', u'path': u'/backup/bbb.txt', u'group': u'nfsnobody', u'mode': u'644'})
changed: [172.16.1.41] => (item={u'owner': u'nfsnobody', u'path': u'/backup/bbb.txt', u'group': u'nfsnobody', u'mode': u'644'})
changed: [172.16.1.41] => (item={u'owner': u'root', u'path': u'/backup/ccc.txt', u'group': u'root', u'mode': u'777'})
changed: [172.16.1.31] => (item={u'owner': u'root', u'path': u'/backup/ccc.txt', u'group': u'root', u'mode': u'777'})

PLAY RECAP ***************************************************************************************************************************
172.16.1.31                : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
172.16.1.41                : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

[root@m01 /server/ansible-playbook]#    

\\\---------------执行之后的结果查询
[root@m01 /server/ansible-playbook]# ansible oldboy -a "ls -l /backup/aaa.txt /backup/bbb.txt /backup/ccc.txt"
172.16.1.31 | CHANGED | rc=0 >>
-rw------- 1 oldboy    oldboy    0 Jun  1 11:32 /backup/aaa.txt
-rw-r--r-- 1 nfsnobody nfsnobody 0 Jun  1 11:32 /backup/bbb.txt
-rwxrwxrwx 1 root      root      0 Jun  1 11:32 /backup/ccc.txt

172.16.1.41 | CHANGED | rc=0 >>
-rw------- 1 oldboy    oldboy    0 Jun  1 11:32 /backup/aaa.txt
-rw-r--r-- 1 nfsnobody nfsnobody 0 Jun  1 11:32 /backup/bbb.txt
-rwxrwxrwx 1 root      root      0 Jun  1 11:32 /backup/ccc.txt

[root@m01 /server/ansible-playbook]#                                                                         

作业:
shell的面试题
m01使用ansible
部署
rsync
nfs
sersync
全网备份
尝试云服务器部署服务
预习:HTTP协议 Nginx
待补充……

上一篇 下一篇

猜你喜欢

热点阅读