ansible 随手记(我遇见的问题,和常用模块写法记录)

只是个人常用笔记,想看哪里点哪里,后面持续更新

写ansible-playbook 常用参数

  • host: 定义playbook的执行主机范围,与命令模式下的ansible匹配规则一样。
  • remote_user: 定义ansible_playbook 的执行用户。
  • vars:定义变量
  • vars_files: 定义变量文件
  • notify:任务执行结果如果是发生更改了的则触发定义在handler的任务执行
  • handler:定义被触发的任务列表,由模块来执行完成
  • include:能包含的包括task,handler和playbook。可以在include的时候传递变量
tasks:
  - include: wordpress.yml
    vars:
        remote_user: timmy
        some_list_variable:
          - alpha
          - beta
          - gamma

写ansible-playbook 常用变量

查看当前应用的所有变量

ansible cloud -m setup

register:把任务转换成变量,用于其他任务的执行:

  tasks:
     - shell: /usr/bin/foo
       register: foo_result
       ignore_errors: True

内置变量:
group_names:是当前主机所在的group列表
groups:是所有inventory的group列表
inventory_hostname:是在inventory里定义的主机名
play_hosts:是当前的playbook范围内的主机列表
inventory_dir/inventory_file:是定义inventory的目录和文件

判断第一个任务结束并且失败,在执行下一条任务

tasks:
  - shell: /usr/bin/foo
    register: result
    ignore_errors: True
  - debug: msg="it failed"
    when: result|failed
列表去重:
{{ list | uniq }}

判断when:

tasks:
  - shell: echo "only on Red Hat 6, derivatives, and later"
    when: ansible_os_family == "RedHat" and ansible_lsb.major_release|int >= 6
  - shell: echo "This certainly is epic!"
    when: epic is defined

端口检查服务 wait 使用

检查18080 端口是否存在,不存在则轮询查询,轮询三次,每次等待时间2秒

  - name: 轮询等待 comm-agent status
    shell: "ss -ntl | grep 18080 | awk '{sub(".*:", "", $4); print $4}'"
    register: comm_agent_pord
    until: comm_agent_pord.stdout == "18080"
    retries: 3
    delay: 2
    ignore_errors: true

对比wait使用写的

- name: 查询 comm-agent status
  wait_for:
   host: {{ inventory_hostname }}
   port: 18080
   state: start
   timeout: 30

命令行:

ansible -i /etc/ansible/hosts/host-root node -m wait_for -a "port=18080 delay=2 timeout=30"

wait 常用参数:

connect_timeout :在下一个事情发生前等待链接的时间,单位是秒
delay: 在做下一个事情前延时多少秒
host: 执行这个模块的host
path: 当一个文件存在于文件系统中,下一步才继续。
port: 端口号
state:对象是端口的时候start状态会确保端口是打开的,stoped状态会确认端口是关闭的;对象是文件的时候,present或者started会确认文件是存在的,而absent会确认文件是不存在的。
timeout:wait_for的等待的超时时间,默认为300秒

其他例:

#等待8080端口已正常监听,才开始下一个任务,直到超时
- wait_for: 
    port: 8080 
    state: started  
    
#等待8000端口正常监听,每隔10s检查一次,直至等待超时
- wait_for: 
    port: 8000 
    delay: 10 
    
#等待8000端口直至有连接建立
- wait_for: 
    host: 0.0.0.0 
    port: 8000 
    delay: 10 
    state: drained
    
#等待8000端口有连接建立,如果连接来自10.2.1.2或者10.2.1.3,则忽略。
- wait_for: 
    host: 0.0.0.0 
    port: 8000 
    state: drained 
    exclude_hosts: 10.2.1.2,10.2.1.3 
    
#等待/tmp/foo文件已创建    
- wait_for: 
    path: /tmp/foo 

#等待/tmp/foo文件已创建,而且该文件中需要包含completed字符串    
- wait_for: 
    path: /tmp/foo 
    search_regex: completed 

#等待/var/lock/file.lock被删除    
- wait_for: 
    path: /var/lock/file.lock 
    state: absent 
    
#等待指定的进程被销毁
- wait_for: 
    path: /proc/3466/status 
    state: absent 
    
#等待openssh启动,10s检查一次
- wait_for: 
    port: 22 
    host: "{{ ansible_ssh_host | default(inventory_hostname) }}" search_regex: OpenSSH 
    delay: 10 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值