自动化运维工具——ansible基础应用

ansible是一款可以控制上百台服务器的自动化运维工具,也就是说我们可以使用ansible在控制端输入需要在被控端执行的命令,被控端即就可以执行该操作,无需我们一台台机器去配置,这样就大大提高了工作效率

目录

一、软件安装

二、ansible配置文件

三、简化操作

四、简单了解ansible系列命令

五、ansible常见模块

1.ping:

2.command:在远程主机执行命令,默认模块。

3.shell:同command相似

4.script:运行脚本

5.copy:从服务器拷贝文件到客户端

6.fetch:下载文件

7.file:设置文件属性(状态,属组,属主,权限)

8.cron:计划任务

9.yum:管理包

10.service:管理服务

11.user,group:管理用户,管理组

五、playbook

1.playbook基础组件

2.运行playbook的方式

3.handlers和notify结合使用触发条件

4.tags的使用

5.playbook中变量的使用 

5.模板templates

6.when

7.迭代:with_items

8.迭代嵌套子变量

9.playbook中template模板对于for if 循环的使用

六、roles的使用

1.roles目录结构

2.roles各目录的作用

3.示例:使用roles部署nginx,要求创建用户及组并启动服务

4.roles高级用法


一、软件安装

环境:ansible-server:centos7,client:192.168.60.128

只在服务端安装即可

# wget http://mirrors.aliyun.com/repo/epel-7.repo
# yum install -y ansible

二、ansible配置文件

/etc/ansible/ansible.cfg(一般保持默认)

[defaults]
#inventory = /etc/ansible/hosts      #主机列表配置文件
#library = /usr/share/my_modules/    #库文件存放目录
#remote_tmp = ~/.ansible/tmp         #临时py命令文件存放在远程主机目录
#local_tmp = ~/.ansible/tmp          #本机临时命令执行目录
#forks = 5                           #默认并发数(同时执行5个操作,eg五台主机五台的执行)
#poll_interval = 15                  #拉数据的时间间隔(单位:s)
#sudo_user = root                    #默认sudo用户
#ask_sudo_pass = True                #每次执行ansible命令是否询问ssh密码
#ask_pass = True
#remote_port = 22
#host_key_checking = False           #检查对应服务的的host_key,建议取消注释(去掉后,无论ssh是否连接过都不报错)
#log_path = /var/log/ansible.log     #日志文件,取消注释可记录管理主机的命令记录

三、简化操作

主控端
vim /etc/ansible/ansible.cfg
  #host_key_checking = False //注释掉,否则第一次连接客户端会报错,不注释的话需要ssh连接一下客户端

ansible 192.168.60.128  -a 'ls /root' -k   // 未简化前,需要加-k,还要输口令
ansible 192.168.60.128 -a 'ls /root'    // 简化后
  • 客户端设置:# visudo                                              

  • 主控端设置:基于KEY验证,免密登录
# ssh-keygen(直接回车,空密钥)
# ssh-copy-id 192.168.60.128

四、简单了解ansible系列命令

  • 显示模块帮助(ansible-doc)

           ansible-doc -l            列出所有模块

           ansible-doc 模块       查看指定模块帮助用法

           ansible-doc -S 模块   查看指定模块的playbook片段

  • ansible命令选项及参数

语法:ansible  主机  -m  模块  -a  命令

选项功能

--version   

显示版本

-m (module)

指定模块,默认为command模块

-v

执行的详细过程 -vv,-vvv,更详细

--list-host (简写:--list)

显示主机列表(显示所有:ansible all --list)

-k

提示输入ssh连接密码。默认key验证

-C,--check

检查有无语法错误不执行

-u

指定远程执行的用户

  • ansible的匹配远程主机的清单列表(/etc/ansible/hosts)

通配符(配合ping模块):*

ansible "*" -m ping  // 所有

ansible 192.168.1.* -m ping    // 符合该网段所有
ansible "*srvs" -m ping      // 符合分组名后为srvs所有

或关系ansible "web:db" -m ping    //执行web组和db组中的主机(忽略重复的)
与关系ansible "web:&db" -m ping     // 执行在web组并且也在db组中的主机
逻辑非ansible 'web:!db' -m ping    // 在web不在db组,只能使用单引号
综合逻辑ansible 'web:db:&web:!db' -m ping
正则表达式ansible "~(web|db).*" -m ping
  • 执行状态颜色表示

        红色:执行失败

        绿色:执行成功并且未做改变的操作

        黄色:执行成功并且对目标主机做更改

        蓝色:跳过不执行

  • ansible-playbook

         ansible-playbook hello.yml    // 执行脚本

  •  ansible-vault      //  管理加密解密yml文件

  • ansible-console: 可交互执行命令,支持tab
root@test(2)[f:10] $:           分别表示:     执行用户@当前操作的主机组(当前组的主机数量)[f:并发数]$
设置并发数fock n,例如:fock 10
切换主机组cd 主机组, 例如:cd webserver
列出当前组的主机列表list
列出所有内置命令

         例如:

 

五、ansible常见模块

1.ping

如:ansible  all  -m  ping

2.command:在远程主机执行命令,默认模块。

可忽略-m选项(此模块不支持一些命令等,可用shell模块实现)如:ansible all  -a ‘ls /root’  

3.shell:同command相似

用shell执行命令,如:ansible all -m shell -a 'echo a > a'

4.script:运行脚本

如:ansible web -m script -a f1.sh        // 注意路径

5.copy:从服务器拷贝文件到客户端

选项功能
src源文件路径(对于目录,若路径使用"/"来结尾,只复制目录下的内容,若未使用"/"来结尾,则包含目录在内全部复制)
dest目标路径
backup是否在覆盖之前将原文件备份,yes或no
content替代"src",直接设定指定文件的内容
directory_mode递归的设定目录的权限,默认为系统默认权限
force默认为yes即覆盖。若目标主机路径包含该文件但内容不同,设置为yes强制覆盖,设置为no则只有当目标主机路径不存在该文件时才复制

示例:

 ansible all -m copy -a 'src=/data/test1 dest=/tmp/test1 backup=yes mode=411 owner=tom' // 如目标存在,默认覆盖,并备份改文件,修改所属用户
ansible all -m copy -a "content='test content\n' dest=/tmp/file1.txt"   // 利用内容,直接生成目标文件

6.fetch:下载文件

从客户端抓取文件至服务器(目录需要压缩),如:ansible all -m fetch -a 'src=/var/log/messages dest=/data'

7.file:设置文件属性(状态,属组,属主,权限)

选项功能参数选项
path,name,dest定义文件路径 
src,dest:软连接的源和目标文件路径,应用于state=link 
recurse递归的设置,只对目录有效 
state文件或目录的状态创建文件或目录:touch,directory,删除:absent,软硬连接:link,hard

示例:

# ansible all -m file -a 'path=/data/file state=touch'   //创建文件,创建目录用directory,删除用absent
# ansible all -m file -a 'src=/etc/fstab path=/data/link1 state=link'     // 创建软连接

8.cron:计划任务

minute,hour,day,month,weekday分时日月周
job要执行的任务,默认执行state=present
name任务的描述
state任务计划的状态,创建:present,删除:absent
diabled任务启用否,不启用:no,false,启用:yes,true
user以哪个用户的身份执行
backup对远程主机上的原任务计划内容修改之前做备份
cron_file指定该选项,则用该文件替换远程主机上的cron.d目录下的任务计划
# ansible all -m cron -a 'minute=* weekday=5 job="wall haha" name=wode'  //  制定任务
# ansible all -m cron -a 'disabled=true job="wall haha" name=wode'  // 注释任务

9.yum:管理包

# ansible all -m yum -a 'name=vsftpd'   // 默认安装(state=latest),加参数state=absent卸载,安装多个包逗号隔开
ansible all -m yum -a 'name=dstat update_cache=yes' 更新缓存

10.service:管理服务

ansible all -m service -a 'name=httpd state=stopped'  //  重载:reload,重启:restart,启动:started,开机自启:enabled=yes 

11.user,group:管理用户,管理组

ansible all -m user -a 'name=user1 comment="test user" uid=2048 home=/data/home/user1 group=root' 创建用户,以及uid,家目录,并描述(comment)
其他选项:shell=/sbin/nologin system=yes  //不可登陆的系统用户

ansible all -m group -a "name=testgroup system=yes" //  state=absent

五、playbook

playbook就是一个剧本,里面编排好所有任务,在需要的时候执行

1.playbook基础组件

hosts:用于指定要执行指定任务的主机,要事先定义在主机清单中

remote_user:  可用于Host和task中。

tasks:任务列表,一个任务中不能使用相同的模块,如使用则按照最后为准

2.运行playbook的方式

例如:

3.handlers和notify结合使用触发条件

<1>handlers:用于当关注的资源发生变化时,才会采取一定的操作(task发生改变出发handles)

<2>notify:此action可用于在每个play的最后被触发,避免重复操作,仅在所有的变化发生完后一次性执行指定的操作。在notify中列出的操作称为handler,也即notify中调用handler中定义的操作(监控task,通知handles)

例:

4.tags的使用

在某一任务中写入标签,可以通过标签执行该动作  # ansible-playbook http.yml -t rssrvr

 

5.playbook中变量的使用 

1.变量名:仅能由字母、数字和下划线组成,且只能以字母开头

2.变量来源:

  • ansible setup facts 远程主机的所有变量都可以直接调用

          ansible all -m setup           #查看远程主机的所有变量

          ansible all -m setup -a 'filter=ansible_hostname'         #过滤主机中的变量

          查找到的变量可以直接在playbook中调用

  • 在/etc/ansible/hosts中定义

         普通变量:主机组中主机单独定义,优先级高与公共变量

         公共组变量:针对主机组中所有主机定义统一变量

  • 通过命令行指定变量,优先级最高(ansible-playbook -e 'pkname=named' app.yml )

        ansible-playbook -e  'pkname1=value1   pkname2=value2'  app.yml     // 对多个变量

  • 在playbook中定义

  • 使用变量文件

  • 在role中定义

5.模板templates

文本文件,嵌套有脚本(使用模板编程语言编写)

功能:根据模块文件动态生成对应的配置文件,templates文件必须存放于templates目录下,且命名为j2结尾

yml文件需和templates目录平级,结构如下:

6.when

条件测试:如果需要根据变量,facts或此前任务的执行结果来作为某task执行与否的前提时要用到条件测试,通过when语句实现,在task中使用,jinja2的语法格式

在task后添加when子句即可使用户条件测试;when语句支持jinji2表达式语法

7.迭代:with_items

迭代:当有需要重复执行的任务时,可以使用迭代机制,对迭代项的引用,固定变量名为“iftem”

要在task中使用with_items给定要迭代的元素列表

列表格式:字符串,字典

8.迭代嵌套子变量

9.playbook中template模板对于for if 循环的使用

例1:# vim a.yml

# vim templates/for1.confl.j2        // ports来自上图的变量

# 查看结果

例二:嵌套

例三:if的调用

六、roles的使用

复杂场景:建议使用roles,代码复用度高,变形的playbook

1.roles目录结构

每个角色,以特定的层级目录结构进行组织

|---|--playbook.yml

   -|--roles

project/       tasks/        files/          vars/        defaults/     templates/       handlers/          meta/

2.roles各目录的作用

/roles/project/:项目名称,有以下目录

files存放由copy模块或scripts模块等调用的文件
templates查找所需要模板文件的目录
tasks定义tasks,roles的基本元素,至少应该包含一个名为main.yml的文件;其他的文件需要在此文件中通过include进行调用
handlers至少应该包含一个名为main.yml的文件;其他的文件需要在此文件中通过include进行调用
vars定义变量,至少应该包含一个名为main.yml的文件;其他的文件需要在此文件中通过include进行调用
meta定义当前角色的特殊设定及其依赖关系,至少应该包含一个名为main.yml的文件;其他的文件需要在此文件中通过include进行调用
default设定默认变量时使用此目录中的main.yml文件

3.示例:使用roles部署nginx,要求创建用户及组并启动服务

步骤描述及命令具体操作
创建roles目录进入 # cd ansible/roles/nginx
创建nginx需要的目录# mkdir tasks templates
进入tasks目录写yml文件  # cd tasks
创建组:cat  group.yml
创建用户:cat  user.yml
由yum安装:cat  install.yml
重启服务:cat  restart.yml
调用模块:cat  teml.yml

执行顺序:cat  main.yml

进入templates目录,写入需要修改的配置       # vim nginx.conf.j2

回到roles平级目录调用roles

      # vim nginx_roles.yml

运行playbookansible-playbook nginx_roles.yml

4.roles高级用法

<1>调用多个角色

   roles:
     - role: nginx
     - role: httpd

<2>跨角色调用任务      

# vim roles/nginx/tasks/main.yml
   - include: roles/httpd/tasks/copy_file.yml  

<3>依靠标签选择执行某一roles,可以一个标签也可多个标签

指定标签运行脚本 :# ansible-playbook -t http web_roles.yml

<4>增加when语句

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值