Yaml
- 编写结构
# key: values
name: "Ansible"
version: 2.4
python_version: 2.7
# list
module:
- "Network"
- "Linux Server"
- "Windows Server"
# 字典
plugins:
action_plugin: true
cache_plugin: true
shell_plugin: true
PlayBook
- playbook 编写
[root@master ~]# cat /home/ansible-study/inventory/playbook2.yaml
- hosts: slave
name: play-test
tasks:
- name: check host connection
ping:
- 通过 playbook 进行 ping 操作
[root@master ~]# ansible-playbook /home/ansible-study/inventory/playbook2.yaml -i /home/ansible-study/inventory/inventory.ini --private-key=/root/.ssh/id_rsa
Debug 模块使用
-
playbook/helloworld.yml
---
- name: Hello World
hosts: localhost
tasks:
- name: Hello World
debug:
msg: "Hello World"
- ansible control host
[root@master ~]# ansible-playbook /home/ansible-study/playbook/helloworld.yml
- 增加 verbosity 参数
---
- name: Hello World
hosts: localhost
tasks:
- name: Hello World
debug:
msg: "Hello World"
verbosity: 3
[root@master ~]# ansible-playbook /home/ansible-study/playbook/helloworld.yml
- 开启 Debug 模式运行 – -vvv
[root@master ~]# ansible-playbook /home/ansible-study/playbook/helloworld.yml -vvv
playbook 中使用 variables
变量优先级:越排在后面,优先级越高
- Playbook 编写
---
- name: Hello World
hosts: localhost
vars:
greetings: "hello from vars"
tasks:
- name: Hello World debug
debug:
msg: "{{greetings}}"
- 执行 playbook
[root@master ~]# ansible-playbook /home/ansible-study/variables/helloworld.yml
---
- name: Hello World
hosts: localhost
vars:
greetings: "hello from playbook vars"
demo:
a:
- a: 1
- b: 2
b: test
tasks:
- name: Hello World debug
debug:
msg: "{{demo}}"
[root@master ~]# ansible-playbook /home/ansible-study/variables/helloworld.yml
- 配置文件提取
# vars/helloworld.yml
---
- name: Hello World
hosts: localhost
vars:
greetings: "hello from playbook vars"
vars_files:
- "./vars_file/demo.yml"
- "./vars_file/test.yml"
tasks:
- name: Hello World debug
debug:
msg: "{{greetings}}"
# vars/vars_file/demo.yml
greetings: "hello from vars_file -- demo.yml"
# vars/vars_file/test.yml
greetings: "hello from vars_file -- test.yml"
Loop 在 Playbook 中的使用
- 单循环 – with_items
---
- name: Hello World
hosts: localhost
gather_facts: no
vars:
test:
- test1
- test2
- test3
- test4
tasks:
- name: Test Loop
debug:
msg: "{{item}}"
with_items: "{{test}}" # 单循环 test
[root@master ~]# ansible-playbook /home/ansible-study/playbook/loop/loop.yml
- 双层循环 – with_nested
---
- name: Hello World
hosts: localhost
gather_facts: no
vars:
test:
- test1
- test2
- test3
- test4
demo:
- demo1
- demo2
- demo3
tasks:
- name: Test Loop
debug:
msg: "{{ item[0] }}, {{ item[1] }}" # item[0] -- 外层循环, item[1] -- 内层循环
with_nested: # 双循环
- "{{ test }}"
- "{{ demo }}"
[root@master ~]# ansible-playbook /home/ansible-study/playbook/loop/double_loop.yml
[WARNING]: Could not match supplied host pattern, ignoring: all
[WARNING]: provided hosts list is empty, only localhost is available
PLAY [Hello World] ***********************************************************************************************************************************************************************************************************************************************************
TASK [Test Loop] *************************************************************************************************************************************************************************************************************************************************************
ok: [localhost] => (item=[u'test1', u'demo1']) => {
"changed": false,
"item": [
"test1",
"demo1"
],
"msg": "test1, demo1"
}
ok: [localhost] => (item=[u'test1', u'demo2']) => {
"changed": false,
"item": [
"test1",
"demo2"
],
"msg": "test1, demo2"
}
ok: [localhost] => (item=[u'test1', u'demo3']) => {
"changed": false,
"item": [
"test1",
"demo3"
],
"msg": "test1, demo3"
}
ok: [localhost] => (item=[u'test2', u'demo1']) => {
"changed": false,
"item": [
"test2",
"demo1"
],
"msg": "test2, demo1"
}
ok: [localhost] => (item=[u'test2', u'demo2']) => {
"changed": false,
"item": [
"test2",
"demo2"
],
"msg": "test2, demo2"
}
ok: [localhost] => (item=[u'test2', u'demo3']) => {
"changed": false,
"item": [
"test2",
"demo3"
],
"msg": "test2, demo3"
}
ok: [localhost] => (item=[u'test3', u'demo1']) => {
"changed": false,
"item": [
"test3",
"demo1"
],
"msg": "test3, demo1"
}
ok: [localhost] => (item=[u'test3', u'demo2']) => {
"changed": false,
"item": [
"test3",
"demo2"
],
"msg": "test3, demo2"
}
ok: [localhost] => (item=[u'test3', u'demo3']) => {
"changed": false,
"item": [
"test3",
"demo3"
],
"msg": "test3, demo3"
}
ok: [localhost] => (item=[u'test4', u'demo1']) => {
"changed": false,
"item": [
"test4",
"demo1"
],
"msg": "test4, demo1"
}
ok: [localhost] => (item=[u'test4', u'demo2']) => {
"changed": false,
"item": [
"test4",
"demo2"
],
"msg": "test4, demo2"
}
ok: [localhost] => (item=[u'test4', u'demo3']) => {
"changed": false,
"item": [
"test4",
"demo3"
],
"msg": "test4, demo3"
}
PLAY RECAP *******************************************************************************************************************************************************************************************************************************************************************
localhost : ok=1 changed=0 unreachable=0 failed=0
# 使用 Python 编写
test = ['test1', 'test2', 'test3', 'test4']
demo = ['demo1', 'demo2', 'demo3']
for i in test:
for j in demo:
print (i,j)
- 多层循环
---
- name: Hello World
hosts: localhost
gather_facts: no
vars:
test:
- test1
- test2
- test3
- test4
demo:
- demo1
- demo2
- demo3
abc:
- abc1
- abc2
tasks:
- name: Test Loop
debug:
msg: "{{ item[0] }}, {{ item[1] }}, {{ item[2] }}"
with_nested:
- "{{ test }}"
- "{{ demo }}"
- "{{ abc }}"