Playbook

 

playbook是由一个或多个"play"组成的列表。task就是调用ansible的一个module,组成play;

 

Playbook基础组件

hosts        # 指定要执行指定任务的主机,其可以是一个或多个由冒号分割主机组。
remote_user  # 指定远程主机上的执行任务的用户。
task list    # 是play的主体部分,各任务按次序逐个在hosts中指定的所有主机上执行,即在所有主机上完成第一个任务后再开始第二个。
action       # 任务执行过程
handlers     # 用于当前关注的资源发生变化时采取某些操作

 

功能示例

- hosts: test          # 要操作的 主机/组
  remote_user: root    # 远端执行任务的用户
  gather_facts: true   # no/yes 也可以,使用setup变量;不需要使用FACTS的时候,可以在playbook中关闭FACTS,从而可以减少数据的传输
  vars:              # 设置变量
    package: 80
  
  vars_files:        # 引入变量文件
    - /vars/external_vars.yml
    
  vars_prompt:       # 交互式定义变量
    - name: 'passphrase'          #存储数据的变量名
      prompt: 'Key Passphrase'    #手工输入数据
      private: yes                #当该值为yes,则用户的输入不会被打印  
  
  tasks:                                     # 任务
    - name: install {{ package }}    # 任务描述
      command: yum -y install httpd          # 调用ansible的command模块安装httpd
      
    - name: provide httpd.conf 
      copy: src="/root/httpd.conf" dest="/etc/httpd/conf/httpd.conf" 
      # template: src=/mytemplates/foo.j2 dest=/etc/file.conf owner=bin group=wheel mode=0644   # 使用模板
      tags: conf                         # 任务标记,可单独执行标记的任务,使用 ansible-playbook -C 命令执行
      notify:                            # 文件内容变更通知
        - server restart                   # 通知到指定的任务,对应 handlers
        
    - name: server start  
      service: name=httpd state=started enabled=true         # 启动服务
      
  handlers:                                # 定义接受关注的资源变化后执行的动作
    - name: server restart  
      service: name=httpd state=restarted    # 采取的动作
    - name: server stop  
      service: name=httpd state=restarted    # 采取的动作 

 

 

引用变量

 

{{ansible_eth0["ipv4"]["address"]}}
{{ansible_eth0.ipv4.address }}
{{foo[0]}}

 

 
 

魔法变量

hostvars      # 调用其他host的变量和facts,即使你没有在这个机器上执行过playbook, 你仍然可以访问变量, 但是不能访问facts(设置gathering = explicit后可以访问). 例如: {{ hostvars['host']['ansible_nodename'] }}
group_names   # 当前host所在的group的组名列表.   包括其父组
groups        # 所有组包括组中的hosts
inventory_hostname   # 配置在inventory文件中当前机器的hostname
play_hosts           # 执行当前playbook的所有机器的列表
inventory_dir        # inventory文件的路径
inventory_file       # inventory文件的路径和文件名
role_path            # 当前role的路径

 

 
 

使用 -e 传入变量 

 

ansible-playbook release.yml -e "hosts=vipers user=starbuck"
也可以写成类似如下方式:'{"pacman":"mrs","ghosts":["inky","pinky","clyde","sue"]}'    

 

 

 

 
 
 

本地定义变量

1、在远程主机创建/etc/ansible/facts.d/test.fact
[han]
name=qian
add=hebei
2、查看变量
# ansible all -m setup -a "filter=ansible_local" 
10.240.1.104| SUCCESS =>{
    "ansible_facts":{
        "ansible_local":{
            "example":{
                "han":{
                    "addr":"hebei", 
                    "name":"qian"
                }
            }
        }
    }, 
    "changed": false
}

 

posted @ 2017-09-18 10:57  跟随心走  阅读(160)  评论(0编辑  收藏  举报