Ansible自动化运维
【Ansible自动化运维】比较流行的自动化运维工具有Ansible、Puppet、SaltStack、Chef等,其中Ansible是我在工作中用到的工具。由于工作中有大量的远程机并且并没有安装任何自动化运维工具,所以我最迫切的自动化运维工具是不需要安装任何客户端的,Ansible满足了这一点,所以我使用了它。当然SaltStack也有无客户端模式,但这是我后来才知道的。Ansible安装 Ansible提供了多种安装方式,由于是python开发的软件,建议以python库的方式安装:
pip install ansible
安装完成之后可以在命令行执行以下常用的命令
- ansible:执行任务
- ansible-doc: 获取ansible相关的文档信息
- ansible-playbook:读取并运行playbook中定义的任务
- Ansible核心:是指执行任务的程序,主要有ansible命令和ansible-playbook命令,前者执行一些临时性的命令,后者根据编排好的剧本可以执行非常复杂的任务
- Inventory: 主机清单,里面包含了要执行任务的服务器ip,执行任务时需要制定主机清单,不指定时使用默认配置,命令行中使用-i参数指定
- Modules: 模块,ansible提供了相当多的内置模块,比如command模块可以支持在远程服务器上执行命令行,copy模块可以拷贝本地文件到远程服务器等。模块也分为三类:核心模块、扩展模块、自定义模块
- Playbook: 剧本,将所需要执行的任务通过配置文件的方式保存下来,我们称该配置文件为剧本。ansible使用yaml格式编写剧本。ansible-playbook是专门执行剧本的命令
- -i INVENTORY, --inventory=INVENTORY, --inventory-file=INVENTORY
该参数指定执行任务的主机清单 - -m MODULE_NAME, --module-name=MODULE_NAME
该参数执行要执行的模块 - -a MODULE_ARGS, --args=MODULE_ARGS
执行模块时的参数,比如 -m command -a 'ls -l' - -f FORKS, --forks=FORKS
确认fork子进程的个数,也就是任务的并发数 - -B SECONDS, --background=SECONDS
任务切换成后台执行模式,该参数指定了任务最长执行时间,也就是超时时间 - -P POLL_INTERVAL, --poll=POLL_INTERVAL
使用了-B参数之后可使用该参数确定多少秒检查一次是否有结果返回,如果为0则立即返回,例如使用'-B 10 -P 0'可以实现任务在远程机上后台执行,并且ansible不会等待任务的结束,在某些场景下非常好用
[dbservers]// 定义一个主机组
db.example.com// 服务器域名
192.168.1.100// 服务器ip
192.168.1.101 ansible_connection=ssh ansible_ssh_user=root ansible_ssh_pass=password// 定义了主机的一些特定参数如连接方式、用户名、密码
[dbservers:vars]//为一组主机定义相同的变量参数
ansible_connection=ssh
ansible_ssh_user=root
ansible_ssh_pass=password
Windows主机相关 连接 可以使用如下inventory配置与windows进行连接,不过python环境下需安装pywinrm,远程主机上有开启winrm服务(该服务一般在windows server上默认开启)
192.168.0.1 ansible_user=Administrator ansible_password=password ansible_port=5985 ansible_connection=winrm ansible_winrm_transport=ntlm ansible_winrm_server_cert_validation=ignore
常用模块
- win_copy: 拷贝文件到windows主机
- win_file: 操作windows远程主机文件
- win_command: 在windows远程主机执行命令行
- win_shell: 在windows远程主机执行shell命令
- win_unzip: 文件解压缩
ansible all -m win_command -a 'background.exe' -i target -B 10 -P 0 -f 5
Ansible Playbook playbook提供非常强大的功能,远不止把多个ansbile命令写到一个文件中来执行那么简单。在playbook中不仅可以定义任务的执行顺序,还能定义不同的变量,定义任务之间的关联关系,定义基于环境和角色的差异化配置推送,具有很多非常灵活的特性
playbook的编写使用yaml语言格式,有兴趣的同学可以深入了解一下。
自定义变量 ansible有很多自动变量的方式,包括但不仅限于以下几种
- 在inventory中自定义变量
定义如下
192.168.0.100var_a=1 var_b=1
运行以下命令行即可在远程机上打印出1,参数var通过{{}}格式引用
ansible 192.168.0.100 -m command -a 'echo {{var_a}}' -i inventory
2.在ansible的hosts和groups中定义变量
在ansible特定的目录中可以定义对hosts和groups定义的变量,/etc/ansible/group_vars/目录中定义groups的变量,变量文件是.yml文件,注意定义时文件名必须和group名字相同,同样在/etc/ansible/host_vars/目录中可以定义host的变量,文件名和host名也必须一致,内容遵循yml格式。引用时用{{}}符号将变量括起来
cat /etc/ansible/group_vars/test.yml
---
var_test: 1
cat /etc/ansible/host_vars/192.168.0.100.yml
---
var_test:2
3.在playbook中直接定义和使用变量
---
- host: AnsibleClientIn
vars:
- filename: config.txt
tasks:
- name: copy file
copy: src=https://www.it610.com/article/server.txt dest=/root/{{filename}}
4.在独立的文件中自定义变量
playbook中提供了一个var_files关键字,用于引用一个独立文件中的变量
---
- host: AnsibleClientIn
var_files:
- /root/ansible_playbook/my_vars.yml
tasks:
- name: copy file
copy: src=https://www.it610.com/article/server.txt dest=/root/{{var}}
部分linux模块
- command模块:用于在目的主机中执行命令
- shell模块:与command类似,还支持变量管道等高级特性
- file模块:对目的主机的文件进行操作
- copy模块:将本地某个文件推送到目的主机上
- template木块:模板管理模块
- git模块:使用git来发布程序或者版本
- yum或apt模块:软件管理模块
- service模块:管理服务状态的模块
- setup模块:数据采集模块,用于从目的主机收集系统信息
推荐阅读
- 人脸识别|【人脸识别系列】| 实现自动化妆
- 运维|如何限制IP 通过 SSH连接服务器
- 运维|Linux 禁止用户或 IP通过 SSH 登录
- Java+Selenium|Java+Selenium Web UI自动化测试的一些小总结
- 运维搬的不是砖,是一份时间的从容
- Jenkins自动化部署-前端篇|Jenkins自动化部署-前端篇 (四)
- Jenkins+SonarQube代码质量检查自动化
- iOS|iOS 高效开发必备技巧之自动化打包(shell xcode11 上传App Store 蒲公英等平台)
- 接口自动化测试PHPUnit-框架代码开发3
- appium+python自动化测试(2)