ansible(一)

摘要:
一.目的代码发布系统二.准备工作:干净的虚拟机准备4个准备一个虚拟机后克隆出另外三个,注意,克隆前要将虚拟机关机三.可以用来代码发布的工具puppetansibleslatstack四.ansible(批量在远程主机上执行命令)1.下载ansible第一步:下载wgetyuminstallwget第二部:下载epel源wget-O/etc/yum.repos.d/epel.repohttp://m

一.目的

代码发布系统

二.准备工作:干净的虚拟机准备4个

准备一个虚拟机后克隆出另外三个,注意,克隆前要将虚拟机关机

ansible(一)第1张

三.可以用来代码发布的工具

puppet ansible slatstack

四.ansible(批量在远程主机上执行 命令)

1.下载ansible

第一步:下载wget
yum install wget
第二部:下载epel源
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
第三部:安装ansible
yum install -y ansible

2.ansible 通过ssh来连接并控制‘被控节点’

注:ssh 的认证方式

  • 密码连接

  • 秘钥连接

ansible使用秘钥登录

ssh-keygen # 用来生成ssh的密钥对
ssh-copy-id 192.168.177.132 # 复制秘钥到远程主机
ssh-copy-id 192.168.177.133 # 复制秘钥到远程主机
ssh-copy-id 192.168.177.134 # 复制秘钥到远程主机

注:135作为主节点,后三个作为被控者节点

结果:在192.168.177.135主机中,想要连接另外三个被控节点,使用命令:ssh 192.168.177.132(ssh ip)即可

3.ansible命令格式

(1)查看ansible的所有命令
ansible -h
-a MODULE_ARGS, --args=MODULE_ARGS #模块的参数
-C, --check # 检查
-f FORKS, --forks=FORKS #用来做高并发的
--list-hosts #列出主机列表
-m MODULE_NAME #模块名称
--syntax-check # 语法检查
-k 输入密码
(2)查看ansible生成的文件
rpm -ql ansible
/etc/ansible
/etc/ansible/ansible.cfg #配置文件
/etc/ansible/hosts
/etc/ansible/roles
(3)查看是否能够连通单个IP(查看某个IP是否在线)
ansible 192.168.177.132 -m ping

如果ping不通,在hosts文件中添加相应IP

vi /etc/ansible/hosts
# This is the default ansible 'hosts' file.
#
# It should live in /etc/ansible/hosts
#
# - Comments begin with the '#' character #以警号开头的代表注释
# - Blank lines are ignored #空白行可以被忽略
# - Groups of hosts are delimited by [header] elements #主机组需要下载[组名]下
# - You can enter hostnames or ip addresses #可以写主机名或者IP地址
# - A hostname/ip can be a member of multiple groups #一台主机可以在多个组中

192.168.177.132
192.168.177.133
192.168.177.134

根据注释:You can enter hostnames or ip addresses,可以在hosts文件中加入主机命

或IP地址,以此来ping通相应IP

(4)查看所有被控节点是否在线
ansible all -m ping
(5)测试特定的某几个机器是否在线
ansible 192.168.177.132,192.168.177.132 -m ping
(6)测试特定的某组机器是否在线

在配置文件中

# Ex 2: A collection of hosts belonging to the 'webservers' group

## [webservers]
## alpha.example.org
## beta.example.org
## 192.168.1.100
## 192.168.1.110
[web]
192.168.177.[132:133]

[db]
192.168.177.133
192.168.177.134

[cache]
192.168.177.134
ansible web,db  -m ping #查看web,db两个组的机器是否在线
(7)查看两个组的交集的机器是否在线
ansible 'web:&db'  -m ping
(8)查看两个组的并集的机器是否在线
ansible 'web:db'  -m ping #方式一
ansible web,db -m ping #方式二
(9)查看两个组的差集的机器是否在线
ansible 'web:!db'  -m ping

注:系统自带的ping走的是ICMP协议

4.ansible-doc查看模块的帮助信息(有哪些参数可以使用)

ansible-doc -h

-j, --json **For internal testing only** Dump json metadata for #以json的格式返回所有的ansible模块 ansible-doc -j

-l, --list List available plugins #以列表的格式返回所有的ansible模块 ansible-doc -l

-s, --snippet Show playbook snippet for specified plugin(s) #以片段的形式显示ansible的帮助信息 ansible-doc -s 模块

查看详细信息

ansible-doc command
ansible-doc shell

5.命令相关模块

(1)command模块(不支持特殊字符)
ansible web -m command -a 'ls /' #(默认就是command,command可以省略)
ansible web -a 'ls /' #可简写为这
ansible web -a 'pwd' #
command的参数

ansible(一)第2张

ansible web -a 'chdir=/tmp pwd' #切换目录执行命令,常用来编译安装,
ansible web -a 'creates=/tmp pwd' #如果目录已存在,就不执行命令,用来判断tmp目录是否存在
ansible web -a 'removes=/data pwd' #目录已存在,就执行命令
在web组中创建一个用户shy
ansible web -a 'useradd shy'
查看用户是否创建成功
ansible web -a 'tail -l /etc/passwd' #方式一
ansible web -a 'tail -l /etc/shadow' #方式二
id shy #方式三
给用户设置密码
passwd shy
设置密码 一步搞定
echo '123' | passwd --stdin shy #用这种方式设置密码,远程登录时,不用重复确认密码
ansible web -a 'echo '123' | passwd --stdin shy ' #管道符不支持

ansible不支持 < > ; &|这些符号,这时候就永远到了shell模块,shell模块支持这些符号

(2)shell模块(在远程执行)
shell的参数(与command模块相同)

ansible(一)第3张

设置密码
ansible web -m shell -a 'echo '123' | passwd --stdin shy' #此时可以使用各种特殊符号
批量在在远程主机上执行shell脚本
ansible 192.168.177.132 -m shell -a 'bash /opt/a.sh' #方式一
ansible 192.168.177.132 -m shell -a '/opt/a.sh' #方式二

注:方式二文件可能没有可执行权限,需要:chmod +x a.sh

批量在在远程主机上执行python脚本
ansible 192.168.177.132 -m shell -a  '/opt/b.py'
(3)script模块(在本地执行)
参数信息(与command和shell参数相同)

ansible(一)第4张

执行本地(管控机)(主机)文件
ansible web -m script -a '/opt/m.sh'
判断的是被管控机(从机)上的文件是否存在,存在就执行本地文件
ansible web -m script -a 'removes=/opt/m.sh /opt/m.sh'
判断的是被管控机上(从机)的文件是否存在,存在就跳过
ansible web -m script -a 'creates=/opt/m.sh /opt/m.sh'

6.文件相模块

(1)copy模块(在本地执行)
copy的参数
ansible(一)第5张

backup 备份,以时间戳结尾
dest 目的地址
group 文件的属组
mode 文件的权限 r 4 w 2 x 1
owner 文件的属主
src 源文件(加/是保存目录中的文件,不加/是保存目录)
content 直接把文字输入到远程的文件中
# 通过md5码来判断是否需要复制
将192.168.177.135(本地)中的/opt/a.sh复制dao192.168.177.132(远程)中的/root/a.sh
ansible 192.168.177.132 -m copy -a 'src=/opt/a.sh dest=/root/a.sh'
#复制得到的权限信息跟原来比少了一个可执行的权限
修改文件的权限
ansible db -m copy -a 'src=/root/m.sh dest=/tmp/a.sh mode=755' #修改文件的权限
修改文件的属主
 ansible web -m copy -a 'src=/root/m.sh dest=/tmp/a.sh mode=755 owner=shy' 修改文件的属主
复制本地目录内的所有文件到远程主机
 ansible web -m copy -a 'src=/etc/init.d/ dest=/tmp/ mode=755 owner=hsy' # 复制本地目录内的所有文件到远程主机,如果改变文件夹的属性,则文件夹内文件的属性也会被改变
直接将文本内容注入到远程主机的文件中
 ansible web -m copy -a "content='大弦嘈嘈如急雨,小弦切切如私语
' dest=/tmp/b.txt" # 直接将文本内容注入到远程主机的文件中
(2)file模块(在远程执行)
file模块的参数

ansible(一)第6张

软连接与硬连接
inode 硬盘的地址
id 获取到的是内存的地址
ln -s a.py b.py 创建软连接 #类似于快捷方式
ln  a.py c.py 创建硬链接 #两个文件的inode是一样的
cp a.py d.py #复制
#当源文件变化时,软连接和硬链接文件都会跟着变化,复制的文件不会变化
在远程机器上创建文件夹
ansible db -m file -a 'path=/lzmly2  state=directory' #在远程机器上创建文件夹
用来在远程机器上创建文件
ansible db -m file -a 'path=/root/q.txt  state=touch' #用来在远程机器上创建文件
创建软连接src是源地址,path是目标地址
ansible db -m file -a 'path=/tmp/f src=/etc/fstab state=link' #创建软连接src是源地址,path是目标地址,state=hard是硬链接
用来删除文件或者文件夹
ansible db -m file -a 'path=/tmp/f state=absent' #用来删除文件或者文件夹
(3)fetch模块

下载被控节点的文件

dest 目的地址
src 源地址 被管控机上的地址
ansible web -m fetch -a 'src=/var/log/cron dest=/tmp' # 下载被控节点的文件,每台机器创建一个文件夹(以IP命名),并保留原来的目录结构

免责声明:文章转载自《ansible(一)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇【Chromium中文文档】跨平台开发的约定与模式layui中,同一个页面动态加载table数据表格下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

高可用web集群的搭建与监控

介绍:搭建一个高可用的web集群项目,能承受高并发的请求,任何一台服务器的退服不影响整个集群的运作,并且能对各个服务器的状态进行监控 运用技术:   CentOS Linux release 8.0.1905 (Core)、nginx/1.17.9、ansible/2.9.9、nfs-utils/1:2.3.3-26、zabbix/4.4.6、keepal...

Linux 能ping通ip但ping不通域名

Linux里 能ping通ip,但ping不通域名(如 baidu.com),查看相关资料后发现是DNS的配置问题 修改 配置文件: /etc/resolv.conf 修改为: 1 nameserver 114.114.114.114 其中ip可选择: 114.114.114.114 119.29.29.29 223.5.5.5 参考资料:https://...

ansible批量修改linux服务器密码的playbook

从网上找到批量修改Linux服务器root密码的playbook。 使用方法: 1、输入要修改的inventory组 2、按需要,在playbook中输入要修改的IP、新密码,如下: - hosts: production remote_user: root tasks: - name: change password for root...

计算机是怎样启动的?

从打开电源到開始操作。计算机的启动是一个很复杂的过程。 我一直搞不清楚,这个过程究竟是怎么回事。仅仅看见屏幕高速滚动各种提示...... 这几天,我查了一些资料。试图搞懂它。以下就是我整理的笔记。 零、boot的含义 先问一个问题。"启动"用英语怎么说? 回答是boot。但是,boot原来的意思是靴子,"启动"与靴子有什么关系呢? 原来,这里的boo...

Android国行手机使用Google Play Store

要使用google提供的服务,必须在手机上关联google账户。 安装GoogleServicesFramework.apk,因为这是所有google服务的基础。 安装GooglePlay.apk,就是google商店了。当你安装完第一次打开的时候,它会提示你关联一个google账户,于是输入一个账户之后进行连接谷歌服务器,不出意外的话会提示"无法与服...

Shell基本命令

Linux命令行的组成结构 [root@oldboy_python ~]# [root@oldboy_python ~]# [root@oldboy_python ~]# [root@oldboy_python ~]# [root@oldboy_python ~]# Linux系统命令操作语法格式 命令 空格 参数 空格 【文件或路径】需要...