Ansible

主要作用

安装
配置的修改
启动

执行操作

  1. AD-Hoc 单条执行(python的一个模块)
    在shell中执行的命令 在AD-hoc中叫做模块,如:yum,copy

  2. playbook 多条AD-Hoc的集合yaml文件

执行优先级(重要)

ansible 的执行需要一个ansible.cfg的配置文件,
优先读取当前目录的ansible.cfg, 最后读取/etc/ansible/ansible.cfg(定义调用的其他文件),/etc/ansible/hosts(定义要控制的主机组和主机)。

如何关闭ssh远程连接的确认选择

在这里插入图片描述

ansible AD-Hoc的使用

ansible 主机组名称(或单个主机的ip或域名) -m 模块 -a '命令'
all 指所有组
" * " 是指通配符,代表任意字符
 :&  并且 	A:&B    在A并且在B的主机
 :   或	 	A:B    	在A或者在B的主机 
 :!  取反   	A:!B	在A不在B的主机
 ansible-doc -l  	查看所有的模块
 ansible-doc copy	查看模块的详细文档(使用方法)
 ansible-doc -s copy	查看模块的所有方法
  

命令执行的颜色代表

黄色代表 改变
绿色代表 未改变
红色代表 异常

模块

1. shell

‘chdir =/tmp’ 切换到 指定主机的/tmp目录。
creates 如果文件存在则跳过
removes 如果文件存在则执行

2. yum

name=httpd state=present (安装)

name=httpd state=absent(卸载)

name=httpd state=latest (更新)

name=*(所有) state=latest exclude(排除)= kernel
升级所有软件,排除kernel

name=httpd state=present enablerepo=epel(仓库名称)
指定从哪个仓库安装

3. copy和template

copy不支持解析变量,template支持解析变量

ansible webservers -m copy -a "src=.httpd.conf dest=/etc/httpd/conf/httpd.conf owner=root group=root mode=644 backup=yes"
ansible操控webservers组下面的主机,执行拷贝命令,将当前目录的文件拷贝至组中所有主机的指定目录,并设置属主和属组,权限是644
src = 源地址
dest = 目标地址
backup=备份,只有在文件内容发生变动时,才会产生备份。
content 向文件内添加内容

4. file

ansible webservers -m file -a ‘path=/etc/test state=directory mode=777’
在该组中的所有主机的etc下创建一个test,且权限是777的目录。
state=directory 创建目录
state=touch 创建文件
state=link 创建连接
recurse=yes 递归授权
同时可以指定属主和属组

5. lineinfire

修改或删除文件内容

修改
ansible 主机组(或单个主机的ip或域名)-m 模块 -a “path(执行的文件路径) regexp(正则匹配,匹配的字符尽量写多)=’^abc’ line=123”
^ 是指以什么什么开头
$ 是指以什么什么结尾

删除
先匹配 再执行删除 state=absent

插入
InsertAfter=‘匹配内容’
InsertAfter 将匹配到内容修改后插入到 匹配的行 后面
inserbefore 插入到匹配行前面

6. systemd

管理服务的启动和停止
ansible web -m systemd -a ‘name=httpd state=started(用过去式写法)’
enabled=yes (设置开机自启,)

7. group

管理 组的创建,设定组id

group -a ‘name=www gid=666’ 创建组
group -a ‘name=www state=absent’ 删除组

8.user

管理用户的创建,设定 uid

user -a ‘name=www uid=666 group=www’
创建用户,设定uid,用户所在组

user -a ‘name=www remove=yes state=absent’
移除用户

用户管理神器,openldap

9. cron

注意。job=‘命令’ 执行的命令要用单引号引起来

设置定时任务
cron -a  'name=(任务描述) minute=1  hour=1  day=1  month=1 weekday=1   job='ls(执行的命令) > /dev/null' '

删除定时任务
cron -a ’name=123 state=absent‘

使定时任务失效(不删除)
cron -a  'name=(任务描述) minute=1  hour=1  day=1  month=1 weekday=1   job='ls(执行的命令) > /dev/null' disable=yes '

10. mount

ansible webservers -m mount -a "src=172.16.1.61:/ops path=/opt fstype=nfs opts=defaults state=mounted"
将172.16.1.61主机根目录下的ops挂载到本机的opt,类型是nfs,挂载的参数是默认,mounted永久挂载
state=unmount  临时取消挂载
state=absent   永久取消挂载

11. hostname

修改主机名称,一般用不到
hostname -a ‘name=abcdefg’

12. archive

打包与压缩

archive -a 'path=/root/123 dest=/opt/123.tar.gz(命名) format=gz ’
将root下面的123目录以gz的方式打包并存储在opt下面

13. unarchive

解压

unarchive -a ‘path=/root/123.zip dest=/opt/’

remote_src=yes 需要解压的包在被控端,
通过ansible解压被控端的压缩包

remote_src=no(默认) 需要解压的包在控制端
解压本机的压缩包

14. selinux

控制防火墙
selinux -a “state=enforcing” 开启
selinux -a “state=disabled” 关闭

ansible 操作步骤

检查语法
ansible-playbook 123.yml --syntax-check

模拟运行
ansible-playbook 123.yml -C

项目运行必须包含ansible.cfg,和主机清单(主机清单的文件可以在ansible中自定义)

添加需要控制的主机 定义主机组和主机

/etc/ansible/hosts
[web] 主机名
172.16.1.7
172.16.1.8
# ip 或者 域名 都可以
w01.oldxu.com
w02.oldxu.com

创建一个yml的文件

==copy模块中要拷贝的文件一定要和目标文件属性一致,执行权限和属主属组 ==

- hosts: (主机组名)
  tasks:(任务)
    - name:(任务的描述信息)
       yum:(模块)
         name:(通过模块管理的程序名称)
         state:(设定通过模块进行的操作)
  notify:当文件发生变动时先执行剩下的命令,最后执行 notify指定的任务名称下的任务。
notify 和 handlers 是相辅相成的。
  handlers: 
     
  		

yml文件编写总结1(固定写死,比较死板)

  1. 安装 yum
  2. 修改配置文件并增加notify copy
  3. 启动并设置开机自启 systemd
  4. 设置handlers和notify衔接
  5. 执行ansible-playbook + yml 文件
- hosts: web
  tasks:
    - name: install nginx
      yum:
        name : nginx
        state: present
        
    - name: 配置文件修改覆盖
      copy:
      copy不支持解析变量,template支持解析变量
        src:
        dest:/etc/nginx/nginx.conf
        owner:'root'
        group:'root'
        mode:'0644'
        backup:yes
    notify: 系统控制 重启
    
    - name:系统控制
      systemd:
        name: nginx
        state: started
        enabled: yes
  handlers:
    - name:系统控制 重启
      systemd:
        name: nginx
        state: restarted   

facts

用来自动采集被控端的状态信息

查看本机的状态信息
ansible localhost -m setup
关闭facts采集,在yml的主机组下面 写入gather_facts: no 关闭采集。

测试yml编写:

- hosts: all
 #gather_facts: no 
  tasks:
    - name: sleep 10
      command: sleep 10

开启采集会变得很卡,导致运行缓慢,但是有时又不得不开启,所以可以设置redis缓存facts加速执行

如何设置redis缓存fact

  1. 下载安装
yum install python2-redis
pip install --upgrade pip
pip install redis
  1. 在 ansible.cfg的文件中写入
gathering = smart #在使用 facts 缓存时设置为smart 
fact_caching_timeout = 86400 
fact_caching = redis 
fact_caching_connection = 172.16.1.51:6379(redis的ip和端口)

3.测试

yml文件编写总结2(灵活,已变量的方式编写)

变量设定

变量设定 获取被控端的ip地址
{{ ansible_eth1.ipv4.address }} eth1 是网卡名称

when和loop
  1. when: (ansible_distribution == “CentOS”)
    通过facts变量获取被控端信息,当系统为CentOS的时候才执行

    when: (ansible_hostname is match(“web*”)
    只有主机名为web开头的才执行
    也可以用and 和 or ,来进行匹配

    changed_when: 检测任务执行的结果
    register(把执行的结果注册到一个变量中),

    - name: check web configure
      shell:
        cmd: /usr/sbin/nginx -t
      register: check_nginx  将结果打入一个变量中
      changed_when: 检查变量
        - check_nginx.stdout.find('successful')  
        - 如果结果中存在successful则继续,不存在则终止 
        - false

  1. loop:

name: {{ “item” }}
loop

tags和include

一个playbook 中有多个任务,如果执行就需要一次性全部执行,可以给任务 贴个标签,通过 --t 指定标签,单独运行单个任务 通常用来排错,

–skip-tags 运行除指定的tags以外的所有tags

打单个标签,运行单个任务
打多个相同标签,同时运行相同标签的 任务

include
将任务特意写一个yml文件

然后通过 include调用
给这个 include打一个标签。 通过调用命令,单独执行。

playbook异常处理 ignore_errors

ignore_errors: yes 是否忽略异常,写在单个任务的最后

任务执行失败强制调用handlers

force_handlers: yes #强制调用handlers 写在 hosts下面。

Jinja2

for 循环

proxy设置自动加载主机
{% for i in groups['web'] %}
			server {{i}};80
{% endfor %}

if判断

global_defs {
    router_id {{ ansible_fqdn }}
}

vrrp_instance VI_1 {
{% if ansible_fqdn  == 'web_1' %}
    state MASTER
    priority 150
{% elif ansible_fqdn  == 'web_2' %}
    state Backup
    priority 100
{% endif %}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值