ansible部署&使用

ansible

ansible是一个基于Python开发的自动化运维工具!(saltstack)

其功能实现基于SSH远程连接服务!

ansible可以实现批量系统配置、批量软件部署、批量文件拷贝、批量运行命令等功能

 

1.1.1 特点

不需要单独安装客户端,基于系统自带的sshd服务,sshd就相当于ansible的客户端

需要依靠大量的模块实现批量管理

配置文件/etc/ansible/ansible.cfgyum安装的不用配置。pip安装则需要

 

1.1.2 部署使用

yum -y install ansible //安装

yum -y install libselinux-python    (如果selinux开启的话需要安装这个)

vim /etc/ansible/hosts //对软件配置主机模块

[zombie]//要求在ssh免密码登陆的基础上(创建分发完密钥后)

172.16.1.7//都是可控制的主机

172.16.1.31//主机部分可以是IP或是域名,也支持通配符,如:192.168.5.*

172.16.1.41//↓特殊的主机,特殊对待↓

172.16.1.8 ansible_ssh_port=2222  ansible_ssh_user=root  ansible_ssh_pass=123456

 

1.1.3 ansible软件颜色信息:

绿色:  表示查看信息,对远程主机未做改动的命令

红色:  批量管理产生错误信息

黄色:  对远程主机做了相应改动

粉色:  对操作提出建议或忠告

 

1.1.4 帮助:

ansible系统命令帮助文档查看方法:

ansible-doc -l       --- 列出所有可用的模块信息

ansible-doc -s cron   --- 查看指定模块的参数信息

ansible mount -m setup -vvvv   --- 主要用于排查ansible批量管理错误(输出详细信息)

ansible软件命令参数总结(最常用)

-k, --ask-pass      ask for connection password

                    以交互方式输入密码,进行远程管理

 

1.1.5 命令格式

ansible  主机模块  -m 模块 -a “参数(命令)”    //不加模块的话默认是command模块

ansible zombie -a "uptime"//例子


 

 

1.1.6 模块

command//命令模块

在受控制主机执行ifconfig命令

ansible  zombie  -m command -a "ifconfig"

参数:

chdir //在执行命令前,切入到指定目录

creates //定义文件是否存在,如不在则运行相应命令,在存在则跳过此步骤

removes //定义文件是否存在,如存在则运行相应命令,不如在则跳过此步骤

free_form //可以输入任何系统命令,但不包括特殊变量信息和特殊符号

 

raw//可以使ansiblelinux一样执行命令,支持特殊符号,类似shell模块

查看zombie模块下主机的22端口有没有开启  conmmand 要好一点

ansible  zombie  -m  rwa  -a  "netstat -anpt | grep 22"

 

shell//执行shell脚本模块,也可执行普通命令(支持特殊符号)

执行zombie模块下主机的/root/123.sh 脚本

ansible  zombie  -m  shell  -a  "/root/123.sh"

批量启动docker容器

ansible  zombie  -m  shell  -a  "docker start nginx"

 

script//把脚本发到客户端,然后执行;执行脚本命令在远端服务器上

script模块也可以用来执行脚本的,但是它和shell模块是有区别的

shell模块是执行放在客户端上的脚本;

script模块则是在客户端上执行放在ansible服务端上的脚本

ansible  zombie  -m  script  -a  "/root/123.sh"

 

copy//复制模块

/root/test文件复制到zombie模块下主机的/root/test,并设置权限755,属主,属组

ansible  zombie  -m  copy  -a  "src=/root/test  dest=/root/test  mode=755 owner=root group=root"

参数:

backup在覆盖远端服务器文件之前,将远端服务器源文件备份,备份文件包含时间信息。选项:yes|no

force //如果目标主机包含改文件,但内容不同,为yes时,则强制覆盖;为no时,则只有当目标主机的目标文职不存在文件时,才复制。默认为yes

dest //文件的目标路径,如果src是一个目录,dest也必须是目录

src //被复制到远程主机的本地文件。如果路径是一个目录,将会递归复制。如果路径使用/”来结尾,则智慧复制目录里的内容;如果没有使用“/”来结尾,则包含目录在内的整个内容全部复制,类似于rsync

content //用于代替’src’,可以直接设定指定文件的内容,等价于echo

mode //定义文件或目录的权限信息,同chmod命令使用

others //所有的file模块里的选项都可以在这里使用

owner //定义属主

group //定义属组

remote_src //False,将搜索源信息在本地/管理机上(默认)

//True,将到远程/目标主机的机器上搜索

 

file//设定文件属性模块

zombie模块下主机的/root/test.txt的权限设置成755,属主=root,属组=root

ansible  zombie  -m  file  -a "dest=/root/test.txt mode=755 owner=ansible group=root"

zombie模块下主机创建一个/backup目录,并指定属主,属组

ansible  zombie  -m file -a  "dest=/backup owner=oldboy group=oldboy state=directory"

使用file模块创建目录

ansible  zombie  -m  file  -a  "dest=/tmp/ansible  mode=755  owner=ansible group=ansible  state=directory"

参数:

ownet //定义文件/目录的属主

group //定义属组

mode //定义权限,755/644

path //定义路径

src //要链接的文件路径(只能使用state=link),解释绝对/相对/不存在的路径

state //如果指定参数为directory,所有不存在的子目录将会被创建

//如果指定参数为file,如果文件不存在将不能被创建

//如果指定参数为link,符号链接将会被创建或更改

//如果指定参数为hard,便会创建出硬链接

//如果指定参数为absent,将会被递归删除目录/文件,连接将被取消

//如果指定参数为touch,如果路径不存在将创建一个空文件,如果文件

或目录存在将接收更新的文件访问和修改时间

 

ansible zombie -m file -a "dest=/server/scripts/test01.sh mode=0644"

ansible zombie -m file -a "dest=/tmp/oldboy_01dir/ state=directory"

ansible zombie -m file -a "dest=/tmp/oldboy_01file state=touch"

ansible zombie -m file -a "dest=/tmp/oldboy_01file state=absent"

ansible zombie -m file -a "src=/etc/hosts dest=/tmp/hosts state=link"  ---创建链接文件

 

yum//yum模块

name代表要使用yum安装的软件名称state则代表的是软件状态latest最新版本absent卸载软件present特殊版本

ansible zombie -m yum -a "name=lrzsz state=latest"  

 

setup//主要用于获取主机信息,信息量很大!IP 日期 网卡名 环境变量等等

ansible zombie -m setup

 

synchronize//rsync的一个包装器,使剧本任务更快速和简单

参数:http://docs.ansible.com/ansible/latest/synchronize_module.html

dest //将与源同步的目标主机上的路径

src //将同步到目标的源主机上的路径

delete //删除src路径中不存在的文件(在传输之后),需要=yes

 

service//系统服务管理模块

重启httpd服务  ##启动和停止需要使用过去式started stopped

ansible  zombie  -m  service  -a  "name=httpd  state=restarted"

设置httpd服务开机自启动 是|

ansible  zombie  -m  service  -a  "name=httpd  enable=yes | no"

 

user//用户模块(管理账户与属性)

创建用户,但不创建用户的家目录

ansible zombie -m user -a "name=renyi createhome=no"

删除用户

ansible zombie -m user -a "name=ansible state=absent remove=yes"

remove=yes则表示连同家目录一起删除,等价于userdel -r

参数:

append //如果为yes,将只添加组,而不是将他们设置为组中的列表

comment //可选设置用户账户描述信息

createhome //yes时,创建用户家目录(默认)

//no时,不创建用户家目录

user //创建、移除、修改用户名称信息

uid //可选设置UID信息

 

ping//ping模块后面不用加参数,直接使用就可以了,测试连通性

ansible  zombie  -m  ping

 

cron//计划任务管理模块

ansible  zombie  -m  cron  -a  "name='test'  user=root  hour='*/10'  job='/usr/bin/ls -alh  &>  /dev/null'"

-alh  #ls命令的参数

参数:

minute//定义分钟

hour //定义小时

day //定义日期

month //定义月份

weekday //定义周几,0-6

job //定义要执行的计划任务,建议包含的命令写全路径

name //对定时任务加上备注,避免重复

state //present,表示创建定时任务(默认)

//absent,表示删除定时任务

user //指定由哪个用户来执行定时任务

disabled //将定时任务信息临时关闭(在定时任务前添加注释)

//yes注释掉           no取消注释

 

fetch//从远程节点取来一个文件

将可控制主机的/etc/hosts文件拉到本机的/data目录(如没有会自动创建),并校验

ansible  zombie  -m  fetch  -a  "dest=/data  src=/etc/hosts  validate_checksum=yes"

参数:

dest //定义一个保存文件的目录

src //在远程主机上要拉取的文件,必须为文件

flat //允许覆盖默认附加hostname/path行为直接转变废/file到目标上

//如果结尾有/,将使用源文件的名,类似于copy

//很明显,如果文件名是唯一的就很方便

fail_on_missing //yes时,如由于任何原因无法读取远程文件,则任务失败

//yes为默认值

validate_checksum //获取文件后,验证源和目标校验和是否匹配。别名:Value_MD5

//yes为默认值

 

archive//给远程主机打包压缩文件或目录

将可控制主机的/backup目录打包压缩到/root下,文件名= --(当天)

ansible  zombie  -m  archive  -a  "path=/backup  dest=/root/`date +%F`.tar.gz"

参数:

path //要压缩或打包的文件或目录的远程绝对路径

dest //把打包的文件放在那,叫什么

format //要使用的压缩类型(gz  bz2  zip)

group //指定属组

owner //指定属主

mode //指定权限

exclude_path //要在path中排除的文件,绝对路径

remove //在添加到存档后,删除所有添加的源文件

 

unarchive//从本地机器复制一个归档文件之后进行解压

参数:

dest//远程绝对路径,其中存档应该被解压缩

src//yes时,则目标服务器上的路径到现有存档文件进行解压缩

//no时,则将文档归档的本地路径复制到目标服务器

exclude//列出要从解压缩操作中排除的目录和文件条目

copy//yes时,则将文件从本地‘主’复制到目标计算机

//no时,插件将在目标计算机上查找src归档文件

//此选项与remote_src互相排斥

remote_src //yes时,以指示已存档的文件已经在远程系统上,而不是本地到可控制的控制器。

//此选项与copy是互斥的。

 

mount//挂载模块

 

参数:

fstype //指定挂载时的文件系统类型

opts //挂载时指定挂载参数信息

path //指定挂载点路径

src //指定将什么目录或设备进行挂载

state //mounted,在fstab文件中的设备将被激活挂载和适当配置

//unmounted,设备将被卸载,并不会改变fstab文件信息

absentpresent只处理fstab,但将不会影响目前的挂载

如果指定mounted和挂载点不存在,挂载点将被创建

类似,指定absent将移除挂载点目录

ansible输出详细信息方法:

ansible mount -m setup -vvvv   --- 主要用于排查ansible批量管理错误

 

synchronize//使用rsync同步文件模块

 

1.1.7 剧场

ansible-playbook   //执行剧本的命令

剧本扩展名为  .yaml

 

pyYAML语法规则:

规则一:缩进

yaml使用一个固定的缩进风格表示数据层结构关系,Saltstack需要每个缩进级

别由两个空格组成。一定不能使用tab

规则二:冒号

CMD="echo"

yaml:

mykey:

每个冒号后面一定要有一个空格(以冒号结尾不需要空格,表示文件路径的摸

版可以不需要空格)

规则三:短横线

想要表示列表项,使用一个短横杠加一个空格。多个项使用同样的缩进级别作

为同一个列表的一部分

核心规则:有效的利用空格进行剧本的编写,剧本编写是不支持tab

 

 

 ansible部署&使用_第1张图片

一个名称跟着一个要求,而且每件事都是 &,前面的执行对了,后面的才能执行

ansible部署&使用_第2张图片

 

编写方式:

多主机单任务编写方式

多主机多任务编写方式

不同主机多任务编写方式

 

总结说明

   找什么服务器,让服务器干写什么

多使用检查命令-C(-C类似于彩排)

ansible-playbook  -C  剧本路径

 

例如:

剧本编写内容扩展:剧本任务编写多个任务

- hosts: all

  tasks:

    - name: restart-network

      cron: name='restart network' minute=00 hour=00 job='/usr/sbin/ntpdate time.nist.gov >/dev/null 2>&1'

    - name: sync time

      cron: name='sync time' minute=*/5 job="/usr/sbin/ntpdate pool.ntp.com >/dev/null 2>&1"

 

剧本编写内容扩展:剧本任务编写多个主机

- hosts: 172.16.1.7

  tasks:

    - name: restart-network

      cron: name='restart network' minute=00 hour=00 job='/usr/sbin/ntpdate time.nist.gov >/dev/null 2>&1'

    - name: sync time

      cron: name='sync time' minute=*/5 job="/usr/sbin/ntpdate pool.ntp.com >/dev/null 2>&1"

- hosts: 172.16.1.31

  tasks:

    - name: show ip addr to file

      shell: echo $(hostname -i) >> /tmp/ip.txt

 


你可能感兴趣的:(ansible部署&使用)