ansile作为去除安装agent的自动化工具,通过ssh协议的简单功能强大的自动化工作。

在ansile使用的过程中,有三种使用方式,个有特点。

1、ansible自行一次性任务,即执行命令如:

ansible 10.59.87.11 -m ping
ansible 10.59.87.11 -m copy -a "src=/etc/issue dest=/tmp/"

执行的方式是:
anbile + 执行的主机可以多种方式匹配(默认在./etc/ansible/hosts中)+ -m 模块 -a "模块的属性"

2、ansible-playbook 执行方式,将任务都写在一个yml文件中,yaml文件可简单可复杂

如执行:ansible-playbook /tmp/scp.yml

等于 ansible 10.59.87.11 -m copy -a "src=/etc/issue dest=/tmp/" 这个效果,yml文件内容如下


- hosts: 10.59.87.11
  remote_user: root
  vars:
    var_has: none
  tasks:
  - name: scp issue file
    copy:
      src: /etc/issue
      dest: /tmp/

注意:
1、hosts 指定的主机或者主机组一定要在/etc/ansible/hosts中或者通过-i 指定的inventory 文件中
2、如果里面用到template模块,则模块的路径需要在执行的$(dirname /tmp/scp.yml ) 目录下的templates 目录下
3、如果是有notify的使用,handlers可以是目录也可以是直接 handlers关键字指定

ansible-playbook 常用的选项
-C, --check
--verbose 执行显示详情
--syntax-check 语法检查
-D 打印更改的diff
--list-hosts
--list-tags
--list-tasks
-i INVENTORY, --inventory-file=INVENTORY 默认在 /etc/ansible/hosts 文件中

来一个httpd的安装的yml文件

- hosts: 10.59.87.11
  remote_user: root
  vars:
    httpd_port: 80
  tasks:
  - name: ensure apache is at the latest version
    yum:
      name: httpd
      state: latest
  - name: install configure file
    template: src=httpd.conf.j2 dest=/etc/httpd/conf/httpd.conf
    notify: reload httpd
  - name: stop httpd servcie
    service: name=httpd state=stopped
    tags:
        - stop

  handlers:
  - name: reload httpd
    service: name=httpd state=reloaded

cat templates/httpd.conf.j2 (查看jinjia2文件)

3、ansible-playbook + roles 方式
如果使用ansible管理公司服务器的配置初始化服务,这种模式是必须的,是分模块管理的。

ansible的目录结构:
ansible使用心得_第1张图片

标红的是常用的。

如:生产环境中的一个nginx模块roles
ansible使用心得_第2张图片

roles的目录是通过 /etc/ansible/ansible.cfg 文件决定的,默认是在roles_path = /etc/ansible/roles

如:

- hosts: web-group
  tags:
    - hosts
  roles:
    - hosts

如执行:
ansible-playbook /etc/ansible/top.yml

会对web-group的主机执行roles问hosts下的yml文件。 hosts roles目录下默认会找tasks目录下的main.yml文件。
main.yml文件中通过include,导入tasks目录下的其他.yml文件。

关于ansile的变量的优先级。
ansible变量优先级高低(从高往低):
ansible-playbook 执行yml任务的时候-e 参数指定的变量
ansible-playbook yml文件中vars: 中定义的变量
inventory 中host后面跟的变量定义的变量
inventory 中[:vars]中全局组定义的变量