自动化运维与python项目实战:Ansible自动化任务
用Python编写简单自动化任务脚本 #生活乐趣# #日常生活趣事# #生活趣味分享# #科技小发明#
目录
自动化任务执行的意义
1.什么是自动化执行任务?
2. 自动化执行的意义
3. 自动化任务执行的应用
Ansible安装与基础
1. 什么是Ansible?
2. Ansible的特点
3. Ansible的安装
4. Ansible的配置文件
4.1 Ansible配置文件位置的设置
4.2 Ansible配置文件
4.3 Ansible主机清单配置详解
Ansible ad-hoc模式
1. 什么是ad-hoc模式?
2. ad-hoc模式使用场景
3. ad-hoc模式的命令使用
4.ad-hoc模式的常用模块
Ansible Playbook模式
1.什么是Playbook及其组成
2.Playbook的配置语法
3.playbook的第一个应用案例
自动化任务执行的意义
1.什么是自动化执行任务?
假设我们要在10台Linux服务器上安装一个Nginx服务, 手动是如何操作的?
第一步: ssh登录Linux(1,2,3...10)服务器第二步: 输入对应服务器密码第三步: 执行命令yum install nginx第四步: 执行命令systemctl start nginx第五步: 退出登录循环执行前面的操作,直到10台服务器的Nginx服务部署完成。解决方案:
登录哪些服务器;执行哪些命令;自动化程序
2. 自动化执行的意义
提升运维工作效率, 减少一份工作成本
提高准确度, 手工部署易出错
3. 自动化任务执行的应用
应用一: 批量命令执行应用二: 定时任务应用三: 批量程序应用服务安装应用四: 批量配置文件同步应用五: 批量代码部署Ansible安装与基础
1. 什么是Ansible?
Ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet、chef、func、 fabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。
Ansible是基于 paramiko 开发的,并且基于模块化工作,本身没有批量部署的能力。真正具有批量 部署的是Ansible所运行的模块,Ansible只是提供一种框架。Ansible不需要在远程主机上安装 client/agents,因为它们是基于ssh来和远 程主机通讯的。Ansible目前已经已经被红帽官方收购,是自动化运维工具中大家认可度最高的,并且上手容易, 学习简单。是每位运维工程师必须掌握的技能之一。2. Ansible的特点
Ansible是Python语言实现的一套完整的自动化任务执行模块。Ansible的play book模式, 采用yaml配置,对于自动化任务执行一目了然部署简单,只需在主控端部署Ansible环境,被控端无需做任何操作默认使用SSH协议对设备进行管理Ansible自动化场景支持丰富(大量常规运维操作模块),实现日常绝大部分操作配置简单、功能强大、扩展性强支持API及自定义模块,可通过Python轻松扩展通过Playbooks来定制强大的配置、状态管理轻量级,无需在客户端安装agent,更新时,只需在操作机上进行一次更新即可提供一个功能强大、操作性强的Web管理界面和REST API接口——AWX平台3. Ansible的安装
方法一: 通过系统的方式: yum和apt-get等方法二: 通过python的方式安装pip3 install ansible -i https://pypi.douban.com/simple
ansible --version
python
运行

4. Ansible的配置文件
需要创建的配置文件有:
mkdir /etc/ansible
cd /etc/ansible
touch ansible.cfg
touch hosts
python
运行

ansible与我们其他的服务在这一点上有很大不同,Ansible的配置文件查找是从多个地方找的,顺序如下:
检查环境变量ANSIBLE_CONFIG指向的路径文件export ANSIBLE_CONFIG=/etc/ansible/ansible.cfg ./ansible.cfg, 检查当前ansible命令所在目录下的ansible.cfg配置文件~/ansible.cfg,检查当前用户家目录下的ansible.cfg配置文件/etc/ansible/ansible.cfg,如果前面都没有指定,默认指定的配置文件路径 4.2 Ansible配置文件
ansible 的配置文件为 /etc/ansible/ansible.cfg ,ansible 有许多参数,下面我们列出一些常见的参数:
[defaults]
inventory = /etc/ansible/hosts
library = /usr/share/ansible
sudo_user = root
host_key_checking=False
remote_port = 22
log_path = /var/log/ansible.log
[ssh_connection]
ssh_args = -o StrictHostKeyChecking=no
python
运行
4.3 Ansible主机清单配置详解在配置文件中,我们提到了资源清单,这个清单就是我们的主机清单,里面保存的是一些 ansible 需要连接管理的主机列表。我们可以来看看他的定义方式:
ansible1.example.com
192.168.100.1
[mysql_test]
ansible1.example.com
ansible2.example.com
192.168.100.1
192.168.100.2
python
运行
在Ansible配置文件中,简单介绍了主机清单的配置,可实现对主机的分组。那么如果想要对指定主机 实现远程ssh连接并批量执行命令,该如何操作呢? 想要远程ssh连接,有三种方式:
方法1:密码实现远程ssh连接
vim /etc/ansible/hosts 写入下面内容
[test] ansible要操作的对象
172.25.254.10:22 ansible_ssh_user=root ansible_ssh_pass='123' 指定IP地址 用户 用户密码
172.25.254.20:22 ansible_ssh_user=root ansible_ssh_pass='123'
注意上述的内容可以根据自己的需求来写。
python
运行
方法2:密钥实现远程ssh连接
1) 生成并配置ssh公钥和私钥, 如何免密登录, 快速操作如下:
$ ssh-keygen
$ ssh-copy-id -i ~/.ssh/id_rsa.pub root@需要登录的远程主机
ssh root@需要登录的远程主机
python
运行
2) 编辑Ansible的配置文件
[test]
172.25.254.10:22 ansible_ssh_user=root ansible_ssh_private_key_file=密钥文件的路径
python
运行
3) 执行测试
ansible all -a 'date'
bash

Ansible ad-hoc模式
1. 什么是ad-hoc模式?
Ad-Hoc简而言之是“临时命令”.Ansible提供两种完成任务方式:
Ad-Hoc模式,即命令集,适合解决一些简单或者平时工作中临时遇到的任务。PlayBook模式, 即Ansible-playbook剧本,适合解决复杂或需固化下来的任务。2. ad-hoc模式使用场景
场景一: 在多台电脑上,查看某个进程是否启动。场景二: 在多台机器上, 拷贝指定日志文件到本地。场景三: 检查proxy主机组的所有主机是否存活。场景四: 在多台机器上, 查看proxy主机组所有主机的磁盘容量。等等3. ad-hoc模式的命令使用
Ad-Hoc命令集由/usr/bin/ansible实现,其命令用法如下:
ansible <host-pattern> [options]
python
运行
host-pattern:用于匹配主机名或者主机组名ansible 192.168.1.* -a 'hostname'
ansible group1 -a 'hostname'
ansible test1 -a 'hostname'

4.ad-hoc模式的常用模块
Ad-Hoc命令集支持的模块有很多, 其中ansible-doc 命令常用于获取模块信息及其使用帮助,一般用法如下:
ansible-doc -l
ansible-doc -s MOD_NAME
python
运行

实例演示:
主机连通性测试ansible test -m ping

这个模块可以直接在远程主机上执行命令,并将结果返回本主机。命令模块接受命令名称,后面是空格分隔的列表参数。给定的命令将在所有选定的节点上执行。它不会通过shell进行处理,比如$HOME和操作如"<",">","|",";","&" 工作(需要使用(shell)模块实现这些功能)。注意,该命令不支持| 管道命令。
ansible test -m command -a 'df -h'

shell模块可以在远程主机上调用shell解释器运行命令,支持shell的各种功能,例如管道等。
ansible test -m shell -a 'cat /etc/passwd | grep "^root"'
python
运行

此模块用于将文件复制到远程主机,同时支持给定内容生成文件和修改权限等
ansible test -m copy -a 'src=/etc/passwd dest=/mnt'

ansible test -m copy -a "content='hello ansible' dest='/mnt/ansible' mode ='666'"
yum 模块顾名思义,该模块主要用于软件的安装,可批量在多台主机上安装。
ansible test -m yum -a 'name=nginx state=present'

该模块用于服务程序的管理
absible test -m service -a 'name=niginx state=started enabled=true'

ansible test -m service -a 'name=nginx state=stopped'

Ansible Playbook模式
1.什么是Playbook及其组成
playbook不同于ad-hoc模式,适合部署复杂应用程序。优势: Playbook可以定制配置,可以按照指定的操作步骤有序执行,支持同步和异步方式。playbook是通过YAML格式来进行描述定义的, 语法简单,操作方便。playbook由一个或者多个play组成, 一个play可以包含多个task, 因此可使用多个不同的模块完成一件事情。play: 定义的是主机的角色task:定义具体执行的任务,由模板定义的操作列表2.Playbook的配置语法
playbook基本使用
ansible-playbook playbook.yml [options]
常用选项总结:

3.playbook的第一个应用案例
yaml语法要点:
yaml文件以"---"作为文档的开始缩进:表示层级结构,每个缩进由两个空格组成, 不能使用tab。冒号: 以冒号结尾的除外,其他所有冒号后面所有必须有空格。短横线: 表示列表项,使用一个短横杠加一个空格。大小写敏感ansible的主配置文件设定:
[defaults]
inventory = /etc/ansible/hosts
library = /usr/share/ansible
sudo_user = root
host_key_checking=False
remote_port = 22
log_path = /var/log/ansible.log
[ssh_connection]
ssh_args = -o StrictHostKeyChecking=no
python
运行
ansible的主机清单管理:
[test]
172.25.254.10:22 ansible_ssh_user=root ansible_ssh_pass='123'
172.25.254.20:22 ansible_ssh_user=root ansible_ssh_pass='123'
python
运行
创建yaml文件并编辑:

---
- hosts: test
remote_user: root
vars:
filename: "westos.c"
http_port: 8080
tasks:
- name: test
file: name=/mnt/{{filename}} state='touch'
- name: create new user
user: name=winter uid=1009 system=yes shell=/bin/bash
- name: install http package
yum: name=httpd state='present'
- name: config http
template: src=./template/httpd.conf dest=/etc/httpd/conf/httpd.conf
notify:
- restart apache
- name: copy index.html
copy: src=./template/index.html dest=/var/www/html/index.html backup=yes mode=666
handlers:
- name: restart apache
service: name=httpd state=restarted enabled=true
~
python
运行
测试 在安装有ansible的服务器做测试
ansible-playbook westos.yml

网址:自动化运维与python项目实战:Ansible自动化任务 https://www.yuejiaxmz.com/news/view/1402337
相关内容
Ansible自动化运维与任务执行自动化运维:使用Ansible简化日常任务
【补充】Python的自动化工具Ansible
Ansible 自动化运维工具详解
带你了解Linux自动化运维工具——ansible
一课玩转自动化运维全流程,轻松应对自动化运维岗MK
玩转自动化运维全流程
Python自动化任务
Ansible 异步任务管理:提升自动化脚本执行效率的技巧与实践
自动化编排工具(Ansible)

