Ansible自动化运维

2018-11-04  本文已影响0人  Devops_cheers

比较流行的自动化运维工具有Ansible、Puppet、SaltStack、Chef等,其中Ansible是我在工作中用到的工具。由于工作中有大量的远程机并且并没有安装任何自动化运维工具,所以我最迫切的自动化运维工具是不需要安装任何客户端的,Ansible满足了这一点,所以我使用了它。当然SaltStack也有无客户端模式,但这是我后来才知道的。

Ansible安装

Ansible提供了多种安装方式,由于是python开发的软件,建议以python库的方式安装:

pip install ansible

安装完成之后可以在命令行执行以下常用的命令

概念

部分命令行参数

Inventory格式

[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
常用模块
执行后台程序

如下命令可以实现,all表示对主机清单中的所有主机执行任务,win_command表示在远程主机上执行命令行程序,background.exe要执行的后台程序,target主机清单文件。另外backgroup.exe可以通过win_copy模块拷贝到远程主机上

ansible all -m win_command -a 'background.exe' -i target -B 10 -P 0 -f 5

Ansible Playbook

playbook提供非常强大的功能,远不止把多个ansbile命令写到一个文件中来执行那么简单。在playbook中不仅可以定义任务的执行顺序,还能定义不同的变量,定义任务之间的关联关系,定义基于环境和角色的差异化配置推送,具有很多非常灵活的特性
playbook的编写使用yaml语言格式,有兴趣的同学可以深入了解一下。

自定义变量

ansible有很多自动变量的方式,包括但不仅限于以下几种

  1. 在inventory中自定义变量
    定义如下
192.168.0.100  var_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=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=server.txt dest=/root/{{var}}

部分linux模块

后记

在工作过程中我使用到了ansible,它帮助我解决了一些问题,还是挺nice的。

上一篇 下一篇

猜你喜欢

热点阅读