Ansible_yaml剧本

来源:互联网 发布:umts网络是什么 编辑:程序博客网 时间:2024/04/28 21:35

YAML语法
YAML最初是Yet Another Markup Language(另一种标记语言)的缩写,后来为了强调yaml是以数
据为中心重新命名为递归写法YAML Ain’t
Markup Language(YAML 不是一种标记语言)。

散列表:(又叫哈希表),有键值对组成。    示例:        name: aaa        age: 12        或者        {name: aaa, age: 12}
列表:    示例:        - list1        - list2        - list3        或者        [list1, list2, list3]
散列表中是引用列表:    示例:        name:            - name1            - name2
列表中使用散列项:    示例:        - name: aaa          age: 18        或者        - {name: aaa, age: 18}
列表中使用列表项:    示例:        - [name, age, ]        或者        -          - name1          - name2
散列表中使用散列表:    示例:        names1:            name1: aaa            name2: bbb            name3: ccc        names2:            .....: ..            .....: ..
playbook组成结构:        Inventory        Modules        Ad Hoc Command        hosts        Playbook            Task:任务,即调用模块完成的某操作            Variables:变量            Templates:模板            Handlers:处理器,由某事件触发执行的操作            Roles:角色
示例:- hosts: webnodes   # hosts用于指定要执行指定任务的主机,其可以是一个或多个由冒号分隔主机组  vars:    http_port: 80    max_clients: 256  remote_user: root # remote_user则用于指定远程主机上的执行任务的用户。remote_user也可用于各task中  tasks:    # 任务列表task list中的各任务按次序逐个在hosts中指定的所有主机上执行,即在所有主机上完成              第一个任务后再开始第二个如果中途发生错误,所有已执行任务都有可能将回滚  - name: ensure apache is at the latest version    # 在众多模块中,只有command和shell模块仅需要给定  一个列表而无需使用“key=value                                                      command: /sbin/setenforce 0    yum: name=httpd state=latest  - name: ensure apache is running    service: name=httpd state=started  handlers:    - name: restart apache      service: name=httpd state=restarted
运行playbook的方式:    (1) 测试        ansible-playbook  --check            只检测可能会发生的改变,但不真正执行操作;        ansible-playbook  --list-hosts            列出运行任务的主机;        ansible-playbook  --list-tasks            列出要运行的任务列表        ansible-playbook --syntax-check             语法检查
handlers:       任务,在特定条件下触发;       接收到其它任务的通知时被触发;           notify: HANDLER TASK NAME

条件式触发器

- hosts: web  remote_user: root  tasks:  - name: install nginx package    yum: name=nginx state=latest  - name: start nginx service    service: name=nginx enabled=true state=started- hosts: db  remote_user: root  tasks:  - name: install redis package    yum: name=redis state=latest  - name: install conf file    copy: src=/root/redis.conf dest=/etc/redis.conf owner=redis group=root mode=644    notify: restart redis service   # 引用触发器    tags: instconf  - name: start redis service    service: name=redis enabled=true state=started    tags: startredis  handlers: # 定义触发器  - name: restart redis service    service: name=redis state=restarted
# 给play添加tags- hosts: web  remote_user: root  tags: nginx service   # play添加标签  tasks:  - name: install nginx package    yum: name=nginx state=latest  - name: start nginx service    service: name=nginx enabled=true state=started- hosts: db  remote_user: root  tags: redis service   # play添加标签  tasks:  - name: install redis package    yum: name=redis state=latest  - name: install conf file    copy: src=/root/redis.conf dest=/etc/redis.conf owner=redis group=root mode=644    notify: restart redis service    tags: instconf  - name: start redis service    service: name=redis enabled=true state=started    tags: startredis  handlers:  - name: restart redis service    service: name=redis state=restarted{default,file,handlers,meta,tasks,templates,vars}
例子:在webserver上面安装nginx,在dbserver上面安装redis,并且redis每次修改配置文件后,会触发重启redis服务。打上标签后,可以只单独运行标签的那一部分[ root@node1 ~ ]# ansible-playbook -t install nginx.yaml - hosts: webserver  remote_user: root  tasks:                                #任务  - name: install nginx package    yum: name=nginx state=latest  - name: start nginx service    service: name=nginx enabled=true state=started- hosts: dbserver  remote_user: root  tasks:                                  - name: install redis package    yum: name=redis state=latest  - name: install conf file    copy: src=/root/redis.conf dest=/etc/redis.conf owner=redis group=root mode=644    tags: install    notify: restart redis service       #触发器,配置文件修改后会触发后面的handlers  - name: start redis service    service: name=redis state=started    tags: startredis                    #使用标签  handlers:                             #不主动使用,只能被前面触发.  - name: restart redis service    service: name=redis state=restarted

变量
(1) facts:可直接调用;
注意:可使用setup模块直接获取目标主机的facters;

(2) 用户自定义变量:

(a) ansible-playbook命令的命令行中的    -e VARS, --extra-vars=VARS    # 示例:ansible-playbook test.yml --extra-vars "name=nginx user=root"      Note:命令行的变量比playbook中的变量优先级高。
(b) 在playbook中定义变量的方法:    vars:    - var1: value1    - var2: value2变量引用:{{ variable }}

例子:

[ root@node1 ~ ]# cat installpkc.yml - hosts: webserver  remote_user: root  vars:  - pkgname: tree  tasks:  - name: install package {{ pkgname }}    yum: name={{ pkgname }} state=latest
[ root@node1 ~ ]# ansible-playbook -e "pkgname=memcached" -C installpkc.yml    #这里在命令行定义变量PLAY [webserver] ***************************************************************TASK [Gathering Facts] *********************************************************ok: [172.18.25.52]ok: [172.18.25.51]TASK [install package memcached] ***********************************************changed: [172.18.25.51]changed: [172.18.25.52]

(3) 通过roles传递变量;

(4) Host Inventory #主机清单
Note:变量优先级低
(a) 用户自定义变量

(i) 向不同的主机传递不同的变量;                IP|HOSTNAME  varaiable=value var2=value2
例子:[webserver]172.18.25.51 pkgname=redis172.18.25.52 pkgname=memcached

(ii) 向组中的主机传递相同的变量;
[groupname:vars]
variable=value

例子:    [webserver]    172.18.25.51    172.18.25.52    [webserver:vars]    pkgname=redis

(b) invertory参数
用于定义ansible远程连接目标主机时使用的参数,而非传递给playbook的变量;

    ansible_ssh_host    ansible_ssh_port    ansible_ssh_user    ansible_ssh_pass    ansbile_sudo_pass    ...

例子:一种不基于密钥的连接方法,不推荐使用。

    [webserver]    172.18.25.51 ansible_ssh_user=root  ansible_ssh_pass=123    172.18.25.52 ansible_ssh_user=root     ansible_ssh_pass=centos
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 婴儿湿疹怎么办长在脸上 广州奥龙堡游泳卡过期了怎么办 大学生在学校当兵户口怎么办 茶叶梗枕头太硬怎么办 茶梗枕头太硬怎么办 照片放久了变红怎么办 乳腺萎缩和韧带松弛怎么办 航海王启航服务器爆满怎么办 LOL记分板没了怎么办 辅导孩子做作业没有耐心怎么办 宝宝住院三天回家不吃母乳怎么办 锁频君把应用变暗了怎么办 95的油加成92的怎么办 倒库一边宽了怎么办 倒库老是倒不好怎么办 倒库方向打早了怎么办 倒库左边小了怎么办 倒车入库小于30公分怎么办 倒库大于30公分怎么办 有行车记录仪遇到碰瓷怎么办 狗换了主人不吃怎么办 遇到扔东西碰瓷怎么办 碰见碰瓷的人怎么办 开店遇上碰瓷的顾客怎么办 我刮到别人的车怎么办 新车被刮了漆怎么办 停车擦到别人车怎么办 骑自行车被汽车撞了怎么办 车停在小区被刮怎么办 机动车被自行车撞了怎么办 单车撞小车后被起诉怎么办 给小车撞到电动单车怎么办 车停在路边被自行车撞怎么办 撞了碰瓷的人怎么办 谷丙转氨酶46该怎么办 渣土车开飞机了怎么办 自己车撞自己车怎么办 撞了人没钱赔怎么办 闯红灯扣了6分怎么办 开共享汽车闯红灯了怎么办 新手如果不小心闯红灯怎么办