ansible再谈

一 . linux的单双引号区别

a=10 echo '$a' 结果$a echo "$a"  结果10

二 . playbook 剧本

  1. 操做都是幂等(操做之后就不会在操做了)的
  2. 为何要用playbook?
     有一些好的功能

ymal规范(必须严格遵照): 字典: key: value(冒号后边必须有空格) 列表: - (以短横杠开头) 如: - attila: shuai olsen: mei movie: - name: 复联 salary: 10000 结果: [ { attila: 'shuai', olsen: 'mei', movie: [ { name: '复联', salary: 10000 } ] } ]

  playbook的格式

Usage: ansible-playbook [options] playbook.yml [playbook2 ...] -C, --check #白跑,执行可是不会有结果
--list-hosts #列出符合的主机
-f FORKS, --forks=FORKS #作并发
--syntax-check #检查语法
-k, --ask-pass #输入密码

  单个playbook

!!!必须遵照ymal规范
- hosts: web   # 指定运行命令的主机
  remote_user: root  #能够不写,默认是root
  tasks:  # 任务列表
  - name: createuser   # 任务1,必须是name
    user: name=olsen1 home=/opt/olsen1 uid=666   # 指定模块
  - name: copyfile  # 任务2 
    copy: src=/opt/xxx.txt dest=/opt/xxx1.txt # 执行任务的顺序是,当web组里的全部服务器执行完第一个任务以后在执行第二个
 ansible-playbook --syntax-check playbook1.yml  # 检查语法
ansible-playbook  playbook1.yml  # 真正的执行

# 多个playbook,就是在一个.yml文件中有复制了多个像单个playbook那样的,了解便可

  传参

  第一种方式

# playbook3.yml文件

- hosts: web tasks: - name: create{{user}} user: name={{user}} ansible-playbook -e user=curry1 playbook3.yml

  第二种方式

# 修改host文件 vim /etc/ansible/hosts
 [web] 192.168.111.129 user=curry2 192.168.111.130 user=kobe2 ansible-playbook playbook3.yml   # 129有了curry2,130有了kobe2

  第三种方式

# 修改host文件 vim /etc/ansible/hosts
 [web] 192.168.111.129
192.168.111.130 [web:vars] user=curry3 ansible-playbook playbook3.yml   # 129和130都有了curry3

  第四种方式

# playbook4.yml文件

- hosts: web vars: - user: curry4 tasks: - name: create{{user}} user: name={{user}} ansible-playbook playbook4.yml  # 129和130都有了curry4

  传参优先级:  -e > playbook里直接vars > hosts

  运行时收集的信息

查看收集信息的命令: ansible 192.168.111.129 -m setup|more

  一些主要的信息

ansible_all_ipv4_addresses #全部的ipv4地址
ansible_all_ipv6_addresses #全部的ipv6地址
ansible_architecture #系统的架构
ansible_date_time #系统时间
ansible_default_ipv4 #默认的ipv4地址
 address ip地址 alias 网卡名称 broadcast 广播地址 gateway 网关 netmask 子网掩码 network 网段 ansible_default_ipv6 #默认的ipv6地址
ansible_device_links #系统的磁盘信息
ansible_distribution #系统名称
ansible_distribution_file_variety #系统的基于公司
ansible_distribution_major_version #系统的主版本
ansible_distribution_version #系统的所有版本
ansible_dns #系统的dns 默认udp 端口53
ansible_domain #系统的域 ldap
ipv4 #ipv4地址
ansible_env #系统的环境
ansible_fqdn #系统的完整主机名
ansible_hostname #系统的简写主机名
ansible_kernel #系统的内核版本
ansible_machine #系统的架构
ansible_memtotal_mb #系统的内存
ansible_memory_mb #系统的内存使用状况
ansible_mounts #系统的挂载信息
ansible_os_family #系统家族
ansible_pkg_mgr #系统的包管理工具
ansible_processor #系统的cpu
ansible_processor_cores #每颗cpu的核数
ansible_processor_count #cpu的颗数
ansible_processor_vcpus #cpu的个数=cpu的颗数*每颗cpu的核数
ansible_python #系统python信息
ansible_python_version #系统python的版本
ansible_system #系统名字

  tags

# playbook6.yml文件

- hosts: web tasks: - name: install yum: name=redis - name: copyfile copy: dest=/etc/redis.conf src=/etc/redis.conf tags: copyfile - name: start service: name=redis state=started ansible-playbook  playbook6.yml   # 全都执行一遍
ansible-playbook -t copyfile playbook6.yml # 只执行copy那个命令(把bind的ip修改以后执行这步就能够)

  handlers

# playbook7.yml文件

- hosts: web tasks: - name: install yum: name=redis - name: copyfile copy: dest=/etc/redis.conf src=/etc/redis.conf tags: copyfile notify: restart # value必须是要触发的模块的value
  - name: start service: name=redis state=started handlers: - name: restart service: name=redis state=restarted ansible-playbook -t copyfile playbook7.yml  # 不只执行copy还重启

  template(能动态替换)

    绝对路径

vim  /etc/redis/conf bind {{ansible_default_ipv4.address}] # 上边setup中的参数

    playbook8.yml文件

 

- hosts: web tasks: - name: install yum: name=redis - name: copyfile template: dest=/etc/redis.conf src=/etc/redis.conf tags: copyfile notify: restart - name: start service: name=redis state=started handlers: - name: restart service: name=redis state=restarted ansible-playbook -t copyfile playbook8.yml

    相对路径

mkdir templates cp /etc/redis/conf templates/ mv redis.conf{,.j2} = mv redis.conf redis.conf.j2   # 更名为.j2格式

    playbook9.yml文件

- hosts: web tasks: - name: install yum: name=redis - name: copyfile # 建立名为templates文件夹(和playbook9.yml在同一文件夹下)直接写文件名就能找到
    template: dest=/etc/redis.conf src=redis.conf.j2 tags: copy notify: restart - name: start service: name=redis state=started handlers: - name: restart service: name=redis state=restarted ansible-playbook -t copyfile playbook9.yml

  when(判断)

# playbook10.yml文件

- hosts: web tasks: - name: copyfile copy: content="十步杀一人" dest=/tmp/a.txt when: ansible_distribution_major_version=="7"   # setup的参数
  - name: copyfile copy: content="千里不流行" dest=/tmp/a.txt when: ansible_distribution_major_version=="6" ansible-playbook -t copyfile playbook10.yml

  with_items(循环)

# playbook11.yml文件

- hosts: web tasks: - name: createuser user: name={{item}}  # 必须是item
 with_items: - attila50 - curry50 - kobe50 ansible-playbook -t copyfile playbook11.yml  # 建立了上述三个用户

    循环两个任务

# playbook12.yml文件

- hosts: web tasks: - name: createuser user: name={{item}} with_items: - attila60 - curry60 - kobe60 - name: creategroup group: name={{item}}   # cat /etc/group 能查看组信息
 with_items: - attila60 - curry60 - kobe60 ansible-playbook -t copyfile playbook12.yml  # 建立了上述三个用户和三个组

  嵌套循环

# playbook12.yml文件

- hosts: web tasks: - name: crateuser user: name={{item.name}}  group={{item.group}} with_items: - {"name":attila80,"group":attila80} - {"name":curry80,"group":curry80} - {"name":kobe80,"group":kobe80} ansible-playbook -t copyfile playbook12.yml

   roles

为何要使用roles: - 目录结构清晰 - 能够相互调用    在调用文件中写须要引入的文件 - import_tasks: roles/nginx/tasks/install.yml - 备份方便

  !!! 要注意下面目录结构层级关系

   

  每一个文件中的内容展现

  

 

   

 

   

 

   

 

   

 

   

 

   

 

  

 

  

相关文章
相关标签/搜索