设为首页 收藏本站
查看: 1430|回复: 0

[经验分享] 《Ansible权威指南》笔记(4)

[复制链接]

尚未签到

发表于 2018-1-2 15:01:02 | 显示全部楼层 |阅读模式
  七、Playbook
  1、语法特性如下:
  (1)"---"首行顶格开始
  (2)#号注释
  (3)缩进统一,不同的缩进代表不同的级别,缩进要对齐,空格和tab不能混用
  (4)区别大小写,键值对k/v的值也大小写敏感
  (5)k/v的值同行使用":"分开,换行写需以"-"分隔
  2、格式
  ---
  - name: test
  hosts: test
  gather_facts: no
  vars:
  http: 8080
  https: 1443
  vars_files:
  - vars/server_vars.yml
  remote_user: root
  sudo: yes
  tasks:
  - name: test1
  copy: src=/opt/apps/web/* dest=/opt/apps/web/
  notify:
  - restart apache
  - name: test2
  yum: name={{ item }} state=present
  with_items:
  - httpd
  - httpd-devel
  - name: test3
  shell: "echo $TEST"
  environment:
  - TEST: abc
  handlers:
  - name: restart apache
  service: name=httpd state=restarted
  说明:
  hosts:test    #表示test组的节点主机
  gather_facts: no    #跳过收集facts信息,默认是yes
  vars:    #定义变量,引用变量{{vars}}
  vars_files:    #使用文件定义变量,文件中也是用k/v形式定义变量
  remote_user: root    #远程使用root用户
  sudo:yes    #使用sudo
  tasks:    #指定一系列将要运行的任务
  name: test1    #test1任务,copy模块
  notify:    #与下面handlers对应,上一步copy之后文件发生改变,则通过name匹配handlers中的任务,这里匹配restart appche的service任务
  name: test2    #test2任务,yum模块
  with_items:     #定义列表变量,直接用{{item}}引用。该关键字也可以用来定义数组。
  with_dict:     #定义字典
  3、正式运行Playbook之前,可以--check或-C来检测,输出的结果和实际执行一模一样,但不会有实际影响。
  4、ansible-playbook
  -i    指定inventory文件
  -v    详细输出,-vvv更详细,-vvvv更更详细
  -f    并发数
  -e    定义Playbook中使用的变量,格式"key=value,key=value"
  --remote-user    #远程用户
  --ask-pass    #远程用户密码
  --sudo    #使用sudo
  --sudo-user    #sudo的用户,默认root
  --ask-sudo-pass    #sudo密码
  扩展:
  (1)handlers:见test1
  (2)environment:为某个play设置单独的环境变量,例子见P94-95
  (3)delegate_to:任务委派
  例:- name: 123
  shell: "echo $PATH>/test/1"
  delegate_to: 192.168.2.30
  把shell命令委派给192.168.2.30节点执行,其他hosts中指定的节点不执行。
  (4)register:注册变量
  将操作结果,包括stdout和stderr,保存到变量中,再根据变量的内容决定下一步,这个保存操作结果的变量就是注册变量。
  例:- shell: ***
  register: result
  使用result.stdout和result.stderr读取执行结果的标准输出和标准错误。
  (5)vars_prompt: 交互式提示
  例:
  ---
  - hosts: all
  vars_prompt:
  - name: share_user
  prompt: "username?"
  - name: share_pass
  prompt: "password"
  private: yes
  常用选项:
  private: yes    #用户输入不可见
  default    #设置默认值
  confirm: yes    #要求输入两次
  5、流程控制
  (1)when条件判断 P109
  例1:第一步执行的返回值中有'ready'时,再执行下一步操作。
  - command: my-app --status
  register: myapp_result
  - command: do-something
  when: "'ready' in myapp_result"
  例2:stat模块查看文件信息,如果文件没创建,则执行command
  - stat: path=/etc/sysctl.conf
  register: stat_result
  - command: touch /etc/sysctl.conf
  when: stat_result.stat.exists == false
  (2)changed_when和failed_when    P110-111
  (3)wait_for模块,任务暂停    P112
  6、循环
  原文:http://xdays.me/ansible状态管理.html
  (1)标准遍历
  用with_items可以遍历一个列表,注意这里只会遍历一层。示例如下:
  - name: add several users
  user: name={{ item }} state=present groups=wheel
  with_items:
  - testuser1
  - testuser2
  (2)嵌套遍历
  用with_nested可以遍历一个列表,注意这里会遍历多层,直到最内层。示例如下:
  - name: give users access to multiple databases
  mysql_user: name={{ item[0] }} priv={{ item[1] }}.*:ALL append_privs=yes password=foo
  with_nested:
  - [ 'alice', 'bob', 'eve' ]
  - [ 'clientdb', 'employeedb', 'providerdb' ]
  (3)遍历字典
  用with_dict可以遍历一个字典,用key和value来表示。示例如下:
  #变量文件
  ---
  users:
  alice:
  name: Alice Appleworth
  telephone: 123-456-7890
  bob:
  name: Bob Bananarama
  telephone: 987-654-3210
  #playbook文件
  tasks:
  - name: Print phone records
  debug: msg="User {{ item.key }} is {{ item.value.name }} ({{ item.value.telephone }})"
  with_dict: users
  (4)文件通配符循环
  用with_fileglob可以获取本地文件列表。示例如下:
  # copy each file over that matches the given pattern
  - copy: src={{ item }} dest=/etc/fooapp/ owner=root mode=600
  with_fileglob:
  - /playbooks/files/fooapp/*
  (5)对齐的列表
  用with_together可以达到类似Python里的zip函数的功能。示例如下:
  #变量文件:
  ---
  alpha: [ 'a', 'b', 'c', 'd' ]
  numbers:  [ 1, 2, 3, 4 ]
  #playbook文件
  tasks:
  - debug: msg="{{ item.0 }} and {{ item.1 }}"
  with_together:
  - alpha
  - numbers
  (6)循环一个task的输出
  with_lines指令后跟一个命令,ansible会遍历命令的输出。示例如下:
  - name: Example of looping over a command result
  shell: /usr/bin/frobnicate {{ item }}
  with_lines: /usr/bin/frobnications_per_host --param {{ inventory_hostname }}
  7、Tags标签    #P113-114
  标签功能可以给Roles、文件、单独的任务甚至整个Playbook打上标签,然后利用这些标签来指定要运行或不运行Playbook中的个别任务。
  例:
  vim test.yml
  ---
  - hosts: test
  tags: deploy    #给整个Playbook打一个标签
  tasks:
  - name: test_tags
  shell: ***
  tags:    #为任务打标签
  - test1
  - test2
  - include: foo.yml
  tags: foo
  ansible-playbook test.yml --tags "test1"    #只执行test_tags任务
  ansible-playbook test.yml --skip-tags "test2"    #跳过test_tags任务
  写法格式:
  tags: ['one','two']
  tags:
  - one
  - two
  8、Block块 P115-116
  9、Include

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-430838-1-1.html 上篇帖子: Ansible:变量详解【转】 下篇帖子: python学习之ansible api
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表