自动化运维工具ansible概述
Posted qq5808174b4df6f
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了自动化运维工具ansible概述相关的知识,希望对你有一定的参考价值。
1.ansible安装
1.1 sh ansible_v2.9.0_install.sh,具体定义。需要程序包请留言。
1.2 安装完后默认/etc/ansibe生成如下文件及文件夹
ansible.cfg(ansible 配置文件);hosts(远程主机及主机组管理);roles(角色文件);yml(自定义ansible-playbook使用yml文件)
1.3 hosts定义组
组内成员可以是ip地址也可以是主机名,分组是为了方便管理。
[webservers]
www[1:50].example.com
192.168.1.50
[databases]
db-[a:f].example.com
[allhosts:children] #主机的变量可以通过集成关系,继承到最高等级的组的变量。
webservers
databases
Hosts部分经常用到变量部分,可以附加到主机后边,以空格分隔。如:
ansible_ssh_host #指定被管理主机的真实ip
ansible_ssh_port #用于指定被管理主机的ssh端口
ansible_ssh_user #ssh连接用户名
ansible_ssh_pass #ssh连接的密码
2.ansible 常用模块介绍使用
2.1 command 可以运行远程权限范围所有的shell命令,即执行远程主机上的命令。
ansible manage -m command -a “free -m”
2.2 shell执行远端主机的shell脚本文件。
ansible tomcat -m shell -a /usr/local/jdk1.8.0_181/bin/jstack -l $(ps -ef |grep -v grep|grep java|awk "{print \\$2}") >> jstack.out
2.3 copy实现主控端向目标主机拷贝文件。
ansible manage -m copy -a “src=a.txt dest=/root/a.txt”
同时也可以执行复制目录,路径用“/”结尾,只能复制目录里的内容,没有使用“/”来结尾,包含目录在内的整个内容。
2.4 user远程主机用户管理
ansible manage -m user -a "name=johnd" 添加用户
ansible manage -m user -a "name=johnd state=absent remove=yes"
group 指定用户主组,groups 指定附加组;shell 指定默认shell
删除用户 state=absent:状态为卸载,state=present :状态为安装。
2.5 file模块修改文件的属组和权限.
ansible 192.168.183.200 -m file -a "dest=/home/cloud mode=777 owner=jira group=jira "
删除文件:
ansible 192.168.183.200 -m file -a "dest=/home/cloud/atlassia state=absent "
创建目录及文件:
ansible 192.168.183.200 -m file -a "dest=/home/cloud/test state=directory "
3.ansible-playbook 自定义yml文件
即把ansible一条一条执行的任务升级为按一定的逻辑把多任务组成一个文件,通过ansible-playbook 指定这个文件执行任务。
ansible-playbook test.yml --syntax-check 检查语法
test.yml 模板定义:
- hosts: webserver
remote_user: root
tasks:
- name: install httpd package
yum: name=httpd state=latest
- name: install congfiguration file for httpd
copy: src=/root/playboos/conf/httpd.conf dest=/etc/httpd/conf/httpd.conf
tags:
- conf
notify:
- restart httpd
- name: start httpd service
service: enabled=yes name=httpd state=started
handlers:
- name: restart httpd
service: name=httpd state=restarted sleep=5
3.1notify,handlers使用说明
如上test.yml案例使用。
task改变了系统状态后,就会触发通知机制,notify即通知机制,handers只会在所有任务执行完后执行,即便多次被通知,也只执行一次。一般作为配置文件更改重启服务使用。
3.2tags 只需要运行其中特定部分的配置无需运行整个playbook会有用。
如上test.yml定义,如只需要更改远程主机的配置文件,不涉及其他操作。
ansible-playbook test.yml --tags=’conf’
3.3service 管理远程主机上的服务
如test.yml定义
enabled 是否设置为开机启动 yes/no ; name 服务名称;sleep如果执行了restart,在stop和start中间沉睡几秒; state: 对当前服务启动,停止,重启,重新加载。
3.4yum模块管理软件包
如test.yml定义,config_file yum的配置文件;disablerepo:不启用某个源;enablerepo启用某个源;name 操作软件包名称;state 是要删除还是安装软件包,present(安装),installed(安装),latest(安装最新版本),删除软件包用absent,removed
3.5 item 当使用需要重复执行任务时,可以使用迭代机制。将需要使用迭代的内容定义为item作为变量,通过with_items语句指明迭代的元素列表。
- name: add several users
user: name={{ item.name }} state=present groups={{ item.groups }}
with_items:
- { name: testuser1, groups: wheel }
- { name: testuser2, groups: root }
3.5file/unarchive 文件及目录管理
path 定义文件,目录路径
owner定义文件,目录属主
Group 定义文件,目录属组
mode 定义文件,目录权限
state有几个选项:directory(目录不存在创建目录) touch(文件不存在创建文件) absent(删除目录,文件或者是取消链接文件) link(链接文件)
- name: link files
file: src=/etc/ssh/ssd_config dest=/mnt/sshd_config owner=sshd mode=600 state=link
unarchive模块用来实现解压缩,就是将压缩文件解压分发到远程不同节点上。
src源文件路径 dest:指定远程主机的文件路径。 mode:设置远程主机上文件权限。
3.6 linefile
- linefile: dest=/etc/profile insertafter=’ulimit(.*)’ line=”ulimit -c unlimited”
- linefile: dest=/etc/profile line=”export JAVA_HOME=/usr/java”
- linefile: dest=/etc/selinux/config regexp=’SELINUX=(.*)’ line=’SELINUX=disabled’
- linefile: dest=/etc/resolve.conf regexp=’search(.*)’state=absent
dest可以换为path,代表操作的远程主机上的文件路径。 regexp正则表达式 ,要替换的内容规则 line:指定替换后的文本内容; state: 设置为absent代表删除的行 ;
insertafter 可以将文本插入到“指定的行”之后
3.7 register
- hosts: 192.168.0.110
remoter_user: root
tasks:
- name: hostname command
shell: hostname
register: host_result
- debug: var=host_result.stdout
- debug: msg="output: {{host_result.stdout}}"
会把shell执行的结果传给host_result变量中, --debug 调试模式,看获取的变量是否正确。 msg="output: {{host_result.stdout}}" 为变量赋予键名称。
以上是关于自动化运维工具ansible概述的主要内容,如果未能解决你的问题,请参考以下文章