Ansible的常用模块

Ansible的常用模块

ansible的执行

  • ad-hoc
  • playbook

ansible ad-hoc的基本概述

什么是ansible ad-hoc

ad-hoc:临时的命令,执行后结束,不会保存

ad-hoc模式的使用场景

比如在多台机器上查看某个进程是否启动,或拷贝指定文件到本地,等等

ad-hoc模式的命令使用

img

# 1.语法
ansible 主机名(主机清单中的主机名或主机组) -m 模块名 [-a 动作]

[root@m01 ~]# ansible web_group -m shell -a 'free -m'
web01 | CHANGED | rc=0 >>
              total        used        free      shared  buff/cache   available
Mem:            972         196         310          41         465         553
Swap:          1023           0        1023
web02 | CHANGED | rc=0 >>
              total        used        free      shared  buff/cache   available
Mem:            972         191         429          43         351         567
Swap:          1023           0        1023

ad-hoc结果返回颜色

  • 绿色: 被管理端执行成功,并且结果不会发生改变
  • 黄色: 被管理端执行成功,但是结果是变化的
  • 红色: 执行失败,注意看报错

Ansible常用模块

ansible 查看模块的命令

ansible-doc 模块名

[root@m01 ~]# ansible-doc yum

Ansible命令模块:command、shell、script

command模块

# 语法
ansible web_group -m command -a '命令'(不带特殊符号)

# 举例
[root@m01 ~]# ansible web_group -m command -a 'df -h'
web01 | CHANGED | rc=0 >>
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda3        19G  1.7G   17G  10% /
devtmpfs        476M     0  476M   0% /dev
tmpfs           487M     0  487M   0% /dev/shm
tmpfs           487M  7.7M  479M   2% /run
tmpfs           487M     0  487M   0% /sys/fs/cgroup
/dev/sda1       497M  120M  378M  25% /boot
tmpfs            98M     0   98M   0% /run/user/0
web02 | CHANGED | rc=0 >>
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda3        19G  1.9G   17G  10% /
devtmpfs        476M     0  476M   0% /dev
tmpfs           487M     0  487M   0% /dev/shm
tmpfs           487M  7.7M  479M   2% /run
tmpfs           487M     0  487M   0% /sys/fs/cgroup
/dev/sda1       497M  120M  378M  25% /boot
tmpfs            98M     0   98M   0% /run/user/0

shell模块

# 语法
ansible web_group -m shell -a '命令'

[root@m01 ~]# ansible web_group -m shell -a 'free -m'
web01 | CHANGED | rc=0 >>
              total        used        free      shared  buff/cache   available
Mem:            972         196         310          41         465         553
Swap:          1023           0        1023
web02 | CHANGED | rc=0 >>
              total        used        free      shared  buff/cache   available
Mem:            972         191         429          43         351         567
Swap:          1023           0        1023

script模块(远程运行脚本)

# ansible远程执行脚本
ansible web_group -m script -a '脚本路径'

# 创建脚本
[root@m01 ~]# cat test.sh 
#!/bin/bash
mkdir /root/dsr -p
echo 123 > /root/dsr/text

#在本地运行模块,等同于在远程执行,不需要将脚本文件进行推送目标主机执行
[root@m01 ~]# ansible web_group -m script -a '/root/test.sh'

[root@web01 ~]# cat /root/dsr/1.txt 
123
[root@web02 ~]# cat /root/dsr/1.txt
123

ansible软件管理模块:yum、yum_repository

yum模块(安装,删除软件)

# 语法
ansible web_group -m yum -a 'name=包名 state=安装或删除'

# 选项
	- name:
		-直接指定包名:从仓库安装
		-http://    从指定URL安装
		-file://    从本地安装 类似于 yum
		
	- state:
    	-present     安装软件包
    	-absent      删除软件包
    	-latest      安装最新软件包
    	
    - download_only:
    	-true: 只下载不安装
    	-false: 下载并安装
    	
 [root@m01 ~]# ansible-doc yum
exclude=kernel*,foo*            #排除某些包
list=ansible                    #类似于yum list查看是否可以安装
disablerepo="epel,ol7_latest"   #禁用指定的yum仓库
download_only=true              #只下载不安装 yum install d

# 同时在web01和web02安装tree
[root@m01 ~]# ansible web_group -m yum -a 'name=tree state=present'
web01 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": true, 
    "changes": {
        "installed": [
            "tree"
        ]
    }, 
    "msg": "", 
    "rc": 0, 
    "results": [
        "Loaded plugins: fastestmirror\nLoading mirror speeds from cached hostfile\nResolving Dependencies\n--> Running transaction check\n---> Package tree.x86_64 0:1.6.0-10.el7 will be installed\n--> Finished Dependency Resolution\n\nDependencies Resolved\n\n================================================================================\n Package        Arch             Version                   Repository      Size\n================================================================================\nInstalling:\n tree           x86_64           1.6.0-10.el7              base            46 k\n\nTransaction Summary\n================================================================================\nInstall  1 Package\n\nTotal download size: 46 k\nInstalled size: 87 k\nDownloading packages:\nRunning transaction check\nRunning transaction test\nTransaction test succeeded\nRunning transaction\n  Installing : tree-1.6.0-10.el7.x86_64                                     1/1 \n  Verifying  : tree-1.6.0-10.el7.x86_64                                     1/1 \n\nInstalled:\n  tree.x86_64 0:1.6.0-10.el7                                                    \n\nComplete!\n"
    ]
}

yum_repository模块(创建,追加,删除yum仓库

# 语法
 ansible 主机名 -m yum_repository -a ‘name=仓库名 description=描述 baseurl=仓库url gpgcheck=yes或no enabled=yes或no file=仓库的文件名’

# 选项
yum_repository
	- name:仓库名字(如果有file,只是仓库名,如果没有file,文件名和仓库名)
	- file:指定仓库的文件名
	- description:仓库的描述(name)
	- baseurl:仓库的url
	- gpgcheck:
		- no:不开启 0
		- yes:开启 1(默认)
	- enabled:
		- no:不开启 0
		- yes:开启 1 (默认)
	- state:
    	-present:创建仓库(默认可写可不写)
    	-absent : 删除仓库    
    	    

## 创建新的仓库配置文件
[root@m01 ~]# ansible lb_group -m yum_repository -a 'name=dsr description=xxx baseurl=file:///mnt gpgcheck=no enabled=yes'

[root@lb01 ~]# cat /etc/yum.repos.d/dsr.repo 
[dsr]
baseurl = file:///mnt
enabled = 1
gpgcheck = 0
name = xxx

[root@lb02 ~]# cat /etc/yum.repos.d/dsr.repo
[dsr]
baseurl = file:///mnt
enabled = 1
gpgcheck = 0
name = xxx

## 创建新的仓库配置,并且文件名和仓库名不同
ansible web01 -m yum_repository -a 'name=local file=zls_local description=xxx baseurl=file:///mnt gpgcheck=no enabled=yes'

[root@m01 ~]# ansible web01 -m yum_repository -a 'name=local file=zls_local description=xxx baseurl=file:///mnt gpgcheck=no enabled=yes'
web01 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": true, 
    "repo": "local", 
    "state": "present"
}
[root@web01 ~]# cat /etc/yum.repos.d/zls_local.repo 
[local]
baseurl = file:///mnt
enabled = 1
gpgcheck = 0
name = xxx


## 追加仓库
[root@m01 ~]# ansible web01 -m yum_repository -a 'name=test2 file=zls_local description=xxx baseurl=file:///mnt gpgcheck=no enabled=yes'
[root@web01 ~]# cat /etc/yum.repos.d/zls_local.repo 
[local]
baseurl = file:///mnt
enabled = 1
gpgcheck = 0
name = xxx

[test2]
baseurl = file:///mnt
enabled = 1
gpgcheck = 0
name = xxx


## 删除仓库
[root@m01 ~]# ansible web01 -m yum_repository -a 'name=test2 file=zls_local state=absent'
web01 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": true, 
    "repo": "test2", 
    "state": "absent"
}

[root@web01 ~]# cat /etc/yum.repos.d/zls_local.repo 
[local]
baseurl = file:///mnt
enabled = 1
gpgcheck = 0
name = xxx

Ansible文件管理模块:copy、file、get_url

copy模块(远程推送、将命令变成cp命令,拷贝软链接)

# 语法
ansible 主机名 -m 模块名 -a 'src=源文件 dest=目标路径'

# 选项
copy
	- src:指定源文件的路径
	- dest:指定目标路径
	- owner:指定属主
	- group:指定属组
	- mode:指定权限
	- backup:
		- yes:如果目标路径,存在同名文件,就将目标文件备份
		- no:不备份直接覆盖(默认)
	- content:将指定文本内容覆盖到目标文件中
	- remote_src:将命令变成cp
		- yes:将源文件,编程远端的源文件(ansible被管理端)
		- no:源文件还是本地文件(ansible管理端 默认)
	- follow:拷贝软连接
		- yes:会将软连接一起拷贝
		- no:会生成一个新的软连接文件
	


## 远程推送文件
[root@m01 ~]# ansible lb01 -m copy -a 'src=/etc/passwd dest=/tmp'
[root@lb01 ~]# ll /tmp/
-rw-r--r-- 1 root root 1022 Aug 11 04:15 passwd

## 远端有同名文件时,想把同名文件备份
[root@m01 ~]# ansible lb01 -m copy -a 'src=/etc/passwd dest=/tmp backup=yes'
[root@lb01 ~]# ll /tmp/
total 8
-rw-r--r-- 1 root root 1022 Aug 11 04:24 passwd
-rw-r--r-- 1 root root 1041 Aug 11 04:24 passwd.63406.2021-08-11@04:24:59~

posted @ 2021-08-10 20:32  平凡的人不平凡的事  阅读(50)  评论(0编辑  收藏  举报