ansible使用笔记(二)常用命令使用及常用模块简介

ansible使用笔记(二)常用命令使用及常用模块简介,第1张

目录

一、常用命令使用

二、双引号" " 单引号' '对执行结果的影响

三、ansible-console工具

四、ansible常用模块

一、常用命令使用

前面拆贺卖有提到过ansible的常用的命令和使用

列出要执行主机

ansible all --list-hosts

批量检测主机

ansible all -m ping -k

ansible主机集合 -m 模块名称 -a 模块参数

主机集合 主机名或分组名旅逗,多个使用"逗号"分隔

-m 模块名称,默认command模块

-a or --args模块参数

其它参数

-i inventory文件路径,或可执行脚本

-k 使用交互式登陆密码

-e 定义变量

-v 显示详细信息

二、双引号" " 单引号' '对执行结果的影响

执行以下命令来查看ansible的执行结果

1)shell

ansible web -m shell -a "echo ${HOSTNAME}"

ansible web -m shell -a 'echo ${HOSTNAME}'

2)创建的文件在哪查看

ansible cache -m shell -a 'cd /tmp'

ansible cache -m shell -a 'touch testfile'

注:

1)变量解析 双引号"" 与单引号''使用区别

ansible 执行命令是二次解析,第一次在本机解析, 第二次在执行机器解析,需要第二次解析的变量要转移

总结: 参数默认使用 ' ' 号就对了

2)创建的文件在哪里

文件在用户家目录,ansible 是使用 ssh 多次连接执行,连接退出以后之前的状态就全部失效了

解决方法:使用 chdir 代替 cd 命令

ansible cache -m shell -a 'chdir=/tmp touch testfile'

三、ansible-console工具

是ansible为用户提供的交互式工具,用户可以在ansible-console虚拟出来的终端出来的终端上像shell一样使用ansible内置的各种命令,这为习惯使用shell交互方式的用户提供了良好的使用体验

四、ansible常用模块

4.1 ) ansible-doc和ping模块

ansible-doc模块手册

模块的手册相当于shell的man,很重要

ping模块

测试网络连通性,ping模块没有参数

注:测试ssh连通性

4.2 ) command模块

默认模块,远程执行命令

用法

command模块注意事项:

该模块通过-a跟上要执行的命令可以直接执行,若命令里有如下字符则执行不成功

"<" ">" "|" "&"

command模块不能解析系统变量

该模块不启动shell直接在ssh进程中执行,所有使用到shell的命令执行都会失败

查看所有机器负载

查看日期和时间

4.3 )shell模块

shell模块用法基本和command一样,区别是shell模块是通过/bin/sh进行执行命令,可以执行任意命令

不能执行交互式的命令,例如 vim top等

4.4 ) script模块

命令太复杂?

在本地写脚本,然后使用script模块指量执行

ansible web -m script -a 'urscript'

注意:该脚本包含但不限于shell脚本,只要指定sha-bang解释器的脚本都可运行

案例:

给所有web主机添加用户wk

1.要求by用户与wk用户不能出现在同一台主机上

2.设置wk用户的密码是456

4.5 ) yum模块

使用yum包管理器来管理软件拍梁包

name:要进行 *** 作的软件包名字

state:动作(installed安装、removed删除)

4.6 ) service模块

name:必须项,服务名称

enabled:是否开机启动yes|no

sleep:执行restarted,会在stop和start之间沉睡几秒钟

state:对当时服务执行启动、停止、重启中、重新加载等 *** 作(started,stopped,restarted,reloaded)

案例:

1.给db组安装mariadb

2.开启mariadb服务并设置开机启动

4.7 ) copy模块

复制文件到远程主机

src:复制本地文件到远程主机,绝对路径和相对路径都可以,路径为目录时会递归复制,若路径以"/"结尾,只复制目录里的内容,若不以"/"结尾,则复制包含目录在内的整个内容,类似于rsync

dest:必须项,远程主机的绝对路径,如果源文件是一个目录,那该路径必须是目录

backup:覆盖前先备份原文件,备份文件包含时间信息,有两个选项:yes|no

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

案例:

拷到本机/etc/resolv.conf 文件到所有拖管主机 并对原文件备份

给所有 db 主机开启 binlog 日志

4.8 ) lineinfile模块 replace模块

类似sed的一种行编辑替换模块

path 目标文件文件

regexp 正则表达式,要修改的行

line 最终修改的结果

replace模块

类似sed的一种行编辑替换模块

path 目标文件文件

regexp 正则表达式,要修改的行

replace 替换后的结果

lineinfile模块与 replace模块区别

lineinfile模块 是修改某个文件的单行并进行替换

replace模块 是修改某个文件的所有匹配行并进行替换

4.9 ) setup模块

主要用于获取主机信息,playbooks里经常会用的另一个参数gather_facts与该模块相关,setup模块下经常用的是filter参数

filter过滤所需信息

执行以下命令可查看包含的所有信息,可大致浏览一遍,包含的信息,

需要注意的是 filter过滤条件必须以信息中模块名为过滤条件 模块中详细信息不能为过滤条件

blockinfile模块可以帮助我们在指定的文件中插入一段“文本”,这段文件是被标记的,换句话说就是,我们在这段文件上做了记号,以便在以后的 *** 作可以通过“标记”找到这段文本。然后进行修改或删除。单靠这样的描述不容易理解,结合下面的示例应该就很快的明白了。敬歼念

为方便举例,我们将/etc/rc.d/rc.local文件复制到/testdir目录中去,以做测试 :cp cp /etc/rc.d/rc.local /testdir/

我们在/testdir/rc.local文件末尾添加两行命令

我们可以借用lineinfile模块,确保“某一行文本”存在于指定的文亮困件中,或者确保从文件中删除指定文本改闹(即确保指定的文本不存在于文件中)。还可以根据正则表达式,替换“某一行文件” 通俗的讲这个相当于liunx的sed命令。

接下来我们看一下lineinfile模块常用的一些参数

我们新建立files文件

Ansible是一个自动化管理IT资源的工具。

系统环境配置

安装软件

持续集成:自动化部署

热回滚

无客户端

推送式

丰富的第三方module,大概1W多个

基于YAML的Playbook

商业化的支持

效率低,易挂起:基于ssh通信

并发性能差

环境准备

Python

Setuptools

pip(可选): pip install ansible

git clone https://github.com/ansible/ansible.git

source ./hacking/env-setup

python setup.py install 替换自带的二进制运行文件

yum install ansible

Ansible ->ssh ->ssh ->shell

Ansible配余渣竖置文件路径优先级

(1) export ANSIBLE_CONFIG

(2) ./ansible.cfg

(3) ~/.ansible.cfg

(4) /etc/ansible/ansible.cfg

配置文件详解

ansible/ansible.cfg at devel · ansible/ansible · GitHub

(1) defaults 默认配置项

inventory : 存放可通信主机的目录,可修改为普通用户目录

library : Ansible默认搜寻模块路径

forks : 最大开辟的进程数,不易过大,过大性能耗费高;不宜过小,过小并发性能低,一般设置为CPU核数*2。

ask_pass : 可以控制Ansible playbook是否会自动默认d出输入密码框

ask_sudo_pass : 用户使用的系统平台开启了sudo密码的话,这个参数应该设置为true

gather_subset : 设置收集的内容,包括all、network、hardware、virtual、facter、ohai

remote_port : 设置客户机的端口,一般都是22

remote_tmp : 设置客户机的临时目录

remote_user : 设置客户机的用户

sudo_exe : sudo命令的路径

sudo_flags : sudo参数

sudo_user : 能够使用sudo的user

开发者中心的插件相关功能,开发者可以开发相应的插件,来完成自己的功能:

action_plugins : 激活事件

callback_plugins : 回调

connection_plugins : 连接,比如不使用ssh连接

filter_plugins : 过滤器

loopup_plugins : 加载路径

vars_plugins : 任何地方加载

(2) privilege_escalation执行命令的用户权限设置

(3) paramiko_connection paramika插件设置

(4) ssh_connection ssh链接设置

(4) accelerate

(5) selinux & colors

看梁森源码

3.1 编辑/etc/ansible/hosts,添加机器ip

3.2 添加本机的Public SSH key到目标机器的authorized_keys

3.3 添加本机的私钥到Ansible

3.4 ansible all -m ping 测试是否添加成功

ansible : 命令主体

all : 默认是所有机器,被 *** 作的目标机器的正则表达竖大式,也可以按需求换做hosts文件中的其他组名

举例:

ansible test -m ping

ansible 192.168.1.10 -m ping

-m ping : 指定要使用的模块

-a : 指定传入模块的参数

举例:

ansible all -a "/sbin/reboot" -f 10 重启所有机器,每次重启10个

ansible all -a "/usr/bin/foo" -u root 指定root用户执行shell命令

-C -D : 两个一起使用,检查hosts规则文件的修改

-l : 限制匹配规则的主机数

--list-hosts : 显示所有匹配规则的主机

-m -M :指定所使用的模块和模块的路径

--syntax-check : 检查语法

-v : 显示详细的日志

playbook可以编排有序的执行过程,甚至可以在多组机器间,来回有序的执行特别指定的步骤,并且可以同步或异步的发起任务。

待学习补充...

功能:

调用Ansible模块:

Ansible 2.0之前和2.0之后API相差很大,注意版本

调用Ansible2.0 API:

6.1 自己写一个模块 test.py

6.2 把模块放到木块文件夹下

配置文件ansible.cfg中的lilbrary配置参数为ansible module的放置路径。

6.3 运行自己的模块 ansible all -m test


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/12258702.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-24
下一篇 2023-05-24

发表评论

登录后才能评论

评论列表(0条)

保存