自动化运维工具ansible概述

少年恃险若平地,独倚长剑凌清秋。这篇文章主要讲述自动化运维工具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=https://www.songbingjia.com/android/a.txt dest=/root/a.txt”
同时也可以执行复制目录,路径用“/”结尾,只能复制目录里的内容,没有使用“/”来结尾,包含目录在内的整个内容。
2.4 user远程主机用户管理ansible manage-muser -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 -mfile -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/teststate=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=https://www.songbingjia.com/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=https://www.songbingjia.com/etc/ssh/ssd_config dest=/mnt/sshd_config owner=sshd mode=600 state=link

unarchive模块用来实现解压缩,就是将压缩文件解压分发到远程不同节点上。
src源文件路径 dest:指定远程主机的文件路径。 mode:设置远程主机上文件权限。
3.6 linefile
- linefile: dest=/etc/profileinsertafter=’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.confregexp=’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}}"

【自动化运维工具ansible概述】会把shell执行的结果传给host_result变量中, --debug 调试模式,看获取的变量是否正确。 msg=" output: {{host_result.stdout}}" 为变量赋予键名称。

    推荐阅读