Ansible常用模块

一、commands相关模块

1、commands模块

command模块包含如下选项:

creates:一个文件名,当该文件存在,则该命令不执行,反正,则执行。

free_form:要执行的linux指令

chdir:在执行指令之前,先切换到该指定的目录

removes:一个文件名,当该文件存在时,则该选项执行,反之,不执行。

注意:commands模块的执行,在远程主机上,需要有python环境的支持。

该模块通过-a跟上要执行的命令可以直接执行,不过命令里如果有带有特殊字符("<", ">", "|", "&"等)那么则执行不成功。

2、shell 模块

在远程节点上执行命令,用法和command一样,不过shell模块执行命令的时候使用的是/bin/sh,所以shell模块可以执行任何命令。

ansible 172.16.213.233 -m shell -a 'ps-ef|grepsshd'

ansible 172.16.213.233 -m shell -a 'sh/tmp/install.sh >/tmp/install.log'

上面这个命令是执行远程机器上的脚本,脚本路径为/tmp/install.sh(远程主机上的脚本,非本机的),然后将执行命令的结果存放在远程主机路径/tmp/install.log中,注意在进行保存文件的时候,写上全路径,否则就会保存在登录之后的默认路径中。

官方上说,command用起来更安全,更有可预知性。

3、raw模块

raw模块功能类似与前面说的command、shell能够完成的操作,raw也都能完成。不同的是,raw模块不需要远程主机上的python环境。

ansible要执行自动化操作,需要管理机上装ansible,客户机上也需要安装python,如果客户机上没有安装python模块,那么command、shell模块将无法工作,而

raw却可以正常工作,因此,如果有的机器是没有装python,或者说安装的python版本在python2.4以下,就可以使用raw模块来装python、python-simplejson等。

如果有些机器压根就装不了python的话(比如交换机,路由器等),那么,直接用raw模块是最好的选择。

举例:

ansible 172.16.213.233 -m raw -a "ps-ef|grepsshd|awk'{print \$2}' "

ansible 172.16.213.107 -m raw -a "yum -y install python26" -k

raw模块和comand、shell模块不同的还有:raw没有chdir、creates、removes参数

[root@localhostansible]# ansible 172.16.213.157 -m command -a 'chdir=/tmptouch test1.txt' -k

[root@localhostansible]# ansible 172.16.213.157 -m shell -a 'chdir=/tmptouch test2.txt' -k

[root@localhostansible]# ansible 172.16.213.157 -m raw -a 'chdir=/tmptouch test3.txt' -k

4、script模块

script模块是将管理端的shell脚本拷贝到被管理的远程主机上执行,其原理是先将shell复制到远程主机,再在远程主机上执行,此模块的执行,也不需要远程主机上的python环境。

ansible 172.16.213.233 -m script -a 'sh/tmp/install1.sh >/tmp/install.log'

脚本/tmp/install1.sh在管理端本机上,script 模块执行的时候将脚本传送到远程的172.16.213.233主机中,然后执行这个脚本,同时,将执行的输出日志文件保存在远程主机对应的路径/tmp/install.log下,这里保存日志文件的时候,最好用全路径。

二、其他模块

1、ping模块

测试主机是否是通的,用法很简单,不涉及参数:

[root@361way ~]# ansible 172.16.213.170-m ping

172.16.213.170 | SUCCESS => {

"changed": false,

"ping": "pong"

}

2、file模块

file模块主要用于远程主机上的文件操作,file模块包含如下选项:

force:需要在两种情况下强制创建软链接,一种是源文件不存在但之后会建立的情况下;另一种是目标软链接已存在,需要先取消之前的软链,然后创建新的软链,有两个选项:yes|no

group:定义文件/目录的属组

mode:定义文件/目录的权限

owner:定义文件/目录的属主

path:必选项,定义文件/目录的路径

recurse:递归的设置文件的属性,只对目录有效

src:要被链接的源文件的路径,只应用于state=link的情况

dest:被链接到的目标路径,只应用于state=link的情况

state:有如下几个选项:

directory:表示目录,如果目录不存在,则创建目录。

link:创建软链接

hard:创建硬链接

touch:如果文件不存在,则会创建一个新的文件,如果文件或目录已存在,则更新其最后修改时间

absent:删除目录、文件或者取消链接文件。

使用示例:

ansible 172.16.213.233 -m file -a "path=/mnt/abc123 state=directory"

ansible 172.16.213.233 -m file -a "path=/mnt/abc123 owner=nobody group=nobody mode=0644 recurse=yes"

ansible 172.16.213.233 -m file -a "path=/mnt/syncfile.txt owner=sshdgroup=sshdmode=0644"

ansible 172.16.213.233 -m file -a "path=/mnt/syncfile.txt mode=0444"

ansible 172.16.213.233 -m file -a "src=/etc/ssh/sshd_configdest=/mnt/sshd_configowner=sshdstate=link"

ansible 172.16.213.233 -m file -a "path=/tmp/backup.tar.gz state=absent"

ansible 172.16.213.233 -m file -a "path=/tmp/ansibletempstate=touch"

3、copy模块

Copy模块用于复制文件到远程主机,copy模块包含如下选项:

backup:在覆盖之前将原文件备份,备份文件包含时间信息。有两个选项:yes|no

content:用于替代"src",可以直接设定指定文件的值

dest:必选项。要将源文件复制到的远程主机的绝对路径,如果源文件是一个目录,那么该路径也必须是个目录

directory_mode:递归的设定目录的权限,默认为系统默认权限

force:如果目标主机包含该文件,但内容不同,如果设置为yes,则强制覆盖,如果为no,则只有当目标主机的目标位置不存在该文件时,才复制。默认为yes

others:所有的file模块里的选项都可以在这里使用

src:要复制到远程主机的文件在本地的地址,可以是绝对路径,也可以是相对路径。如果路径是一个目录,它将递归复制。在这种情况下,如果路径使用"/"来结尾,则只复制目录里的内容,如果没有使用"/"来结尾,则包含目录在内的整个内容全部复制,类似于rsync。

copy模块举例:

ansible 172.16.213.233 -m copy -a 'src=/etc/sudoersdest=/app/sudoersowner=root group=root mode=440 backup=yes'

ansible 172.16.213.233 -m copy -a "src=/etc/sudoersdest=/app/sudoersvalidate='visudo-cf%s'"

ansible 172.16.213.233 -m copy -a 'src=/etc/yum dest=/app/ owner=root group=root directory_mode=644'

ansible 172.16.213.233 -m copy -a 'src=/etc/yum/ dest=/app/bakowner=root group=root directory_mode=644'

4、service模块

用于管理远程主机上的服务,该模块包含如下选项:

enabled:是否开机启动yes|no

name:必选项,服务名称

pattern:定义一个模式,如果通过status指令来查看服务的状态时,没有响应,就会通过ps指令在进程中根据该模式进行查找,如果匹配到,则认为该服务依然在运行

sleep:如果执行了restarted,在则stop和start之间沉睡几秒钟

state:对当前服务执行启动,停止、重启、重新加载等操作(started,stopped,restarted,reloaded)

使用示例:

ansible172.16.213.233 -m service -a "name=httpdstate=started"

ansible172.16.213.233 -m service -a "name=httpdenabled=yes"

5、cron模块

用于管理计划任务,包含如下选项:

backup:对远程主机上的原任务计划内容修改之前做备份

cron_file:用来指定一个计划任务文件,也就是将计划任务写到远程主机上/etc/cron.d目录下,创建一个文件对应的计划任务。

day:日(1-31,*,*/2,……)

hour:小时(0-23,*,*/2,……)

minute:分钟(0-59,*,*/2,……)

month:月(1-12,*,*/2,……)

weekday:周(0-7,*,……)

job:要执行的任务,依赖于state=present

name:定义定时任务的描述信息

special_time:特殊的时间范围,参数:reboot(重启时),annually(每年),monthly(每月),weekly(每周),daily(每天),hourly(每小时)

state:确认该任务计划是创建还是删除,有两个值可选,分别是present和absent,present表示创建定时任务,absent表示删除定时任务,默认为present。

user:以哪个用户的身份执行job指定的任务。

使用示例:

ansible172.16.213.233 -m cron-a 'name="job for reboot" special_time=reboot job="/data/bootservice.sh"'

ansible172.16.213.233 -m cron-a 'name="yum autoupdate" weekday="6" minute=20 hour=1 user="root" job="yum -y update"'

ansible172.16.213.233 -m cron-a 'backup="True" name="autobackup" weekday="6" minute=30 hour=1 user="root" job="/home/ixdba/backup.sh"'

ansible172.16.213.233 -m cron-a 'name="checkhttp" minute=30 hour=12 user="root" job="/home/ixdba/check_http.sh" cron_file="check_http_for_ansible" '

ansible172.16.213.233 -m cron-a 'name="yum autoupdate" state=absent'

6、yum模块

使用yum包管理器来管理软件包,其选项有:

config_file:yum的配置文件

disable_gpg_check:关闭gpg_check

disablerepo:不启用某个源

enablerepo:启用某个源

name:要进行操作的软件包的名字,也可以传递一个url或者一个本地的rpm包的路径

state:表示要安装还是删除软件包,要安装软件包,可选择present(安装)、installed(安装)、latest(安装最新版本),删除软件包可选择absent、removed。

示例如下:

ansible172.16.213.77 -m yum -a "name=redisstate=installed"

ansible172.16.213.77 -m yum -a "name=redisstate=removed"

ansible172.16.213.77 -m yum -a "name=redisstate=latest enablerepo=epel"

ansible172.16.213.77 -m yum -a " name=http://mirrors.aliyun.com/centos/7.4.1708/os/x86_64/Packages/bash-4.2.46-28.el7.x86_64.rpm state=present "

7、user模块与group模块

user模块是请求的是useradd, userdel, usermod三个指令,goup模块请求的是groupadd, groupdel, groupmod三个指令。

name # 指定用户名

group # 指定用户的主组

groups # 指定附加组,如果指定为('groups=')表示删除所有组。

shell # 指定默认shell

state #设置帐号状态,不指定为默认为present,表示创建,指定值为absent表示删除

remove #当使用状态为state=absent时使用,类似于userdel--remove选项。

示例:

ansible172.16.213.77 -m user -a "name=testuser1"

ansible172.16.213.77 -m user -a "name=testuser2 groups=admins,developers" //添加用户时,同时添加附组

ansible172.16.213.77 -m user -a "name=testuser3 state=absent remove=yes" //删除用户的同时,删除用记家目录

批量修改用户密码:

echo "123456" | opensslpasswd-1 -salt $(< /dev/urandomtr-dc '[:alnum:]' | head -c 32) -stdin

$1$yjJ74Wid$x0QUaaHzA8EwWU2kG6SRB1

ansible172.16.213.77 -m user -a 'name=testuser1 password="$1$Kklap7y3$3AYJdqrcmZUMt9W2/MYE4." '

-1:表示采用的是MD5加密算法。

-salt:指定salt值。在使用加密算法进行加密时,即使密码一样,salt不一样,所计算出来的hash值也不一样,除非密码一样,salt值也一样,计算出来的hash值才一样。

"< /dev/urandomtr-dc '[:alnum:]' | head -c 32"产生一个随机的salt。

passwd的值不能是明文,passwd关键字后面应该是密文,且密文将被保存在/etc/shadow文件中。

8、synchronize模块

此模块通过调用rsync进行文件或目录同步。

archive:归档,相当于同时开启recursive(递归),links,perms,itmes,owner,group,-D选项都为yes,默认该选项为开启

checksum:跳过检测sum值,默认关闭

compress:是不开启压缩,默认开启

copy_links:复制链接文件,默认为no,注意后面还有一个links参数

delete:删除不存在的文件,默认为no

dest:目录路径

dest_prot:默认为22,ssh协议

mode:push和pull模块,push模块的话,一般用于从本机向远程主机上传文件,pull模式用于从远程主机上拉取文件

示例:

ansible172.16.213.77 -m synchronize -a 'src=/mnt/a dest=/tmp'

ansible172.16.213.77 -m synchronize -a 'mode=pull src=/mnt/a dest=/tmp

9、setup模块

setup模块,主要用于获取主机信息,在playbooks里经常会用到的一个参数gather_facts就与该模块相关。setup模块下经常使用的一个参数是filter参数,具体使用示例如下(由于输出结果较多,这里只列命令不写结果):

[root@linux~]# ansible172.16.213.77 -m setup -a 'filter=ansible_*_mb' //查看主机内存信息

[root@linux~]# ansible172.16.213.77 -m setup -a 'filter=ansible_em[1-2]' //查看地接口为em1-2的网卡信息

[root@linux~]# ansible all -m setup --tree /tmp/facts //将所有主机的信息输入到/tmp/facts目录下,每台主机的信息输入到主机名文件中(/etc/ansible/hosts里的主机名)

10、get_url模块

该模块主要用于从http、ftp、https服务器上下载文件(类似于wget),主要有如下选项:

sha256sum:下载完成后进行sha256 check;

timeout:下载超时时间,默认10s

url:下载的URL

url_password、url_username:主要用于需要用户名密码进行验证的情况

use_proxy:表示使用代理,代理需事先在环境变更中定义

示例:

ansible172.16.213.77 -m get_url-a "url=http://172.16.213.157/Python-2.7.14.tgz dest=/mnt/python-2.7.14.tgz"

原文地址:https://www.cnblogs.com/yxf-/p/11494182.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


----name:setpublickeyonremotehosts&setreomtehostssudoersfilehosts:all#此脚本要求所有的主机root用户密码相同become:noremote_user:rootvars:-remoteuser:user1:rhcetasks:-name:setsecondarygroupforrhce
环境准备#cat/etcedhat-releaseCentOSLinuxrelease7.9.2009(Core)#pythonPython3.7.11(default,Jul312022,16:12:35)[GCC4.8.520150623(RedHat4.8.5-44)]onlinuxType"help","copyright","credits"or"li
准备好环境,在安装之前请先了解openshift提供的ansible有大量的安装选项文档地址:https://docs.okd.io/latest/install/configuring_inventory_file.html1、配置/etc/ansible/hosts 
Ansible:运维工作:系统安装(物理机、虚拟机)-->程序包安装、配置、服务启动-->批量操作-->程序发布-->监控OSProvisioning:物理机:PXE、Cobbler虚拟机:ImageTemplatesConfigration:puppet(ruby)saltstack(python)chefcfengineCommandand
ansible与salt对比相同都是为了同时在多台机器上执行相同的命令都是python开发不同agent(saltstack需要安装、ansible不需要)配置(salt配置麻烦,ansible基本不用配置)学习路线(salt比较陡峭,ansible比较平缓)第三方工具(salt比较少)开源社区的对接(salt比较少)现有用户(salt还是an
[root@node1playbook]#catnginx.yml-hosts:test\\主机组,要和nginx.yml在同一个目录下remote_user:root\\远端执行任务的用户tasks:\\任务-name:installhttpd\\任务描述command:yum-yinstallhttpd\\调用ansible的command模块安装httpd-na
一直不知道这个模块到底在哪,并且也挺想搞清楚官方那些模块到底在哪个目录下。1.使用grep-rl"copy.py"/usr/lib/python2.7/site-packages/ansible(这个目录是专门放ansible源码目录的)然后找到是/usr/lib/python2.7/site-packages/ansible/modules/files/copy.py这个文件,这里需要
ansile作为去除安装agent的自动化工具,通过ssh协议的简单功能强大的自动化工作。在ansile使用的过程中,有三种用途1、ansible自行一次性任务,即执行命令如:ansible10.59.87.11-mping*ansible"dev-hdp"-mcopy-a"src=oot/HfHadoopHiveUdf.jardest=/data1/opt/cloudera/par
ansible-playbook(1) Ansible组成部分InventoryModulesAdHocCommandsplaybooksplaybooks:Tasks:任务,即调用的模块完成的某操作variables:变量Templates:模版Roles:角色 基本结构:-host:webserverremote_user:tasks:
报错:[root@jenkins~]#ansiblego_activity-mcron-a"name='log_clear'minute=0hour=2job=find/home/golanger/log/-typef-name'log$(date+\%d-d-1day)'-delete"ERROR!thistask'cron'hasextraparams,wh
一、测试环境说明1、系统:rhel6.92、ip地址:20.20.20.24/2420.20.20.41/2420.20.20.42/243、以下操作使用root身份进行,也可以使用具有sudo权限的用户进行相关操作二、环境准备1、关闭iptables防火墙、selinux#/etc/init.d/iptablesstop#
ansible常用模块安装:依赖于epel源yuminstallansible-y配置文件:/etc/ansible/ansible.cfgInvertoory:/etc/ansible/hosts 如何查看模块帮助:ansible-doc-lansible-doc-sMODULE_NAME` ansible命令应用基础:语法:ansible<host-pattern>[options]-fforks
copycopy模块是将ansible管理主机上的文件拷贝上远程主机中,与fetch相反,如果目标路径不存在,则自动创建,如果src的目录带“/”则复制该目录下的所有东西,如果src的目录不带“/”则连同该目录一起复制到目标路径;常用模块src参数:用于指定需要copy的文件或目录
9.YAML9.1简介(1)YAML是一个可读性高的用来表达资料序列的格式。(2)YAML参考了其它多种语言。包括:XML、C语言、python、perl以及电子邮件格式的RFC2822等。ClarkEvans在2001年首次发表了这种语言。(3)YAML不是XML,在开发这种语言时,YAML的意思其实是:yetanothermarkuplanguage,9.2特性(1)YA
了解ansibleansible批量在远程主机上执行命令ansible主要是为了进行操作多个主机而进行的#!/bin/envpython文件中直接指向python文件#!/bin/base 指行脚本一.ansible第一步.下载epel源wget-O/etc/yum.repos.d/epel.repohttp://mirrors.aliyun.comepo/epel-7.repo
背景:在私有云环境下,遇到要开通某个项目,则需要快速的响应创建虚拟机,并且做一些基础的配置。为了提高效率以及减少手工犯错的概率,一般会采取ansible批量部署,但是使用ansible的前提是预先配置好免密。在密码一致的场景中,可以使用expect优化做免密的过程解决方案:1.
简单例子1:vars定义变量-hosts:allremote_user:rootvars:-package:nginx-service:nginx tasks:-name:installnginxpackage yum:name={{package}}state=latest-name:installconfigurationfileforhttpd copy:src=/etcginxginx
 ansible自动化运维工具的介绍      ansible结构特性:            模块化,调用特定的模块,完成特定的任务;        基于Python语言实现,由Paramiko、PyYAML和Jinja2三个关键模块;        部署简单,agentless        主从模
---恢复内容开始---Templates:模版 cat/etc/ansible/hosts  cattemplatesginx.conf.j2 -hosts:testremote_user:rootvars:-package:httpd-service:httpdtasks:-name:installnginxpackage yum:name={{package}}state=la
1、配置资源清单inventory文件[root@test1~]#cat>/etc/ansible/hosts<<EOF[k8s]192.168.0.92ansible_ssh_port=22ansible_ssh_user=k8sansible_ssh_pass='123'ansible_become_pass='123456'EOF解释:ansible_ssh_pass='123'