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

[经验分享] 001-Ansible-参考http://www.ansible.com.cn/docs/playbooks_intro.html#about-playbook

[复制链接]

尚未签到

发表于 2018-1-3 07:16:31 | 显示全部楼层 |阅读模式
  1. Patterns
  在Ansible中,Patterns 是指我们怎样确定由哪一台主机来管理. 意思就是与哪台主机进行交互.
  

ansible <pattern_goes_here> -m <module_name> -a <arguments>  

  

ansible webservers -m service -a "name=httpd state=restarted"  同时让我们提前了解一些技能,除了如上,你也可以通过 --limit 标记来添加排除条件,/usr/bin/ansible or /usr/bin/ansible-playbook都支持:
  

ansible-playbook site.yml --limit datacenter2  如果你想从文件读取hosts,文件名以@为前缀即可.从Ansible 1.2开始支持该功能:
  

ansible-playbook site.yml --limit @retry_hosts.txt  

tasks:  - name: make sure apache is running
  service: name=httpd state=running
  

tasks:  - name: disable selinux
  command: /sbin/setenforce 0
  

tasks:  - name: run this command and ignore the result
  shell: /usr/bin/somecommand || /bin/true
  

tasks:  - name: run this command and ignore the result
  shell: /usr/bin/somecommand
  ignore_errors: True
  

tasks:  - name: Copy ansible inventory file to client
  copy: src=/etc/ansible/hosts dest=/etc/ansible/hosts
  owner=root group=root mode=0644
  

tasks:  - name: create a virtual host file for {{ vhost }}
  template: src=somefile.j2 dest=/etc/httpd/conf.d/{{ vhost }}
  

template: src=templates/foo.j2 dest=/etc/foo.conf  

- name: template configuration file  template: src=template.j2 dest=/etc/foo.conf
  notify:
  - restart memcached
  - restart apache
  

handlers:  - name: restart memcached
  service:  name=memcached state=restarted
  - name: restart apache
  service: name=apache state=restarted
  

tasks:  - shell: some tasks go here
  - meta: flush_handlers
  - shell: some other tasks
  

ansible-playbook playbook.yml -f 10  

ansible-playbook playbook.yml --list-hoststasks: - include: wordpress.yml wp_user=timmy - include: wordpress.yml wp_user=alice - include: wordpress.yml wp_user=bob  

- name: this is a play at the top level of a file  hosts: all
  remote_user: root
  

  tasks:
  

  - name: say hi
  tags: foo
  shell: echo "hi..."
  

  
- include: load_balancers.yml
  
- include: webservers.yml
  
- include: dbservers.yml
  

  这个 playbook 为一个角色 ‘x’ 指定了如下的行为:


  • 如果 roles/x/tasks/main.yml 存在, 其中列出的 tasks 将被添加到 play 中
  • 如果 roles/x/handlers/main.yml 存在, 其中列出的 handlers 将被添加到 play 中
  • 如果 roles/x/vars/main.yml 存在, 其中列出的 variables 将被添加到 play 中
  • 如果 roles/x/meta/main.yml 存在, 其中列出的 “角色依赖” 将被添加到 roles 列表中 (1.3 and later)
  • 所有 copy tasks 可以引用 roles/x/files/ 中的文件,不需要指明文件的路径。
  • 所有 script tasks 可以引用 roles/x/files/ 中的脚本,不需要指明文件的路径。
  • 所有 template tasks 可以引用 roles/x/templates/ 中的文件,不需要指明文件的路径。
  • 所有 include tasks 可以引用 roles/x/tasks/ 中的文件,不需要指明文件的路径。
  

site.yml  
webservers.yml
  
fooservers.yml
  
roles/
  common/
  files/
  templates/
  tasks/
  handlers/
  vars/
  defaults/
  meta/
  webservers/
  files/
  templates/
  tasks/
  handlers/
  vars/
  defaults/
  meta/
  

  角色默认变量允许你为 included roles 或者 dependent roles(见下) 设置默认变量。要创建默认变量,只需在 roles 目录下添加 defaults/main.yml 文件。这些变量在所有可用变量中拥有最低优先级,可能被其他地方定义的变量(包括 inventory 中的变量)所覆盖。
  

  wheel 角色的 meta/main.yml 文件包含如下内容:
  

---  
allow_duplicates: yes
  
dependencies:
  
- { role: tire }
  
- { role: brake }
  

  

  最终的执行顺序是这样的:
  

tire(n=1)  
brake(n=1)
  
wheel(n=1)
  
tire(n=2)
  
brake(n=2)
  
wheel(n=2)
  
...
  
car
  

  

  - hosts: webservers
  vars:
  http_port: 80
  

template: src=foo.cfg.j2 dest={{ remote_install_path }}/foo.cfg  

  

- hosts: app_servers  vars:
  app_path: "{{ base_path }}/22"
  

- hosts: all  remote_user: root
  

  # here we make a variable named "proxy_env" that is a dictionary
  vars:
  proxy_env:
  http_proxy: http://proxy.example.com:8080
  

  tasks:
  

  - apt: name=cobbler state=installed
  environment: proxy_env
  

ntp_server: ntp.bos.example.com  
backup: bak.bos.example.com
  
proxy_env:
  http_proxy: http://proxy.bos.example.com:8080
  https_proxy: http://proxy.bos.example.com:8080
  

yum install redis  
service redis start
  
pip install redis
  

  

ansible-playbook>  

ansible-playbook playbook.yml --start-at="install packages"  

ansible-playbook playbook.yml --step  

  

  在Playbook中,如果写gather_facts来控制是否收集远程系统的信息.如果不收集系统信息,那么上面的变量就不能在该playybook中使用了.
  

- hosts: whatever  
  gather_facts: no
  如果收集:
  

使用复杂facts变量
  一般在系统中收集到如下的信息,复杂的、多层级的facts变量如何使用呢?
  

...  "ansible_ens3": {
  "active": true,
  "device": "ens3",
  "ipv4": {
  "address": "10.66.192.234",
  "netmask": "255.255.254.0",
  "network": "10.66.192.0"
  },
  "ipv6": [
  {
  "address": "2620:52:0:42c0:5054:ff:fef2:e2a3",
  "prefix": "64",
  "scope": "global"
  },
  {
  "address": "fe80::5054:ff:fef2:e2a3",
  "prefix": "64",
  "scope": "link"
  }
  ],
  "macaddress": "52:54:00:f2:e2:a3",
  "module": "8139cp",
  "mtu": 1500,
  "promisc": false,
  "type": "ether"
  },
  
...
  

  

  那么可以通过下面的两种方式访问复杂的变量中的子属性:
  中括号:
  

{{ ansible_ens3["ipv4"]["address"] }}  

  

  点号:
  

{{ ansible_ens3.ipv4.address }}  

  

  

运维网声明 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-431027-1-1.html 上篇帖子: Ansible匹配目标和常用模块 下篇帖子: 【ansible】通过ansible方式读取计算节点NUMA信息的方法
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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