Ansible进阶

Jinja2模板

  • jinja2文件以.j2为后缀
  • 注释 {# #}
  • 变量{{ var}}
  • 逻辑 {% %}
{% for %}
...
...
{% endfor %}     #循环控制

{% if %}
...
{% elif %}
...
{% else %}
...
{% endif %}     #条件

在ANSIBLE具体使用

cat config.j2     #一个基于Facts的实例
wlecome host {{ ansible_hostname }}, os is {{
ansible_os_family }}
today is {{ ansible_date_time.date }}
cpucore numbers {{ ansible_processor_vcpus }}
{% if ansible_processor_vcpus > 1 %}
OS CPU more than one core
{% endif %}
---
- name: a template example
  hosts: all
  remote_user: root
  tasks:
    - name: update jinja2 config
      template: src=config.j2 dest=/tmp/config.conf
...

调试

ansible-playbook checkhosts.yml --limit dbservers -vvv

优化 Ansible 执行速度

设置 SSH 为长连接

vi /etc/ansible/ansible.cfg
ssh_args = -C -o ControlMaster=auto -o
  ControlPersist=86400s

ss -nta |grep ESTAB    #验证

开启 pipelining

默认 Ansible 执行过程中会把生成好的本地python 脚本文件 PUT 到 远端机器。如果开启了 ssh 的pipelining 特性,这个过程就会在 SSH 的会话中进行。

vi /etc/ansible/ansible.cfg
pipelining = True

设置 facts 缓存

#缓存本地
vi /etc/ansible/ansible.cfg
gathering = smart
fact_caching = jsonfile 
fact_caching_connection = /dev/shm/ansible_fact_cache
fact_caching_timeout = 86400s
#缓存Redis
gathering = smart
fact_caching = redis
fact_caching_connection = 192.168.188.8:6379:0
fact_caching_timeout = 86400s

异步和轮询

ansible dbservers -B 10 -P 0  -a "sleep 5"
 
ansible dbservers  -m
 async_status -a "jid=191465439990.2210"

Playbook 中使用异步

cat async.yml
tasks:
  - name: 
    shell: /bin/sleep 5;hostname -i
    async: 6
    poll: 0
    register: job
  - name:
    debug:
      var: job
cat getJobResult.yml
tasks:
  - name: Get job result
    async_status:
    jid: "801565582767.3551"
    register: job_result
 - name: debug job result
   debug:
   var: job_result

使用多个 Inventory 文件

ansible-playbook -i development -i
 production get_logs.yml  #从命令⾏
#使用目录汇总清单源
#目录仅支持.yaml .yml .json扩展名
inventory/
  01-static-inventory.yml
  02-static-inventory.yml
  group_vars/
    all.yml

使用Inventory scripts

#!/usr/bin/env python
import sys
import json
import argparse
def lists():
    dic = {}
    host_list = [ '192.168.2.{}'.format(str(i) ) for
 i in range(20,23) ]
    hosts_dict = {'hosts': host_list}
    dic['computes'] = hosts_dict 
    return json.dumps(dic,indent=4)
def hosts(name):
    dic = {'ansibl_ssh_pass': '12345'}
    return json.dumps(dic)
if __name__ == '__main__':
    parser = argparse.ArgumentParser()
    parser.add_argument('-l', '--list', help='host
 list', action='store_true')
    parser.add_argument('-H', '--host', help='hosts
vars')
    args = vars(parser.parse_args())
    if args['list']:
        print( lists() )
    elif args['host']:
        print( hosts(args['host']) )
    else:
        parser.print_help()

项目录结构

mkdir -pv ./{nginx,mysql,httpd}/{files,templates,vars,tasks,handlers,meta,default}

官方推荐

production   # 关于⽣产环境服务器的资产清单
develop      # 关于开发环境的清单⽂件
group_vars/
  group1 # 组 group1 的变量⽂件
  group2 # 组 group2 的变量⽂件
host_vars/
  hostname1 # hostname1 定义的变量⽂件
  hostname2 # hostname2 定义的变量⽂件
library/ # 如果有自定义的模块,放在这⾥
filter_plugins/ # 如果有自定义的过滤插件
site.yml   # 执⾏ playbook 的统⼀入口文件
webservers.yml # 特殊任务的 playbook
dbservers.yml  # 还是特殊任务的 playbook
roles/ # role 存放⽬录
 common/ # common ⻆⾊的⽬录
   tasks/
      main.yml
   handlers/
      main.yml
   templates/
      ntp.conf.j2
   files/
    bar.txt
    foo.sh
   vars/
     main.yml # common ⻆⾊定义的变量⽂件
 defaults/
     main.yml # common ⻆⾊定义的默认变量⽂件(优先级低)
  meta/
    main.yml # common ⻆⾊的依赖关系⽂件
  webtier/ # 下⾯这些都是和 common 同级
  monitoring/
  fooapp/ 

回调插件

  • aggregate 聚合类型 比如timer
  • notification 通知类型 比如log_plays mail
  • stdout 标准输出类型

修改默认的回调插件

vi /etc/ansible/ansible.cfg
[defaults]
stdout_callback = json   #默认情况仅对playbook⽣效
[defaults]
bin_ansible_callbacks = True   #对ad-hoc也生效

启用其他内置的回调插件

vi /etc/ansible/ansible.cfg
callback_whitelist = timer, mail, profile_roles

把返回结果输出到日志中

vi /etc/ansible/ansible.cfg
[callback_log_plays]
log_folder=/tmp/ansible/hosts/
callback_whitelist = log_plays
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇