ansible学习及总结
目录
- 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.41. 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的安装机器上步骤一:设置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)缩进只能使用空格
详细内容可参考文章 https://www.cnblogs.com/caibao666/p/10238497.html
通过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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· Ollama——大语言模型本地部署的极速利器
· 使用C#创建一个MCP客户端
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现