目录
- ansible 介绍
- ansible 安装
- ansible 配置
- ansible 如何使用密码和key的方式连接管理机
- ansible ad-hoc模式及使用
- ansible playbook模式及使用方法
- playbook 模式使用示例
1 ansible介绍
ansible是python中的一套完整的自动化执行任务模块
ansible 的paly_books模式,采用yaml配置,对自动化任务执行更清晰
2 安装ansible
ansible的安装方式:
注:基于linux环境,已安装好python3.6.8,pip 21.2.4
1. python ./setup.py install
2. easy_install ansible
3. pip install ansible
3 ansible配置
3.1 ansible.cfg配置文件
点击查看详情
[defaults]
inventory = /etc/ansible/hosts #设置hosts文件所在目录
timeout = 10 #SSH连接超时时间,默认10s
host_key_checking = False #ansible第一次连接客户端是是否要检查ssh密钥
forks = 5 #ansible执行并发数,默认5
remote_port = 22 #ansible管理的机器连接端口号
default_sudo_user = root #ansible管理的机器访问账号
log_path = /var/log/ansible.log #设置ansible执行存放日志路径
private_key_file=/root/.ssh/id_rsa #设置ansible私钥存放的路径
3.2 hosts配置文件
[test_group1]
172.16.100.146:22 ansible_ssh_user=root ansible_ssh_pass="Reconova_123456"
[test_group2]
#test1 ansible_ssh_host=172.16.100.144 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_private_key_file=/root/.ssh/id_rsa
test1 ansible_ssh_host=172.16.100.144 ansible_ssh_port=22 ansible_ssh_user=root
[test_group2:vars]
touch_file=0914
1 配置方式:password、key
2 简单查看方式:
ansible all --list-hosts 【查看所有配置主机信息】
ansible test1 --list-hosts 【查看别名为test1的配置主机信息】
ansible test_group1 --list-hosts 【查看test_group1组下的配置主机信息】
3 区别主机别名方式和IP的配置方式
4. ansible如何使用密码和key的方式连接管理机
说明:ansible安装机器为控制机、另外两台为管理机器。
例如ansible安装在172.16.100.141服务器上,管理机器为172.16.100.144和172.16.100.146
4.1 密码方式
步骤一:设置ansible.cfg、hosts文件
在/etc/ansible 文件夹中新增ansible.cfg、hosts文件【若无ansible文件夹,手动创建即可】
步骤二:ansible.cfg设置如下
点击查看详情
[defaults]
inventory = /etc/ansible/hosts
timeout = 10 #SSH连接超时时间,默认10s
步骤三:hosts设置如下
点击查看详情
[test_group1] #测试组名称可以随意命名
172.16.100.146:22 ansible_ssh_user=root ansible_ssh_pass="Reconova_123456"
步骤四:可以用ansible all -a 'ls /tmp' 查看管理机是否返回命令执行结果
4.2 key方式
4.2.1 配置ansible所在机器通过key登录管理机器
点击展开查看详细操作步骤
在ansible安装机器上执行ssh-keygen生成公钥和私钥,再进行如下操作
[root@entrance1 ansible]# cd /root/.ssh/
[root@entrance1 .ssh]# ssh-copy-id -i id_rsa.pub root@172.16.100.144
上述操作完成后,在144服务器的/root/.ssh目录下新增了文件authorized_keys,此文件中存储的为ansible所在机器 id_rsa.pub的内容
以上操作完成后,即可执行 ansible all -a 'ls /root'命令,校验采用key的方式是否连上了管理机器,如下图所示未报错即正常连上管理机
4.2.2 ansible使用key方式操作管理机机器的设置方式
前两个步骤与密码方式一致
步骤三:hosts设置如下
说明:其中test1为管理机的别名,可以随意命名。
[test_group2]
test1 ansible_ssh_host=172.16.100.144 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_private_key_file=/root/.ssh/id_rsa
注:在ansible.cfg文件中有private_key_file=/root/.ssh/id_rsa这一行时,此处即可去掉私钥路径描述。
5 ad-hoc模式及使用
ad-hoc可以解决一些简单的任务,playbook可以解决一些复杂的任务。
ad-hoc 命令和 ansible playbook 的关系类似于在命令行敲入shell命令和 写shell scripts两者之间的关系
执行shell命令:
ansible test1 -m shell -a 'touch /home/0929.txt' -i hosts
拷贝文件命令:
ansible 172.16.100.146 -m raw -a 'src=/etc/ansible/Hmaster-stop.sh dest=/home/linshi'
6 ansible playbook模式及编写方式
6.1 playbook的yml文件编写
注意:playbook的yml文件编写填写hosts时若ansible的hosts文件中将ip地址写了别名,yml文件中的hosts也填写ip的别名
playbook的编写为yml文件,在编写yml时一定要注意yml的格式,如下一yml文件示例
---
- hosts: 172.16.100.146
remote_user: root
vars:
touch_file: aa.txt
tasks:
- name: touch file
shell: "touch /etc/ansible/{{touch_file}}"
yaml语法:
1)使用---表示一个文档的开始,
2)填写hosts时需前面增加-空格再接hosts字符
3)单引号与引号后所接的文字之间需要增加空格后再接字符,例如remote_user: root
4)同一个列表中的元素应该保持相同的缩进
5)下一层级与上一层级应缩进两个空格
8)缩进只能使用空格
通过yaml转化成json,可以更清晰的了解yaml的数据结构
在编辑完playbook后,可以先检查一下yml语法格式是否正确,再进行执行操作。
ansible-playbook test.yml --syntax-check #检查yaml文件的语法是否正确
6.2 playbook执行方式
查看playbook任务是否能正常可用,同时也校验了fi.yml文件写的是否正确
执行playbook命令:ansible-playbook -i /etc/ansible/hosts ./fi.yml
6.3 palybook里的变量
1)playbook的yaml文件中定义变量赋值,采用fi.yml演示
2)--extra-vars执行参数赋给变量,采用fi_1.yml演示
注:命令中赋值[将yml中变量注释]
ansible-playbook -i /etc/ansible/hosts ./fi.yml --extra-vars "touch_file=123"
3)在文件中定义变量【资产配置】,fi_1.yml演示
在hosts中进行设置,如下
[test_group1]
172.16.100.146:22 ansible_ssh_user=root ansible_ssh_pass="Reconova_123456"
[test_group2]
#test1 ansible_ssh_host=172.16.100.144 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_private_key_file=/root/.ssh/id_rsa
test1 ansible_ssh_host=172.16.100.144 ansible_ssh_port=22 ansible_ssh_user=root
[test_group2:vars]
touch_file=0914
4)注册变量,采用f_re.yml文件演示
absible的模块在运行之后,其实都会返回一些”返回值“,只是默认情况下,这些”返回值“并不会显示而已,
我们可以把这些返回值写入到某个变量中,这样我们就能通过引用对应的变量从而获取到这些返回值,
这种将模块值写入到变量中的方法被称为“注册变量”
7 playbook模式使用示例
7.1 创建用户
创建用户的yml文件
点击查看代码
---
- hosts: test1
remote_user: root
#vars:
#touch_file: aa.txt
tasks:
- name: add several users
user: name={{ item.name }} state=present groups={{ item.groups }}
with_items:
- { name: 'testuser1', groups: 'wheel'}【与上一级是四个空格】
- { name: 'testuser2', groups: 'root'}
查看有哪些用户命令:cat /etc/passwd |cut -f 1 -d :
7.2 文件拷贝
点击查看代码
---
- hosts: 172.16.100.146
gather_facts: false
remote_user: root
tasks:
- name: copy file
copy:
src: "{{ item.src }}"
dest: "{{ item.dest }}"
owner: reconova
group: reconova
mode: 0755
with_items:
- { src: "/etc/ansible/Hmaster-stop.sh", dest: "/home" }
7.3 条件语句
点击查看代码
---
- hosts: 172.16.100.146
#gather_facts: false
remote_user: root
tasks:
- name: "校验是否包含Hmaster进程"
shell: jps -ml |grep HMaster
register: result
failed_when: false
#- debug: msg={{ result.stdout }}
- name: "停用Hmaster组件"
remote_user: reconova
shell: jps -ml|grep HMaster | grep -v grep | awk '{print $1}' | xargs kill -9
when: "'start' in result.stdout"
- name: "启用Hmaster组件"
remote_user: reconova
shell: sh /home/h.sh
register: result2
- debug:
var: result2
7.4 监控服务器资源
点击查看代码
---
- hosts: test1
remote_user: root
gather_facts: no
tasks:
- name: "Statistics CPU Memory Disk Utilization..."
shell: |
free -m | awk 'NR==2{printf "Memory Usage: %s/%sMB (%.2f%%)\n", $3,$2,$3*100/$2 }'
top -bn1 | grep Cpu |awk '{printf "Cpu usage: (%.2f%%)\n",100-$8}'
register: out
- debug: var=out.stdout_lines