【ansible】ansible的介绍和安装
前言运维自动化
云计算核心职能
-
搭建平台架构
-
日常运营保障
-
性能效率优化
相关工具
-
代码管理(SCM):GitHub、GitLab、BitBucket、SubVersion
-
构建工具:maven、Ant、Gradle
-
自动部署:Capistrano、CodeDeploy
-
持续集成(CI):Jenkins、Travis
-
配置管理:Ansible、SaltStack、Chef、Puppet
-
容器:Docker、Podman、LXC、第三方厂商如AWS
-
编排:Kubernetes、Core、Apache Mesos
-
服务注册与发现:Zookeeper、etcd、Consul
-
脚本语言:python、ruby、shell、go
-
日志管理:ELK、Logentries
-
系统监控:Prometheus、Zabbix、Datadog、Graphite、Ganglia、Nagios
-
性能监控:AppDynamics、New Relic、Splunk
-
压力测试:JMeter、Blaze Meter、loader.io
-
应用服务器:Tomcat、JBoss、IIS
-
Web服务器:Apache、Nginx
-
数据库:MySQL、Oracle、PostgreSQL等关系型数据库;mongoDB、redis等NoSQL数据库
-
项目管理(PM):Jira、Asana、Taiga、Trello、Basecamp、Pivotal Tracker
1. Ansible 发展史及功能
作者:Michael DeHaan( Cobbler pxe kikstar 与 Func 作者)ansible 的名称来自科幻小说《安德的游戏》中跨越时空的即时通信工具,使用它可以在相距数光年的距离,远程实时控制前线的舰队战斗2012-03-09,发布0.0.1版,2015-10-17,Red Hat宣布1.5亿美元收购。
官网:https://www.ansible.com/
官方文档:https://docs.ansible.com/
1.1Ansible 功能
批量执行远程命令,可以对远程的多台主机同时进行命令的执行批量安装和配置软件服务,可以对远程的多台主机进行自动化的方式配置和管理各种服务编排高级的企业级复杂的IT架构任务, Ansible的Playbook和role可以轻松实现大型的IT复杂架构提供自动化运维工具的开发API, 有很多运维工具,如jumpserver(堡垒机)就是基于 ansible 实现自动化管理功能
1.2 Ansible 特性
- 模块化:调用特定的模块完成特定任务,支持自定义模块,可使用任何编程语言写模块(账号,软件等)
- Paramiko(python对ssh的实现),PyYAML,Jinja2(模板语言)三个关键模块
- 基于Python语言实现
- 部署简单,基于python和SSH(默认已安装),agentless,无需代理不依赖PKI(无需ssl)
- 安全,基于OpenSSH
- 幂等性:一个任务执行1遍和执行n遍效果一样,不因重复执行带来意外情况,此特性非绝对
- 支持playbook编排任务,YAML格式,编排任务,支持丰富的数据结构 剧本演员要按照 系统按照你规定的方式去执行命令
- 较强大的多层解决方案 role
1.3 Ansible 架构
1.3.1 Ansible组成
- INVENTORY:Ansible管理主机的清单 /etc/anaible/hosts 需要管理的服务清单
- MODULES:Ansible执行命令的功能模块,多数为内置核心模块,也可自定义
- PLUGINS:模块功能的补充,如连接类型插件、循环插件、变量插件、过滤插件等,该功能不常用
- API:供第三方程序调用的应用程序编程接口
1.3.2 Ansible 命令执行来源
- USER 普通用户,即SYSTEM ADMINISTRATOR- PLAYBOOKS:任务剧本(任务集),编排定义Ansible任务集的配置文件,由Ansible顺序依次执行,通常是JSON格式的YML文件- CMDB(配置管理数据库) API 调用- PUBLIC/PRIVATE CLOUD API调用
2.Ansible 安装和入门
2.1安装
开启SELinux来限制进程的权限,防止恶意程序通过提权等方式对系统进行攻击
########yum源安装###############
[root@node1 yum.repos.d]#vim CentOS-Base.repo
#加入 epel源
[epel]
name=gn
baseurl=https://mirrors.aliyun.com/epel/$releasever/x86_64https://mirrors.cloud.tencent.com/epel/$releasever/x86_64https://mirrors.huaweicloud.com/epel/$releasever/x86_64https://mirrors.tuna.tsinghua.edu.cn/epel/$releasever/x86_64
gpgcheck=0[root@node1 yum.repos.d]#yum info ansible
已加载插件:fastestmirror, langpacks
base | 3.6 kB 00:00:00
epeel | 4.7 kB 00:00:00
extras | 2.9 kB 00:00:00
updates | 2.9 kB 00:00:00
(1/3): epeel/7/group_gz | 96 kB 00:00:00
(2/3): epeel/7/updateinfo | 1.0 MB 00:00:00
(3/3): epeel/7/primary_db | 7.0 MB 00:00:04
Loading mirror speeds from cached hostfile* base: mirrors.163.com* epeel: mirrors.aliyun.com* extras: mirrors.163.com* updates: mirrors.163.com
可安装的软件包
名称 :ansible
架构 :noarch
版本 :2.9.25
发布 :1.el7
大小 :17 M
源 :epeel/7
简介 : SSH-based configuration management, deployment, and task execution system
网址 :http://ansible.com
协议 : GPLv3+
描述 : Ansible is a radically simple model-driven configuration management,: multi-node deployment, and remote task execution system. Ansible works: over SSH and does not require any software or daemons to be installed: on remote nodes. Extension modules can be written in any language and: are transferred to managed machines automatically.[root@node1 yum.repos.d]#yum install ansible -y
......................省略..................................
已安装:ansible.noarch 0:2.9.25-1.el7 作为依赖被安装:PyYAML.x86_64 0:3.10-11.el7 libyaml.x86_64 0:0.1.4-11.el7_0 python-babel.noarch 0:0.9.6-8.el7 python-jinja2.noarch 0:2.7.2-4.el7 python-markupsafe.x86_64 0:0.11-10.el7 python-paramiko.noarch 0:2.1.1-9.el7 python2-httplib2.noarch 0:0.18.1-3.el7 python2-jmespath.noarch 0:0.9.4-2.el7 完毕!yum install epel-release.noarch -y
yum install ansible -y###############Git方式#######################
yum install git
git clone git://github.com/ansible/ansible.git --recursive
cd ./ansible
source ./hacking/env-setup
(操作)安装ansible
[root@test1 ~]# systemctl stop firewalld
[root@test1 ~]# systemctl disable firewalld
[root@test1 ~]# setenforce 0
[root@test1 ~]# yum install -y epel-releaseInstalled:epel-release.noarch 0:7-11 Complete!
[root@test1 ~]# yum install ansible -yDependency Installed:PyYAML.x86_64 0:3.10-11.el7 libyaml.x86_64 0:0.1.4-11.el7_0 python-babel.noarch 0:0.9.6-8.el7 python-jinja2.noarch 0:2.7.2-4.el7 python-markupsafe.x86_64 0:0.11-10.el7 python-paramiko.noarch 0:2.1.1-9.el7 python2-httplib2.noarch 0:0.18.1-3.el7 python2-jmespath.noarch 0:0.9.4-2.el7 sshpass.x86_64 0:1.06-2.el7 Complete!
[root@test1 ~]# ansible --version
ansible 2.9.27config file = /etc/ansible/ansible.cfgconfigured module search path = [u'/root/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']ansible python module location = /usr/lib/python2.7/site-packages/ansibleexecutable location = /usr/bin/ansiblepython version = 2.7.5 (default, Aug 4 2017, 00:39:18) [GCC 4.8.5 20150623 (Red Hat 4.8.5-16)]
[root@test1 ~]#
[root@test1 ~]# yum info ansible
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile* base: mirrors.aliyun.com* epel: mirrors.bfsu.edu.cn* extras: mirrors.nju.edu.cn* updates: mirrors.nju.edu.cn
Installed Packages
Name : ansible
Arch : noarch
Version : 2.9.27
Release : 1.el7
Size : 103 M
Repo : installed
From repo : epel
Summary : SSH-based configuration management, deployment, and task execution: system
URL : http://ansible.com
License : GPLv3+
Description : Ansible is a radically simple model-driven configuration management,: multi-node deployment, and remote task execution system. Ansible works: over SSH and does not require any software or daemons to be installed: on remote nodes. Extension modules can be written in any language and: are transferred to managed machines automatically.
2.2查看基本信息
[root@test1 ~]# ansible --version
ansible 2.9.27config file = /etc/ansible/ansible.cfgconfigured module search path = [u'/root/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']ansible python module location = /usr/lib/python2.7/site-packages/ansibleexecutable location = /usr/bin/ansiblepython version = 2.7.5 (default, Aug 4 2017, 00:39:18) [GCC 4.8.5 20150623 (Red Hat 4.8.5-16)]
2.3相关文件
- /etc/ansible/ansible.cfg 主配置文件,配置ansible工作特性,也可以在项目的目录中创建此文件,当前目录下如果也有ansible.cfg,则此文件优先生效,建议每个项目目录下,创建独有的ansible.cfg文 件- /etc/ansible/hosts 主机清单;存放下属客机
- /etc/ansible/roles/ 存放角色的目录
2.4 ansible 主配置文件
Ansible 的配置文件可以放在多个不同地方,优先级从高到低顺序如下
ANSIBLE_CONFIG #环境变量,注意此项用 ansible --version 看不到,但可以生效
./ansible.cfg #当前目录下的ansible.cfg
~/.ansible.cfg #当前用户家目录下的.ansible.cfg
/etc/ansible/ansible.cfg #系统默认配置文件
可以使用 来查看
[root@node1 yum.repos.d]#ansible --version
Ansible 的默认配置文件 /etc/ansible/ansible.cfg ,其中大部分的配置内容无需进行修改
[defaults]
#inventory = /etc/ansible/hosts #主机列表配置文件
#library = /usr/share/my_modules/ #库文件存放目录
#remote_tmp = $HOME/.ansible/tmp #临时py命令文件存放在远程主机目录
#local_tmp = $HOME/.ansible/tmp #本机的临时命令执行目录
#forks = 5 #默认并发数
#sudo_user = root #默认sudo 用户
#ask_sudo_pass = True #每次执行ansible命令是否询问ssh密码
#ask_pass = True
#remote_port = 22
#host_key_checking = False #检查对应服务器的host_key,建议取消此行注释,实现第一次连接自动信任目标主机
#log_path=/var/log/ansible.log #日志文件,建议启用
#module_name = command 、mod #默认模块,可以修改为shell模块
[privilege_escalation] #普通用户提权配置
#become=True
#become_method=sudo
#become_user=root
#become_ask_pass=False
(操作)实现免密登录
[root@test1 ~]# vim /etc/ansible/hosts 43 ## db-[99:101]-node.example.com44 45 [web]#可以指定ssh端口非默认的端口46 192.168.67.12:66647 192.168.67.134849 [local]#指定本地连接,无需ssh配置50 192.168.67.11 ansible_connection=local[root@test1 ~]# ansible 192.168.67.11 -m ping
192.168.67.11 | SUCCESS => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python"}, "changed": false, "ping": "pong"
}#使用密码连接;因为只能输入一次,所以需要被管理的主机密码一致
[root@test1 ~]# ansible web -m ping -k
SSH password:
192.168.67.13 | SUCCESS => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python"}, "changed": false, "ping": "pong"
}
192.168.67.12 | SUCCESS => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python"}, "changed": false, "ping": "pong"
}#ansible 默认使用 ssh 连接
#所以管理前要免密登录;ask——>no 要在安全的内网环境下才用no
[root@test1 ~]# vim /etc/ssh/ssh_config 34 # ConnectTimeout 035 StrictHostKeyChecking no[root@test1 ~]# vim /etc/ansible/ansible.cfg
#开启71行的不验证70 # uncomment this to disable SSH key host checking71 host_key_checking = False#添加免密登录的脚本文件
[root@test1 ~]# cd /opt/
[root@test1 opt]# ls
fdisk.sh rh
[root@test1 opt]# rz -E
rz waiting to receive.
[root@test1 opt]# ls
fdisk.sh rh ssh_key.sh
#修改一下登录密码
[root@test1 opt]# vim ssh_key.sh 1 #!/bin/bash2 3 PASS=123#bash跑一下
[root@test1 opt]# bash ssh_key.sh
Generating public/private rsa key pair.
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:
SHA256:Y4JojyvznzV66aQotwDtcb8QLweNrATP/cbTqIUjn+k root@test1
The key's randomart image is:
+---[RSA 2048]----+
| |
| |
|. |
| = + + |
|. O O o S |
|.+ * O = . |
|. = * #.. |
|+..= ^o+ |
| *=+Eoo |
+----[SHA256]-----+
sshpass-1.06-2.el7.x86_64
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub"
/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 keysNumber of key(s) added: 1Now try logging into the machine, with: "ssh -o 'StrictHostKeyChecking=no' '192.168.67.11'"
and check to make sure that only the key(s) you wanted were added.known_hosts 100% 525 1.3MB/s 00:00
known_hosts 100% 525 824.0KB/s 00:00
known_hosts 100% 525 1.1MB/s 00:00 #跑完后,即可实现免密登录
[root@test1 opt]# ansible web -m ping
192.168.67.12 | SUCCESS => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python"}, "changed": false, "ping": "pong"
}
192.168.67.13 | SUCCESS => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python"}, "changed": false, "ping": "pong"
}
(脚本)免密登录脚本文件的代码
#!/bin/bashPASS=123
#设置网段最后的地址,4-255之间,越小扫描越快
END=254IP=`ip a s ens33 | awk -F'[ /]+' 'NR==3{print $3}'`
NET=${IP%.*}.rm -f /root/.ssh/id_rsa
[ -e ./SCANIP.log ] && rm -f SCANIP.log
for((i=3;i<="$END";i++));do
ping -c 1 -w 1 ${NET}$i &> /dev/null && echo "${NET}$i" >> SCANIP.log &
done
waitssh-keygen -P "" -f /root/.ssh/id_rsa
rpm -q sshpass || yum -y install sshpass
sshpass -p $PASS ssh-copy-id -o StrictHostKeyChecking=no $IP AliveIP=(`cat SCANIP.log`)
for n in ${AliveIP[*]};do
sshpass -p $PASS scp -o StrictHostKeyChecking=no -r /root/.ssh root@${n}:
done#把.ssh/known_hosts拷贝到所有主机,使它们第一次互相访问时不需要输入回车
for n in ${AliveIP[*]};do
scp /root/.ssh/known_hosts ${n}:.ssh/
done

2.5 inventory 主机清单文件
ansible的主要功用在于批量主机操作,为了便捷地使用其中的部分主机,可以在inventory 主机清单文件中将其分组组织
官方文档:How to build your inventory — Ansible Documentation
默认的inventory file 位置在:/etc/ansible/hosts
参数详细说明
ansible_ssh_host
#将要连接的远程主机名.与你想要设定的主机的别名不同的话,可通过此变量设置.
ansible_ssh_port
#ssh端口号.如果不是默认的端口号,通过此变量设置.这种可以使用 ip:端口
192.168.1.100:2222ansible_ssh_user
#默认的 ssh 用户名ansible_ssh_pass
#ssh 密码(这种方式并不安全,我们强烈建议使用 --ask-pass 或 SSH 密钥)ansible_sudo_pass
#sudo 密码(这种方式并不安全,我们强烈建议使用 --ask-sudo-pass)ansible_sudo_exe (new in version 1.8)
#sudo 命令路径(适用于1.8及以上版本)ansible_connection
#与主机的连接类型.比如:local, ssh 或者 paramiko. Ansible 1.2 以前默认使用 paramiko.1.2 以后默认使用 'smart','smart' 方式会根据是否支持 ControlPersist, 来判断'ssh' 方式是否可行.ansible_ssh_private_key_file
#ssh 使用的私钥文件.适用于有多个密钥,而你不想使用 SSH 代理的情况.ansible_shell_type
#目标系统的shell类型.默认情况下,命令的执行使用 'sh' 语法,可设置为'csh' 或 'fish'.ansible_python_interpreter
#目标主机的 python 路径.适用于的情况: 系统中有多个 Python, 或者命令路径不是"/usr/bin/python",比如 \*BSD, 或者 /usr/bin/python 不是 2.X 版本的Python.之所以不使用 "/usr/bin/env" 机制,因为这要求远程用户的路径设置正确,且要求 "python" 可执行程序名不可为 python以外的名字(实际有可能名为python26).与ansible_python_interpreter 的工作方式相同,可设定如 ruby 或 perl 的路径....
例子:
[web]
192.168.67.12:666
#可以指定ssh端口非默认的端口
192.168.67.13[server]
192.168.67.[11:15]
#指定连续的主机[ky15]
node[1:5]
#指定连续的主机[server:ky15]
server
ky15
#可以嵌套组[local]
192.168.67.11 ansible_connection=local
#指定本地连接,无需ssh配置#ansible_connection=ssh 需要StrictHostKeyChecking no
192.168.67.14 ansible_connection=ssh ansible_ssh_port=2222 ansible_ssh_user=root ansible_ssh_password=123
10.0.0.6 ansible_connection=ssh ansible_ssh_user=root ansible_ssh_password=123
还可以指定用户身份 端口号 和密码#执行ansible命令时显示别名,如node1
[websrvs]
node2 ansible_ssh_host=192.168.67.12
node3 ansible_ssh_host=192.168.67.13[websrvs]
ansible_ssh_password=123
例子
[root@node1 ansible]#vim hosts
[local]
192.168.91.100 ansible_connection=local[web]
192.168.91.101
192.168.91.102[accp]
192.168.91.103
192.168.91.105[webserver]
192.168.91.[101:103]
192.168.91.105[web:children]
web
accp[root@node1 ~]#ansible 192.168.91.105 -m ping
#可以指定 m代表使用模块 ping代表ping模块 命令探测下,需要输入 yes 或no
2.6Ansible相关工具
- /usr/bin/ansible 主程序,临时命令执行工具
- /usr/bin/ansible-doc 查看配置文档,模块功能查看工具,相当于man ansible-doc -l |grep 关键字 具体模块名字
- /usr/bin/ansible-playbook 定制自动化任务,编排剧本工具,相当于脚本
- /usr/bin/ansible-pull 远程执行命令的工具
- /usr/bin/ansible-vault 文件加密工具
- /usr/bin/ansible-console 基于Console界面与用户交互的执行工具
- /usr/bin/ansible-galaxy 下载/上传优秀代码或Roles模块的官网平台
2.6.1ansible
执行临时任务一次性任务
用法:
ansible <host-pattern> [-m module_name] [-a args]
命令 主机或者清单中的组 -m 指定模块 -a 执行的任务选项:
--version #显示版本
-m module #指定模块,默认为command;使用时可以不写
-v #详细过程 -vv -vvv更详细
--list-hosts #显示主机列表,可简写 --list
-C, --check #检查脚本文件(play book),并不执行;nginx-t 检查配置文件,是不一样的
-T, --timeout=TIMEOUT #执行命令的超时时间,默认10s
-k, --ask-pass #提示输入ssh连接密码;默认密钥Key验证,密码容易被破解
-u, --user=REMOTE_USER #执行远程执行的用户,默认root
-b, --become #代替旧版的sudo 切换
--become-user=USERNAME #指定sudo的runas用户,默认为root vim /etc/sudoers 用户权限
-K, --ask-become-pass #提示输入sudo时的口令
-f FORKS, --forks FORKS #指定并发同时执行ansible任务的主机数
(操作)
[root@test1 opt]# ansible localhost -m ping
localhost | SUCCESS => {"changed": false, "ping": "pong"
}######## 提权操作 ######
[root@centos7 ~]#grep lisi /etc/sudoers
#先在被控制端(目标主机)sudo授权
zhangsan ALL=(ALL) NOPASSWD: ALL#以zhangsan的用户连接用户,并利用sudo代表mage执行whoami命令
[root@ansible ~]#ansible 192.168.91.101 -m shell -a 'whoami' -u zhangsan -k -b --become-user=lisi
SSH password: #输入远程主机lisi用户ssh连接密码
10.0.0.8 | CHANGED | rc=0 >>[root@node1 ~]#ansible 192.168.91.105 -m shell -a 'hostname >/opt/host.txt' -u zhangsan -k -b
SSH password:
192.168.91.105 | CHANGED | rc=0 >>命令模块 不行
shell模块 可以使用重定向、特殊命令
######################## 主机列表 ###########################
##支持通配符
ansible all -m ping
ansible "*" -m ping
ansible 192.168.67.* -m ping
#ansible "srvs" -m ping
ansible "192.168.67.12 192.168.67.13" -m ping[root@test1 ~]# vim /etc/ansible/hosts 45 [web]46 192.168.67.1247 192.168.67.1348 49 [kgc]50 192.168.67.1251 192.168.67.1452 53 [local]54 192.168.67.11 ansible_connection=local#或关系(双方和)
[root@test1 ~]# ansible 'web:kgc' --list-hostshosts (3):192.168.67.12192.168.67.13192.168.67.14#并且关系(双方都有)
[root@test1 ~]# ansible "web:&kgc" --list-hostshosts (1):192.168.67.12#逻辑非;(前者有后者无)在web里但不在kgc里的
[root@test1 ~]# ansible 'web:!kgc' --list-hostshosts (1):192.168.67.13#正则表达式
ansible "websrvs:dbsrvs" -m ping
ansible "~(k|a).*" -m ping
[root@node1 ~]#ansible "~(k|a).*" -m ping################例子###
#除了本机外都重启
ansible 'kube*:etcd:!10.0.0.101' -a reboot && reboot## -f 并行执行;-f1,一台一台执行;睡眠3秒
[root@test1 opt]# ansible all -a "sleep 3" -f1
## -f4 四台被管理机同时执行
[root@test1 opt]# ansible all -a "sleep 30" -f4192.168.67.11 | CHANGED | rc=0 >>192.168.67.12 | CHANGED | rc=0 >>192.168.67.13 | CHANGED | rc=0 >>192.168.67.14 | CHANGED | rc=0 >>#睡眠时被管理机会在用户主目录生成一个临时文件,可以装一个tree来看,也可以直接cd过去
[root@test2 ~]# yum -y install tree
[root@test2 ~]# tree .ansible/
.ansible/
└── tmp└── ansible-tmp-1710239948.82-21869-160369154402830└── AnsiballZ_command.py
#一般ctrl+c强行停止睡眠,临时文件会被保留,多了会卡
##ansible命令执行过程
1. 加载自己的配置文件,默认/etc/ansible/ansible.cfg
#[root@test1 opt]# ansible all -a "sleep 3" -f4
#cd /root/.ansible/tmp
2. 加载自己对应的模块文件,如:command
3. 通过ansible将模块或命令生成对应的临时py文件,并将该文件传输至远程服务器的对应执行用户$HOME/.ansible/tmp/ansible-tmp-数字/XXX.PY文件
4. 给文件+x执行
5. 执行并返回结果
6. 删除临时py文件,退出$HOME 为当前用户的家目录
执行返回结果
-
绿色:执行成功并且不需要做改变的操作
-
黄色:执行成功并且对目标主机做变更
-
红色:执行失败
配置文件中定义了颜色(可改,但一般不改)
vim /etc/ansible/ansible.cfg
[colors]
#highlight = white
#verbose = blue
#warn = bright purple
#error = red
#debug = dark gray
#deprecate = purple
#skip = cyan
#unreachable = red
#ok = green
#changed = yellow
#diff_add = green
2.6.2 ansible-doc
#使用ansible-doc 模块名 可以查看该模块的用法和实例
[root@test1 opt]# ansible-doc ping
> PING (/usr/lib/python2.7/site-packages/ansible/modules/system/ping.py)
....省略了#加上-s可以简略查看
[root@test1 opt]# ansible-doc -s ping
- name: Try to connect to host, verify a usable python and return `pong' on successping:data: # Data to return for the `ping' return value. If thisparameter is set to`crash', the modulewill cause anexception.#查看所有支持的模块
[root@test1 opt]# ansible-doc -l
q#统计模块数量
[root@test1 opt]# ansible-doc -l | wc -l
3387[root@test1 opt]# ansible-doc -l | grep ^ping
ping Try to connect to ...
pingdom Pause/unpause Ping...[root@test1 opt]# ansible-doc file
q退出#在vim中使用 :set ai 可以在回车时使光标下移到与当前行相同的位置


2.6.3 ansible-console
#此工具可交互执行命令,支持tab,ansible 2.0+新增
提示符格式
执行用户@当前操作的主机组 (当前组的主机数量)[f:并发数]$常用子命令:
设置并发数: forks n 例如: forks 10
切换组: cd 主机组 例如: cd web
列出当前组主机列表: list
列出所有的内置命令: ?或help[root@test1 opt]# ansible-console
Welcome to the ansible console.
Type help or ? to list commands.root@all (4)[f:5]$ cd web
root@web (2)[f:5]$ forks 10
root@web (2)[f:10]$ list
192.168.67.12
192.168.67.13#还可以直接使用模块
root@web (2)[f:10]$ ping
192.168.67.13 | SUCCESS => {"changed": false, "ping": "pong"
}
192.168.67.12 | SUCCESS => {"changed": false, "ping": "pong"
}root@web (2)[f:10]$ ?Documented commands (type help <topic>):
========================================
EOF
...省略root@web (2)[f:10]$
# ctrl+c 退出
[root@test1 opt]#
#2.6.4 playbook
此工具用于执行编写好的 playbook 任务
范例[root@test1 opt]# vim hello.yml
---
#hello world yml file
- hosts: webremote_user: rootgather_facts: notasks:- name: hello worldcommand: /usr/bin/wall hello worldansible-playbook hello.yml
cat hello.yml#添加超级管理员张三,并设置成免密登录(慎用)
[root@test1 opt]# vim /etc/sudoers91 ## Allow root to run any commands anywhere 92 root ALL=(ALL) ALL93 zhangsan ALL=(ALL) NOPASSWD: ALL
ansible-doc user





相关文章:
【ansible】ansible的介绍和安装
前言运维自动化 云计算核心职能 搭建平台架构 日常运营保障 性能效率优化 相关工具 代码管理(SCM):GitHub、GitLab、BitBucket、SubVersion 构建工具:maven、Ant、Gradle 自动部署:Capistrano、CodeDeploy 持续…...
二维数组_矩阵交换行
任务描述 给定一个5*5的矩阵(数学上,一个rc的矩阵是一个由r行c列元素排列成的矩形阵列),将第n行和第m行交换,输出交换后的结果。 输入格式: 输入共6行,前5行为矩阵的每一行元素,元素与元素之间以一个空格…...
mysql笔记:14. 权限管理
文章目录 MySQL权限授予权限查看权限撤销权限权限生效机制访问控制的实现 在实际生产中,为了保证数据的安全,数据库管理人员需要为不同的操作人员分配不同的权限,限制登录MySQL服务器的用户只能在其权限范围内操作。同时管理员还可以根据不同…...
无硫防静电手指套:高科技产业的纯净与安全新选择
随着科技的飞速发展,高科技产业对于生产环境的纯净度和产品的防静电要求日益严格。为了满足这一高标准的需求,无硫防静电手指套应运而生,以其独特的无硫特性和出色的防静电功能,迅速成为了高科技产业中的纯净与安全新选择。 无硫手…...
由浅到深认识C语言(10):字符串处理函数
该文章Github地址:https://github.com/AntonyCheng/c-notes 在此介绍一下作者开源的SpringBoot项目初始化模板(Github仓库地址:https://github.com/AntonyCheng/spring-boot-init-template & CSDN文章地址:https://blog.csdn…...
防范服务器被攻击:查询IP地址的重要性与方法
在当今数字化时代,服务器扮演着重要的角色,为企业、组织和个人提供各种网络服务。然而,服务器也成为了网络攻击者的目标之一,可能面临各种安全威胁,例如DDoS攻击、恶意软件攻击、数据泄露等。为了有效地防范服务器被攻…...
3. ElasticSearch搜索技术深入与聚合查询实战
1. ES分词器详解 1.1 基本概念 分词器官方称之为文本分析器,顾名思义,是对文本进行分析处理的一种手段,基本处理逻辑为按照预先制定的分词规则,把原始文档分割成若干更小粒度的词项,粒度大小取决于分词器规则。 1.2 …...
【Linux】Shell编程【一】
shell是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁。Shell 既是一种命令语言,又是一种程序设计语言。 Shell 是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务。 Shell属于内置的…...
Windows10+tensorrt+python部署yolov5
一、安装cuda 打开NVIDIA控制面板 —>帮助—>系统信息—>组件,找到驱动版本新,我这边是11.2, 然后去CUDA Toolkit Archive | NVIDIA Developer下载对应版本的CUDA,根据查看的CUDA型号确定对应的cuda Toolhit版本&#…...
【前端框架的发展史详细介绍】
前端框架的发展史 前端框架的发展史可以追溯到1995年,当时微软推出了IE浏览器并开始支持CSS,随后,在1997年,W3C(万维网联盟)发布了CSS的第一个正式标准。 在2003年,苹果推出了Safari浏览器&am…...
[JAVAEE]—进程和多线程的认识
文章目录 什么是线程什么是进程进程的组成什么是pcb 进程概括线程线程与进程的关系线程的特点 创建线程创建线程方法创建线程的第二种方法对比 其他的方式匿名内部类创建线程匿名内部类创建Runable的子类lambda表达式创建一个线程 多线程的优势 什么是线程 什么是进程 首先想…...
sqllab第十九关通关笔记
知识点: 错误注入 最大长度为32位;如果目标长度>32时,需要利用截取函数进行分段读取referer注入 insert语句update语句 通过admin admin进行登录发现页面打印除了referer字段的信息 这应该是一个referer注入 首先进行测试一下 构造payl…...
张量维度改变总结
文章目录 一、view() 或 reshape()二、unsqueeze()三、squeeze()四、transpose()五、torch.expand_dims 一、view() 或 reshape() view() 或 reshape(): 这两个函数可以用于改变张量的形状,但保持元素总数不变。它们可以接受一个新的形状作为参数,并返回…...
C++ ezOptionParse的用法
在网上找了一下,发现并没有很多关于这个小型头文件的资料 只好自己上了 int main(int argc, const char * argv[]) {ezOptionParser opt;opt.overview "Demo of parsers features."; //概要说明,一般需要填写,简要介绍程序的作用opt.synta…...
MATLAB:一些杂例
a 2; b 5; x 0:pi/40:pi/2; %增量为pi/40 y b*exp(-a*x).*sin(b*x).*(0.012*x.^4-0.15*x.^30.075*x.^22.5*x); %点乘的意义 z y.^2; %点乘的意义 w(:,1) x; %组成w,第一列为x w(:,2) y; %组成w,第二列为y w(:,3) z; %组成w,第三列为z…...
使用OpenCV实现两张图像融合在一起
简单介绍 图像融合技术是一种结合多个不同来源或不同传感器捕获的同一场景的图像数据,以生成一幅更全面、更高质量的单一图像的过程。这种技术广泛应用于遥感、医学影像分析、计算机视觉等多个领域。常见的图像融合技术包括基于像素级、特征级和决策级的融合方法&a…...
PyTorch学习笔记之基础函数篇(十)
文章目录 6 张量操作6.1 torch.reshape()函数6.1 torch.transpose()函数6.1 torch.permute()函数6.1 torch.unsqueez()函数6.1 torch.squeeze()函数6.1 torch.cat()函数6.1 torch.stack()函数 6 张量操作 6.1 torch.reshape()函数 torch.reshape() 是 PyTorch 中的一个函数&a…...
kubernetes部署集群
kubernetes部署集群 集群部署获取镜像安装docker[集群]阿里仓库下载[集群]集群部署[集群]集群环境配置[集群]关闭系统Swap[集群]安装Kubeadm包[集群]配置启动kubelet[集群]配置master节点[master]配置使用网络插件[master]node加入集群[node]后续检查[master]测试集群 集群部署…...
软件工程师,该偿还一下技术债了
概述 在软件开发领域,有一个特殊的概念——“技术债”,它源于Ward Cunningham的一个比喻,主要用来描述那些为了短期利益而选择的快捷方式、临时解决方案或者未完成的工作,它们会在未来产生额外的技术成本。就像金融债务一样&#…...
HTML5、CSS3面试题(三)
HTML5、CSS3面试题(二) rem 适配方法如何计算 HTML 跟字号及适配方案?(必会) 通用方案 1、设置根 font-size:625%(或其它自定的值,但换算规则 1rem 不能小于 12px) 2…...
KubeSphere 容器平台高可用:环境搭建与可视化操作指南
Linux_k8s篇 欢迎来到Linux的世界,看笔记好好学多敲多打,每个人都是大神! 题目:KubeSphere 容器平台高可用:环境搭建与可视化操作指南 版本号: 1.0,0 作者: 老王要学习 日期: 2025.06.05 适用环境: Ubuntu22 文档说…...
Vue记事本应用实现教程
文章目录 1. 项目介绍2. 开发环境准备3. 设计应用界面4. 创建Vue实例和数据模型5. 实现记事本功能5.1 添加新记事项5.2 删除记事项5.3 清空所有记事 6. 添加样式7. 功能扩展:显示创建时间8. 功能扩展:记事项搜索9. 完整代码10. Vue知识点解析10.1 数据绑…...
【网络安全产品大调研系列】2. 体验漏洞扫描
前言 2023 年漏洞扫描服务市场规模预计为 3.06(十亿美元)。漏洞扫描服务市场行业预计将从 2024 年的 3.48(十亿美元)增长到 2032 年的 9.54(十亿美元)。预测期内漏洞扫描服务市场 CAGR(增长率&…...
spring:实例工厂方法获取bean
spring处理使用静态工厂方法获取bean实例,也可以通过实例工厂方法获取bean实例。 实例工厂方法步骤如下: 定义实例工厂类(Java代码),定义实例工厂(xml),定义调用实例工厂ÿ…...
多种风格导航菜单 HTML 实现(附源码)
下面我将为您展示 6 种不同风格的导航菜单实现,每种都包含完整 HTML、CSS 和 JavaScript 代码。 1. 简约水平导航栏 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport&qu…...
如何理解 IP 数据报中的 TTL?
目录 前言理解 前言 面试灵魂一问:说说对 IP 数据报中 TTL 的理解?我们都知道,IP 数据报由首部和数据两部分组成,首部又分为两部分:固定部分和可变部分,共占 20 字节,而即将讨论的 TTL 就位于首…...
Java多线程实现之Thread类深度解析
Java多线程实现之Thread类深度解析 一、多线程基础概念1.1 什么是线程1.2 多线程的优势1.3 Java多线程模型 二、Thread类的基本结构与构造函数2.1 Thread类的继承关系2.2 构造函数 三、创建和启动线程3.1 继承Thread类创建线程3.2 实现Runnable接口创建线程 四、Thread类的核心…...
使用Spring AI和MCP协议构建图片搜索服务
目录 使用Spring AI和MCP协议构建图片搜索服务 引言 技术栈概览 项目架构设计 架构图 服务端开发 1. 创建Spring Boot项目 2. 实现图片搜索工具 3. 配置传输模式 Stdio模式(本地调用) SSE模式(远程调用) 4. 注册工具提…...
虚拟电厂发展三大趋势:市场化、技术主导、车网互联
市场化:从政策驱动到多元盈利 政策全面赋能 2025年4月,国家发改委、能源局发布《关于加快推进虚拟电厂发展的指导意见》,首次明确虚拟电厂为“独立市场主体”,提出硬性目标:2027年全国调节能力≥2000万千瓦࿰…...
CSS | transition 和 transform的用处和区别
省流总结: transform用于变换/变形,transition是动画控制器 transform 用来对元素进行变形,常见的操作如下,它是立即生效的样式变形属性。 旋转 rotate(角度deg)、平移 translateX(像素px)、缩放 scale(倍数)、倾斜 skewX(角度…...
