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

1、ansible概述
        Ansible是一款基于Python开发的自动化运维工具,它不需要安装客户端,使用SSH进行通信,同时可支持系统账号认证或秘钥认证,也支持windows客户端。

Ansible主要组成部分:

(1)ANSIBLE PLAYBOOKS:任务剧本(任务集),编排定义Ansible任务集的配置文件,由Ansible顺序依次执行,通常是JSON格式的YML文件;

(2)INVENTORY:Ansible管理主机的清单;

(3)MODULES:Ansible执行命令的功能模块,多数为内置的核心模块,也可自定义;

(4)PLUGINS:模块功能的补充,如连接类型插件、循环插件、变量插件、过滤插件等,该功能不常用。

(5)API:供第三方程序调用的应用程序编程接口;

(6)ANSIBLE:ansible命令工具,其为核心执行工具;

2、ansible的安装

(1)yum方式安装

#需要安装epel仓库
yum install epel-release
#安装ansible
yum install ansible

(2)使用pip方式安装(需要python2.7及以上版本支持)

#需要安装python-pip程序包及python-devel
yum install python-pip python-devel -y
#安装需要依赖的软件
yum install gcc glibc-devel zlib-devel rpm-build openssl-devel -y
#升级PIP至最新版本
pip install --upgrade pip
#安装ansible
pip install ansisble --upgrade

(3)源码方式安装

#安装git客户端
yum install git -y
#拉取GitHub上的源码包文件
git clone git://github.com/ansible/ansible.git --recursive
#执行env-setup脚本,安装ansible
cd ansible
source ./hacking/env-setup

(4)验证安装:

ansible --version

3、ansible的配置文件
        Ansible安装完成后,默认的配置文件存放在’/etc/ansible/’目录下,’/etc/ansible’目录的下的文件有ansible.cfg,hosts及目录roles,ansible.cfg为ansible默认的配置文件,使用的过程中,大多数情况下使用默认的配置文件即可,特殊情况下可根据自己需求修改配置文件。Hosts为ansible远程管理的主机及主机组配置文件。

4、ansible配置管理的主机及主机组
        Ansible安装完成后,它与客户端的通信时通过ssh通信的,与客户端的认证方式有密码认证及公钥私钥认证,默认使用的是基于公私钥认证,为了安装考虑,建议使用默认的公私钥认证。

(1)为客户端分发公钥

#在ansible服务端生成秘钥对
ssh-keygen -t rsa
#为客户端分发公钥,主机多时可通过脚本分发
ssh-copy-id -i /root/.ssh/id_rsa.pub "user"@host

(2)定义主机和组

Ansible对管理的主机组的配置文件为 /etc/ansible/hosts,对于功能相同的主机可以存放于同一组中,方便配置管理。也可将一个主机放在多个组中,若目标主机使用了非默认的SSH端口,可以在主机名称后使用冒号加端口来标明。

#配置一个test组,下面有三台主机
[test]
10.0.0.13
10.0.0.14
10.0.0.8
在定义主机及组时,也可为主机及组定义主机及组变量

#定义主机,并定义主机变量
[dayi123]
10.0.0.8 servername=nginx01 serverport=8011
#定义组变量,为上面定义的组test定义变量
[test:vars]
serverport=80
  在inventory中,组还可以包含其他的组,并且可以向组中的主机指定变量,而这些变量只能在ansible-playbook中使用。

5、Ansible系列命令介绍
        Ansible安装完成后,输入ansible按两次tab键,会补全所有ansible字母开头的命令,主要有七项。

(1)ansible命令的用法:

Ansible命令是日常工作中最长使用的命令,主要的使用场景为非固化需求,临时一次性的操作。

Ansible命令的使用语法格式为:

ansible <host-pattern> [options]

常用的参数选项有:

-m  指定执行时使用的模块

-u  指定远程主机运行此命令的用户

-s  相当于sudo

-S  使用sudo

Ansible返回结果一般会使用红色,橘色,橘黄色显示,红色表示执行过程异常,会终止剩余任务的执行,绿色和橘黄色表示执行过程没有异常,但橘黄色表示命令执行结束后目标有状态变化,绿色表示命令执行结束后目标没有状态变化。

(2)ansible-galaxy

通过ansible-galaxy上传下载Roles(Roles下载地址为:https://galaxy.ansible.com),

ansible-galaxy命令使用格式:

ansible-galaxy [init|info|install|list|remove] [--help] [options]

也可使用关键字查询roles:ansible-galaxy nginx

(3)ansible-pull

Ansible-pull的作用为推送命令至远程,效率无限提升,对运维要求较高

(4)ansible-doc

Ansible-doc是ansible模块的文档说明,对每个模块都有详细的用法说明及案例,功能和linux的man命令类似

Ansible-doc用法:ansible-doc [options] [module]

#列出所有的模块
ansible-doc -l
#查看摸模块的用法
ansible-doc [module]
#查看ping命令的用法
ansible-doc ping
(5)ansible-playbook

Ansible-playbook工作机制是通过读取预先编写的playbook文件实现批量管理,实现的功能与ansible命令相似,ansible-playbook执行时后跟yml格式的playbook文件,执行事先编好的任务集。

使用方法如:ansible-playbook playbook.yml

(6)ansible-vault

Ansible-vault主要用于配置文件加密

用法:

ansible-vault [create|decrypt|edit|encrypt|rekey|view] [--help] [options] file_name

(7)ansible-console

Ansible-console是ansible为用户提供的一款交互式工具,用户可在ansible-console虚拟出的终端上使用ansible内置的各种命令。所有的操作与shell类似,并支持tab补全。

6、ansible命令常用模块的使用
        ansible2.3中的模块大概有一千多个,可通过命令”ansible-doc -l”查看有那些模块,查看模块时也可以根据关键字搜索某个具体的模块名称。可通过”ansible-doc [modulename]”查看具体具体模块的用法。

(1)ping模块

检查摸个主机或者某个组中的主机是否联通,如果联通则返回”pong”

#测试某个主机是否联通
[root@ansible ~]# ansible 10.0.0.14 -m ping
#测试某个组的主机是否联通
[root@ansible ~]# ansible test -m ping
#测试所有的主机是否联通
[root@ansible ~]# ansible all -m ping
10.0.0.13 | SUCCESS => {
"changed": false,
"ping": "pong"
}
(2)command模块

command模块用于在被管理的客户端执行命令,但是command模块不支持管道符号”|”及”>”,”<”,”;”,”&”等一些特殊符号。

选项:     

reates 一个文件名,当该文件存在,则该命令不执行

free_form 要执行的linux指令

chdir 在执行指令之前,先切换到该目录

removes 一个文件名,当该文件不存在,则该选项不执行

executable 切换shell来执行指令,该执行路径必须是一个绝对路径

#查看磁盘剩余空间
[root@ansible ~]# ansible 10.0.0.13 -m command -a "df -h"
10.0.0.13 | SUCCESS | rc=0 >>
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/vg_server1-lv_root
37G 1.1G 34G 3% /
tmpfs 491M 0 491M 0% /dev/shm
/dev/sda1 477M 33M 419M 8% /boot
(3)shell模块

shell模块同command模块功能基本一样,但shell模块支持特殊符号。

选项(shell模块同command模块基本相同):

#查看是否存在用户”dayi123”,将信息保存到”/tmp/userinfo”中
[root@ansible ~]# ansible "*" -m shell -a "grep "dayi123" /etc/passwd >>/tmp/userinfo"
#查看”/tmp/userinfo”
[root@ansible ~]# ansible "*" -m shell -a "cat /tmp/userinfo"
#修改主机10.0.0.13及10.0.0.14用户”dayi123”的密码
[root@ansible ~]# ansible 10.0.0.13:10.0.0.14 -m shell -a "echo "dayi123" |passwd --stdin dayi123"
(4)copy模块

Copy模块用于将当前主机的文件及目录拷贝到远程主机上。

选项:

          backup 在覆盖之前,将源文件备份,备份文件包含时间信息。有两个选项:yes|no

content 用于替代“src”,可以直接设定指定文件的值

dest 必选项。要将源文件复制到的远程主机的绝对路径,如果源文件是一个目录,那么该路径也必须是个目录

directory_mode 递归设定目录的权限,默认为系统默认权限

force 如果目标主机包含该文件,但内容不同,如果设置为”yes”,则强制覆盖,如果为”no”,则只有当目标主机的目标位置不存在该文件时,才复制。默认为yes

src 被复制到远程主机的本地文件,可以是绝对路径,也可以是相对路径。如果路径是一个目录,它将递归复制。在这种情况下,如果路径使用”/”来结尾,则只复制目录里的内容,如果没有使用”/”来结尾,则包含目录在内的整个内容全部复制。

mode 文件或目录拷贝完成后设置权限。

owner 文件拷贝完成后设置文件的属主

group 文件拷贝完成后设置文件的属组

#拷贝目录
[root@ansible ~]# ansible test -m copy -a "src=/etc/cron.daily/ dest=/tmp/"
#拷贝文件
[root@ansible ~]# ansible test -m copy -a "src=jdk-8u144-linux-x64.rpm dest=/tmp/jdk.rpm"
#拷贝时如果目标目录文件存在则备份并在拷贝完成后修改文件属主权限
[root@ansible ~]# ansible "all" -m copy -a "src=/root/jdk-8u45-linux-x64.rpm dest=/home/dayi123/ mode=644 owner=dayi123 backup=yes"
(5)cron模块

cron模块主要用于创建计划任务

常用选项:

minute=/ hour=/ day=/ month=/ weekday=/ 某个值不写,默认就是*

name 必选项,任务的名称

job 执行的任务,要加引号

state 有两个选项分别为present(创建任务),absent(删除任务)

#创建时间同步的定时任务
[root@ansible ~]# ansible "all" -m cron -a "minute=1 hour=*/2 job=‘/usr/bin/ntpdate 10.0.0.30‘ name=ntpdate"
#删除定时任务
[root@ansible ~]# ansible "all" -m cron -a "name=ntpdate state=absent"
(6)fetch模块

fetch模块它用于从远程机器获取文件,并将其本地存储在由主机名组织的文件树中。

选项:

src 远程系统上要获取的文件。

dest 保存文件的目录

#获取远程主机上的hosts文件
[root@ansible ~]# ansible test2 -m fetch -a "src=/etc/hosts dest=/tmp"
10.0.0.13 | SUCCESS => {
"changed": true,
"checksum": "7335999eb54c15c67566186bdfc46f64e0d5a1aa",
"dest": "/tmp/10.0.0.13/etc/hosts",
"md5sum": "54fb6627dbaa37721048e4549db3224d",
"remote_checksum": "7335999eb54c15c67566186bdfc46f64e0d5a1aa",
"remote_md5sum": null
}
(7) file模块

file模块主要用于远程主机上的文件操作

选项:

force 需要在两种情况下强制创建软链接,一种是源文件不存在但之后会建立的情况下;另一种是目标软链接已存在,需要先取消之前的软链,然后创建新的软链,有两个选项:yes|no

group 定义文件/目录的属组

mode 定义文件/目录的权限

owner 定义文件/目录的属主

path 定义文件/目录的路径

recurse 递归的设置文件的属性,只对目录有效

src 要被链接的源文件的路径,只应用于state=link的情况

dest 被链接到的路径,只应用于state=link的情况

state:

           directory 如果目录不存在,创建目录

           file 即使文件不存在,也不会被创建

           link 创建软链接

           hard 创建硬链接

           touch 如果文件不存在,则会创建一个新的文件,如果文件或目录已存在,则更新其最后修改时间

            absent 删除目录、文件或者取消链接文件

#修改文件权限
[root@ansible ~]# ansible all -m file -a "path=/home/dayi123/jdk-8u45-linux-x64.rpm owner=dayi123"
#创建软连接
[root@ansible ~]# ansible all -m file -a "src=/etc/hosts dest=/hosts state=link"
#如果目录不存在,则创建目录
[root@ansible ~]# ansible all -m file -a "path=/home/dayi123/tool state=directory"
(8)hostname模块

Hostname模块用于批量修改主机名,修改后的主机名是永久生性的,重启后依然生效。

#修改单台主机名
[root@ansible ~]# ansible 10.0.0.13 -m hostname -a "name=ansible-client01"
10.0.0.13 | SUCCESS => {
"ansible_facts": {
"ansible_domain": "",
"ansible_fqdn": "ansible-client01",
"ansible_hostname": "ansible-client01",
"ansible_nodename": "ansible-client01"
},
"changed": true,
"name": "ansible-client01"
}
修改多态主机的名称时,需要在/etc/ansible/hosts中定义主机名的变量,然后在利用hostname模块修改。

在/etc/ansible/hosts中定义关于主机名的变量:

[test]
10.0.0.13:222 servername=ansible-client01
10.0.0.14 servername=ansible-client02
10.0.0.8 servername=ansible-server
批量修改主机名:

[root@ansible ~]# ansible test -m hostname -a "name={{ servername }}"
10.0.0.8 | SUCCESS => {
"ansible_facts": {
"ansible_domain": "",
"ansible_fqdn": "ansible-server",
"ansible_hostname": "ansible-server",
"ansible_nodename": "ansible-server"
},
"changed": true,
"name": "ansible-server"
}
(9)script模块

Script脚本模块用于将本地的脚本复制到远程主机并在远程主机执行。

选项:

creates:文件名,如果这个文件存在,则该命令不执行

free_form:本地脚本路径

removes:文件名,这个文件不存在,则该命令不执行

#去远程主机执行脚本
[root@ansible-server ~]# ansible test -m script -a "test.sh"
10.0.0.13 | SUCCESS => {
"changed": true,
"rc": 0,
"stderr": "Shared connection to 10.0.0.13 closed.\r\n",
"stdout": "######################\r\n### hello linux ###\r\n######################\r\nMon Apr 9 03:43:48 CST 2018\r\n",
"stdout_lines": [
"######################",
"### hello linux ###",
"######################",
"Mon Apr 9 03:43:48 CST 2018"
]
}
#当远程主机存在指定的文件时,脚本不执行
[root@ansible-server ~]# ansible test -m script -a "test.sh creates=/tmp/test.log"
10.0.0.13| SKIPPED
(10)yum模块

yum模块用于管理远程主机上的rpm软件包

选项:

config_file 指定yum配置文件

disable_gpg_check 关闭gpg_check

disablerepo 不启用某个源

enablerepo 启用某个源

name 指明要安装的程序包,可以带上版本号,可以写为rpm包的路径或url地址。

state 对软件进行的操作,是安装还是卸载,值为:

          present 默认的,表示安装

          lastest 安装为最新的版本

          absent 表示删除

#在所有的远程主机上安装ntpdate
[root@ansible-server ~]# ansible test -m yum -a "name=ntpdate state=present"
(11)Service模块

servicer模块主要用于对服务的管理

选项:

arguments 给命令行提供一些选项

enabled 是否开机启动 yes|no, 要求状态(state)和启用(enabled)中至少有一个。

name 必选项,服务名称

runlevel 运行级别

sleep 如果执行了restarted,在则stop和start之间沉睡几秒钟

state 对当前服务执行的动作,值有started,stopped,restarted,reloaded

#启动httpd服务
[root@ansible-server ~]# ansible 10.0.0.8 -m service -a ‘name=httpd state=started‘
#设置httpd服务开机自启动
[root@ansible-server ~]# ansible test -m service -a ‘name=httpd enabled=yes‘
(12)group模块

group模块用于管理用户组

选项:

gid 指定组id。

name 指定组名。

state 对组的操作是创建还是删除(present,absent)

system 表示创建的组是否为系统组,默认为”no”,”yes”则表示创建的组为系统组。

#创建用户组
[root@ansible-server ~]# ansible test -m group -a "name=test123 gid=1000"
(13)user模块

User模块用户管理远程主机上的用户

选项:

name 指定用户名

group 设置用户的属组

groups 设置用户的附加组

home 设置用户的家目录

shell 设置用户的shell

uid 设置用户的uid

expires 设置用户的过期时间(时间格式为时间戳格式)

password 设定用户的密码(密码为加密后的密码)

system 当创建用户时,值为”yes”时表示创建系统用户,默认值为”no”

state 值为”present”表示创建用户,值为”absent”时表示删除用户

remove 用于删除用户,结合”state=absent”使用

createhome 是否创建用户家目录,值为”yes”时表示创建用户家目录,值为”no”时表示不创建用户家目录,默认值为”yes”

generate_ssh_key 是否为用户生成SSH密钥。不会覆盖现有的SSH密钥。

ssh_key_bits 可选择指定要创建的SSH密钥中的位数。

ssh_key_passphrase 设置SSH密钥的密码。 如果没有提供密码,SSH密钥将默认没有密码。

ssh_key_file 指定SSH密钥文件名, 如果这是一个相对的文件名,那么它将是相对于用户的主目录。

ssh_key_type 指定要生成的SSH密钥的类型, 可用的SSH密钥类型将取决于目标主机上的实现。

#创建用户
[root@ansible-server ~]# ansible test -m user -a "name=dayi1234 shell=/bin/bash groups=test123,dayi123"
#将指定的时间转化为时间戳格式
[root@ansible-server ~]# date -d ‘2019-03-01 23:59:59‘ +%s
1551502799
#设置用户到期时间
[root@ansible-server ~]# ansible test -m user -a "name=dayi123 expires=1551502799"
#删除用户
[root@ansible-server ~]# ansible test -m user -a "name=dayi1234 state=absent remove=yes"

原文地址:https://www.cnblogs.com/songhuasheng/p/10415381.html

时间: 2024-10-13 16:53:37

ansible使用一(ansible的安装及ansible常用模块的使用)的相关文章

Ansible安装部署及常用模块详解

Ansible命令使用 Ansible语法使用ansible <pattern_goes_here> -m <module_name> -a <arguments> -m NAME,–module-name=NAME:指定执行使用的模块 -u USERNAME,–user=USERNAME:指定远程主机以USERNAME运行命令 -s,–sudo:相当于Linux系统下的sudo命令 -USUDO_USERNAME,–sudo-user=SUDO_USERNAME:使用

心领神会--自动化运维之Ansible的核心概念,安装配置Ansible并学会使用其常见模块。

自动化运维概述: 现如今随着互联网的高速发展,传统运维方式效率太过低下,部署自动化运维可以安全高效的完成维护工作,成为当下运维的主要方式. 一般会把自动化运维工具划分为两类:一类是需要使用代理工具的,也就是基于专用的Agent程序来完成管理功能,如:Puppet.Func.Zabbix等:另外一类是不需要配置代理工具可直接基于SSH服务来完成管理功能,如:Ansible.Fabric等. Ansible简介: ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(pu

Ansible 自动化运维工具之inventory和常用模块介绍

一.inventory介绍 前面我们介绍过ansible的hosts文件是存放被管理主机的,被管理主机比较少的情况下,直接在hosts中定义即可,但是以后很定会管理多台主机,而ansible可管理的主机集合就叫做inventory.在ansible中,描述你主机的默认方法是将它们列在一个文本文件中,这个文件叫inventory文件. 一个简单的inventory文件可能只包含一组主机名的列表,如下: ftp.testansible.com samba.testansible.com mail.t

Python开发安装的一些常用模块

一.BeautifulSoup模块 关于BeautifulSoup模块主要用于规范化网页源代码,利用其一些特定的解析标签函数来分析网页,的得到一些特定的内容,用起来方便简单容易入门,但仍然有一些弊端,比如说对于网页中含有js代码的就不能有效读取与分析,所以常结合正则表达式来进行使用,效率特别好 二.Scrapy + Selenium 模块 这两个模块结合起来使用常用于解析javascript,安装与配置比较麻烦,具体安装过程及需要额外安装哪些文件自行百度 三.MySQLdb模块 此模块用于连接M

自动化运维工具Ansible实战(一)安装部署

1,基本介绍 ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet.cfengine.chef.func.fabric)的优点,实现了批量系统配置.批量程序部署.批量运行命令等功能. ansible是基于模块工作的,本身没有批量部署的能力.真正具有批量部署的是ansible所运行的模块,ansible只是提供一种框架.主要包括: (1).连接插件connection plugins:负责和被监控端实现通信: (2).host inventory:指定操作

linux下安装部署ansible

介绍 Ansible是一种批量部署工具,现在运维人员用的最多的三种开源集中化管理工具有:puppet,saltstack,ansible,各有各的优缺点,其中saltstack和ansible都是用python开发的.ansible其实准确的说只提供了一个框架,它要基于很多其他的python模块才能工作的,所以在安装ansible的时候你要再装很多其他的依赖包的. 好处之一是使用者可以开发自己的模块,放在里面使用.第二个好处是无需在客户端安装agent,更新时,只需在操作机上进行一次更新即可.第

Ansible Tower系列 二(安装 Tower)【转】

文档:http://docs.ansible.com/ansible-tower/ 安装前检查 python版本为2.6 保持网络畅通 内存预留充足 安装用户为root 软件下载 下载地址:http://releases.ansible.com/ansible-tower/setup/含有包文件的版本:http://releases.ansible.com/ansible-tower/setup-bundle/ wget http://releases.ansible.com/ansible-t

ansible基础—安装与常用模块

ansible介绍: ansible是一个基于python开发的轻量级自动化运维管理工具,可以用来批量执行命令,安装程序,支持playbook编排.它通过ssh协议来连接主机,省去了在每一台主机安装客户端的麻烦,相对比puppet和saltstack,显得更为简单和轻量. ansible命令参数: Usage: ansible <host-pattern> [options] Options:   -a MODULE_ARGS, --args=MODULE_ARGS              

ansible学习笔记(二):ansible for CentOS6安装

### 最近有点儿时间了,再继续学习Asible,本节尝试使用pip安装ansible for CentOS6.5,其中OS是最小化安装. 2.2 Installing ansible on CentOS 6.5 2.2.1 pip安装Ansible ###(1) 准备环境: # python -V       # 版本:Python 2.6.6 # yum install gcc gcc-c++ # yum install git -y # yum install python-devel p

CentOS/REHL 6 安装配置Ansible

安装: 依赖的软件包: Jinja2:Python 的一个对设计师友好的现代模板语言 PyYAML:Python 的一个 YAML 编码/反编码函数库 paramiko:纯 Python 编写的 SSHv2 协议函数库 httplib2:一个功能全面的 HTTP 客户端函数库 安装ansible [[email protected] ~]# yum list|grep -i ansible Failed to set locale, defaulting to C ansible.noarch