1. 最基础的yml
[root@node1 ansible]# vi w.yml
---
- hosts: test
remote_user: root
tasks:
- name: 测试w
shell: w
~
"w.yml" [New] 6L, 82C written
yml格式:
- ---表示开始
- -表示下一级,后面跟着一个空格
- :后面也跟着一个空格 结果:
[root@node1 ansible]# ansible-playbook w.yml
PLAY [test] ******************************************************************************************
TASK [Gathering Facts] *******************************************************************************
ok: [192.168.44.13]
ok: [192.168.44.12]
TASK [测试w] *******************************************************************************************
changed: [192.168.44.13]
changed: [192.168.44.12]
PLAY RECAP *******************************************************************************************
192.168.44.12 : ok=2 changed=1 unreachable=0 failed=0
192.168.44.13 : ok=2 changed=1 unreachable=0 failed=0
2. 带参数的yml
[root@node1 ansible]# vi useradd.yml
---
- name: 创建新用户
hosts: test
remote_user: root
vars:
- user: "yym"
- passwd: "*********"
tasks:
- name: 创建新用户
user: name="{
{user}}" password="{
{passwd}}"
vars下面有两个参数,下面tasks引用时用了"{ {}}",可以对比shell脚本的$符号 结果:
[root@node1 ansible]# ansible-playbook useradd.yml
PLAY [创建新用户] *****************************************************************************************
TASK [Gathering Facts] *******************************************************************************
ok: [192.168.44.13]
ok: [192.168.44.12]
TASK [创建新用户] *****************************************************************************************
changed: [192.168.44.13]
changed: [192.168.44.12]
PLAY RECAP *******************************************************************************************
192.168.44.12 : ok=2 changed=1 unreachable=0 failed=0
192.168.44.13 : ok=2 changed=1 unreachable=0 failed=0
服务器上面看下用户,新增了yym
[root@node2 ~]# ll /home/
总用量 0
drwx------ 4 chawn chawn 111 6月 30 20:56 chawn
drwx------ 2 liu liu 83 7月 1 14:00 liu
drwx------ 2 yym yym 62 8月 28 16:04 yym
3. with循环
file模块可以新增文件,第一种写法,有几个文件写几行
file模块主要用于远程主机上的文件操作,包括以下选项:
force:需要在两种情况下强制创建软链接
1.源文件不存在但之后会建立的情况下
2.目标软连接已经存在,需要取消之前的软链接,然后创建洗的软连接,有两个选项:yes|no
group:定义文件/目标的属组
mode:定义文件/目录的权限
owenr:定义文件/目录的属主
path:必选项,定义文件/目录的路径
recurse:递归的设置文件的属性,只对目录有效 src:要被链接的源文件的路径,只应用于state=link的情况
dest:被链接到的路径,只应用于state=link的情况
state:directory:如果文件不存在,创建目录
file:即使文件不存在,也不会被创建
link:创建软连接
hard:创建硬链接
touch:如果文件不存在,则会创建一个新的文件,如果文件或目录已存在,则更新其最后修改时间
absent:删除目录、文件或者取消链接文件
[root@node1 ansible]# vi file_add.yml
---
- name: 新增几个文件
hosts: test
gather_facts: false
remote_user: root
tasks:
- name: file add
file: path=/tmp/1.txt mode=0644 state=touch
file: path=/tmp/2.txt mode=0644 state=touch
[root@node1 ansible]# ansible-playbook file_add.yml
[WARNING]: While constructing a mapping from /etc/ansible/file_add.yml, line 7, column 7, found a
duplicate dict key (file). Using last defined value only.
PLAY [新增几个文件] ***********************************************************************************
TASK [file add] **************************************************************************************
changed: [192.168.44.13]
changed: [192.168.44.12]
PLAY RECAP *******************************************************************************************
192.168.44.12 : ok=1 changed=1 unreachable=0 failed=0
192.168.44.13 : ok=1 changed=1 unreachable=0 failed=0
第二种,用with循环
[root@node1 ansible]# vi file_add.yml
---
- name: 新增几个文件
hosts: test
gather_facts: false
remote_user: root
tasks:
- name: file add
file: path=/tmp/{
{item}} mode=0644 state=touch
with_items:
- 1.txt
- 2.txt
path=/tmp/{ {item}}里的{ {item}}可以对比$item
[root@node1 ansible]# ansible-playbook file_add.yml
PLAY [新增几个文件] ****************************************************************************************
TASK [file add] **************************************************************************************
changed: [192.168.44.12] => (item=1.txt)
changed: [192.168.44.13] => (item=1.txt)
changed: [192.168.44.12] => (item=2.txt)
changed: [192.168.44.13] => (item=2.txt)
PLAY RECAP *******************************************************************************************
192.168.44.12 : ok=1 changed=1 unreachable=0 failed=0
192.168.44.13 : ok=1 changed=1 unreachable=0 failed=0
gather_facts: false 是为了禁止ansible收集,降低负荷
4. when条件判断
需求:如果内核满足指定条件,就yum安装**
yum模块可以提供的status: latest ,present,installed
removed, absent
present,latest,absent,这前3个代表安装,后面2个是卸载
ansible test -m setup 可以收集所有的信息,找到内核部分
"ansible_is_chroot": false,
"ansible_iscsi_iqn": "",
"ansible_kernel": "3.10.0-862.3.3.el7.x86_64",
"ansible_lo": {
"active": true,
"device": "lo",
"features": {
yml可这样写
[root@node1 ansible]# vi !$
vi when.yml
---
- name: 新增几个文件
hosts: test
#gather_facts: false
remote_user: root
tasks:
- name: 如果内核符合条件,yum安装
yum: name=lrzsz state=present
when: ansible_kernel == "3.10.0-862.3.3.el7.x86_64"
注意when里的ansible_kernel没有“”,:变成了==,对比ansible test -m setup信息看看
结果
[root@node1 ansible]# ansible-playbook when.yml
PLAY [新增几个文件] ****************************************************************************************
TASK [Gathering Facts] *******************************************************************************
ok: [192.168.44.13]
ok: [192.168.44.12]
TASK [如果内核符合条件,yum安装] ********************************************************************************
changed: [192.168.44.13]
changed: [192.168.44.12]
PLAY RECAP *******************************************************************************************
192.168.44.12 : ok=2 changed=1 unreachable=0 failed=0
192.168.44.13 : ok=2 changed=1 unreachable=0 failed=0