运维自动化-Ansible ( 二 )

此章节的版本信息如下:

ansible 2.4.2.0
python version = 2.7.5 (default, Aug  4 2017, 00:39:18) [GCC 4.8.5 20150623 (Red Hat 4.8.5-16)]

ping

功能:尝试连接到主机,验证并返回pong成功。

-对于Windows目标,请改用win_ping模块
-不使用icmp协议,使用ssh协议。
例子:
#ansible db -m ping
7-db-3.hunk.tech | SUCCESS => {
    "changed": false,
    "ping": "pong"                > 返回pong表明成功通讯
}

command

功能:在远程节点上执行命令

-变量 和操作符号 "<", ">", "|", ";" and "&" 不能正常工作。如果需要使用,请使用shell模块
-Ansible默认不指定模块时,将使用此模块。
- chdir
        命令运行前先切换到此目录

- creates
        条件判断,如果文件存在,将不执行后面的命令。
        #ansible web -m command -a ‘creates=/app echo /app not found‘
        6-web-1.hunk.tech | SUCCESS | rc=0 >>
        skipped, since /app exists

= free_form
        The command module takes a free form command to run.  There is no parameter actually named ‘free form‘. See the
        examples!

- removes
        条件判断,如果文件不存在,将不执行后面的命令。
        #ansible web -m command -a ‘removes=/app echo /app not found‘
        6-web-1.hunk.tech | SUCCESS | rc=0 >>
        /app not found

- stdin
        将命令的stdin直接设置为指定的值

- warn
       如果 ansible.cfg 设置了开启警报, 将不会对这一行进行警报

shell

功能:在远程节点上执行命令。与command模快使用一致,但是,变量 和操作符号 "<", ">", "|", ";" and "&" 能正常工作

下面2个例子对比能清晰的表示出不同的地方

#ansible db -m command -a ‘echo $RANDOM‘
7-db-3.hunk.tech | SUCCESS | rc=0 >>
$RANDOM

#ansible db -m shell -a ‘echo $RANDOM‘
7-db-3.hunk.tech | SUCCESS | rc=0 >>
5159

这些复杂命令,即使使用shell也可能会失败,解决办法:写到脚本时,
copy到远程,执行,再把需要的结果拉回执行命令的机器
#ansible web -m shell -a df | awk ‘{print $5}‘

script

功能:把脚本复制到远程节点后,在远程节点本地运行脚本

给定的脚本将通过远程节点上的shell环境进行处理。
这个模块在远程系统上不需要python,就像原始脚本一样。
#ansible web -m script -a ‘./shell.sh‘

6-web-1.hunk.tech | SUCCESS => {
        "Wed Jan 31 23:17:17 CST 2018",
        "/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin"
}

copy

功能:复制文件或目录到远程节点。默认会覆盖目标文件

backup:在覆盖之前将原文件备份,备份文件包含时间信息。有两个选项:yes|no
content:用于替代"src",可以直接设定指定文件的内容,相当于echo 重定向内容到文件
dest:必选项。要将源文件复制到的远程主机的绝对路径,如果源文件是一个目录,那么该路径也必须是个目录
directory_mode:递归的设定目录的权限,默认为系统默认权限
force:如果目标主机包含该文件,但内容不同,如果设置为yes,则强制覆盖,如果为no,则只有当目标主机的目标位置不存在该文件时,才复制。默认为yes
others:所有的file模块里的选项都可以在这里使用
src:要复制到远程主机的文件在本地的地址,可以是绝对路径,也可以是相对路径。如果路径是一个目录,它将递归复制。在这种情况下,如果路径使用"/"来结尾,则只复制目录里的内容,如果没有使用"/"来结尾,则包含目录在内的整个内容全部复制,类似于rsync。

#ansible dns -m copy -a ‘src=/tmp/abc.txt  dest=/app backup=yes‘

复制目录时,斜线不要写
#ansible dns -m copy -a ‘src=/tmp/dir1  dest=/app‘

根据内容生成文件,相当于echo abc123 > /app/123.txt
#ansible dns -m copy -a ‘content="abc123"  dest=/app/123.txt‘

fetch

功能:从远程节点获取文件(只能是文件)到本地目录。默认会以主机清单中的主机名为目录存放获取到的文件

#ansible all -m fetch -a ‘src=/var/log/messages dest=/app‘
#tree -L 1 /app
/app
├── 6-dns-1.hunk.tech
├── 6-web-1.hunk.tech
├── 7-db-3.hunk.tech
├── 7-web-0.hunk.tech
└── 7-web-2.hunk.tech

注意,src=/var/log/mess*   这种通配符语法是不支持的

file

功能:设置远程节点的文件的文件属性

force:需要在两种情况下强制创建软链接,一种是源文件不存在但之后会建立的情况下;另一种是目标软链接已存在,需要先取消之前的软链,然后创建新的软链,有两个选项:yes|no
group:定义文件/目录的属组
mode:定义文件/目录的权限
owner:定义文件/目录的属主
path:必选项,定义文件/目录的路径
recurse:递归的设置文件的属性,只对目录有效
src:要被链接的源文件的路径,只应用于state=link的情况
dest:被链接到的路径,只应用于state=link的情况
state:  操作方法
    directory:如果目录不存在,创建目录
    file:即使文件不存在,也不会被创建
    link:创建软链接
    hard:创建硬链接
    touch:如果文件不存在,则会创建一个新的文件,如果文件或目录已存在,则更新其最后修改时间
    absent:删除目录、文件或者取消链接文件。相当于rm -rf

创建空文件,类似于touch
#ansible dns -m file -a ‘path=/app/dir2/abc.txt state=touch mode=0666 owner=ftp‘    

创建空目录, 类似于mkdir -p
#ansible dns -m file -a ‘path=/app/dir2/dir3/dir4 state=directory mode=0666 owner=ftp‘

├ dir2
│ └── dir3
│     └── dir4

创建软链接
#ansible dns -m file -a ‘path=/app/abc.txt state=link src=/app/dir2/abc.txt‘
lrwxrwxrwx  1 root root   17 Feb  1 00:58 abc.txt -> /app/dir2/abc.txt

hostname

功能:设置远程节点主机名

#ansible dns -m hostname -a ‘name=6-dns-1.hunk.tech‘

cron

功能:管理计划任务

backup:对远程主机上的原任务计划内容修改之前做备份
cron_file:如果指定该选项,则用该文件替换远程主机上的cron.d目录下的用户的任务计划
day:日(1-31,*,*/2,……)
hour:小时(0-23,*,*/2,……)
minute:分钟(0-59,*,*/2,……)
month:月(1-12,*,*/2,……)
weekday:周(0-7,*,……)
job:要执行的任务,依赖于state=present
name:该任务的描述
special_time:指定什么时候执行,参数:reboot,yearly,annually,monthly,weekly,daily,hourly
state:确认该任务计划是创建还是删除
user:以哪个用户的身份执行

#ansible dns -m cron -a ‘name="test cron job" minute=*/2 job="/usr/bin/wall hello world"‘

禁用某个计划任务

#Ansible: test cron job
*/2 * * * * /usr/bin/wall hello world

正确的写法:必须完整的写完,包括name等属性
#ansible dns -m cron -a ‘disabled=yes name=None minute=*/3 job="/usr/bin/wall hello world"‘

#ansible dns -m cron -a ‘disabled=yes job="/usr/bin/wall hello world"‘   > 这种写法是不对的,它会创建一条以下记录并禁用它
#Ansible: None
#* * * * * /usr/bin/wall hello world

删除计划任务
#ansible dns -m cron -a ‘state=absent name=None‘

yum

功能:使用yum包管理器来管理软件包

config_file:yum的配置文件
disable_gpg_check:关闭gpg_check
disablerepo:不启用某个源
enablerepo:启用某个源
name:要进行操作的软件包的名字,也可以传递一个url或者一个本地的rpm包的路径
state:Whether to install (`present‘ or `installed‘, `latest‘), or remove (`absent‘ or `removed‘) a package.
        (可选值: present, installed, latest, absent, removed) [Default: present]

#ansible all -m yum -a ‘name=tree state=present‘

#ansible all -a ‘rpm -q tree‘ -o
6-web-1.hunk.tech | SUCCESS | rc=0 | (stdout) tree-1.5.3-3.el6.x86_64
6-dns-1.hunk.tech | SUCCESS | rc=0 | (stdout) tree-1.5.3-3.el6.x86_64
7-web-0.hunk.tech | SUCCESS | rc=0 | (stdout) tree-1.6.0-10.el7.x86_64
7-web-2.hunk.tech | SUCCESS | rc=0 | (stdout) tree-1.6.0-10.el7.x86_64
7-db-3.hunk.tech | SUCCESS | rc=0 | (stdout) tree-1.6.0-10.el7.x86_64

yum_repository

功能:配置管理yum源

reposdir: repo文件存放目录
file:      repo文件名,默认为name的值
name:       唯一的repository ID
gpgkey:设置gpgkey
gpgcheck:设置gpg检查
enabled:设置开启关闭
bandwidth:控制带宽,0为无限
state:状态(present,absent
description:描述

#ansible dns -m yum_repository -a ‘state=present name=epel enabled=yes gpgcheck=yes description="Aliyun EPEL" baseurl="http://mirrors.aliyun.com/epel/6/$basearch,http://mirrors.aliyuncs.com/centos/$releasever/os/$basearch/" gpgkey="https://mirrors.aliyun.com/epel/RPM-GPG-KEY-EPEL-6Server"‘

service

功能:配置管理yum源

arguments:给命令行提供一些选项 。可以使用别名 args
enabled:是否开机启动 yes|no
name:必选项,服务名称
pattern:定义一个模式,如果通过status指令来查看服务的状态时,没有响应,就会通过ps指令在进程中根据该模式进行查找,如果匹配到,则认为该服务依然在运行
runlevel:运行级别
sleep:如果执行了restarted,在则stop和start之间沉睡几秒钟
state:对当前服务执行启动,停止、重启、重新加载等操作(started,stopped,restarted,reloaded)

#ansible db -m service -a ‘name=httpd state=started‘  > 一次只能操作一个服务

setup

功能:收集关于远程主机的信息。

在playbooks里经常会用到的一个参数gather_facts就与该模块相关

--tree :将所有主机的输出信息保存到/tmp/目录下,以/etc/ansible/hosts里的主机名为文件名
ansible all -m setup -a ‘filter=ansible_distribution_version‘ --tree /tmp/

filter :过滤关键字
#ansible db -m setup -a ‘filter=ansible_distribution_version‘

gather_subset:按子集收集信息,值有all, min, hardware, network, virtual, ohai, facter。不包含请使用!号,如,!network
关键字 说明 返回值例子
ansible_nodename 节点名 "6-dns-1.hunk.tech"
ansible_fqdn FQDN名 "6-dns-1.hunk.tech"
ansible_hostname 主机短名称 "6-dns-1"
ansible_domain 主机域名后缀 "hunk.teh"
ansible_memtotal_mb 总物理内存 "ansible_memtotal_mb": 222
ansible_swaptotal_mb SWAP总大小 "1023"
ansible_processor CPU信息 Intel(R) Core(TM) i5-5200U CPU @ 2.20GHz
ansible_processor_cores CPU核心 4
ansible_all_ipv4_addresses 有所IPV4地址
ansible_all_ipv6_addresses 所有IPV6地址
ansible_default_ipv4 默认网关的网卡配置信息
ansible_eth2 具体某张网卡信息 不同系统名称需要变化
ansible_dns DNS设置信
ansible_architecture 系统架构 x86_64
ansible_machine 主机类型 x86_64
ansible_kernel 内核版本 "2.6.32-696.el6.x86_64"
ansible_distribution 发行版本 "CentOS"
ansible_distribution_major_version 操作系统主版本号 "6"
ansible_distribution_release 发行版名称 "Final"
ansible_distribution_version 完整版本号 "7.4.1708"
ansible_pkg_mgr 软件包管理方式 "yum"
ansible_service_mgr 进行服务方式 "systemd"
ansible_os_family 家族系列 "RedHat"
ansible_cmdline 内核启动参数
ansible_selinux SElinux状态 "disabled"
ansible_env 当前环境变量参数
ansible_date_time 时间相关
ansible_python_version python版本 "2.6.6"
ansible_lvm LVM卷相关信息
ansible_mounts 所有挂载点
ansible_device_links 所有挂载的设备的UUID和卷标名
ansible_devices 所有/dev/下的正在使用的设备的信息
ansible_user_dir 执行用户的家目录 "/root"
ansible_user_gecos 执行用户的描述信息 "The root "
ansible_user_gid 执行用户的的GID 0
ansible_user_id 执行用户的的用户名 "root"
ansible_user_shell 执行用户的shell类型 "/bin/bash"
ansible_user_uid 执行用户的UID 0

user

功能:管理用户账号

选项太多,与useradd这类系统命令差不多
http://docs.ansible.com/ansible/latest/user_module.html

name:用户名,可以使用别名user
#ansible db -m user -a ‘name=hunk4 shell=/sbin/nologin system=yes comment="name is hunk"‘
7-db-3.hunk.tech | SUCCESS => {
    "changed": true,
    "comment": "name is hunk",
    "createhome": true,
    "group": 996,
    "home": "/home/hunk4",
    "name": "hunk4",
    "shell": "/sbin/nologin",
    "state": "present",
    "system": true,
    "uid": 998
}

删除用户
#ansible db -m user -a ‘name=hunk4 state=absent‘
7-db-3.hunk.tech | SUCCESS => {
    "changed": true,
    "force": false,
    "name": "hunk4",
    "remove": false,
    "state": "absent"
}

修改用户指定信息
#ansible db -m user -a ‘name=hunk4 state=present comment=" hunk is my"‘

remove:删除用户时一并删除用户家目录,需要与state=absent一起使用

#ansible db -m user -a ‘name=hunk3 state=absent remove=yes‘
7-db-3.hunk.tech | SUCCESS => {
    "changed": true,
    "force": false,
    "name": "hunk3",
    "remove": true,
    "state": "absent"
}

state:操作方法。(present , absent)

group

功能:添加组或删除组

group模块请求的是groupadd, groupdel, groupmod 三个指令.
用法都是差不多的。

get_url

功能:从 HTTP, HTTPS, or FTP 下载文件

checksum:下载完成后进行checksum;格式: e.g. checksum="sha256:D98291AC[...]B6DC7B97".值有sha1, sha224, sha384, sha256, sha512, md5
timeout:下载超时时间,默认10s
url:下载的URL
url_password、url_username:主要用于需要用户名密码进行验证的情况
use_proxy:是事使用代理,代理需事先在环境变更中定义
force:yes目标存在时是否下载,no目标文件不存在时下载
backup:创建一个包含时间戳信息的备份文件

#ansible dns -m get_url -a ‘dest=/app/ url="https://github.com/bennojoy/nginx/archive/master.zip"‘

#ansible dns -m get_url -a ‘dest=/app/ELS.txt checksum=sha1:8c9e20bd25525c3ed04ebaa407097fe875f02b2c url="ftp://172.18.0.1/pub/Files/ELS.txt" force=yes‘
6-dns-1.hunk.tech | SUCCESS => {
    "changed": false,
    "checksum_dest": "8c9e20bd25525c3ed04ebaa407097fe875f02b2c",
    "checksum_src": "8c9e20bd25525c3ed04ebaa407097fe875f02b2c", 

模块太多了,这里仅仅是列出范例用法。

请使用ansible-doc或者去官网吧。http://docs.ansible.com/

原文地址:http://blog.51cto.com/191226139/2067831

时间: 2024-10-31 00:02:01

运维自动化-Ansible ( 二 )的相关文章

运维自动化-Ansible ( 一 )

前言 天天说运维,究竟是干什么的?先看看工作流程呗.一般来说,运维工程师在一家企业里属于个位数的岗位,甚至只有一个.面对生产中NNN台服务器,NN个人员,工作量也是非常大的.所以嘛,图中的我好歹也会配置盔甲的. 这就是我主要干的事情(呵呵) 就算你会很厉害的脚本,面对成百上千,甚至上万的主机,效率问题将会困扰你的.因此,有没有解放的工具呢? Ansible 是什么 Ansible 简单的说是一个配置管理系统(configuration management system).你只需要可以使用 ss

运维自动化-Ansible roles

一.简介 Ansible1.2版本后引入的新特性,用于层次性.结构化地组织playbook.roles能够根据层次型结构自动装载变量文件.tasks以及handlers等.要使用roles只需要在playbook中使用include指令即可.简单来讲,roles就是通过分别将变量.文件.任务.模板及处理器放置于单独的目录中,并可以便捷地include它们的一种机制.角色一般用于基于主机构建服务的场景中,但也可以是用于构建守护进程等场景中 二.roles目录结构 官方推荐在/etc/ansible

运维自动化-Ansible ( 四 )

模板templates 功能:根据模块文件动态生成对应的配置文件 ? Jinja2语言,使用字面量,有下面形式 字符串:使用单引号或双引号 数字:整数,浮点数 列表:[item1, item2, ...] 元组:(item1, item2, ...) 字典:{key1:value1, key2:value2, ...} 布尔型:true/false ? 算术运算:+, -, *, /, //, %, ** ? 比较操作:==, !=, >, >=, <, <= ? 逻辑运算:and

运维自动化、虚拟化

一.运维自动化:ansible.saltstack  1.安装Ansible: rpm -ivh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm yum install ansible 2. 安装saltstack: rpm -ivh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm yum inst

自动化运维工具ansible详细介绍

在学习批量管理软件时,首先要明确的知道自己需要什么,网上大神很多,他们都研究到源码上了,写了很多介绍绚丽功能的文档,但其实那些功能基本上我们都用不到,经常被各种文档弄得头脑发晕,此文就是为了简单直白的告诉大家ansible的功能,满足大家的基本需求. 首先确认批量管理我们需要什么:无外乎主机分组管理.实时批量执行命令或脚本.实时批量分发文件或目录.定时同步文件等. 目录 1.      ansible与saltstack对比... 2.      ansible安装... 3.      ans

&lt;zz&gt;Ansible 运维自动化 ( 配置管理工具 )

from http://www.cnblogs.com/wangxiaoqiangs/p/5685239.html 简介: 当下有许多的运维自动化工具( 配置管理 ),例如:Ansible.SaltStack.Puppet.Fabric 等. Ansible 一种集成 IT 系统的配置管理.应用部署.执行特定任务的开源平台,是 AnsibleWorks 公司名下的项目,该公司由 Cobbler 及 Func 的作者于 2012 年创建成立. Ansible 基于 Python 语言实现,由 Pa

自动化运维工具Ansible部署详解与基本使用

一.基础简介 1.Ansible简介 Ansible是一款基于Python开发的自动化运维工具,主要是实现批量系统配置.批量程序部署.批量运行命令.批量执行任务等等诸多功能.Ansible是一款灵活的开源工具,能够很大程度简化运维中的配置管理与流程控制方式,它利用推送方式对客户系统加以配置,这样所有工作都可在主服务器端完成.Asible是基于模块工作的,其本身没有批量部署的能力,总之只要明白Ansible是一款运维自动化的神器就好了~! 2.功能特性 ######################

自动化运维工具Ansible详细部署 (转载)

自动化运维工具Ansible详细部署 标签:ansible 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://sofar.blog.51cto.com/353572/1579894 ========================================================================================== 一.基础介绍 ===========================

运维自动化之ansible

项目场景: 公司计划在年底做一次大型市场促销活动,全面冲刺下交易额,为明年的上市做准备.公司要求各业务组对年底大促做准备,运维部要求所有业务容量进行三倍的扩容,并搭建出多套环境可以共开发和测试人员做测试. 技术说明: ansible聚集以上部署和命令执行于一身,能够完整轻易的实现应用部署和批量命令功能,适用于主机数量中型规模,再大的规模用puppet. ansible是基于 paramiko 开发的,并且基于模块化工作,本身没有批量部署的能力.真正具有批量部署的是ansible所运行的模块,an