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 }