Ansible
⭐⭐⭐
一、部署
- 1.1. 通用安装方式YUM / EPEL
# cat aliBase.repo
[aliBase]
name=aliBase
baseurl=https://mirrors.aliyun.com/centos/$releasever/os/$basearch/
enabled=1
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/centos/$releasever/os/$basearch/RPM-GPG-KEY-CentOS-$releasever
# cat aliEpel.repo
[aliEpel]
name=aliEpel
baseurl=https://mirrors.aliyun.com/epel/$releasever\Server/$basearch/
enabled=1
gpgcheck=0
[root@harbor application]# rpm -qc ansible
/etc/ansible/ansible.cfg
/etc/ansible/hosts
二、使用
2.1. 简单使用
# 主机组建议配置方式--> 主机名 IP
[nginx]
nginx_001 ansible_ssh_host=xxxx
nginx_002 ansible_ssh_host=xxxx
## 使用--> ansible -i [配置文件] [主机组名] -m [模块名] -a [参数]
ansible nginx -m ping
ansible nginx:mysql -m ping
ansible all -m ping
ansible all:\!nginx -m ping
# ansible -i [配置文件] [主机组名] -m [模块名] -a [参数] -f [并发控制]
## ansible-doc -l|-s shell
# 模块1:
## command(不支持管道及重定向)
## shell(支持管道及重定向且输出友好)
## raw(支持管道及重定向)
[root@harbor ansible]# ansible all -m shell -a "df -h |grep sda"
192.168.56.133 | CHANGED | rc=0 >>
/dev/sda1 497M 200M 298M 41% /boot
192.168.56.131 | CHANGED | rc=0 >>
/dev/sda1 497M 200M 298M 41% /boot
# 模块2:copy(实现文件及目录的批量下发,不会重复下发)
ansible all -m copy -a "src=/tmp/xy/ansible1.md dest=/usr/local/src/ backup=yes owner=nobody group=nobody mode=0600"
ansible all -m copy -a "src=/tmp/xy dest=/usr/local/src/" # xy目录后没有'/'下发xy整个目录及目录的文件
# 模块3: fetch(批量拉取文件,不支持目录)
ansible all -m fetch -a "src=/etc/profile dest=/tmp/fetch"
# 模块4: cron(添加/删除定时任务)
ansible all -m cron -a "minute=0 hour=0 day=* month=* weekday=* name='xy_cron_test' job='/usr/sbin/ifconfig>/tmp/xy.log 2>&1' state=present"
ansible all -m cron -a "name='xy_cron_test' state=present"
# 模块5:script(批量运行脚本)
ansible all -m script -a "/tmp/xy.sh"
# 模块6:setup(查看内置变量)
ansible all -m setup
# 模块7: synchronize(基于rync, 过滤文件)
yum install rsync -y
# 模块8: wait_for(等待端口监听或关闭)
ansible all -m wait_for -a "port=80 host=192.168.56.10 state=stopped timeout=10"
2.2. Playbook
Ansible Playbook 是Ansible的编排格式的文件,是 Ansible定义和运行任务的文件,可以用来描述一组操作,也可以作为事件驱动的构建流程,以及在这些操作之间添加复杂的逻辑。Playbook使用 YAML格式,可以让用户提供一系列的指令,也可以提供一系列的动作,这些动作将会用于配置系统或部署应用。Playbook还可以利用Ansible提供的一些特性,比如循环、条件判断等,来简化系统管理任务的复杂度。
# 内置变量
- host: all # - 数组 []
task: # {}
- name: xy var # [{"name": "...", "shell": "...","registr": "..."}, {"debug": ""}]
shell: echo "{{ inventory_hostname }}"
register: result
- debug: var=result
# 自定义变量
- hosts: all
vars:
- name: xy
city: HanCheng
tasks:
- name: define var
shell: echo "name is {{ name }}. city is {{ city }}"
register: result
- debug: var=result
# 逻辑处理
## 判断(when)
---
- hosts: all
tasks:
- name: hostname 7
shell: hostnamectl set-hostname {{ inventory_hostname }} # 内置变量
when: ansible_distribution_major_version == "7"
- name: hostname 6
shell: hostname {{ inventory_hostname }}; sed "s/HOSTNAME=.*/HOSTNAME={{ inventory_hostname }}/" /etc/sysconfig/network
register: result
- debug: var=result
when: ansible_distribution_major_version == "6"
- name: modify etc hosts
shell: grep "{{ ansible_ens33['ipv4']['address'] }} {{ inventory_hostname }}" /etc/hosts || echo "{{ ansible_ens33['ipv4']['address'] }} {{ inventory_hostname }}" >>/etc/hosts
register: result
- debug: var=result
## 循环(with_items、with_fileglob)
---
- hosts: all
tasks:
- name: xy with_items shell
shell: echo {{ item }}
with_items:
- /root/xy1
- /root/xy2
register: result
- debug: var=result
# Template Jinja2 模板
## ansible all -m setup (查看变量) /root/xy.j2
cpu count: {{ ansible_processor_count }}
eth0 ip addr: {{ ansible_ens33['ipv4']['address'] }}
mem: {{ ansible_memtotal mb }}
## yml
- hosts: all
tasks:
- name: xy template
template: src=/root/xy.j2 dest=/usr/local/src/xy.conf
notify:
- notify restart
handlers:
- name: notify restart
shell: echo "running restart" >/tmp/xy.log 2>&1
# YAML文件由数据和规则组成,其数据以键值对的形式存储,其规则用于定义数据之间的关系。数据和规则可以用YAML语法中的缩进和空格来进行表示,以确保数据可以被正确地解析。
# - 代表数组[]
- host: all
task:
- name: synchronize script
rsync_opts=--exclude=.git*
三、参考文档
Roles标准化Playbook
$ tree ./playbook/
./playbook/
|-- main.yml
`-- roles
`-- nginx
|-- files
| `-- xy.sh
|-- handlers
| `-- main.yml
|-- tasks
| `-- main.yml
|-- templates
| `-- xy.j2
`-- vars
`-- main.yml
自动化运维工具--ansible详解(一) - 珂儿吖 - 博客园
Linux权限详解(chmod、600、644、700、711、755、777、4755、6755、7755)_林20的博客-CSDN博客_linux 权限
本文来自博客园,作者:anyu967,转载请注明原文链接:https://www.cnblogs.com/anyu967/articles/17324487.html