Ansible基础




登录成功:

# Yum源更换为国内阿里源
[root@ansi-manager ~]# yum install wget --y //有wget,可以不执行
[root@ansi-manager ~]# mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
[root@ansi-manager ~]# wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
# 添加阿里的epel源
[root@ansi-manager ~]# wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
# yum重新建立缓存
[root@ansi-manager ~]# yum clean all
[root@ansi-manager ~]# yum makecache





yum install -y ansible //安装ansible,其中yum install指软件安装,后面的ansible是安装的软件名,-y如果安装过程中出现询问语句是否操作(yes/no)默认都选择yes
ansible --version //查看软件版本

配置免密登录:
ssh-keygen -t rsa
ssh-copy-id root@192.168.79.131
ssh-copy-id root@192.168.79.132



实验环境图:

资产Inventory(被管理节点):被管理主机的清单
默认:静态INI格式的文件(/etc/ansible/hosts)
作用:可以定义主机或主机组
在Inventory(/etc/ansible/hosts)中定义主机和主机组,然后就可以通过命令来操作和管理定义好的主机或主机组。
VIM编辑器
https://www.runoob.com/linux/linux-vim.html


192.168.79.131 #单独定义一个主机,免密登录已经配置,所以不需要ssh登录密码
192.168.79.132 #同上
192.168.79.133 ansible_ssh_pass='root' #单独定义一个主机,但是使用内置变量定义ssh登录密码
192.168.79.134 ansible_ssh_pass='root' #同上
[webservers] #用中括号定义主机组,webservers是主机组名
192.168.79.131
192.168.79.132
[db]
192.168.79.[135:137] #135-137三台主机
[db:vars] #通过变量(vars)的方式定义主机组的ssh登录密码
ansible_ssh_pass='root'
[docker:children] #定义一个docker组,他有两个子组,分别是db和webservers
db
webservers
查看资产文件中的所有主机

查看资产的主机组的主机

资产变量
主机变量:针对单个主机
下面定义了两个主机变量user和port,这两个变量只针对192.168.79.139这台服务器有效
vim hostvars


验证主机变量:(通过-i指定自定义的资产文件)
ansible 192.168.79.139 -i hostvars -m debug -a "msg='{{user}} {{port}}'"

变量只针对主机192.168.79.139,对192.168.79.140主机无效

通过对组的操作。我们得到相同的结果:

组变量:针对主机组
vim groupvars

定义一个组变量home,此变量只针对webservers这个主机组中的所有主机有效

验证:home是webservers的组变量,针对组中的所有主机有效

Ansible模块
-
ansible核心:ansible
-
核心模块(Core Modules):ansible自带的模块。
-
扩展模块(Custom Modules):如果核心模块不足以完成某一些功能,可以添加扩展模块。
-
插件(Plugins):完成模块功能的补充
-
剧本(Playbook):ansible的任务配置文件,将多个任务定义在剧本中,由ansible自动执行
-
连接插件(Connectior Plugins):ansible基于连接插件连接到各个主机上,虽然ansible使用ssh连接到各个主机的,但是他还不支持其他的连接方式,所以就需要有连接插件
ansible-doc -l //显示所有的自带模块

Ansible执行命令
ad-hoc命令:
ad-hoc命令是指ansible执行一条命令,并且不会保存命令。


ansible 192.168.79.139 -m command -a date
ansible 192.168.79.139 -m command -a pwd
ansible 192.168.79.139 -m command -a ifconfig
代表ad-hoc命令
-m 模块名: 指定要执行的模块的名称,如果不指定-m选项,默认是command模块
-a 命令:指定执行模块对应的参数选项
-k:提示输入SSH登录的密码而不是基于密钥的验证,小写
-K:用于输入执行su或者sudo操作时候需要的认证密码,大写
-b:表示提升权限操作。
--become-method:指定提升权限的方法,常用的有sudo和su,默认是sudo
--become-user:指定执行sudo或su命令时候要切换到哪一个用户下,默认是root用户
-B SECONDS:后台运行超时时间
-C:测试一下改变什么内容,不会真正去执行,主要用来测试一些可能发生的变化
-f FORKS:设置ansible并行的任务数。默认值是5
-i INVENTORY:指定主机清单文件的路径,默认为/etc/ansible/hosts
-h:查看帮助,关于ad-hoc的一些选项的详细参数
ansible命令执行格式:
ansible 主机或组 -m 模块名 -a '模块参数' ansible参数
- 主机和组:在/etc/ansible/hosts 里面定义或者-i参数进行指定的部分
- 模块名:默认使用command。
- 模块参数:具体根据各个模块用法指定
- ansible参数:是否输入密码,是否sudo