ansible是一个自动化的"配置管理"工具;
- 应用服务橄管理,安装、配置、启动、更新配置;
优点:
- 批量执行; playbook编排IT任务;
- 嵌入至其他的项目;jumpserver;
- 简单,容易学习; 、
- 功能强大,模块众多;
缺点:
- 幂等性:每次的描述一种状态后,服务器会按照你所期望的状态去运行;出了问题无法回退;
- 重新在描述一次状态,然后执行,以实现回退的效果; b - a
- 如果链接的主机较多,执行的速度会比较的慢;并行执行;saltstack并发执行;
架构图
ansible配置文件
[root@master ~]# rpm -qc ansible
/etc/ansible/ansible.cfg
/etc/ansible/hosts # 主机清单文件
#inventory = /etc/ansible/hosts #可以自定义
#library = /usr/share/my_modules/
#module_utils = /usr/share/my_module_utils/
#remote_tmp = ~/.ansible/tmp
#local_tmp = ~/.ansible/tmp
#plugin_filters_cfg = /etc/ansible/plugin_filters.yml
#forks = 5 # 调节并行主机数量
#host_key_checking = False
ansible配置文件优先级
# nearly all parameters can be overridden in ansible-playbook
# or with command line flags. ansible will read ANSIBLE_CONFIG,
# ansible.cfg in the current working directory, ansible.cfg in
# the home directory or /etc/ansible/ansible.cfg, whichever it
# finds first
第一步读取: ANSIBLE_CONFIG
[root@master ~]# export ANSIBLE_CONFIG=/tmp/ansible.cfg
[root@master ~]# touch /tmp/ansible.cfg
[root@master ~]# ansible --version
ansible 2.9.27
config file = /tmp/ansible.cfg
[root@master ~]# unset ANSIBLE_CONFIG
[root@master ~]# ansible --version
ansible 2.9.27
config file = /etc/ansible/ansible.cfg
第二步读取: 当前项目目录下的ansible.cfg
***** 为项目单独定义配置文件
[root@master ~]# mkdir project1
[root@master ~]# cd project1/
[root@master project1]# touch ansible.cfg
[root@master project1]# ansible --version
ansible 2.9.27
config file = /root/project1/ansible.cfg
第三步读取: 当亲用户家目录下的.ansible.cfg
[root@master project1]# touch ~/.ansible.cfg
[root@master ~]# ansible --version
ansible 2.9.27
config file = /root/.ansible.cfg
[root@master ~]# rm -f ~/.ansible.cfg
[root@master ~]# ansible --version
ansible 2.9.27
config file = /etc/ansible/ansible.cfg
第四步读取: /etc/ansible/ansible.cfg
默认加载路径
[root@master ~]# ansible --version
ansible 2.9.27
config file = /etc/ansible/ansible.cfg
ansible Inventory
# 单台主机
192.168.10.10
# 主机组
[webservers]
192.168.10.10
[dbservers]
192.168.10.20
www[001:006].example.com
[test]
db[a:z][a:z]node.example.com
[root@master ansible]# ansible wrbservers --list-hosts
[WARNING]: Could not match supplied host pattern, ignoring: wrbservers
[WARNING]: No hosts matched, nothing to do
hosts (0):
[root@master ansible]# ansible webservers --list-hosts
hosts (1):
192.168.10.10
[root@master ansible]# ansible dbservers --list-hosts
hosts (7):
192.168.10.20
www001.example.com
www002.example.com
www003.example.com
www004.example.com
www005.example.com
www006.example.com
[root@master ansible]# echo "26*26" | bc
676
[root@master ansible]# ansible test --list-host -i /etc/ansible/hosts |wc -l
677
ansible-密码-秘钥连接方式
[webservers]
192.168.10.10 # ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass=000000
[webservers:vars]
ansible_ssh_port=22
ansible_ssh_user=root
ansible_ssh_pass=000000
先免密
ssh-copy-id ~/.ssh/id_rsa.pub root@192.168.10.10
ssh-copy-id ~/.ssh/id_rsa.pub root@192.168.10.20
修改主机清单
[webservers]
192.168.10.10
[dbservers]
192.168.10.20
ansible 匹配主机名称方式
指定所有的组
[root@master ~]# ansible all -m ping
通配符
[root@master ~]# ansible "*" -m ping
与: 在webservers组:并且在dbservers中的主机
[root@master ~]# ansible "webservers:&dbservers" -m ping
或: 在webservers组或者在dbservers组中的主机
[root@master ~]# ansible "webservers:dbservers" -m ping
非: 在webservers组但不在dbservers的主机
[root@master ~]# ansible 'webservers:dbservers' -m ping
使用普通用户管理被控端
控制端
useradd HYC
echo "123" | passwd --stdin HYC
vim /etc/sudoers
root ALL=(ALL) ALL
HYC ALL=(ALL) NOPASSWD:ALL #加上这一行
visudo -c # 检查语法
vim /etc/ansible/ansible.cfg
[privilege_escalation]
become=True
become_method=sudo
become_user=root
become_ask_pass=False
被控制端
useradd HYC
echo "123" | passwd --stdin HYC
vim /etc/sudoers
root ALL=(ALL) ALL
HYC ALL=(ALL) NOPASSWD:ALL #加上这一行