Linux 命令 Ansible


原文链接: Linux 命令 Ansible

资料

Ansible快速入门:技术原理与实战
Ansible 中文权威指南
Ansible 简书专题文章
Ansible 入门
** ansible 模块 **

Playbook Roles

https://github.com/kuailemy123/Ansible-roles
github.com/vinodhalaharvi/ansible-examples
github.com/mrlesmithjr

批量修改密码
ansible all -m user -a "name=root password=newpass"

pam_limits

ansible all -m shell -a "ulimit -HSn 65535"
ansible all -m pam_limits -a "domain=* limit_type=- limit_item=nofile value=65536"
ansible all -m pam_limits -a "domain=* limit_type=hard limit_item=nofile value=65536"

时间同步 chrony

ansible-galaxy install influxdata.chrony

mariadb 集群

  1. ansible-galaxy install mrlesmithjr.mariadb-galera-cluster mrlesmithjr.etc-hosts
  2. /etc/ansible/roles/mrlesmithjr.mariadb-galera-cluster

1、安装最新的 ansible

$ sudo easy_install pip
$ sudo pip install ansible

2. ansible 的配置

看一个完整的 anbile 配置文件例子,就能基本了解到 ansible 都能配置什么了:
https://raw.githubusercontent.com/ansible/ansible/devel/examples/ansible.cfg

对 ansible 配置文件里面的关键字不能完整理解,还可以参考关键词解释列表:
http://docs.ansible.com/ansible/intro_configuration.html#explanation-of-values-by-section

ansible.cfg 配置文件优先级

ansible 的默认配置文件是 / etc/ansible/ansible.cfg
其实 ansible 会按照下面的顺序查找配置文件,并使用第一个发现的配置文件。

* ANSIBLE_CONFIG (一个环境变量)
* ansible.cfg (位于 . 目录中)
* .ansible.cfg (位于 Home 目录中)
* /etc/ansible/ansible.cfg (default)

2. Host Inventory(主机清单)

some_host ansible_ssh_port=2222 ansible_ssh_user=manager

3. Playbook

-i 指定 host Inventory
-e 通过命令行设置变量
### Playbook 中定义的变量

用户可以在 Playbook 中,通过 vars 关键字自定义变量,使用时用 {{ }} 引用以来即可。
Playbook 中定义和使用的变量的方法

例如下面的例子中,用户定义变量名为 http_port,其值为为 80。在 tasks firewalld 中,通过 {{ http_port }} 引用。


  • hosts: web
    vars:
    http_port: 80
    remote_user: root
    tasks:
    • name: insert firewalld rule for httpd
      firewalld: port={{ http_port }}/tcp permanent=true state=enabled immediate=yes

把变量放在单独的文件中

当变量比较多的时候,或者变量需要在多个 playbook 中重用的时候,可以把变量放到一个单独的文件中。通过关键字 var_files 把文件中定义的变量引入 playbook 中,使用变量的方法和在本文件中定义的变量相同。

  • hosts: web
    remote_user: root
    vars_files:
    • vars/server_vars.yml
      tasks:
    • name: insert firewalld rule for httpd
      firewalld: port={{ http_port }}/tcp permanent=true state=enabled immediate=yes

变量文件 vars/server_vars.yml 的内容为:

http_port: 80

### Playbook 通过命令行使用变量 -e

ansible-playbook main.yml -e "hosts=web user=root"
ansible-playbook main.yml -e "{'hosts':'vm-rhel7-1','user':'root'}" # json 传递参数
ansible-playbook main.yml -e "@vars.json" #文件传参

Playbook 变量覆盖

http://docs.ansible.com/ansible/latest/playbooks_variables.html#variable-precedence-where-should-i-put-a-variable

1.  role defaults[1]          
2.  inventory 文件或脚本组 vars [2]
    playbook group_vars / *
    inventory 文件或脚本主机 vars [2]
    inventory host_vars / *
    playbook host_vars / *
    host facts        
    role vars(在 `role/vars/main.yml` 中定义)
    include_vars
    set_facts / registered vars
    --extra-vars (命令行中 -e 指定优先级最高)

基本上,进入 “角色默认值”(角色中的默认文件夹)的任何东西都是最有价值的,容易被覆盖的。 该角色的 vars 目录中的任何内容都会覆盖该命名空间中该变量的先前版本。 这里要遵循的一个想法是,在范围上越明确,命令行 - e 额外的 vars 总是胜出越多的优先级。 主机和 / 或库存变量可以胜过角色默认值,但不显式包括 vars 目录或 include_vars 任务。 )

基本上,进入 “角色默认值”(角色中的默认文件夹)的任何东西都是最有价值的,容易被覆盖的。 该角色的 vars 目录中的任何内容都会覆盖该命名空间中该变量的先前版本。 这里要遵循的一个想法是,在范围上越明确,命令行 - e 额外的 vars 总是胜出越多的优先级。 主机和 / 或库存变量可以胜过角色默认值,但不显式包括 vars 目录或 include_vars 任务。

`