Ansible是战操作演新出现的自动化运维工具,基于Python开发,绍实示集合了众多运维工具(puppet、战操作演cfengine、绍实示chef、战操作演func、绍实示fabric)的战操作演优点,实现了批量系统配置、绍实示批量程序部署、战操作演批量运行命令等功能。绍实示
Ansible 特点:
部署简单,战操作演只需要在主控端部署Ansible环境,绍实示被控端无需作任何操作默认使用SSH协议对设备进行管理主从集中化管理配置简单、战操作演功能强大、绍实示扩展性强支持API及自定义模块、可以通过Python轻松扩展通过Playbooks来定制强大的配置、状态管理对云计算平台、大数据都有很好的支持官方文档:https://docs.ansible.com/ansible/latest/GitHub地址:https://github.com/ansible/ansible

上图为ansible的基本架构,从上图可以了解到其由以下部分组成:
核心:ansible核心模块(Core Modules):这些都是ansible自带的模块扩展模块(Custom Modules):如果核心模块不足以完成某种功能,可以添加扩展模块插件(Plugins):完成模块功能的补充剧本(Playbooks):ansible的任务配置文件,将多个任务定义在剧本中,由ansible自动执行连接插件(Connectior Plugins):ansible基于连接插件连接到各个主机上,香港云服务器虽然ansible是使用ssh连接到各个主机的,但是它还支持其他的连接方法,所以需要有连接插件主机清单(Host Inventory):定义ansible管理的主机
从上面的图上可以了解到:
管理端支持local 、ssh、zeromq 三种方式连接被管理端,默认使用基于ssh的连接,这部分对应上面架构图中的连接模块;可以按应用类型等方式进行Host Inventory(主机清单)分类,管理节点通过各类模块实现相应的操作,单个模块,单条命令的批量执行,我们可以称之为ad-hoc;管理节点可以通过playbooks 实现多个task的集合实现一类功能,如web服务的安装部署、数据库服务器的批量备份等。playbooks我们可以简单的理解为,系统通过组合多条ad-hoc操作的配置文件 。release
yum -y install ansible
ansible --version1.2.3.
配置文件:/etc/ansible/ansible.cfg
复制# 去掉前面的服务器租用#号
#log_path = /var/log/ansible.log ==> log_path = /var/log/ansible.log1.2.复制# 第一种(推荐)
vi /etc/ansible/ansible.cfg# 其实就是把#去掉
# host_key_checking = False ==> host_key_checking = False# 第二种
vi /etc/ssh/ssh_config
StrictHostKeyChecking ask ==> StrictHostKeyChecking no1.2.3.4.5.6.7.8.
安装完ansible后,发现ansible一共为我们提供了七个指令:ansible、ansible-doc、ansible-galaxy、ansible-lint、ansible-playbook、ansible-pull、ansible-vault。这里我们只查看usage部分,详细部分可以通过 "指令 -h" 的方式获取。
ansible是指令核心部分,其主要用于执行ad-hoc命令,即单条命令。默认后面需要跟主机和选项部分,默认不指定模块时,使用的是command模块。不过默认使用的模块是可以在/etc/ansible/ansible.cfg 中进行修改的#module_name = command。
复制ansible 192.168.182.130 -a date1.该指令用于查看模块信息,常用参数有两个-l 和 -s
复制#列出所有已安装的模块ansible-doc -l
ansible-doc -l
#查看具体某模块的用法,这里如查看command模块
ansible-doc -s command1.2.3.4.ansible-playbook 命令是使用最多的IT技术网指令,其通过读取playbook 文件后,执行相应的动作,这个后面会做为一个重点来讲。
ansible-galaxy 指令用于方便的从https://galaxy.ansible.com/ 站点下载第三方扩展模块,我们可以形象的理解其类似于centos下的yum、python下的pip或easy_install 。如下示例:
复制ansible-galaxy install aeriscloud.docker1.ansible-lint是对playbook的语法进行检查的一个工具。用法如下:
复制ansible-lint playbook.yml1.该指令使用需要谈到ansible的另一种模式,pull 模式,这和我们平常经常用的push模式刚好相反,其适用于以下场景:你有数量巨大的机器需要配置,即使使用非常高的线程还是要花费很多时间;你要在一个没有网络连接的机器上运行Anisble,比如在启动之后安装。
注意事项:
执行ansible的主机一般称为主控端,中控,master或堡垒机主控端python版本需要在2.6或以上被控端python版本小于2.4需要安装python-simplejson被控端如开启SELinux需要安装libselinux-pythonwindows不能作为主控端复制# 生成秘钥
ssh-keygen
# 将秘钥拷贝到被管理服务器上
ssh-copy-id -i ~/.ssh/id_rsa.pub -p 22 root@192.168.182.1301.2.3.4.k:交互式
ansible -uroot -k 192.168.182.130 -m ping1.2. 2、配置文件中配置 复制# 默认主机配置文件:/etc/ansible/hosts
192.168.182.130 ansible_ssh_user=root ansible_ssh_pass=123456[web]192.168.182.130 ansible_ssh_user=root ansible_ssh_pass=1234561.2.3.4.5.常用的配置参数如下:

主机清单配置(默认配置文件:/etc/ansible/hosts)
示例:
复制# -m:指定模块
# -a:指定参数
ansible 192.168.182.110 -m ping
ansible 192.168.182.110 -m shell -a "df -h"1.2.3.4.
复制# 定义webservers组
[webservers]192.168.182.110192.168.182.1121.2.3.4.示例:
复制# -m:指定模块
# -a:指定参数
ansible webservers -m ping
ansible webservers -m shell -a "df -h"1.2.3.4.
常用配置参数如下:

示例:
复制ansible 192.168.182.130 -m ping1.
# 子分组
[nfs:children]web
mysql
# 对分组统一定义变量
[nfs:vars]ansible_ssh_user=root
ansible_ssh_pass=123456ansible_ssh_port=221.2.3.4.5.6.7.8.9.10.11.12.13.14.示例:
复制ansible nfs -m ping
# -o:一行显示
ansible nfs -m ping -o1.2.3.
EOF
[web]192.168.182.130192.168.182.110[mysql]192.168.182.111# 子分组
[nfs:children]web
mysql
# 对分组统一定义变量
[nfs:vars]ansible_ssh_user=root
ansible_ssh_pass=123456ansible_ssh_port=22EOF1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.示例:
复制# -i:指定主机列表文件
ansible -i hostlist nfs -m ping1.2.
官方文档:https://docs.ansible.com/ansible/latest/command_guide/intro_adhoc.html
ad-hoc 命令是一种可以快速输入的命令,而且不需要保存起来的命令,一般测试调试时用的多,ad-hoc简而言之,就是"临时命令"。
默认模块,没有shell强大,基本上shell模块都可以支持command模块的功能。
【1】帮助
复制ansible-doc command
# 推荐使用下面这个
ansible-doc command -s1.2.3.【2】参数解释
free_form——必须参数,指定需要远程执行的命令。需要说明一点,free_form 参数与其他参数(如果想要使用一个参数,那么则需要为这个参数赋值,也就是name=value模式)并不相同。比如,当我们想要在远程主机上执行 ls 命令时,我们并不需要写成”free_form=ls” ,这样写反而是错误的,因为并没有任何参数的名字是 free_form,当我们想要在远程主机中执行 ls 命令时,直接写成 ls 即可。因为 command 模块的作用是执行命令,所以,任何一个可以在远程主机上执行的命令都可以被称为 free_form。chdir——此参数的作用就是指定一个目录,在执行对应的命令之前,会先进入到 chdir 参数指定的目录中。creates——看到 creates,你可能会从字面上理解这个参数,但是使用这个参数并不会帮助我们创建文件,它的作用是当指定的文件存在时,就不执行对应命令,比如,如果 /testdir/test文件存在,就不执行我们指定的命令。removes——与 creates 参数的作用正好相反,它的作用是当指定的文件不存在时,就不执行对应命令,比如,如果 /testdir/tests 文件不存在,就不执行我们指定的命令,此参数并不会帮助我们删除文件。【3】示例演示
复制# 上面命令表示在 web 主机上执行 ls 命令,因为使用的是 root 用户,所以默认情况下,ls 出的结果是 web 主机中 root 用户家目录中的文件列表。
ansible web -m command -a "ls"# chdir 参数表示执行命令之前,会先进入到指定的目录中,所以上面命令表示查看 web 主机上 /testdir 目录中的文件列表,返回显示有2个文件。
ansible web -m command -a "chdir=/testdir ls"# 下面命令表示 /testdir/testfile1 文件存在于远程主机中,则不执行对应命令。/testdir/testfile3 不存在,才执行”echo test”命令。
ansible web -m command -a "creates=/testdir/testfile1 echo test"# 下面命令表示 /testdir/testfile3 文件不存在于远程主机中,则不执行对应命令。/testdir/testfile1 存在,才执行”echo test”命令。
ansible web -m command -a "removes=/testdir/testfile1 echo test"1.2.3.4.5.6.7.8.9.10.11. 2、shell 模块shell模块 [执行远程主机的shell/python等脚本]。
【1】查看帮助
复制ansible-doc shell -s1.【2】示例演示
复制# -o:一行显示
# 安装httpd
ansible web -m shell -a yum -y install httpd -o
# 查看时间
ansible web -m shell -a uptime -o1.2.3.4.5.6. 3、script 模块script模块 [在远程主机执行主控端的shell/python等脚本 ]。
【1】查看帮助
复制ansible-doc script -s1.【2】参数解释
free_form——必须参数,指定需要执行的脚本,脚本位于 ansible 管理主机本地,并没有具体的一个参数名叫 free_form,具体解释请参考 command 模块。chdir——此参数的作用就是指定一个远程主机中的目录,在执行对应的脚本之前,会先进入到 chdir 参数指定的目录中。creates——使用此参数指定一个远程主机中的文件,当指定的文件存在时,就不执行对应脚本,可参考 command 模块中的解释。removes——使用此参数指定一个远程主机中的文件,当指定的文件不存在时,就不执行对应脚本,可参考 command 模块中的解释。【3】示例演示
复制# 下面命令表示 ansible 主机中的 /testdir/testscript.sh 脚本将在 web 主机中执行,执行此脚本之前,会先进入到 web 主机中的 /opt 目录
ansible web -m script -a "chdir=/opt /testdir/testscript.sh"# 下面命令表示,web主机中的 /testdir/testfile1文件已经存在,ansible 主机中的 /testdir/testscript.sh脚本将不会在 web 主机中执行。
ansible web -m script -a "creates=/testdir/testfile1 /testdir/testscript.sh"# 下面命令表示,web 主机中的 /testdir/testfile1 文件存在,ansible 主机中的 /testdir/testscript.sh脚本则会在 web 主机中执行。
ansible ansible-demo3 -m script -a "removes=/testdir/testfile1 /testdir/testscript.sh"1.2.3.4.5.6.7.8. 4、raw 模块raw模块 [类似于command模块、支持管道传递]。
【1】查看帮助
复制ansible-doc raw -s1.【2】示例演示
复制ansible web -m raw -a "ifconfig eth0 |sed -n 2p |awk {print $2} |awk -F: {print $2}"1. 5、copy 模块copy 模块 从主控端复制文件到被控端。
【1】查看帮助
复制ansible-doc copy -s1.【2】示例演示
复制# -a,--args:后面接参数ansible web -m copy -a src=/etc/ansible/hosts dest=/tmp/hosts owner=root group=bin mode=777# backup=yes/no:文件存在且文件内容不一样是否备份,默认不备份
ansible web -m copy -a src=/etc/ansible/hosts dest=/tmp/hosts owner=root group=bin mode=777 backup=yes1.2.3.4.5. 6、fetch 模块copy 模块从被控端复制文件到主控端,正好跟copy相反。
【1】查看帮助
复制ansible-doc fetch -s1.【2】示例演示
复制# 跟copy支持的参数差不多,src:远端主机的目录,dest:主控端目录,其实真正存放的目录在:/tmp/192.168.182.129/tmp/up.sh,会按每台主机分组存放
# This `must be a file, not a directory:只支持单个文件获取ansible 192.168.182.129 -m fetch -a "src=/etc/fstab dest=/testdir/ansible/"1.2.3. 7、unarchive 模块(解包模块)unarchive 模块是解包模块。
【1】查看帮助
复制ansible-doc unarchive -s1.【2】参数解释
copy——默认为yes,当copy=yes,那么拷贝的文件是从ansible主机复制到远程主机上的,如果设置为copy=no,那么会在远程主机上寻找src源文件。src——源路径,可以是ansible主机上的路径,也可以是远程主机上的路径,如果是远程主机上的路径,则需要设置copy=no。dest——远程主机上的目标路径。mode——设置解压缩后的文件权限。【3】示例演示
复制ansible 192.168.182.129 -m unarchive -a src=/testdir/ansible/data.tar.gz dest=/tmp/tmp/1. 8、archive模块(打包模块)unarchive 模块是打包模块。
【1】查看帮助
复制ansible-doc archive -s1.【2】示例演示
复制# path:主控端目录,format:压缩格式,dest:被控端目录文件
ansible 192.168.182.129 -m archive -a path=/tmp/ format=gz dest=/tmp/tmp/t.tar.gz1.2. 9、user 模块【1】查看帮助
复制ansible-doc user -s1.【2】示例演示
复制# 创建用户(present:默认,可以不写)
ansible web -m user -a name=test state=present# 删除用户(absent)
ansible web -m user -a name=test state=absent# 修改密码
# 步骤一、生成加密密码
echo 777777|openssl passwd -1 -stdin
# 步骤二、修改秘密
ansible web -m user -a name=test password="$1$Jo5FD9Jr$2QB.BuybbtR35ga4O5o8N."# 修改shell
ansible web -m user -a name=test shell=/sbin/noglogin append=yes1.2.3.4.5.6.7.8.9.10.11.12.13.14.15. 10、group 模块【1】查看帮助
复制ansible-doc group -s1.【2】示例演示
复制# 创建
ansible 192.168.182.129 -m group -a name=testgroup system=yes# 删除
ansible 192.168.182.129 -m group -a name=testgroup state=absent1.2.3.4. 11、yum 模块【1】查看帮助
复制ansible-doc yum -s1.【2】示例演示
复制# 升级所有包
ansible web -m yum -a name="*" state=latest# 安装apache
ansible web -m yum -a name="httpd" state=latest1.2.3.4.5. 12、service 模块【1】查看帮助
复制ansible-doc service -s1.【2】示例演示
复制ansible web -m service -a name=httpd state=startedansible web -m service -a name=httpd state=started enabled=yesansible web -m service -a name=httpd state=stoppedansible web -m service -a name=httpd state=restartedansible web -m service -a name=httpd state=started enabled=no1.2.3.4.5.6.7.8.9. 13、file 模块【1】查看帮助
复制ansible-doc file -s1.【2】示例演示
复制# 创建文件
ansible web -m file -a path=/tmp/88.txt mode=777 state=touch# 创建目录
ansible web -m file -a path=/tmp/99 mode=777 state=directory# 删除
ansible web -m file -a path=/tmp/99 state=absent1.2.3.4.5.6.7.8. 14、setup 模块【1】查看帮助
复制ansible-doc setup -s1.【2】示例演示
复制ansible web -m setup
ansible web -m setup -a filter=ansible_all_ipv4_addresses1.2.3. 15、cron 模块【1】查看帮助
复制ansible-doc cron -s1.【2】示例演示
复制# 创建定时任务
ansible 192.168.182.129 -m cron -a minute=* weekday=1,3,5,6,7 job="/usr/bin/wall FBI warning" name=warningcron# 关闭定时任务
ansible 192.168.182.129 -m cron -a disabled=true job="/usr/bin/wall FBI warning" name=warningcron# 删除定时任务
ansible 192.168.182.129 -m cron -a job="/usr/bin/wall FBI warning" name=warningcron state=absent1.2.3.4.5.6.7.8. 16、hostname 模块【1】查看帮助
复制ansible-doc hostname -s1.【2】示例演示
复制ansible 192.168.182.129 -m hostname -a name=192.168.182.1291.Ansible 的介绍和简单使用就先到这里了,还有一个ansible-playbook是非常重要,内容也是比较多,就放到下篇文章介绍了。
相关文章:
益华科技IT技术网IT资讯网服务器租用香港云服务器源码下载亿华云企商汇源码库益强资讯优选益强IT技术网益强智囊团亿华互联亿华云全栈开发亿华云计算亿华科技码上建站益强编程舍益强前沿资讯云站无忧亿华灵动运维纵横益强智未来益华科技思维库汇智坊益强数据堂技术快报智能时代极客编程亿华智造亿华智慧云益华IT技术论坛益强编程堂创站工坊极客码头编程之道益强科技益华科技多维IT资讯
0.4598s , 11844.484375 kb
Copyright © 2025 Powered by Ansible 介绍与实战操作演示,汇智坊 滇ICP备2023006006号-2