ansible playbook入门

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格式:

  1. ---表示开始
  2. -表示下一级,后面跟着一个空格
  3. :后面也跟着一个空格 结果:
[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   

转载于:https://my.oschina.net/u/3746745/blog/1935308

你可能感兴趣的:(运维,shell)