Ansible常用模块实例

ansible主要文件

(/etc/ansible/ansible.cfg)
#ansible主配置文件。
(/etc/ansible/hosts)
#主机清单,保存管理的主机信息。
(/etc/ansible/roles)
#公共角色,主要在自动化部署多台主机时应用。

ansible命令集

ansible
定义并运行简单任务。

ansible-config
#查看、编辑、管理ansible配置。

ansible-doc
#文档查看工具。

ansible-galaxy
#共享和下载roles的工具。

ansible-inventory
#查看inventory的信息。

ansible-playbook
#执行playbook。

ansible-pull
#从仓库中拉去playbook。

ansible-vault
#文件加密工具。

ansible-console
#repl控制台执行ansible任务。

配置SSH免秘钥访问

为了避免ansible每次下发指令都要输入目标主机密码,所以这里使用(ssh-keygen)在控制主机创建一对秘钥,使用(ssh-copy-id)来下发生成的公钥。

[[email protected] ~]# ssh-keygen

Generating public/private rsa key pair.

Enter file in which to save the key (/root/.ssh/id_rsa): (回车)

Created directory ‘/root/.ssh‘.

Enter passphrase (empty for no passphrase):(回车)

Enter same passphrase again:(回车)

Your identification has been saved in /root/.ssh/id_rsa.

Your public key has been saved in /root/.ssh/id_rsa.pub.

The key fingerprint is:

e8:2b:a7:a2:6b:19:87:0b:b5:4e:fc:46:5b:9e:3d:7b [email protected]

The key‘s randomart image is:

+--[ RSA 2048]----+
|  .    .         |
| o..  . S        |
|.o+....          |
|.o=o +.o         |
| +o = +.o E      |
|+o o.+. .+       |
+-----------------+

/root/.ssh/下生产一对秘钥,其中(id_rsa)为私钥,(id_rsa.pub)为公钥.

[[email protected] ~]# tree /root/.ssh/

/root/.ssh/

├── id_rsa

└── id_rsa.pub

控制主机把公钥(id_rsa.pub)下发到被管节点上用户下的.ssh目录,并重命名为authorized_key,权限制为400,这里使用秘钥拷贝工具(ssh-copy-id)把公钥文件(id_rsa.pub)拷贝到被管节点。

[[email protected] ~]# ssh-copy-id -i /root/.ssh/id_rsa.pub [email protected]192.168.1.111

The authenticity of host ‘192.168.1.111 (192.168.1.111)‘ can‘t be established.

ECDSA key fingerprint is 75:5c:83:a1:b4:cc:bf:28:71:a5:d5:d1:94:35:3c:9a.

Are you sure you want to continue connecting (yes/no)? yes

/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed

/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys

[email protected]192.168.1.111‘s password:
Number of key(s) added: 1
Now try logging into the machine, with:   "ssh ‘[email protected]‘"
and check to make sure that only the key(s) you wanted were added.

公钥分发后,需要验证SSH无密码登录,如下为成功。

[[email protected] ~]# ssh [email protected]192.168.1.111

Last login: Wed Jul 17 23:13:35 2018 from master

[[email protected] ~]#

如果有多台节点分发公钥和上面一样,或者写一个简单的脚本分发。

主机连通性测试

[[email protected] ~]# cat >>/etc/ansible/hosts <<EOF
> [cluster_host]
> 192.168.1.111
> EOF
[[email protected] ~]# ansible cluster_host -m command -a ‘uptime‘
192.168.1.111 | SUCCESS | rc=0 >>
 09:58:17 up  1:03,  2 users,  load average: 0.01, 0.04, 0.05

常用模块解析

查询某个模块请执行:(ansible-doc -s 模块名)
查询更多模块请执行:(ansible-doc -l)

(setup)模块

#查看目标主机的一些信息

示例:

[[email protected] ~]# ansible cluster_host -m setup

192.168.1.111 | SUCCESS => {

    "ansible_facts": {

        "ansible_all_ipv4_addresses": [

            "172.16.1.15",

            "192.168.1.111"

        ],

        "ansible_all_ipv6_addresses": [

            "fe80::20c:29ff:fe91:ce86",

            "fe80::20c:29ff:fe91:ce7c"

        ],

        "ansible_apparmor": {

            "status": "disabled"

        }

(ping)模块

#测试目标主机的运行状态

示例:

[[email protected] ~]# ansible cluster_host -m ping

192.168.1.111 | SUCCESS => {

    "changed": false,

    "ping": "pong"

} 

(file)模块

#对目标主机的文件进行操作

参数如下:

force

在两种情况下强制创建软链接

1.源文件不存在但之后会建立的情况下;

2.目标软连接已经存在,需要取消之前的软链接,然后创建洗的软连接,有两个选项:yes|no;

group
#定义文件/目标的属组。
mode
#定义文件/目录的权限。
owenr
#定义文件/目录的属主。
path
#必选项,定义文件/目录的路径。
recurse
#递归的设置文件的属性,只对目录有效。
src
#要被链接的源文件的路径,只应用于state=link的情况。
dest
#被链接到的路径,只应用于state=link的情况。
file
#即使文件不存在,也不会被创建。
link
#创建软连接。
hard
#创建硬链接。
touch
#如果文件不存在,则会创建一个新的文件,如果文件或目录已存在,则更新其最后修改时间。
absent
#删除目录、文件或者取消链接文件。

示例:

#创建远程文件符号链接
[[email protected] ~]# ansible cluster_host -m file -a "src=/etc/resolv.conf dest=/tmp/resolv.conf state=link"
192.168.1.111 | SUCCESS => {
    "changed": true,
    "dest": "/tmp/resolv.conf",
    "gid": 0,
    "group": "root",
    "mode": "0777",
    "owner": "root",
    "size": 16,
    "src": "/etc/resolv.conf",
    "state": "link",
    "uid": 0
}
[[email protected] ~]#
#远程文件信息查看
[[email protected] ~]# ansible cluster_host -m command -a "ls -la /tmp/resolv.conf"
192.168.1.111 | SUCCESS | rc=0 >>
lrwxrwxrwx 1 root root 16 7月  18 10:21 /tmp/resolv.conf -> /etc/resolv.conf
#删除远程文件符号链接
[[email protected] ~]# ansible cluster_host -m file -a "path=/tmp/resolv.conf state=absent"
192.168.1.111 | SUCCESS => {
    "changed": true,
    "path": "/tmp/resolv.conf",
    "state": "absent"
}
#远程文件信息查看
[[email protected] ~]# ansible cluster_host -m command -a "ls -la /tmp/resolv.conf"
192.168.1.111 | FAILED | rc=2 >>
ls: 无法访问/tmp/resolv.conf: 没有那个文件或目录non-zero return code     

(copy)模块

#进行远程复制

参数如下:

src
#被复制到远程主机的本地对象文件或者文件夹,可以是绝对路径,也可以是相对路径。
dest
#被复制到远程主机的本地对象文件或者文件夹。
mode
#复制对象的设定权限。
backup
#在文件存在的时候可以选择覆盖之前,将源文件备份.设定值:yes/no 缺省为yes。
force
#是否强制覆盖.设定值:yes/no 缺省为no。

示例:

#将本地文件/etc/ansible/ansible.cfg复制到目标机器/tmp/ansible.cfg
[[email protected] ~]# ansible cluster_host -m copy -a "src=/etc/ansible/ansible.cfg dest=/tmp/ansible.cfg owner=root group=root mode=0644"
192.168.1.111 | SUCCESS => {
    "changed": true,
    "checksum": "4cb7c9f51f91d0c5895c2ae5bca18b4904ed407e",
    "dest": "/tmp/ansible.cfg",
    "gid": 0,
    "group": "root",
    "md5sum": "1f7011f69060831cfcd3b04136c2be6a",
    "mode": "0644",
    "owner": "root",
    "size": 19549,
    "src": "/root/.ansible/tmp/ansible-tmp-1531881922.82-138288626316266/source",
    "state": "file",
    "uid": 0
}
#查看目标主机的/tmp/ansible.cfg文件
[[email protected] ~]# ansible cluster_host -m command -a "ls -la /tmp/ansible.cfg"
192.168.1.111 | SUCCESS | rc=0 >>
-rw-r--r-- 1 root root 19549 7月  18 10:45 /tmp/ansible.cfg
[[email protected] ~]#

(command)模块

#在远程主机上执行命令

参数如下:

chdiiv
#在执行命令之前,通过cd命令进入指定目录中。
creates
#定义一个文件是否存在,如果不存在运行相应命令;如果存在跳过此步骤。
executable
#改变shell使用command进行执行,并且执行时要使用绝对路径。
free_form
#命令模块采用自由形式命令组合;即可以输入任意linux命令。
removes
#定义一^文件是否存在,如果存在运行相应命令;如果不存在跳过此步骤。
warn
#如果ansible配置文件中定义了命令警告,如果参数设置了no/false将不会警告此行命令。

示例:

[[email protected] ~]# ansible cluster_host -m command -a "pwd"
192.168.1.111 | SUCCESS | rc=0 >>
/root

[[email protected] ~]# ansible cluster_host -m command -a "who"
192.168.1.111 | SUCCESS | rc=0 >>
root     pts/0        2018-07-18 09:13 (10.0.0.1)
root     pts/1        2018-07-18 10:58 (10.0.0.5)

(shell)模块

#切换到某个shell执行指定命令,参数与command模块相同

示例:

#本地创建一个shell脚本
[[email protected] ~]# vim /tmp/test.sh
#!/bin/bash
date +%F_%H.%M.%S
:wq
[[email protected] ~]# chmod +x /tmp/test.sh
#将创建的脚本分发到目标主机
[[email protected] ~]# ansible cluster_host -m copy -a "src=/tmp/test.sh dest=/tmp/test.sh owner=root group=root mode=0755"
7192.168.1.111 | SUCCESS => {
    "changed": true,
    "checksum": "eccafd201f4a61757facc4a34e67e955b4f8a03f",
    "dest": "/tmp/test.sh",
    "gid": 0,
    "group": "root",
    "md5sum": "f027af9860d5c4548220b09bfa042b57",
    "mode": "0755",
    "owner": "root",
    "size": 30,
    "src": "/root/.ansible/tmp/ansible-tmp-1531883311.27-270962148668548/source",
    "state": "file",
    "uid": 0
}
#目标主机执行
[[email protected] ~]# ansible cluster_host -m shell -a "/tmp/test.sh"
192.168.1.111 | SUCCESS | rc=0 >>
2018-07-18_11.09.31

更多模块

service
#系统服务管理
cron
#计划任务管理
yum
#yum软件包安装管理
synchronize
#使用rsync同步文件
user
#系统用户管理
group
#系统用户组管理

原文地址:https://www.cnblogs.com/ghl1024/p/12080456.html

时间: 2024-08-01 09:52:27

Ansible常用模块实例的相关文章

ansible常用模块详解

ansible常用模块详解: ansible <host-pattern> [-m module_name] [-a args] [options] #ansible命令格式  指定主机组或ip地址  指定调用模块   传递给模块的参数   ansible-doc -l #列出可用模块 ansible-doc -s model_name #查看指定模块详细用法 command:ansible默认模块,对指定主机执行命令,不能理解特殊字符 例:ansible web -a 'date' #对we

Ansible 常用模块详解(3)

title: Ansible 常用模块详解(3) date: 2018-12-01 15:22:11 tags: Ansible categories: Ansible copyright: true --- Ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet.cfengine.chef.func.fabric)的优点,实现了批量系统配置.批量程序部署.批量运行命令等功能,ansible是基于模块工作的,本身没有批量部署的能力,真正具有批量部署的是an

二:Ansible常用模块

二:Ansible常用模块 一:Ansible命令模块 1.1 command # 默认模块, 执行命令 [[email protected] ~]# ansible web_group -a "hostname" 1.2 shell # 如果需要一些管道操作,则使用shell [[email protected] ~]# ansible web_group -m shell -a "ps -ef|grep nginx" -f 50 注意:command不识别管道符

2. ansible常用模块

Ansible通过模块的方式来完成一些远程的管理工作. ansible-doc -l查看所有模块 ansible-doc -s module来查看某个模块的参数, ansible-doc help module来查看该模块更详细的信息. 模块命令 -i 设备列表路径,可以指定一些动态路径 -f 并发任务数 -private-key 私钥路径 -m 模块名称 -M 模块夹的路径 -a 参数 -k 登陆密码 -K sudo密码 -t 输出结果保存路径 -B 后台运行超时时间 -P 调查后台程序时间

ansible常用模块介绍

ansible查看模块用法 例子 查看shell 模块使用方法 [[email protected] opt]# ansible-doc -s shell 注: -i 指定配置文件  tomcatserver自己定义的工作组  -m 指定模块 file模块 file模块包含如下选项: force:需要在两种情况下强制创建软链接,一种是源文件不存在但之后会建立的情况下:另一种是目标软链接已存在,需要先取消之前的软链,然后创建新的软链,有两个选项:yes|no group:定义文件/目录的属组 mo

Ansible常用模块介绍及使用

ansible常用命令解析: 查看当前 ansible 都支持哪些模块: ansible-doc -l 查看某一模块可以使用的参数:ansible-doc -s copy (eg:copy模块) ansible用法: ansible 主机名 -m 模块名 -a 模块参数 -m:模块的名字,如果执行单一的命令不用加-m,默认走command -a: 模块参数,如果模块是command,-a 后面跟的就是命令参数 -i : 指定hosts文件位置      默认:/etc/ansible/hosts

Ansible常用模块及API

Ansible安装 安装EPEL作为安装Ansible的yum源(CentOS6.4): rpm -Uvh http://ftp.linux.ncsu.edu/pub/epel/6/i386/epel-release-6-8.noarch.rpm 安装Ansible: yum install ansible -y 配置文件: 路径:/etc/ansible/hosts配置说明:webservers为组名,下面的ip或域名则是属于该组的主机. [webservers] 192.168.1.111

ansible使用一(ansible的安装及ansible常用模块的使用)

1.ansible概述        Ansible是一款基于Python开发的自动化运维工具,它不需要安装客户端,使用SSH进行通信,同时可支持系统账号认证或秘钥认证,也支持windows客户端. Ansible主要组成部分: (1)ANSIBLE PLAYBOOKS:任务剧本(任务集),编排定义Ansible任务集的配置文件,由Ansible顺序依次执行,通常是JSON格式的YML文件: (2)INVENTORY:Ansible管理主机的清单: (3)MODULES:Ansible执行命令的

Ansible常用模块基本操作

Ansible是一个系列文章,我会尽量以通俗易懂.诙谐幽默的总结方式给大家呈现这些枯燥的知识点,让学习变的有趣一些. 前言 对于任何一个框架,一个应用,为了更便于推广,便于使用,便于商业化,都会顺便提供很多常用的模块,这样让大家也很容易使用起来.Ansible也是一样的,所以这些常用的模块,就好比基本功,基本招式一样,我们需要掌握这些基本功,掌握这些基本招式.这篇文章,就对这些常用的模块进行一个比较全面的总结. ping模块 ping是测试远程节点的SSH连接是否就绪的常用模块,但是它并不像Li