目 录CONTENT

文章目录

Ansible 常用模块

vanegoo
2024-04-21 / 0 评论 / 0 点赞 / 21 阅读 / 8902 字 / 正在检测是否收录...

command和shell

  • command和shell的区别

    • command模块的命令不启动shell, 直接通过ssh执行命令

    • command不支持bash的特性, 如管道和重定向等功能

  • shell模块会启动shell执行命令

    • 不可以使用shell模块执行交互命令, 如vim,top等

  • shell模块支持判断(creates)

    • creates文件名: 文件存在, 不执行shell命令

[root@control ansible]# ansible test -m shell -a  "ps aux | wc -l"      #进程数量
[root@control ansible]# ansible test -m shell -a  "who"                 #登陆信息
[root@control ansible]# ansible test -m shell -a  "touch /tmp/txt.txt" 

script模块

  • script允许在本地写脚本, 拷贝到被管理端并执行脚本

  • 脚本不是shell脚本(如Python,perl脚本等), 可以没有-x

[root@control ansible]# vim  /root/ansible/test.sh  
#!/bin/bash
yum -y install httpd
systemctl start httpd

[root@control ansible]# ansible test -m script -a "./test.sh"

登录到被控主机验证结果

[root@node1 ~]# rpm -q httpd                    #查询httpd软件是否安装

user模块

user模块可以实现Linux系统账户管理

# 对test组中的所有主机创建系统账户tuser1
[root@control ansible]# ansible test -m user -a "name=tuser1"

# 对test组中的所有主机创建系统账户tuser2并设置对应的账户属性
[root@control ansible]# ansible test -m user -a "name=tuser2 uid=1010 group=adm groups=daemon,root home=/home/tuser2"

# 将test主机组中所有主机的tuser1用户密码修改为abc
[root@control ansible]# ansible test -m user \
-a "name=tuser1 password={{'abc'| password_hash('sha512')}}"

# 修改test主机组中所有主机的tuser1用户的附加组
[root@control ansible]# ansible test -m user  -a "name=tuser1 groups=root,adm"

# 删除test主机组中所有主机的tuser1用户
[root@control ansible]# ansible test -m user -a "name=tuser1 state=absent"

# 删除test主机组中所有主机的tuser2用户,账户同时删除其家目录、邮箱
[root@control ansible]# ansible test -m user \
-a "name=tuser2 state=absent remove=true"

setup模块

  • ansible_facts用于采集被管理设备的系统信息

  • 所有收集的信息都被保存在变量中

  • 每次执行playbook默认第一个任务就是Gathering Facts

  • 使用setup模块可以查看收集到的facts信息

  • 找出下列facts信息(有父子关系时使用.分隔)

[root@control ansible]# ansible test -m setup
[root@control ansible]# ansible test -m setup
node10 | SUCCESS => {
    "ansible_facts": {
        "ansible_all_ipv4_addresses": [
            "192.168.4.10"
        ],  省略部分内容

file模块

file模块可以创建文件、目录、连接,修改权限与属性等

  • 幂等性: 任意次执行所产生的影响与一次执行的影响相同

# 对test主机组中的主机新建文件/tmp/file.txt
[root@control ansible]# ansible test -m file -a "path=/tmp/file.txt state=touch"

# 对test主机组中的主机新建目录/tmp/mydir
[root@control ansible]# ansible test -m file -a "path=/tmp/mydir state=directory"

# 修改test主机组中的主机/tmp/file.txt文件归属关系及权限
[root@control ansible]# ansible test -m file \
-a "path=/tmp/file.txt  owner=sshd  group=adm  mode=0777"

# 删除test主机组中主机的/tmp/mydir目录
[root@control ansible]# ansible test -m file -a "path=/tmp/mydir state=absent"

# 删除test主机组中主机的/tmp/file.txt目录
[root@control ansible]# ansible test -m file -a "path=/tmp/file.txt state=absent"

# test主机组中的主机给/etc/hosts文件创建一个链接文件/tmp/host.txt
[root@control ansible]# ansible test -m file -a "src=/etc/hosts path=/tmp/host.txt state=link"

copy模块

将文件拷贝到远程主机

  • backup=yes 如果目标主机有同名文件, 则先备份

control# 主机组准备素材文件
[root@control ansible]# echo AAA > ~/a3.txt                   #新建测试文件
[root@control ansible]# ansible test -m copy -a "src=~/a3.txt dest=/root/"
[root@control ansible]# ansible test -m copy -a "src=~/a3.txt dest=/root/3a.txt"  
# 通过content可以直接提供文件内容,\n代表回车
[root@control ansible]# ansible test -m copy -a "content='hello the world\n' dest=/root/new.txt"

fetch模块

与copy类似, 但是作用相反

  • 可以将其它主机的文件拷贝到本地

# 将远程主机的hostname文件下载到本地家目录
[root@control ansible]# ansible test -m fetch -a "src=/etc/hostname dest=~/"
[root@control ansible]# ls  ~/

lineinfile|replace模块

在修改单个文件的单行内容时可以使用lineinfile模块

lineinfile会替换一整行, replace可以替换关键词

ineinfile模块

# 在/etc/issue文件中添加一行内容hello world,默认添加到最后
[root@control ansible]# ansible test -m lineinfile -a "path=/etc/issue line='hello world'"
# 基于幂等原则,重复执行,不会创建多行内容
[root@control ansible]# ansible test -m lineinfile -a "path=/etc/issue line='helle world'"
[root@control ansible]# ansible  test -a "tail -2 /etc/issue"  可以通过tail验证

replace模块

# 将/etc/issue文件全文所有的Kernel替换为Ocean
[root@control ansible]# ansible test -m replace \
-a "path=/etc/issue regexp=Kernel replace=Ocean"
[root@control ansible]# ansible  test -a "cat /etc/issue"  可以通过cat验证

yum模块

使用yum模块可以安装, 卸载,升级软件包

  • staten: present(安装) |absent(卸载)|atest(升级)

安装unzip软件包

[root@control ansible]# ansible test -m yum -a "name=unzip state=present"

升级unzip软件包,软件名称可以是*,代表升级所有软件包

[root@control ansible]# ansible test -m yum -a "name=unzip state=latest"

卸载unzip软件包

[root@control ansible]# ansible test -m yum -a "name=unzip state=absent"

yum_repository模块

使用yum_reposition可以创建或修改yum源配置文件

使用yum_repository模块为test主机组中所有主机配置yum客户端文件

[root@control ansible]# ansible test -m yum_repository -a "name=myyum description=hello baseurl=http://192.168.4.254/centos gpgcheck=no"

结果如下
#新建一个yum源配置文件/etc/yum.repos.d/myyum.repo
#yum源文件名为myyum,该文件的内容如下:
[myyum]
baseurl = http://192.168.4.254/centos
gpgcheck = 0
name = hello
[root@control ansible]# ansible test -a "cat /etc/yum.repos.d/myyum.repo"   #cat可以验证

删除test主机组中所有主机的yum客户端文件myyum.repo

[root@control ansible]# ansible test -m yum_repository -a "name=myyum state=absent"

service模块

service为服务管理模块(启动,关闭,重启服务等)

  • state:started|stopped|restarted

  • enabled:yes设置开机启动

[root@control ansible]# ansible test -m yum -a "name=httpd"  #安装httpd软件包
[root@control ansible]# ansible test -m service -a "name=httpd state=started"
[root@control ansible]# ansible test -m service -a "name=httpd state=stopped"
[root@control ansible]# ansible test -m service -a "name=httpd state=restarted"
[root@control ansible]# ansible test -m service -a "name=httpd enabled=yes"

0

评论区