一、配置文件
1.配置文件
- /etc/ansible/ansible.cfg 主配置文件
- /etc/ansible/hosts 主机清单
- /etc/ansible/roles 存放角色的目录
2.ansible主配置文件
[defaults]
# some basic default values...
#inventory = /etc/ansible/hosts # 主机列表配置文件
#library = /usr/share/my_modules/ # 库文件存放目录
#module_utils = /usr/share/my_module_utils/
#remote_tmp = ~/.ansible/tmp # 临时py命令文件存放在远程主机目录
#local_tmp = ~/.ansible/tmp # 本机临时命令执行目录
#plugin_filters_cfg = /etc/ansible/plugin_filters.yml
#forks = 5 # 默认并发数
#poll_interval = 15
#sudo_user = root # 默认sudo用户,普通账号管理远程主机需要开启的设置
#ask_sudo_pass = True
#ask_pass = True
#transport = smart
#remote_port = 22 # 远程ssh端口
#module_lang = C
#module_set_locale = False
#host_key_checking = False #检查对应服务器的host_key.建议取消注释(因为第一次连接会出现yes/no)
#log_path = /var/log/ansible.log #日志文件,建议启用
#module_name = command # 默认模块,可以修改为shell模块
3.ansible相关工具
-
- /usr/bin/ansible #主程序,临时命令执行工具
- /usr/bin/ansible-doc #查看配置文档、模块功能查看工具
- /usr/bin/ansible-galaxy #下载/上传优秀代码成roles模块的官网平台
- /usr/bin/ansible-playbook #定制自动化任务,编排剧本工具
- /usr/bin/ansible-pull #远程执行命令的工具
- /usr/bin/ansible-vault #文件加密工具
- /usr/bin/ansible-console #基于console界面与用户交互的执行工具
4.【ansible-doc】
-l,--list #列出可用的模块
-s,--snippet #显示指定模块playbook片段
【例】:ansible-doc -l #列出所有模块
ansible-doc -s ping #查看ping模块的帮助
5.配置/etc/ansible/hosts
配置单个主机:
192.168.100.110 ansible_ssh_user='root' ansible_ssh_pass='123456' ansible_ssh_port='22'
配置主机群组:
[webs]
192.168.100.100
192.168.100.110
192.168.100.120
#1.生成私钥
ssh-keygen (报没有目录的错解决办法ssh-keygen -t dsa)
#2.向主机分发私钥
ssh-copy-id root@192.168.100.100
6.【ansible】
通过ssh协议远程连接,实现对远程主机的配置管理、应用部署、任务执行等功能
格式:ansible <主机清单> [-m "模块名"] [-a "参数"]
--version #显示版本
-m module #指定模块,默认为command
-v #详细过程 ,-vv -vvv更详细
--list-hosts #列出主机列表,可简写--list
-k,--ask-pass #提示输入ssh连接密码,默认key验证
-c,--check #检查,并不执行
-T,--timeout=TIMEOUT #执行命令的超时时间,默认10s
-u,--user=REMOTE_USER #指定远程执行的用户
-b,--become #代理旧版的sudo切换
--become-user=USERNAME #指定sudo的runas用户,默认为root
-K,--ask-become-pass #显示输入sudo的口令
【例】:ansible '*' --list或者ansible all --list-hosts #列出所有主机清单
ansible all -m ping
或关系:(相加)
ansible "192.168.100.100:192.168.100.110" -m ping
逻辑与: (取交集)
ansible "192.168.100.100:&all" -m ping
逻辑非:(取反)
ansible 'all:!192.168.100.10*' -m ping #注意用单引号
正则表达式:
ansible "~192.168.100.(100|110)" -m ping
ansible 'all:!~192.168.100.10[1-9]' -m ping
7.ansible命令执行过程
(1).加载自己的配置文件,默认/etc/ansible/ansible.cfg
(2).加载自己对应的模块文件,如command
(3).通过ansible将模块或命令生成对应的临时文件,并将该文件传输至远程服务器的对应执行用户
$HOME/.ansible/tmp/目录下
(4).给文件+x执行
(5).执行并返回结果
(6).删除临时py文件,退出
7.ansible常用模块
- 【command】模块
功能:在远程主机执行命令,此为默认模块,可以忽略-m选项
注意:此命令不支持$VARNAME > < | ; & 等;可以用shell模块实现
ansible webs -m 'command' -a 'df -h'
ansible webs -m 'command' -a 'echo 123>/tmp/123.txt' #实际并没有执行成功
- 【shell】模块
功能:和command相似,用shell执行命令
ansible webs -m 'command' -a 'echo 123>/tmp/123.txt'
ansible webs -m 'shell' -a 'docker info|grep -i root'
将shell模块设置为默认模块:
修改配置文件/etc/ansible/ansible.cfg: module_name = shell
- 【script】模块
功能:在远程主机运行ansible服务器上的脚本
ansible webs -m 'script' -a '/root/1.sh'
- 【copy】模块
功能:从ansible服务器上主控端复制文件到远程主机
#如目标存在,默认覆盖,此处指定先备份
ansible webs -m 'copy' -a 'src=/root/1.sh dest=/tmp/'
ansible webs -m 'copy' -a 'content="hello world\nabcdefg" dest=/tmp/123.txt'
ansible webs -m 'copy' -a 'src=/etc/ dest=/backup' #复制etc下的文件,不包括目录自身
- 【fetch】模块
功能:从远程主机提取文件到ansible主控端,与copy相反,目前暂不支持目录
ansible webs -m 'fetch' -a 'src=/etc/centos-release dest=/tmp/'
- 【file】模块
功能:设置文件属性
ansible webs -m 'file' -a 'path=/tmp/test.txt state=touch' #创建文件/tmp/test.txt
ansible webs -m 'file' -a 'path=/tmp/test.txt state=absent' #删除文件
ansible webs -m 'file' -a 'path=/tmp/123.txt owner=mysql mode=755'
#创建目录
ansible webs -m 'file' -a 'path=/tmp/mysql state=directory owner=mysql group=mysql'
#创建软链接
ansible webs -m 'file' -a 'src=/tmp/mysql dest=/tmp/link_mysql state=link'
- 【unarchive】模块
功能:解包,解压缩
实现有2中方法
1.将ansible主机上的压缩包传到远程主机后解压缩至特定目录,设置copy=yes
2.将远程主机上的压缩包解压缩到指定路径下,设置copy=no
ansible webs -m 'unarchive' -a 'src=/root/nginx.tar dest=/tmp owner=mysql group=mysql copy=yes'
ansible webs -m 'unarchive' -a 'src=/tmp/nginx.tar dest=/opt owner=mysql group=mysql mode=700 copy=no'
- 【archive】模块
功能:打包压缩
ansible webs -m 'archive' -a 'path=/tmp/123.txt dest=/opt/123.tar.bz2 format=bz2'
- 【hostname】模块
功能:管理主机名
ansible 192.168.100.100 -m 'hostname' -a 'name=master' #会修改/etc/hostname配置文件
- 【cron】模块
功能:任务计划
支持时间:minute,hour,day,month,weekday
ansible 192.168.100.100 -m 'cron' -a 'hour=0 minute=30 weekday=6-7 name="机器重启" job=/root/restart.sh' #需要在目标机上存在restart.sh文件
ansible 192.168.100.100 -m 'cron' -a 'hour=0 minute=30 weekday=6-7 name="机器重启" job=/root/restart.sh disabled=yes' #禁用计划任务
ansible 192.168.100.100 -m 'cron' -a 'name=机器重启 state=absent' #删除计划任务
- 【yum】模块
ansible webs -m 'yum' -a 'name=vim'
ansible webs -m 'yum' -a 'name=httpd state=absent' #删除安装包
- 【service】模块
ansible webs -m 'service' -a 'name=httpd state=started' #启动httpd服务 state有started/stopped/restarted/reloaded
ansible webs -m 'service' -a 'name=httpd state=started enabled=yes' #设置开机启动
- 【lineinfile】模块
功能:相当于sed,可以修改文件的内容
ansible webs -m 'lineinfile' -a 'path=/etc/selinux/config regexp="^SELINUX=" line="SELINUX=enforcing"'
ansible webs -m 'lineinfile' -a 'path=/tmp/123.txt regexp="hello" state=absent' #删除含有hello的行