ansible自动化运维

 一、基础配置

1.主配置文件:

/etc/ansible/ansible.cfg

2.主要清单文件

/etc/ansible/hosts

[webserver1]

192.168.89.140 | ansible-web1 #需要做域名解析

[webserver2]

192.168.89.141 | ansible-web2

[weball:children]

webserver1

webserver2

[weball:vars]

ansible_ssh_port=22

ansible_ssh_user=root

ansible_ssh_private_key_file=/root/.ssh/id_rsa

ansible_ssh_pass=123123

二、常用模块

使用ansible-doc 变量名查询各种参数,下面所列出的仅为重要参数与少部分查询不到的参数

1.shell: cmd=" "

            chdir=

2.copy: back=yes/no         #如果为yes的话,copy相同文件时会创建以时间为后缀的文件

3.user: state=absent/present         #删除用户/创建用户 

            remove=yes        #删除家目录 

4.yum: state=removed/absent/present/latest        #卸载/删除安装包/安装/最新

5.service/systemd: state=started/stopped/restarted/reloaded        #开启/停止/重启/重新加载

6.file: path=/path/file.txt 

          state=touch/directory/link/absent        #创建文件/目录/链接/删除文件

7.script: creates=/path/file.txt        #如果该文件存在,不执行脚本

             removes=/path/file.txt        #如果该文件存在,执行脚本

             cmd=

8.setup: filter=ansible_all_ipv4_addresses        #过滤

9.archive: path=/path/file.txt 

                 format=gz

10.unarchive: copy=yes/no           #如果设置为yes,从主机复制,如果为no,从节点复制

11.cron: job=" "

12.get_url: 

13.yum_repository:

14.lineinfile: path=/path/file.txt

15. debug(配合register使用,其他模块中用register接收模块执行结果到一个变量中):

                  msg        #输出信息,或者输出register变量

                  var          #打印变量输出结果,不用加{{ }},与msg互斥

16.group:  system=yes        #yes为系统组,默认no

17.特殊参数: ignore_errors: true         #忽略错误

标红state按照意思可以在各个模块中按需添加

标蓝path为上述14个模块中唯三使用path参数指定路径的模块,其余均以src、dest指定路径

 三、剧本

1.核心元素:

Playbooks   #剧本
Variables     #变量元素,可传递给Tasks/Templates使用;  
Tasks          #任务元素,由模块定义的操作的列表,即调用模块完成任务;  
Templates   #模板元素,使用了模板语法的文本文件;  
Handlers     #处理器元素,通常指在某事件满足时触发的操作;  
Roles          #角色元素

 2.playbook的基础组件:

name: 剧本名
hosts: 剧本运行的主机
user: 指定远程主机执行任务的用户,可以使用remote
tasks: 剧本任务
vars: 定义变量
vars_files: 调用定义变量文件
notify: 任务执行结果发生更改,触发定义的handler任务执行
handlers: 用于当前关注的资源发生变化时采取一定指定的操作,与tasks相同地位

3.相关参数

1.检查语法参数

ansible-playbook --syntax-check test.yml

2.取消从节点收集变量的参数

gather_facts: no

4.handlers处理器用法

- hosts: webservers1
  user: root
  tasks:
  - name: test copy
    copy: 
      src: /root/a.txt 
      dest: /mnt
    notify: test handlers
  handlers:
  - name: test handlers
    shell: 
      chdir: /mnt
      cmd: echo "abcd" >> /mnt/a.txt
      

5.vars变量用法

---
- name: install zabbix-agent
  hosts: all
  tasks:
  - name: ensure a list of packages installed
    yum:
      name: "{{ packages }}"
    vars:
      packages:
      - zabbix-agent 
      - zabbix-sender

6.vars_files变量文件用法

1.直接引用

---
- hosts: ansible-web1
  user: root
  vars_files:
   - /etc/ansible/vars/file.yml
  tasks:
   - name: create directory
     file: 
       path: "{{ dest_path }}" 
       mode: 755 
       state: directory
   - name: copy file
     copy: 
       src: "{{ src_path }}" 
       dest: "{{ dest_path }}"

###
vim /etc/ansible/vars/file.yml
src_path: /root/test/a.txt
dest_path: /opt/test/

 2.套用loop循环

---
- hosts: node1
  vars_files: 
  - /ansible/users.txt
  tasks:
  - name: create
    user: 
      name: "{{ item.user }}"
      uid: "{{ item.uid }}"
      state: present
    loop: "{{ users }}"
###
vim /ansible/users.txt
- users:
  - user: jack
    uid: 1050
  - user: tom 
    uid: 1052
  - user: jerry
    uid: 1053 

 等价于

---
- hosts: node1
  tasks:
  - name: create
    user: 
      name: "{{ item.user }}"
      uid: "{{ item.uid }}"
      state: present
    loop: 
    - user: jack
      uid: 1050
    - user: tom 
      uid: 1052
    - user: jerry
      uid: 1053 
  

7. when条件判断用法

在when语句中,变量不需要使用{{ }}

比较运算符            含义
>                            大于
>=                          大于等于
<                            小于
<=                          小于等于
==                          等于
!=                           不等于

in                           元素在列表中

 四、角色

1.目录结构

roles/

|—— nginx

|           |—— files — index.html

|           |—— handlers — main.yaml

|           |—— tasks — main.yaml

|           |—— templates — nginx.conf.j2

|           |—— vars — main.yaml

|—— site.yaml

2.角色初始化

ansible-galaxy list        #查看角色安装目录

ansible-galaxy role init --init-path=/path/../roles  角色名        #创建角色初始化模板目录

 3.task编写

[root@ansible-server roles]# vim nginx/tasks/main.yml         #添加如下内容

---
- name: install epel
  yum: 
  - name: epel-release 
    state: latest
- name: install nginx
  yum: 
  - name: nginx 
    state: latest
- name: copy nginx.conf templte
  template:         
  - src: nginx.conf.j2     #为tmplates模块创建模板,详情看步骤4
    dest: /etc/nginx/nginx.conf
- name: copy index.html
  copy: 
  - src: index.html     #复制nginx首页文件
    dest: /usr/share/nginx/html/index.html
  notify: start nginx    #触发器接收信号,传输给处理器,详情看步骤6

4.tmplates模板编写

[root@ansible-server roles]# vim nginx/templates/nginx.conf.j2        #添加如下内容

#源代码
#################

user nginx;
worker_process {{ worker_connections }};    #自定义变量vars,详情看步骤5
error_log /var/log/nginx/error.log;

#################
#源代码

5.vars变量编写

[root@ansible-server roles]# vim nginx/vars/main.yml          #添加如下内容

worker_connections: 2

6.handlers处理器编写

[root@ansible-server roles]# vim nginx/handlers/main.yml #编写如下内容

---
- name: start nginx  #和notify的名字必须一样
  service: 
  - name: nginx 
    state: started

7.site.yaml启动角色 

yml角色启动文件可写ansible目录下任意位置,一般写在roles角色安装路径下

---
- hosts: all
  user: root
  roles:
   - nginx

  • 21
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值