ansible技巧总结

1. ansible-doc的使用

ansible-doc -l         列出所有ansible的模块
ansible-doc +模块名称         查看ansible模块的用法

例如:

ansible-doc template  #查看template模块的用法

2.学会使用roles

为了避免代码重复,roles能够实现代码重复被调用

定义一个角色叫websrvs,第二个角色叫phpappsrvs,第三个角色叫dbsrvs。这样代码就可以重复利用了,每个角色可以被独立重复调用。下面举例说明使用方式。

hosts: host1
role:
- websrvs

hosts: host2
role:
- phpappsrvs
        
hosts: host3
role:
- dbsrvs
        
hosts: host4
role:
- websrvs
- phpappsrvs

3.Host Inventory的写法

host文件有很多种写法,比如可以定义组,定义远程主机的ssh端口号。这里说下,自定义远程主机的hostname。管理的主机多了之后,主机的ip地址比较难于记忆,可以在自定义hostname,方便查看playbook的输出结果,格式类似如下,第一列是自定制的hostname,第二列是对应的实际IP地址:

[TestGroup]

'测试1:192.168.1.1'    ansible_host=192.168.1.1

'测试2:192.168.1.2'    ansible_host=192.168.1.2

'测试3:192.168.1.3'    ansible_host=192.168.1.3

'运维1:192.168.1.4'    ansible_host=192.168.1.4

'运维1:192.168.1.5'    ansible_host=192.168.1.5 

'运维1:192.168.1.6'    ansible_host=192.168.1.6

'研发1:192.168.1.7'    ansible_host=192.168.1.7 

'研发1:192.168.1.8'    ansible_host=192.168.1.8

'研发1:192.168.1.9'    ansible_host=192.168.1.9


更多格式请查看官方文档:http://docs.ansible.com/ansible/intro_inventory.html

4.查看整个任务执行时间

编辑ansible的配置文件(ansible.cfg)

开启 callback_whitelist = timer

ansible-playbook +yml文件,执行之后会返回类似如下信息:

Playbook run took 0 days, 0 hours, 0 minutes, 6 seconds

5.关闭 gathering facts

ansible默认是开启gathering facts的,如果你不需要获取被控机器的 fact 数据,你可以关闭获取 fact 数据功能。关闭之后,可以加快 ansible-playbook 的执行效率,尤其是你管理很大量的机器时,这非常明显。关闭获取 facts 方法,只需要在 playbook 文件中加上“gather_facts: no”即可。

6.delegate_to:任务委派

在对一组服务器的执行操作过程中,需要在其中一台机器上执行一个操作,这个操作可以写在一个playbook中,就需要用到ansible的任务委派功能(delegate_to)。使用 delegate_to 关键字可以委派任务到指定的机器上运行。

- name: run 'ls' command on host 10
  shell: ls
  delegate_to: 192.168.1.10

7.善于利用循环:with_items

添加多个用户:

- name: add several users
  user: name={{ item }}
  state=present
  groups=wheel
  with_items:
    - testuser1
    - testuser2

8.条件判断:when

比如判断操作系统类型:

tasks:
  - name: "shut down Debian flavored systems"
    command: /sbin/shutdown -t now
    when: ansible_os_family == "Centos"

这里引用ansible_os_family需要注意一点是,需要开启gather_facts参数,默认是开启的。

9.ansible-lint

ansible-lint是对playbook的语法进行检查的一个工具。用法是ansible-lint playbook.yml 

安装:

pip install ansible-lint

用法示例,监测语法错误: 

10. ansible-playbook block

块中的所有任务都继承在块级别应用的指令。您可以应用于单个任务的大多数内容(循环除外)都可以在块级应用,因此块使设置任务通用的数据或指令变得更加容易。该指令不影响块本身,它仅由块所包含的任务继承。例如,将 when 语句应用于块内的任务,而不是块本身。

块实例,块内有命名的任务

 tasks:
   - name: Install, configure, and start Apache
     block:
       - name: Install httpd and memcached
         ansible.builtin.yum:
           name:
           - httpd
           - memcached
           state: present

       - name: Apply the foo config template
         ansible.builtin.template:
           src: templates/src.j2
           dest: /etc/foo.conf

       - name: Start service bar and enable it
         ansible.builtin.service:
           name: bar
           state: started
           enabled: True
     when: ansible_facts['distribution'] == 'CentOS'
     become: true
     become_user: root
     ignore_errors: yes

在上面的示例中,将在Ansible运行块中的三个任务中的每一个之前评估“何时”条件。所有这三个任务还继承了以root用户身份运行的特权升级指令。最后, ignore_errors: yes 确保即使某些任务失败,Ansible仍可以继续执行剧本。

自Ansible 2.3以来,区块的名称一直可用。我们建议在所有任务、区块内或其他地方使用名称,以便在运行剧本时更好地查看正在执行的任务

11. set_fact

---
- name: Test set_fact - define variable to check time
  hosts: localhost

  tasks:
  - name: Define vairbale using set_fact
    set_fact:
      check_time_using_set_fact: "Fact: {{ lookup('pipe', 'date \"+%H:%M:%S\"')}}"
  - name: Test set_fact - check time 1st time
    debug: var=check_time_using_set_fact
  - name: Sleep for 10 seconds and continue with play
    wait_for:
      timeout: 10
    delegate_to: localhost
  - name: Test set_fact - check time 2nd time
    debug: var=check_time_using_set_fact

12. notify和handlers

handlers(触发器): 定义一些task列表,与之前剧本中task没有关系,只有资源发送变化才会采取一定的操作

notify:  notify中调用handler中定义的操作

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值