二ansible基础模块介绍

Posted 哭泣的馒头

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了二ansible基础模块介绍相关的知识,希望对你有一定的参考价值。

1、ansible-doc​

模块的手册,相当于shell的man

ansible-doc -l 列出所有模块

ansible-doc modulename 查看帮助

ansible-doc copy 查看copy模块相关信息

2、ping

​测试网络连通性,ping模块没有参数

\'二、ansible基础模块介绍_ansible\'

3、command

​默认模块,如果执行ansible命令没有-m指明模块,则默认使用command模块

\'二、ansible基础模块介绍_ansible_02\'

如果命令中有< > | & command模块执行失败

command模块不能解析系统变量

该模块不启动shell直接在ssh进程中指定,所有使用到shell的命令执行都会失败

所有command能执行的几乎shell都可以执行

4、shell

shell模块用法基本与command一样,区别shell模块是通过/bin/sh进行命令执行的,可以执行任何命令

--不能执行交互式命令,例如vim、top

ansible webserver -m shell -a \'cd /tmp;touch test\'

\'二、ansible基础模块介绍_ansible_03\'

ansible webserver -m shell -a "echo ${HOSTNAME}"

ansible webserver -m shell -a \'echo ${HOSTNAME}\'

\'二、ansible基础模块介绍_ansible_04\'

变量解析

ansible执行命令是二次解析

第一次在本机解析,第二次在执行机器解析

需要第二次解析的变量要转移(\\)

5、user group

创建组命令

​-----------------------------------------------------------------------------------------------------------------

ansible webserver -m group -a \'name=shandong gid=666 state=present system=yes\'

###创建一个名为shandong,id为666,为系统组的组

(1)创建news基本组,指定uid为9999

ansible webserver -m group -a "name=news gid=9999 state=present" -i hosts

(2)创建http系统组,指定uid为8888

ansible webserver -m group -a "name=http gid=8888 system=yes state=present" -i hosts

(3)删除news基本组

ansible webserver -m group -a "name=news state=absent" -i hosts

​-----------------------------------------------------------------------------------------------------------------

创建用户命令

​name            #名称

uid             #uid

group           #组名或gid

create_home     #是否创建家目录

system          #是否作为系统组

shell           #指定登录shell

state           #动作

  present     #创建

  absent      #删除

remove          #递归 (相当于userdel -r ...)

groups          #附加组

append          #如果是yes,就是给这个用户添加一个组

password        #密码

​ansible webserver -m user -a \'name=jinan shell=/bin/shell uid=1020 groups=root group=shandong state=present\'

用户jinan,登录方式为/bin/shell,id为1020,主组为shandong,从组为root,创建

\'二、ansible基础模块介绍_ansible_05\'

ansible webserver -m user -a \'name=huli shell=/sbin/nologin create_home=no uid=1021 state=present\'

用户huli,不登录,不创建家目录,id为1021,创建

-----------------------------------------------------------------------------

给用户创建密码是需要加密的,直接明文并不能直接使用

创建wugui用户,并设置密码123

生成加密密码

ansible webserver -m user -a \'name=wugui shell=/bin/shell uid=1022 state=present\'

ansible webserver -m shell -a \'echo \'123\'|passwd --stdin wugui\'

删除用户及用户家目录

ansible webservers -m user -a "name=wugui state=absent remove=yes"

创建http用户,并为该用户创建2048字节的密钥,存放在~/http/.ssh/id_rsa

ansible webserver -m user -a "name=http generate_ssh_key=yes ssh_key_bits=2048 ssh_key_file=.ssh/id_rsa" -i hosts

----------------------------------------------------------------------------------

6、script

命令太复杂,直接本地写脚本,使用scrip模块批量执行

该脚本包含但不限于shell脚本,只要指定sha-bang解释器的脚本都可以运行

-------------------------------------------------------------------------------------------

如果没有jinan用户,就添加binzhou用户,有则省略

现在两台机器都是有的,去192.168.10.130执行

userdel -r jinan

编写脚本

vi user.sh

#!/bin/bash

id jinan &>/dev/null

if [ $? != 0 ];then

  useradd binzhou

  echo \'123\' |passwd --stdin binzhou

fi

​chmod a+x user.sh

ansible webserver -m script -a \'./user.sh\'

7、yum_repository yum

yum_repository模块 主要用于管理远程主机上的yum仓库

name:相当于.repo文件定义中括号的[仓库ID]

baseurl:相当于.repo文件中baseurl

description:相当于.repo文件中的name

file:相当于.repo文件的名称,不使用时默认以name加.repo命令

enabled=yes|no:相当于.repo文件中enabled

gpgcheck=yes|no:相当于.repo文件中gpgcheck

gpgcakey:前提是gpgcheck=yes,相当于.repo文件中gpgkey,验证gpg公钥

state=present|absent:默认present,absent表示删除

添加阿里源

ansible webserver -m yum_repository -a \'name=aliepel baseurl=https://mirrors.aliyun.com/epel/7/x86_64/ enabled=yes gpgcheck=0 gpgcakey=https://mirrors.aliyun.com/epel/RPM-GPG-KEY-EPEL-7 state=present file=AlicloudEpel\'

删除阿里源

ansible webserver -m yum_repository -a \'file=AlicloudEpel name=aliepel state=absent\'

yum模块

​​name:指定管理的软件包

​state=present|installed|latest|absent|removed:依次对应 安装|安装|安装最新版本|删除|删除

disable_gpg_check=no|yes:禁用对rpm包的公钥验证,默认no;

enablerepo=<local|AlicloudEpel>:在不确定某源是否启用的情况下,可以临时使用该源

disablerepo=<local|AlicloudEpel>:临时禁用某源

----------------------------------​---------------------------------------------------------

(安装present 卸载absent 升级latest 排除exclude 指定仓库enablerepo)

(1)安装当前最新的apache软件,如果存在则更新

ansible webserver -m yum -a "name=httpd state=latest" -i hosts

(2)安装当前最新的apache软件,通过epel仓库安装

ansible webserver -m yum -a "name=httpd state=latest enablerepo=epel" -i hosts

(3)通过公网url安装rpm软件

ansible webserver -m yum -a "name=https://repo.zabbix.com/zabbix/3.4/rhel/6/x86_64/zabbix-agent-3.4.3-1.el6.x86_64.rpm state=latest" -i hosts

(4)更新所有软件包,排除和kernel相关的

ansible webserver -m yum -a "name=* state=latest exclude=kernel*,foo*" -i hosts

(5)删除apache软件

ansible webserver -m yum -a "name=httpd state=absent" -i hosts

----------------------------------------------------------------------------------------------

8、service systemd

​设置服务的启动,重启,停止和重新加载,开机自启,systemd重新加载配置文件,使用哪块网卡

state:started|restarted|stopped|reloaded

enabled:yes|no

daemon_reload: yes

args: eth0

sleep: ##执行restarted会在stop和start之间沉睡几秒钟

--------------------------------------------------------------------------------------------------

​主机安装nginx服务

​ansible webserver -m yum -a \'name=nginx state=present\'

​设置启动,开机自启

ansible webserver -m service -a \'name=nginx state=started enabled=yes\'

停止服务,取消开机自启

ansible webserver -m service -a \'name=nginx state=stopped enabled=no\'

-----------------------------------------------------------------------------------------------

9、file

​管理远程主机文件,创建文件或目录,删除文件或目录,修改文件或目录的权限等

path:

state=directory|touch|link|hard|absent:依次对应 目录|文件|软链接|硬链接|删除

src:前提state=link|hard时,需要指定链接源

force:state=link,force=yes表示强制创建链接文件,若有同名则覆盖

owner:指定属主

group:指定属组

mode:指定权限mode=655,mode=0700

recurse:当操作的对象是目录时,recurse=yes,可以递归修改目录中文件的属性

​----------------------------------------------------------------------------------------------------------------------

在/tmp目录下创建test目录,并在/tmp/test目录下创建test01文件,属主属组为root,权限644

ansible webserver -m file -a \'path=/tmp/test state=directory\'

ansible webserver -m file -a \'path=/tmp/test/test01 state=touch\'

ansible webserver -m file -a \'path=/tmp/test recurse=yes owner=root group=root mode=700\'

删除/tmp/test目录

ansible webserver -m file -a \'path=/tmp/test state=absent\'

(1)创建文件,并设定属主、属组、权限

ansible webserver -m file -a "path=/var/www/html/tt.html state=touch owner=apache group=apache mode=644" -i hosts

(2)创建目录,并设定属主、属组、权限

ansible webserver -m file -a "path=/var/www/html/dd state=directory owner=apache group=apache mode=755" -i hosts

(3)递归授权目录的方式

ansible webserver -m file -a "path=/var/www/html/ owner=apache group=apache mode=755" -i hosts

ansible webserver -m file -a "path=/var/www/html/ owner=apache group=apache mode=755 recurse=yes" -i hosts

​----------------------------------------------------------------------------------------------------------------------

10、copy template

​copy模块将ansible主机上的文件拷贝到远程主机

路径为目录时递归复制,若路径以/结尾,则只复制目录里的内容,若不以/结尾,则复制包含目录在内的整个内容


fetch模块将远程主机上的文件拉取到ansible主机

参数

src:指定拉取或拷贝的文件,适用于copy|fetch

dest:指定存放的位置,适用于copy|fetch

content:指定远程主机文件的内容,而不是拷贝文件到远程主机上,仅限copy

force:当远程主机已存在同名文件时,yes强制覆盖,no不会执行覆盖操作,默认yes

backup:当远程主机已存在同名文件时,yes先备份再拷贝

owner:指定文件属主

group:指定文件属组

mode:指定文件权限

​---------------------------------------------------------------------------------------------------------------------

​copy模块:

将/tmp/jinan文件拷贝到远程主机/tmp/目录下,若有同名文件则先备份,属主root,权限644

创建文件

touch /tmp/jinan  

ansible webserver -m copy -a \'src=/tmp/jinan dest=/tmp backup=yes owner=root mode=644\'

在远程主机/tmp/目录下生成qingdao文件,内容是第一行hello,第二行world

copy

ansible webserver -m copy -a \'content="hellow\\nworld" dest=/tmp/qingdao\'

fetch模块:

将远程主机192.168.10.130/tmp/qingdao文件拉取到ansible主机/tmp目录下

ansible 192.168.10.130 -m fetch -a \'src=/tmp/test/test dest=/tmp/\'

##实际目录是/tmp/192.168.10.130/tmp/qingdao

(1)将本地的httpd.conf文件Listen端口改为9999,然后推送到远端服务器

ansible webserver -m copy -a "src=./httpd.conf dest=/etc/httpd/conf/httpd.conf owner=root group=root mode=644" -i hosts

(2)将本地的httpd.conf文件Listen端口改为9090,然后推送到远端,检查远端是否存在上一次的备份文件

ansible webserver -m copy -a "src=./httpd.conf dest=/etc/httpd/conf/httpd.conf owner=root group=root mode=644 backup=yes" -i hosts

(3)往远程主机文件中写入内容

ansible webserver -m copy -a "content=HttpServer dest=/var/www/html/index.html" -i hosts

-----------------------------------------------------------------------------------------------------------------------

template模块

和copy模块差不多,但是copy会把文件原模原样拷贝过去,即使文件中包含变量也不会翻译

template模块首先使用变量渲染jinja2模板文件成普通文件,然后再复制过去

tempalte更多的使用在playbook中

--------------------------------------------------------------------------------------------------------------------------------

添加新文件

cat hello_world.j2

Hello {{ citys }}

先使用copy

​ansible webserver -m copy -a \'src=hello_world.j2 dest=/tmp\' -e \'citys=jinan\'

\'二、ansible基础模块介绍_ansible_06\'

在使用template

​ansible webserver -m template -a \'src=hello_world.j2 dest=/tmp\' -e \'citys=jinan\'

\'二、ansible基础模块介绍_ansible_07\'

---------------------------------------------------------------------------------------------------------------------------------------

11、setup

​收集远程主机的一些基本信息,playbook里经常会用的另一个参数gather_facts与该模块相关,setup模块下经常用的是filter参数

ansible 192.168.10.130 -m setup

获取ip地址

ansible 192.168.10.130 -m setup -a \'filter=ansible_default_ipv4\'

ansible 192.168.10.130 -m setup -a \'filter=ansible_hostname\'

ansible_all_ipv4_addresses:仅显示ipv4的信息

ansible_devices:仅显示磁盘设备信息

ansible_distribution:显示是什么系统,例:centos,suse等

ansible_distribution_major_version:显示是系统主版本

ansible_distribution_version:仅显示系统版本

ansible_machine:显示系统类型,例:32位,还是64位

ansible_eth0:仅显示eth0的信息

ansible_hostname:仅显示主机名

ansible_kernel:仅显示内核版本

ansible_lvm:显示lvm相关信息

ansible_memtotal_mb:显示系统总内存

ansible_memfree_mb:显示可用系统内存

ansible_memory_mb:详细显示内存情况

ansible_swaptotal_mb:显示总的swap内存

ansible_swapfree_mb:显示swap内存的可用内存

ansible_mounts:显示系统磁盘挂载情况

ansible_processor:显示cpu个数(具体显示每个cpu的型号)

ansible_processor_vcpus:显示cpu个数(只显示总的个数)

ansible_python_version:显示python版本

12、cron模块

​管理远程节点的CRON 服务。等同于Linux 中的计划任务。

注意:使用Ansible 创建的计划任务,是不能使⽤本地 crontab -e去编辑,否则Ansible无法法再次操作此计划任务

name 指定一个cron job的名字。一定要指定,便于日后删除。  

minute 指定分钟,可以设置成(0-59, *, */2 等)格式。默认是 * , 也就是每分钟。  

hour 指定小时,可以设置成(0-23, *, */2 等)格式。默认是 * , 也就是每小时。  

day 指定天, 可以设置成(1-31, *, */2 等)格式。默认是 * , 也就是每天。  

month 指定月份, 可以设置成(1-12, *, */2 等)格式。 默认是 * , 也就是每周。  

weekday 指定星期, 可以设置成(0-6 for Sunday-Saturday, * 等)格式。默认是 *,也就是每星期。  

job 指定要执行的内容,通常可以写个脚本,或者一段内容。  

state 指定这个job的状态,可以是新增(present)或者是删除(absent)。默认为新增(present)

-----------------------------------------------------------------------------------------------------------------

(1)添加定时任务,每分钟执行一次ls,* * * * * ls > /dev/null

ansible webserver -m cron -a "name=job1 job=\'ls > /dev/null\'" -i hosts

(2)添加定时任务,每天凌晨2点和凌晨5点执行一次ls,0 2,5 * * * ls > /dev/null

ansible webserver -m cron -a "name=job2 minute=0 hour=2,5 job=\'ls > /dev/null\'" -i hosts

(3)关闭定时任务,

ansible webserver -m cron -a "name=job1 state=absent" -i hosts

----------------------------------------------------------------------------------------------------------------- 

13、debug

​debug 模块主要用于调试时使用,通常的作用是将一个变量的值 给打印出来。

var 直接打印一个个指定的变量值  

msg 打印一段可以格式化的字符串

这里引入了变量,我们只需了解 debug 模板的使用即可

ansible webserver -m debug -a "var=role" -e "role=web"  

ansible webserver -m debug -a "msg=\'role is {{role}} \'" -e "role=web"

14、lineinfile replace blockinfile

类似于sed的一种行编辑替换模块

path 目标文件

regexp 正则表达式,要修改的行

line 最终修改的结果

state 可以选择absent删除,默认是present替换

create 文件不存在时,是否要创建文件

​-----------------------------------------------------------------------------------------------------------------------------------------------

比如修改selinux​

ansible webserver -m lineinfile -a \'path=/etc/selinux/config regexp="^SELINUX=" line="SELINUX=disabled"\'

将远程主机的qingdao文件,world改成ni hao

ansible webserver -m lineinfile -a \'path=/tmp/qingdao regexp="^world" line="ni hao"\'

根据正则表达式替换”某一行”,如果不止一行能够匹配正则,那么只有最后一个匹配正则的行才会被替换,被匹配行会被替换成 line 参数指定的内容,但是如果指定的表达式没有匹配到任何一行,那么 line 中的内容会被添加到文件的最后一行

​ansible webserver -m lineinfile -a \'path=/tmp/qingdao regexp="^test" line="test one"\'

\'二、ansible基础模块介绍_ansible_08\'

如果是在一个文件中把所有匹配到的多行都进行统一处理,请参考replace模块

向文件中插入两行新内容

ansible webserver -m lineinfile -a \'path=/tmp/qingdao regexp="^test" line="test one"\'

ansible webserver -m lineinfile -a \'path=/tmp/qingdao regexp="^2test" line="test two"\'

\'二、ansible基础模块介绍_ansible_09\'

使用replace模块将文件中的test替换为qingdao

ansible webserver -m replace -a \'path=/tmp/qingdao regexp="test" replace="qingdao"\'

\'二、ansible基础模块介绍_ansible_10\'

如果想对一个文件进行多次性添加/更新/删除多行内容等操作,参考blockinfile模块

​向qingdao文件中添加多行\'nihao qingdao\\n qingdao nihao\'

block 文件中被操作的块内容

ansible webserver -m blockinfile -a \'path=/tmp/qingdao block="nihao qingdao\\nqingdao nihao"\'

\'二、ansible基础模块介绍_ansible_11\'

15 archive unarchive​

aichive 压缩命令

\'二、ansible基础模块介绍_ansible_12\'

\'二、ansible基础模块介绍_ansible_13\'

\'二、ansible基础模块介绍_ansible_14\'

unarchive解压缩

​这个模块有两种用法:

1、将ansible主机上的压缩包在本地解压缩后传到远程主机上,这种情况下,copy=yes. 本地解压缩,解压缩位置不是默认的目录,没找到或传完删了后传到远程主机

2、将远程主机上的某个压缩包解压缩到指定路径下。这种情况下,需要设置copy=no远程主机上面的操作,不涉及ansible服务端

​参数:

copy:默认为yes,当copy=yes,那么拷贝的文件是从ansible主机复制到远程主机上的,如果设置为copy=no,那么会在远程主机上寻找src源文件

src:源路径,可以是ansible主机上的路径,也可以是远程主机上的路径,如果是远程主机上的路径,则需要设置copy=no

dest:远程主机上的目标路径

mode:设置解压缩后的文件权限

​---------------------------------------------------------------------------------------------------------------------------------------------

​​1、下载文件到指定目录:

Ansible------Ansible概述,搭建,常用模块介绍

二Ansible基础之模块篇

Ansible-基础

自动化运维工具Ansible-基础介绍

Ansible自动化运维工具Ansible常用模块的基本使用

ansible模块的基础使用