Ansible 自动化运维

一、ansible安装

安装epel-release

#yum  -y  install  epel-release
#yum list all *ansible*
#yum install *ansible*
#yum info ansible
#rpm -ql ansible

pip3 install ansible

二,配置文件

配置文件: /etc/ansible/ansible.cfg
Invertory: /etc/ansible/hosts

cd /etc/ansible/
cp hosts{,.bak}
#vim hosts
192.168.1.100

Ansible中文教程 网址: https://www.ansible.com.cn/

三、登录配置

1,密码登陆:

(1),安装sshpass

(2) /etc/ansible/hosts文件中添加用户密码,认证ssh连接;

[testhost]

192.168.1.112 ansible_ssh_user=root ansible_ssh_port=22 ansible_ssh_pass=123456

(3) ssh第一次连接的时候一般会提示输入yes 进行确认为将key字符串加入到 ~/.ssh/known_hosts 文件中。而本机的~/.ssh/known_hosts文件中并有fingerprint key串
解决方法:在ansible.cfg文件中更改下面的参数:
#host_key_checking = False 将#号去掉即可;

2,秘钥登陆:

生成秘钥:ssh-keygen
新钥匙就在您的用户可用~/.ssh目录。 公钥(一个可以共享)被称为id_rsa.pub 。 私钥(您保持安全的)被称为id_rsa
测试#ssh root@192.168.1.100 'date'
cp秘钥#ssh-copy-id -i /root/.id_rsa.pub root@192.168.1.100 ;再次测试

四、介绍ansible

1,查看模块帮助

#man ansible-doc
#ansile-doc -l ansible 查看支持的所有模块
#ansible-doc -s MODULE_NAME

ansible命令应用基础:
语法: ansible <host-pattern> [-m module_name] [-a args] [options]
-f forks:启动的并发线程数;
-m module_name: 要使用的模块
-a args:模块特有的参数;

2,常见模块:

ansible 192.168.1.100 -m command -a 'date'
ansible openstack -m command -a 'date'
ansible all -m command -a 'tail -2 /etc/passwd'

command :命令模块, 默认模块,用于远程执行命令;
#ansible all -a 'date'

cron: #ansible-doc -s cron
state: 状态
present:安装
absent:移除
*/10 * * * * /bin/echo hello
#ansible websrvs -m cron -a 'minute="*/10" job="/bin/echo hello" name="test"'
#ansible websrvs -a 'crontab -l'
#ansible websrvs -m cron -a 'minute="*/10" job="/bin/echo hello" name="test" state=absent'      #移除cron命令;

user :#ansible-doc -s user
#ansible openstack -m user -a 'name="user1"' #创建user1用户
#tail /etc/passwd
#tail /etc/group
name= ;用于指明user用户名字

group: #ansible-doc -s group
#ansible openstack -m group -a 'name=mysql gid=306 system=yes'
#ansible openstack -m user -a 'name=mysql uid=306 system=yes group=mysql'

copy: #ansible-doc -s copy 复制文件
src=: 定义本地源文件路径;
dest=:定义远程目标文件路径;
#ansible all -m copy -a 'src=/etc/fstab dest=/tmp/fstab.ansible owner=root mode=640'
还可以用content
#ansible all -m copy -a 'content="Hello Ansible\nHi TOM" dest=/tmp/test.ansible'

file : #ansible-doc -s file 设定文件属性
path: 指定文件路径,可以使用name或dest来替代
#ansible openstack -m file -a 'owner=mysql group=mysql mode=644 path=/tmp/fstab.ansible'
创建文件符号链接:
src=:指明源文件
path=:指明返回链接文件路径;
#ansible openstack -m file -a 'path=/tmp/fstab.link src=/tmp/fstab.ansible state=link'

ping :ansible-doc -s ping 测试指定主机是否能连接
#ansible all -m ping

service : ansible-doc -s service 控制服务的启动状态
enabled=:是否开机自动启动,取值true或false
name=: 服务名
state=: 状态,取值有started, stoped, restarted;
#ss -tnl 只显示监听套接字; 和netstat类似
#ansible all -a 'service httpd status'
#ansible openstack -a 'chkconfig --list httpd'
#ansible openstack -m service -a 'enabled=true name=httpd state=started'

shell : ansible-doc -s shell 与command模块类似
尤其是用到管道等功能命令时使用shell
#ansible all -m user -a 'name=user1'
#ansible all -m shell -a 'echo mageedu | passwd --stdin user1'

script :#ansible-doc -s script
将本地脚本复制到远程主机运行(要使用相对路径指定脚本)
vim test.sh #echo "hello ansible script" > /tmp/script.ansible
#ansible all -m script -a 'test.sh'

yum:
安装软件包
name=:指明要安装的程序包,可以带上版本号;
state=: present,latest表示安装, absent 表示卸载
#ansible openstack -m yum -a "name=zsh"
#ansible openstack -m yum -a "name=zsh state=absent" 卸载软件包zsh

setup:
收集远程主机的facts
每个被管理节点在接收并运行管理命令之前,会将资金主机相关信息,如操作系统版本,ip地址等报告给远程的ansible主机;

五、YAML介绍

list 列表的所有元素均使用‘-’打头:
#A listof tasty fruits
- Apple
- Orange
- Mango

dictionary 字典通过key与value进行标识,
例如:name:tom
job:doctor
也可以将key:value放置于{} 中进行表示;
如{name: tom, job: doctor}

Ansible中使用YAML基础元素
变量
Inventory
条件测试
迭代

playbook的组成结构:
Inventory 主机信息清单
Modules 调用的模块
Ad Hoc Commands 使用的命令
Playbooks:
Tasks: 任务,即调用模块完成的某操作;
Variables: 变量
Templates:模板
Handler:处理器,由某件事触发执行的操作
Roles : 角色
基本结构:
- host : websrvs
remote_user:
tasks:
- task1
module_name: module_args
- task2

- host : openstack

ansible-playbook: #man ansible-playbook
#ansible-playbook <filename.yml>

1,例1

vim nginx.yml
- hosts: websrvs
remote_user: root
tasks:
- name: create nginx group
group: name=nginx system=yes gid=208
- name: create nginx user
user: name=nginx uid=208 group=nginx system=yes

- hosts: dbsrvs
remote_user: root
tasks:
- name: copy file to dbsrvs
copy: src=/etc/inittab dest=/tmp/inittab.ansible

handlers:
#用于当关注的资源发生变化时采取一定的操作;

2,例2

vim apache.yml
- hosts: websrvs
remote_user: root
tasks:
- name: install httpd package
yum: name=httpd state=latest
- name: install configuration file for httpd
copy: src=/root/conf/httpd.conf dest=/etc/httpd/conf/httpd.conf
notify:
- restart httpd
- name: start httpd service
service: enabled=true name=httpd state=started
handlers:
- name: restart httpd
service: name=httpd state=restarted
#ansible-playbook apache.yml

rpm -q httpd
grep "Listen" /etc/httpd/conf/httpd.conf
service httpd status
ss -tnlp

变量vars

3,例3

vim apache.yml
- hosts: websrvs
remote_user: root
vars:
- package: httpd
- service: httpd
tasks:
- name: install httpd package
yum: name={{ package }} state=latest
- name: install configuration file for httpd
copy: src=/root/conf/httpd.conf dest=/etc/httpd/conf/httpd.conf
notify:
- restart httpd
- name: start httpd service
service: enabled=true name={{ service }} state=started
handlers:
- name: restart httpd
service: name=httpd state=restarted

4,例4

vim test.yml
- hosts: websrvs
remote_user: root
tasks:
- name: copy file
copy: content="{{ ansible_all_ipv4_addresses }}" dest=/tmp/vars.ansible
在hosts中使用变量
vim hosts
192.168.1.112 testvar="1.112"
192.168.1.113 ansible_ssh_user=root ansible_ssh_pass=openstack

vim test.yml
- hosts: websrvs
remote_user: root
tasks:
- name: copy file
copy: content="{{ ansible_all_ipv4_addresses }} , {{testvar}} , {{ ansible_ssh_user}} , {{ ansible_ssh_pass }}" dest=/tmp/vars.ansible

条件测试when:

5,例5

vim cond.yml
- hosts: all
remote_user: root
vars:
- username: user10
tasks:
- name: create {{ username }} user
user: name={{ username }}
when: ansible_fqdn == "node2.xxx.com"

迭代:重复执行同类task时使用 的任务
调用item
定义循环列表: with_items
- apache
- php
- mysql-server
注: with_items中的列表值也可以是字典,但引用时要使用item.KEY
- {name: apache, conf: conffiles/httpd.conf }
- {name: php, conf:conffiles/php.ini}
- {name: mysql-server, conf: conffiles/my.cnf}

模板
vim template/httpd.conf
Listen {{ http_port }}
ServerName {{ ansible_fqdn }}
vim /etc/ansible/hosts
192.168.1.112 http_port=80
vim apache.yml
- name: install configuration file for httpd
template: src=/root/templates/httpd.conf.j2 dest=/etc/httpd/conf/httpd.conf

tags: 只运行其中某部分的命令:
在playbook 可以为某个或某些任务定义一个“标签”,在执行playbook时,通过为 ansible-playbook 命令使用 --tags 选项能实现仅运行指定的tasks而非所有
ansible-playbook apache.yml --tags="conf"
- name: install configuration file for httpd
template: src=/root/templates/httpd.conf.j2 dest=/etc/httpd/conf/httpd.conf
tags:
- conf

6,例6

vim apache.yml
- hosts: websrvs
remote_user: root
vars:
- package: httpd
- service: httpd
tasks:
- name: install httpd package
yum: name={{ package }} state=latest
- name: install configuration file for httpd
template: src=/root/templates/httpd.conf.j2 dest=/etc/httpd/conf/httpd.conf
tags:
- conf
notify:
- restart httpd
- name: start httpd service
service: enabled=true name={{ service }} state=started
handlers:
- name: restart httpd
service: name=httpd state=restarted

特殊tags
tags:
- always 总是不运行

Roles :
(1) 目录名同角色名
(2) 目录结构有固定格式;
files: 静态文件;
templates: jinjia2 模板文件;
tasks: 至少有main.yml 文件,定义各tasks;
handlers: 至少有一个main.yml 文件, 定义各 handlers ;
meta: 定义依赖关系等信息;
(3) roles同级别中有site.yml文件;
site.yml 中定义playbook,额外也可以有其他的yml文件;
创建目录
#mkdir -pv ansible_playbooks/roles/{websrvs,dbsrvs}/{tasks,files,templates,meta,handlers,vars}
#tree ansible_playbooks
vim site.yml
- hosts: 192.168.1.100
remote_user: root
roles:
- websrvs

- hosts: 192.168.1.101
remote_user: root
roles:
- dbsrvs

- hosts: 192.168.1.100
remote_user: root
roles:
- websrvs
- dbsrvs
#cd roles/dbsrvs/
#vim tasks/main.yml
- name: install mysql-server package
yum: name=mysql-server state=latest
- name: install configuration file
copy: src=my.cnf dest=/etc/my.cnf
tags:
- conf
notify:
- restart mysqld
- name: start mysqld service
service: name=mysqld enabled=true state=started
#vim handlers/main.yml
- name: restart mysqld
service: name=mysqld state=restarted

相关博文:

https://www.cnblogs.com/keerya/p/7987886.html

ansible 自动化运维的更多相关文章

  1. Ansible自动化运维工具-上

    [Ansible特点] 1)Ansible与saltstack均是基于Python语言开发的 2)安装使用简单,基于不同插件和模块实现各种软件,平台,版本的管理以及支持虚拟容器多层级的部署 3)不需要 ...

  2. Ansible 自动化运维工具

    Ansible 自动化运维工具 Ansible是什么? Ansible是一个"配置管理工具"也是一个"自动化运维工具" Ansible 作用: Ansible是 ...

  3. ansible自动化运维03

    ansible自动化运维常用模块 常用模块实现的功能:安装软件包:修改配置文件:创建程序用户组:创建目录,并修改所属和权限:挂载:启动服务:测试. command模块: shell模块: 注意:com ...

  4. 简单聊一聊Ansible自动化运维

    一.Ansible概述 Ansible是今年来越来越火的一款开源运维自动化工具,通过Ansible可以实现运维自动化,提高运维工程师的工作效率,减少人为失误.Ansible通过本身集成的非常丰富的模块 ...

  5. Ansible自动化运维工具的使用

                                 Ansible自动化运维工具的使用       host lnventory 管理主机 ip  root账号密码 ssh端口 core mod ...

  6. Ansible 自动化运维——剧本(playbook)

    Ansible 自动化运维--剧本(playbook) 1.playbook介绍: playbook是ansible用于配置,部署,和管理被控节点的剧本.通过playbook的详细描述,执行其中的ta ...

  7. Ansible自动化运维工具及其常用模块

    Ansible自动化运维工具及其常用模块 目录 Ansible自动化运维工具及其常用模块 一.Ansible简介 1. Ansible概述 2. Ansible作用 3. Ansible的工作模块 4 ...

  8. 一文详解 Ansible 自动化运维

    开源Linux 一个执着于技术的公众号 一.Ansible 概述 Ansible 是近年来越来越火的一款开源运维自动化工具,通过Ansible可以实现运维自动化,提高运维工程师的工作效率,减少人为失误 ...

  9. ansible自动化运维

    ansible 系统架构 ansible简介 ansible是新出现的自动化运维工具,ansible是一个配置管理和应用部署工具,基于Python开发,集合了众多运维工具(puppet.cfengin ...

随机推荐

  1. 浏览器如何对HTML5的离线储存资源进行管理和加载

    在线的情况下,浏览器发现html头部有manifest属性,它会请求manifest文件,如果是第一次访问app,那么浏览器就会根据manifest文件的内容下载相应的资源并且进行离线存储.如果已经访 ...

  2. eclipse里没有j2ee

    eclipse是客户端开发工具,本来就不带有j2ee的jar包,需要容器:比如tomcat来提供这个jar的.j2EE通用jar包列表:IKIKAnalyzer3.2.8.jar // 分词器ant- ...

  3. linux服务器开机启动tomcat

    程序自启动脚本实质上就是一个shell脚本.以简单的Tomcat自启动脚本为例,Tomcat使用安装目录下的startup.sh启动.shutdown.sh停止,我们可以把它们写到一个启动脚本里. 1 ...

  4. 解决MyEclipse启动慢,使用卡顿问题

    卡顿原因: 1.启动的服务和插件过多,导致启动和运行缓慢,电脑配置较差的直接会卡死没有响应 2.软件运行内存设置不足,导致没有足够的空间运行软件,致使软件卡顿 解决方法: windows --> ...

  5. IDEA解决SVN更新冲突

    在有冲突的文件上右键-> subversion ->resolve Text Confict->merge 将代码合并.

  6. VM虚拟机拍摄快照时出错或者克隆失败解决办法

    在换了固态硬盘后,下载好VM,装虚拟机,结果克隆虚拟机和拍摄快照时出问题了. 拍摄快照时出错或者隆失败出现参数错误如图: 所提供的参数中有一个无效参数 解决办法 出现这个问题一般是在机械硬盘的电脑上面 ...

  7. ansible-play中for,if的使用

    #迭代循环的使用 #实现同时新建三个文件,同时部署三个服务 --- - host: websrvs remote_user: root task: - name: create some files ...

  8. python笔记24-os模块

    import osprint(os.getcwd())#取当前工作目录#os.chmod('/usr/local',7)#给文件目录加权限,7是最高权限print(os.chdir(r"e: ...

  9. vue项目使用前端框架开发,实现滑动效果,若不刷新页面则无法达到预期效果的问题及解决方法

    滑动等效果的初始化时机很重要,在vue项目开发中,需到mounted()钩子函数 (当组件中的DOM结构被渲染好并放到页面中后,会执行这个钩子函数,此时即可初始化滑动效果的js代码). 若组件未挂载到 ...

  10. 表单传值给@Controller

    <form action="springmvc/testModelAttributes" method="post"> <input type ...