自动化运维工具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概述的主要内容,如果未能解决你的问题,请参考以下文章

自动化运维—Ansible工具的使用

Ansible自动化运维管理工具的概述与部署

Ansible自动化运维管理工具的概述与部署

自动化运维工具ansible概述

自动化运维之Ansible概述及Ansible部署|(持续更新中)

Ansible 自动化运维工具