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. 新建ui文件及相应.h和.cpp文件

    1.在Qt Creator中新建一个任意的项目(如untitled): 2.在该项目中添加QT设计师界面类:   3.将新建的3个文件(.ui..h..cpp)拷贝到目标项目文件夹中: 4.分别在目标 ...

  2. sql 2012 用户sa登陆不上

    1.通过Windows身份验证进入服务器 2.点击“安全性”--“登录名”--“sa” 3.右击sa,点击“属性” 4.取消“强制实施密码策略(F)”勾选 5.对密码重新输入 6.点击确定,重新用SQ ...

  3. 小程序中data数据的处理方法总结(小程序交流群:604788754)

    WXML: <view class="container"> <view wx:for="{{list}}" wx:key="thi ...

  4. Excel文件数据导入到后台保存倒数据库

    后台代码数据解析: 方法一: (简单点) import org.apache.poi.hssf.usermodel.HSSFCell;import org.apache.poi.hssf.usermo ...

  5. How to find out which version of tensorflow is installed in my pc? - 如何找出我的电脑中安装了哪个版本的 tensorflow?

    I'm using tensorflow and have got some weired issues. I'm told it might be related to the version of ...

  6. 不同版本的IDE ,对应的选项 有变化

    xx.dproj对应的项目级选项 也不同,所以,要分别保存为不同的文件. 如果不同的IDE,打开同一个 .dproj文件,会因为 选项界面的选项不同,提示一些错误.

  7. Python-接口自动化(四)

    python基础知识(四) (四)处理文件 a.文件的格式主要有txt.html.xml,接下来主要讲的是txt格式的文件处理 对文件进行读写等操作会用到的函数是open(),第一个参数file是指传 ...

  8. 浅谈redis的HyperLogLog与布隆过滤器

    首先,HyperLogLog与布隆过滤器都是针对大数据统计存储应用场景下的知名算法. HyperLogLog是在大数据的情况下关于数据基数的空间复杂度优化实现,布隆过滤器是在大数据情况下关于检索一个元 ...

  9. CSS3简单画出3d图形

    1.气球 2.泳圈 1.2两图实现代码分别如下: <html> <head> <meta charset="utf-8"> <meta h ...

  10. Codeforces Round #479 (Div. 3) F. Consecutive Subsequence (简单dp)

    题目:https://codeforces.com/problemset/problem/977/F 题意:一个序列,求最长单调递增子序列,但是有一个要求是中间差值都是1 思路:dp,O(n)复杂度, ...