inventory常用参数说明

ansible_ssh_host: 将要连接的远程主机名与你想要设定的主机别名不同,可以通过此变量设置
ansible_ssh_port: ssh端口号,如果不是默认的端口号,通过此变量设置
ansible_ssh_user: 默认ssh用户名
ansible_ssh_pass: ssh密码(这种方式并不安全,我们强烈建议使用--ask-pass 或 SSH 密钥)
ansible_sudo_pass: sudo密码(建议使用 --ask-sudo-pass)
ansible_sudo_exe: sudo命令路径(适用于1.8及以上版本)
ansible_connection: 与主机的连接类型,如:local,ssh或paramiko,1.2以前默认使用paramiko,1.2以后默认使用‘smart’,它会根据是否支持ControlPersist来判断‘ssh’方式是否可行
ansible_ssh_private_key_file: ssh使用的私钥文件,适用于有多个密钥,而你不想使用SSH代理的情况
ansible_shell_type:目标系统的shell类型,默认情况下,命令的执行使用‘sh’语法,可设置为‘sch’或‘fish’
ansible_python_interpreter:目标主机的python路径,适用情况:系统中有多个Python,或者命令路径不是“/usr/bin/python”

ad-hoc主机管理

主机定义与分组
安装ansible之后可以做一些简单的人物
ansible配置文件查找顺序
首次检测ANSIBLE_CONFIG环境变量定义的配置文件
其次检查当前目录下的 ./ansible.cfg 文件
再次检查当前用户家目录下 ~/ansible.cfg 文件
最后检查 /etc/ansible/ansible.cfg 文件

ansible.cfg配置文件



inventory 定义托管主机地址的配置文件路径





ansible archive 修改解压后的文件夹名称 ansible 替换配置文件变量_ansible 修改文件变量


编辑/etc/ansible/hosts 文件,写入远程主机的地址

host_key_checking = False
#不需要检测ssh主机的key


ansible archive 修改解压后的文件夹名称 ansible 替换配置文件变量_配置文件_02


分组定义、范围定义的样例:


[web]  #里面定义的主机名                                             
web1                                                                   
web2

[db]
db[1:2]
#若连续的可以使用此格式

[cache]  #可以写ip地址
192.168.1.15

[app:children]  #定义以下成员的组名称只能跟组名
web
db

[web]
web[1:2]
  ||
[web:vars]
ansible_ssh_user="root"
ansible_ssh_pass="pwd"
ansible_ssh_port="222"
# 可以定义web组内所有主机的参数,对组内所有主机有效

[other]
cache  ansible_ssh_user="root"
       ansible_ssh_pass="1234"   # 主机名后面可以跟参数


自定义主机分组配置文件

  1. 创建文件夹 /var/myansible
  2. 创建配置文件 /var/myansible/ansible.cfg
  3. 配置主机文件 /var/myansible/myhosts
]# vim  /var/myansible/ansible.cfg
[defaults]
inventory = /var/myansible/myhosts

]# vim /var/myansible/myhosts
[app1]
web1
web2

[app2]
db1
db2

]# cd /var/myansible/
]# ansible app2 --list-hosts
  hosts (2):
    db1
    db2


动态主机、无限可能

ansible Inventory包含静态和动态的Inventory,静态Inventory指在文件/etc/ansible/hosts中指定的主机和组,动态Inventory指通过外部脚本获取主机列表,按照其要求格式返回给ansible命令

JSON

JSON(JavaScript Object Notation, JavaScript 对象表示法),一种基于文本独立于语言的轻量级数据交换格式

批量执行:ansible命令基础

格式:ansible 主机的集合 -m 模块的名称 -a 模块参数

-M 制定模块路径
-m 模块的名称,默认使用 command 模块
-a 模块参数
-i inventory文件路径,或可执行脚本
-k 使用交互式登陆密码
-e 定义变量
-v 详细信息,-vvvv开启debug模式
例子:
列出要执行的主机: ansible all --list-hosts
批量检测主机: ansible all -m ping
批量执行命令: ansible all -m command -a 'id' -k

批量部署证书文件: ##并行同步部署证书文件

每次交换输入密码太麻烦
密码写入配置文件安全性很差
不同主机不同密码
使用key方式认证
给所有主机部署公钥
]# ssh-keygen -t rsa -b 2048 -N ' ' #创建密钥
]# ansible all -m authorizedkey -a "user=root exclusive=true managedir=true key = '$(< /root/.ssh/id_rsa.pub)'" -k
##user=root 部署在哪个用户名下 ##exclusive=true 如果以前部署过,执行追加
##manage_dir=true 如果文件夹存在则部署密钥,如果不存在则创建后部署
##key = '$(< /root/.ssh/id_rsa.pub)' 把密钥文件标准输入到key里,部署到托管机上

批量配置管理模块:

1、Ansible-doc:模块的手册相当于shell的man,很重要


]# ansible-doc  -l               ## 列出所有模块
]# ansible-doc  模块名           ## 查看单个模块的帮助信息


2、Ping模块:测试网络的连通性,ping模块没有参数

注:测试ssh的连通性


]# ansible  web1  -m  ping


3、Command模块:默认模块,远程执行命令


]# ansible  主机组或主机  -m  command  -a  '命令'            ##用法格式
]# ansible  all  -m  command  -a  'uptime'                        ##查看所有机器负载
]# ansible  all  -m  command  -a  'date +%F_%T'              ##查看所有机器日期和时间


command模块注意事项:该模块通过 -a 跟上要执行的命令可以直接执行,若命令里有如下字符则执行不成功 " < " " > " " | " " & "
该模块不启动shell,直接在ssh进程中执行,所有使用到shell的命令执行都会失败


会失败的例子:
]# ansible  all  -m  command  -a  'ps aux | grep ssh'
]# ansible  all  -m  command  -a  'set'


4、Shell/Raw模块

shell模块用法基本和command一样,区别是shell模块是通过/bin/sh进行执行命令,可以执行任意名义,但不支持交互式!
raw模块,用法和shell模块一样,可以执行任意命令
区别:raw没有 chdir、creates、removes 参数
Script模块:在本地写脚本,然后使用script模块批量执行
注意:该脚本包含但不限于shell脚本,只要指定sha-bang解释器的脚本都可执行


]# ansible  db1  -m  script  -a  'test.sh'


5、Copy模块:复制文件到远程主机

src:源文件的路径,绝对路径和相对路径都可,路径为目录时会递归复制,若路径以 "/" 结尾,只复制目录里的内容,若不以 "/" 结尾,则复制包含目录在内的整个内容,类似于rsync
dest:必选项,远程主机的绝对路径,如果源文件是一个目录,那该路径必须时目录
backup:覆盖前,先备份原文件,备份文件包含时间信息,有两个选项:yes/no
force:若目标主机包含该文件,但内容不同,如果设置为 yes ,则强制覆盖,若设为 no ,则只有当目标主机的目标位置不存在该文件时才复制,默认为 yes


复制文件:
]# ansible  cache  -m  copy  -a  'src=/root/a.log  dest=/root/a.log'
复制目录:
]# ansible  cache  -m  copy  -a  'src=/urdir/  dest=/tmp/'


6、① Lineinfile模块

类似于sed的一种行编辑替换模块
path:目标文件(指定要修改的文件)
regexp:正则表达式(匹配要修改的行)
line:替换后的结果(修改最终之后的样子)

6、② Replace模块

path:目标文件(指定要修改的文件)
regexp:正则表达式(匹配要修改的字符串)
line:替换后的结果(修改最终之后的样子)


例子:修改slinux配置文件为disabled
]# ansible  cache  -m  lineinfile  -a  'path="/etc/selinux/config"  regexp="^SELINUX="  line="SELINUX=disabled"'
替换指定符:replace
]# ansible  cache  -m  replace  -a  'path="/etc/selinux/config"  regexp="^(SELINUX=).*"  replace="1disabled"'


7、Yum模块:使用yum包管理器来管理软件包

config_file:yum的配置文件
disabled_gpg_check:关闭gpg_check
disablerepo:不启用某个源
enablerepo:启用某个源
name:要进行操作的软件包名字,也可传递一个url或一个本地的rpm包的路径
state:状态 present、installed 安装套件 latest 安装最新套件
absent、removed 卸载


删除软件包
]# ansible  cache  -m  yum  -a  'name="httpd"  state="removed"'
删除多个软件包
]# ansible  cache  -m  yum  -a  'name="httpd,lftp,elinks"  state="removed"'
安装软件包
]# ansible  cache  -m  yum  -a  'name="httpd"'
安装多个软件包
]# ansible  cache  -m  yum  -a  'name="httpd,elinks,lftp"'     #yum默认动作时安装


8、Service模块

name:必须项,服务名称
enabled:是否开启启动,yes/no
sleep:执行restarted,会在stop和start之间沉睡几秒钟
state:对当前服务执行启动、停止、重启、重新加载等操作
started、stopped、restarted、reloaded


]# ansible  cache  -m  service  -a  'name="sshd"  state="restarted"  enabled="yes"'