目录

一、ansible介绍及特点

二、ansible的使用

1.主机清单的部署

2.ssh免密配置

3.使用ansible命令做简单的配置

三、ansible的常用模块


一、ansible介绍及特点

根据我的习惯,还是通俗点讲ansible,ansible就是可以同时批量处理多台主机,对主机进行命令执行和批量部署,通过剧本可以自动化安装服务的一个API,他是由python编写的,ansible最大的特点就是具有配置简单、功能强大、扩展性强。

二、ansible的使用

安装部署好ansible后有一个主机清单,我们在里面配置我们需要管理的主机

[root@giant-fox ~]# vim /etc/ansible/hosts

[node-1]
192.168.1.7
[node-2]
192.168.1.9
[node-3]
192.168.1.11

配置完主机清单后需要做免密配置

[root@giant-fox ~]# cd .ssh/
[root@giant-fox .ssh]# ssh-keygen -t rsa #一路yes就完了

[root@giant-fox .ssh]# ssh-copy-id localhost

[root@giant-fox .ssh]# ssh-copy-id 192.168.1.7

[root@giant-fox .ssh]# ssh-copy-id 192.168.1.9

[root@giant-fox .ssh]# ssh-copy-id 192.168.1.11

配置完成后我们可以通过ansible做一些简单的操作了 例如修改主机名,ping一下所有主机

[root@giant-fox ~]# ansible elk-1 -m shell -a 'hostnamectl set-hostname elk-1'
[WARNING]: Invalid characters were found in group names but not replaced, use -vvvv to see details
192.168.1.7 | CHANGED | rc=0 >>

[root@giant-fox ~]# ansible all -m ping
[WARNING]: Invalid characters were found in group names but not replaced, use -vvvv to see details
192.168.1.11 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": false, 
    "ping": "pong"
}
192.168.1.7 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": false, 
    "ping": "pong"
}
192.168.1.9 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": false, 
    "ping": "pong"
}

当你做完这两个小例子之后你就会发现有蓝色字体和绿色字体,在ansible中绿色字体表示正常,蓝色字体表示没有错误但还有其他更好的语法,红色字体是报错,还会出现橙色的字体,橙子字体是发生更改。

三、常用的模块

在学习模块之前,我们先了解ansible基本语法

ansible  主机名字  -m 选择模块 -a ‘需要进行的操作’

1.command模块(默认模块)

功能:在远程主机执行命令,此为默认模块,可忽略 -m 选项

ansible all -m command -a 'touch /root/ansible.log'

2.shell模块

和command相似,用shell执行命令,支持各种符号,比如:*,$, >

ansible all -m shell -a 'echo hello > /root/ansible.log'

ansible all -m shell -a 'ls -l /data'

#将shell模块代替command,设为模块

[root@ansible ~]#vim /etc/ansible/ansible.cfg

module_name = shell

3.script模块

先传输脚本然后运行脚本,一般用于执行脚本

4.file模块

创建或者和删除远程主机上的文件或者目录

path 指定文件 如果远程主机上没有该文件,则进行创建
state 创建类型 touch 文件 directory 目录
state=absent 删除文件或者目录
link 软连接 src=源文件名 path=目标链接文件名
hard 硬链接 src=源文件名 path=目标链接文件名

以下三个参数,既可以修改,也可以自动添加
mod:权限 可以在添加时设置特殊权限,前提要有执行权限( set 粘滞位)、owner属主、group组

[root@giant-fox ~]# ansible all -m file -a 'path=/root/fox.txt state=touch'   

[root@giant-fox ~]# ansible all -m file -a 'path=/tmp/a.txt group=root owner=root mode=755 state=touch'

5.copy

功能:从ansible服务器主控端复制文件到远程主机

src 是ansible的源文件 dest=destination目标 backup=yes 备份 

[root@giant-fox ~]# ansible all -m copy -a 'src=/root/copymokuai dest=/mnt/ backup=yes'

6.unarchive

creates:一个文件名,当它已经存在时,这个步骤将不会被运行。
copy:默认为yes,拷贝的文件从ansible主机复制到远程主机,no在远程主机上寻找src源文件解压
src:tar源路径,可以是ansible主机上的路径,也可以是远程主机上的路径,如果是远程主机上的路径,则需设置copy=no
dest:远程主机上的目标绝对路径
mode:设置解压缩后的文件权限
exec:列出需要排除的目录和文件
remote_src:设置remote_src=yes为解包目标上已经存在的档案。对于Windows目标,改用win_unzip模块。
owner:解压后文件或目录的属主
group:解压后的目录或文件的属组

[root@giant-fox ~]# ansible elk-1 -m unarchive -a 'src=/root/ansible.tar.gz dest=/tmp/  mode=755' 

7.systemd

启动服务

name 指定名字 enabled = yes/no state=started/restarted/stopped/reloaded

ansible all -m systemd -a 'name=ssh enabled=yes state=started'或者还有一种非常流氓的写法

ansible all -a ‘systemctl start ssh'

8.yum

安装服务

name参数:必须参数,用于指定需要管理的软件包,比如 nginx。

state参数:用于指定软件包的状态 ,默认值为。present,表示确保软件包已经安装,除了。present,其他可用值有 installed、latest、absent、removed,其中 installed 与present 等效,latest 表示安装 yum 中最新的版本,absent 和 removed 等效,表示删除对应的软件包。

disable_gpg_check参数:用于禁用对 rpm 包的公钥 gpg 验证。默认值为 no,表示不禁用验证,设置为 yes 表示禁用验证,即不验证包,直接安装。在对应的 yum 源没有开启 gpg 验证的情况下,需要将此参数的值设置为 yes,否则会报错而无法进行安装。

enablerepo参数:用于指定安装软件包时临时启用的 yum 源。假如你想要从A源中安装软件,但是你不确定A源是否启用了,你可以在安装软件包时将此参数的值设置为 yes,即使A源的设置是未启用,也可以在安装软件包时临时启用A源。

disablerepo参数:用于指定安装软件包时临时禁用的 yum 源。某些场景下需要此参数,比如,当多个 yum 源中同时存在要安装的软件包时,你可以使用此参数临时禁用某个源,这样设置后,在安装软件包时则不会从对应的源中选择安装包。

enablerepo 参数和 disablerepo 参数可以同时使用

一般下载 ansible all -m yum -a 'name=httpd state=present' 就够用了

9.cron

定时任务模块

10.user

useradd 用户名 # 创建普通用户
passwd 用户名 # 设置用户密码
useradd -M -s /sbin/nologin 用户名 # 创建的用户没有家目录,不能登录
useradd -u 用户id -g gid 用户名 # 创建用户时指定uid和gid
userdel -r 用户 # 连同用户家目录一起删除用户

[root@ansible ansible]# ansible fox  -m user -a 'name=fox'

[root@ansible ansible]# ansible fox -m user -a 'name=fox state=absent remove=yes'