一 Ad-Hoc使用场景

Ad-Hoc更倾向于解决简单、临时性任务。

1.1 Ad-Hoc基础命令

基本语法:
  1 ansible <host-pattern> [options]
<host-pattern>:指Inventory中定义的主机或主机组,可以为ip、hostname、Inventory中的group组名等。同时支持具有“.”、“*”或“:”等特殊字符的匹配型字符串。
提示:<>表示该选项为必选,[]表述是该选项中的参数任选其一或多个。
  1 [options]:
2 -v,--verbose:输出更详细的执行过程信息,-vvv可得到执行过程所有信息;
3 -i PATH,--inventory=PATH:指定inventory信息,默认/etc/ansible/hosts;
4 -f NUM,--forks=NUM:并发线程数,默认5个线程;
5 --private-key=PRIVATE_KEY_FILE:指定秘钥文件;
6 -m NAME,--module-name=NAME:指定执行使用的模块。
 
提示:-m指定模块名称, 默认情况下是指command模块, 可以省略不写。
  1 -M DIRECTORY,--module-path=DIRECTORY:指定模块存放路径,默认/usr/share/ansible;
2 -a 'ARGUMENTS',--args=‘ARGUMENTS’"模块参数;
3 -k,--ask-pass SSH:认证密码;
4 -K,ask-sudo=pass sudo:用户的密码(--sudo时使用);
5 -o,--one-line:标准输出至一行;
6 -s,--sudo:相当于Linux系统下的sudo命令;
7 -t DIRECTORY,--tree=DIRECTORY:输出信息至DIRECTORY目录下,结果文件以远程主机命名;
8 -T SECONDS,--timeout=SECONDS:指定连接远程主机的最大超时,单位是秒;
9 -B NUM,--background=NUM:后台执行命令,超NUM秒后中止正在执行的任务;
10 -P NUM,--poll=NUM:定期返回后台任务进度;
11 -u USERNAME,--user=USERNAME:指定远程主机以USERNAME运行命令;
12 -U SUDO_USERNAME,--sudo-user=SUDO_USERNAME:使用sudo,相当于Linux系统下的sudo命令;
13 -c CONNECTION,--connection=CONNECTION:指定连接方式,可用选项paramiko(SSH)、ssh、local,local方式常用于crontab和kickstarts;
14 -l SUBSET,--limit=SUBSET:指定运行主机;
15 -l ~REGEX,--limit=~REGEX:指定运行主机(正则);
16 --list-hosts:列出符合条件的主机列表,不执行任何命令。
 
  • 场景1:检查myhost主机组所有主机是否存活.
  1 [root@manage ~]# ansible myhost -f 5 -m ping
解析:
172.24.8.32:表示执行命令的主机;
SUCCESS:表示命令成功执行;
=> {……}:表示详细返回结果;
"changed": false,:表示没有对主机做变更;
"ping": "pong":表示执行ping命令返回结果为pong。
  • 场景2:返回myhost组所有主机的hostname,并打印最详细的执行过程到标准输出。
  1 [root@manage ~]# ansible myhost1 -s -m command -a 'hostname' -vvv
解析:
执行过程图如下:
  • 场景3:列出myhost组所有主机列表。
  1 [root@manage ~]# ansible myhost --list-hosts
  • 场景4:将172.24.8.31服务器以root执行sleep 20,设置最大连接超时为2s,且设置为后台运行模式,执行过程每2s输出一次进度,如5s还未执行完则终止该任务。
  1 [root@manage ~]# time ansible 172.24.8.31 -B 5 -P 2 -T 2 -m command -a 'sleep 20' -u root

1.2 通过Ad-Hoc查看系统设置

  • 场景1:批量查看myhost组所有主机的磁盘容量(command模块)。
  1 [root@manage ~]# ansible myhost -a "df -hl"
解析:rc=0表示ResultCode=0,即命令执行成功。
  • 场景2:批量查看远程主机内存使用情况(shell模块)。
  1 [root@manage ~]# ansible myhost -m shell -a "free -m"

二 Ansible模块使用

2.1 Ad-Hoc查看模块介绍

ansible-doc
ansible-doc是Ansible模块文档说明,针对每个模块都有详细的用法及应用案例介绍,类似Linux的man。
基本语法:
  1 ansible-doc [-l|-F|-s] [options] [-t <plugin type> ] [plugin]
参数:
-v,--version:显示工具版本号;
-h,--help:显示该help说明;
-M MODULE_PATH,--module-path=MODULE_PATH:指定Ansible模块的默认加载目录;
-l,--list:列出所有可用模块;
-s,--snippet:只显示playbook说明的代码段;
示例:
  1 [root@manage ~]# ansible-doc -l		#列出支持的模块
2 [root@manage ~]# ansible-doc yum #查看模块功能说明
 
  • 场景1:安装redhat-lsb并查看服务器系统版本号。
  1 [root@manage ~]# ansible myhost -m yum -a 'name=redhat-lsb state=present'	#安装软件
解析:
"changed":true:主机是否有变更,true表示有,false表示没有;
"msg":安装过程信息;
"rc":0,resultcode:结果返回码,非0返回码往往是红色并且错误的返回。
  1 [root@manage ~]# ansible myhost -a 'lsb_release -a'
  • 场景2:为服务器安装MySQL,并启动,同时设置为开机启动.
  1 [root@manage ~]# ansible myhost -m yum -a 'name=mariadb,mariadb-server state=present'
2 [root@manage ~]# ansible myhost -m service -a 'name=mariadb state=started enabled=yes'
 

三 Ansible主机、用户与组管理

3.1 主机变更

  • 情景1:指定组内特定主机变更。
  1 [root@manage ~]# ansible myhost -m service -a 'name=ntpd state=started' --limit "172.24.8.31"
--limit:通过limit参数限定主机做变更
  • 场景2:通过指定具体IP限定主机做变更。
  1 [root@manage ~]# ansible 172.24.8.32 -m command -a "systemctl start ntpd"
  • 场景3:指定多台主机做变更。
  1 [root@manage ~]# ansible 172.24.8.31:172.24.8.33 -m command -a "systemctl start ntpd"
解析:使用:指定多台服务器,:非31-33,而是31和33两台主机。
  1 [root@manage ~]# ansible 172.24.8.3* -m command -a "systemctl stop ntpd"

3.2 Linux用户管理模块user

参数
必填
默认值
选项
说明
append
No
Yes/no
yes:增量添加group
no:全量变更group,只设置groups指定的group组
comment
 
 
用户的描述信息
createhome
yes
Yes/no
yes:添加用户同时创建家目录;
no:添加用户时不创建家目录;
force
No
Yes/no
强制,结合state=absent使用,
相当于userdel --force
generate_ssh_key
No
Yes/no
是否生成秘钥,不会覆盖已有SSH key
group
 
 
可选,设定用户的主组
groups
 
 
设置用户附属组,用逗号分隔的组;
当groups设定为空,则会移除除主组外其他所有组
home
 
 
可选,设定为用户的home目录
login_class
 
 
可选,设定FreeBSD/OpenBSD/NetBSD系统的用户
登陆class
name
 
 
用户名
move_home
No
Yes/no
若为yes,则会临时迁移家目录到特定目录
non_unique
No
Yes/no
可选,结合-u使用,允许改变用户ID为非唯一值
password
 
 
可选,设定用户的密码(加密后的密码)
remove
No
Yes/no
结合state=absent使用,
相当于userdel --remove
seuser
   
可选,设置seuser类型启用SELinux
shell
 
 
可选,设定用户的shell
skeleton
   
可选,设置用户skel目录,
需和createhome参数结合使用
ssh_key_bits
2048
 
可选,设定SSH key的加密位数
ssh_key_comments
$HOSTHOME
 
可选,定义SSH key注释信息
ssh_key_file
.sha/id_rsa
 
可选,定义SSH key文件名
ssh_key_passphrase
 
 
设置SSH key密码,若没有提供,则默认不加密
ssh_key_type
Rsa
 
可选,指定SSH key类型
state
Present
Present
Absent
present:新增用户
absent:删除用户
system
No
Yes/no
创建为系统账号,不会改变已经存在的用户
uid
 
 
可选,设定为用户的uid
update_password
Always
Always
On_create
always:只有当用户密码不同才会更新密码
on_create:只为新用户设置密码
  • 场景1:新增用户
需求描述:为myhost1服务器,新增用户dba,使用BASH Shell,附加组为adm、mysql,家目录为/home/dba。
  1 [root@manage ~]# ansible myhost1 -m user -a "name=dba shell=/bin/bash append=yes groups=adm,mysql home=/home/dba state=present"
  • 场景2:修改用户属组
需求描述:修改DBA附加组为mysql(即删除adm属组)。
  1 [root@manage ~]# ansible myhost1 -m user -a "name=dba groups=mysql append=no"
  • 场景3:设置用户密码
需求描述:设置dba用户密码为x120952576。
      1. 步骤一:生成加密后的密码
        1. 方式一:使用passlib生成密码
  1 [root@manage ~]# pip install passlib	#使用pip安装psslib

提示:pip安装参考《001.Pip简介及使用》,passlib对于不同Python版本使用方式略有差异,Python多版本管理参考《Python多环境管理》。

  1 [root@manage ~]# python -c "from passlib.hash import sha512_crypt;import getpass;print (sha512_crypt.encrypt(getpass.getpass()))"	#使用Python3.x sha512加密算法加密
2 Password: #输入密码x120952576

提示:sha512加密的密码包括特殊元字符,如\n,在传输至远程服务器可能导致密码被转移异常的问题。

  1 [root@manage ~]# python -c 'import crypt;print(crypt.crypt("x120952576","dba"))'	#使用Python3.x 普通加密算法加密

    • 使用Python2.x sha512加密算法加密

    • 使用Python3.x 普通加密算法加密

    1. 方式二:使用mkpasswd生成密码

 
  1. 步骤二:执行加密操作
  1 [root@manage ~]# ansible myhost1 -m user -a "name=dba password=dbX.h0rUHw3Kc update_password=always"
参考文档:http://blog.51cto.com/hellocjq/2064114
  • 场景4:删除用户
需求描述:删除用户dba,并删除其家目录和邮件列表。
  1 [root@manage ~]# ansible myhost1 -m user -a "name=dba remove=yes state=absent"

四 其他模块应用

4.1 Windows用户管理

需求描述:新增用户dba,并设置密码为x123456.
  1 [root@manage ~]# ansible myhost2 -m win_user -a "name=dba passwd=x123456 group=Administrator"

4.2 MySQL应用

需求描述:新增MySQL用户dba,设置登录密码为x123456,对mysql.host表有ALL权限。
  1 [root@manage ~]# ansible myhost1 -m mysql_user -a "login_host=localhost login_password=x120952576 login_user=root name=dba password=x123456 priv=mysql.host:ALL state=present"
提示:mysql_user需要MySQL-python模块,可先安装mysql-devel和MySQL-python组件。

004.Ansible Ad-Hoc命令集的更多相关文章

  1. 《Ansible权威指南》笔记(3)——Ad-Hoc命令集,常用模块

    五.Ad-Hoc命令集1.Ad-Hoc命令集通过/usr/bin/ansible命令实现:ansible <host-pattern> [options]    -v,--verbose  ...

  2. Ansible Ad-Hoc命令集

    Ad-Hoc Ad-Hoc就是 “临时命令”, 从功能上讲 Ad-Hoc跟Ansible-playbook都差不多,Ansible提供了两种完成任务的方式: Ad-Hoc命令集与Ansible-pla ...

  3. ansible 三配置和命令集

    一.Ansible配置 Ansible安装好之后的配置文件有如下两种: 1.yum安装,配置文件默认路径为: /etc/ansible/ansible.cfg 2.源码包安装,配置文件路径需要从软件包 ...

  4. [k8s]kubespray(ansible)自动化安装k8s集群

    kubespray(ansible)自动化安装k8s集群 https://github.com/kubernetes-incubator/kubespray https://kubernetes.io ...

  5. Ansible快速开始-指挥集群

    Ansible可以集中地控制多个节点,批量地执行ssh命令.由于其使用ssh进行操作,因此远端服务器除了安装openssh-server(一般服务器已经内置)之外,不需要安装额外的软件,因此使用非常简 ...

  6. Ansible自动化部署K8S集群

    Ansible自动化部署K8S集群 1.1 Ansible介绍 Ansible是一种IT自动化工具.它可以配置系统,部署软件以及协调更高级的IT任务,例如持续部署,滚动更新.Ansible适用于管理企 ...

  7. 即席查询(Ad Hoc)如何做到又快又稳?

    数字化与数字生态建设,是当前所有企业成长发展的必经之路.随着"加强新型基础设施建设"第一次被写入政府工作报告,5G.人工智能.工业互联网.智慧城市等新型基建彻底激发了数字的价值. ...

  8. shell编程:定义简单标准命令集

    shell是用户操作接口的意思,操作系统运行起来后都会给用户提供一个操作界面,这个界面就叫shell,用户可以通过shell来调用操作系统内部的复杂实现,而shell编程就是在shell层次上进行编程 ...

  9. SQL Server 阻止了对组件 'Ad Hoc Distributed Queries' 的 STATEMENT'OpenRowset/OpenDatasource' 的访问

    delphi ado 跨数据库访问 语句如下 ' and db = '帐套1' 报错内容是:SQL Server 阻止了对组件 'Ad Hoc Distributed Queries' 的 STATE ...

  10. Ad hoc sql

    SQL Server如何启用Ad Hoc Distributed Queries? 2011-08-11 14:53 wangdingbang CSDN博客 字号:T | T   本文主要介绍了SQL ...

随机推荐

  1. 【Java】「深入理解Java虚拟机」学习笔记(4)- 类文件结构

    我为什么喜欢Java,另一个重要原因就是跨平台,WORA. 程序员是爽了,但肯定有人要为你遮风挡雨,解决WORA的基石就是字节码+虚拟机. ♣Tip 其实这里存在两种无关性,一是平台无关性.另一个是语 ...

  2. 9.jexus 配置ssl

    这里非常感谢宇内流云,这是他的博客http://www.cnblogs.com/yunei/. 1,运行环境 CentOS7 jexus5.8.2.9(独立版) jexus 的下载地址 https:/ ...

  3. iframe内容自适应高度

    一直觉得要用JS才能实现iframe高度的自适应,其实CSS也可以,而且实现的更好,只是需要给包裹iframe的DIV设置个高度,然后让irame高度设置成100%就可以自适应了. 完美版Iframe ...

  4. matlab提取wind底层数据库操作

    首先需要安装navicat for SQL server 软件, 为了实现Matlab 通过JDBC方式连接Sqlserver数据库, 需要安装Sqlserver JDBC驱动. 地址: https: ...

  5. uva11754 中国剩余定理+暴力搜索

    是当y的组合数较小时,暴力枚举所有组合,然后用中国剩余定理求每种组合的解,对解进行排序即可 注意初始解可能是负数,所以如果凑不够S个,就对所有解加上M,2M.... 当y的组合数较大时,选择一个k/x ...

  6. Oracle索引(Index)介绍使用

    1.什么是引 索引是建立在表的一列或多个列上的辅助对象,目的是加快访问表中的数据:Oracle存储索引的数据结构是B*树,位图索引也是如此,只不过是叶子节点不同B*数索引:索引由根节点.分支节点和叶子 ...

  7. Canvas锯齿问题

    canvas的宽高必须通过HTML属性指定,不能通过CSS指定,否则会有锯齿 这个是通过CSS定义宽高,绘制的图形 #myCanvas{ background: black; height: 800p ...

  8. 史上最简单的 SpringCloud 教程

    史上最简单的 SpringCloud 教程 | 第一篇: 服务的注册与发现(Eureka)史上最简单的SpringCloud教程 | 第二篇: 服务消费者(rest+ribbon)史上最简单的Spri ...

  9. MyBatis - 1.入门

    MyBatis 是支持定制化 SQL.存储过程以及高级映射的优秀的持久层框架. MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集. MyBatis可以使用简单的XML或注解 ...

  10. (转载)Memcached和Redis简介

    转载自: Memcached和Redis简介 博主的Redis资料列表.http://www.cnblogs.com/programlearning/category/1003158.html 前言: ...