Ansible

⭐⭐⭐

一、部署

  • 1.1. 通用安装方式YUM / EPEL
# cat aliBase.repo  
[aliBase]
name=aliBase
baseurl=https://mirrors.aliyun.com/centos/$releasever/os/$basearch/
enabled=1
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/centos/$releasever/os/$basearch/RPM-GPG-KEY-CentOS-$releasever

# cat aliEpel.repo
[aliEpel]
name=aliEpel
baseurl=https://mirrors.aliyun.com/epel/$releasever\Server/$basearch/
enabled=1
gpgcheck=0

[root@harbor application]# rpm -qc ansible
/etc/ansible/ansible.cfg
/etc/ansible/hosts

二、使用

2.1. 简单使用

# 主机组建议配置方式--> 主机名 IP
[nginx]
nginx_001 ansible_ssh_host=xxxx
nginx_002 ansible_ssh_host=xxxx
## 使用--> ansible -i [配置文件] [主机组名] -m [模块名] -a [参数]
ansible nginx -m ping
ansible nginx:mysql -m ping
ansible all -m ping
ansible all:\!nginx -m ping

# ansible -i [配置文件] [主机组名] -m [模块名] -a [参数] -f [并发控制]
## ansible-doc -l|-s shell

# 模块1:
  ## command(不支持管道及重定向) 
  ## shell(支持管道及重定向且输出友好) 
  ## raw(支持管道及重定向)
[root@harbor ansible]# ansible all -m shell -a "df -h |grep sda"
192.168.56.133 | CHANGED | rc=0 >>
/dev/sda1                        497M  200M  298M  41% /boot
192.168.56.131 | CHANGED | rc=0 >>
/dev/sda1                        497M  200M  298M  41% /boot

# 模块2:copy(实现文件及目录的批量下发,不会重复下发)
ansible all -m copy -a "src=/tmp/xy/ansible1.md dest=/usr/local/src/ backup=yes owner=nobody group=nobody mode=0600"
ansible all -m copy -a "src=/tmp/xy dest=/usr/local/src/"      # xy目录后没有'/'下发xy整个目录及目录的文件

# 模块3: fetch(批量拉取文件,不支持目录)
ansible all -m fetch -a "src=/etc/profile dest=/tmp/fetch"

# 模块4: cron(添加/删除定时任务)
ansible all -m cron -a "minute=0 hour=0 day=* month=* weekday=* name='xy_cron_test' job='/usr/sbin/ifconfig>/tmp/xy.log 2>&1' state=present"
ansible all -m cron -a "name='xy_cron_test' state=present"

# 模块5:script(批量运行脚本)
ansible all -m script -a "/tmp/xy.sh"

# 模块6:setup(查看内置变量)
ansible all -m setup

# 模块7: synchronize(基于rync, 过滤文件)
yum install rsync -y 

# 模块8: wait_for(等待端口监听或关闭)
ansible all -m wait_for -a "port=80 host=192.168.56.10 state=stopped timeout=10"

2.2. Playbook

Ansible Playbook 是Ansible的编排格式的文件,是 Ansible定义和运行任务的文件,可以用来描述一组操作,也可以作为事件驱动的构建流程,以及在这些操作之间添加复杂的逻辑。Playbook使用 YAML格式,可以让用户提供一系列的指令,也可以提供一系列的动作,这些动作将会用于配置系统或部署应用。Playbook还可以利用Ansible提供的一些特性,比如循环、条件判断等,来简化系统管理任务的复杂度。

# 内置变量
- host: all            # - 数组 []
  task:                # {}
    - name: xy var     # [{"name": "...", "shell": "...","registr": "..."}, {"debug": ""}]
      shell: echo "{{ inventory_hostname }}"
      register: result
    - debug: var=result

# 自定义变量
- hosts: all
  vars:
    - name: xy
      city: HanCheng
  tasks:
    - name: define var
      shell: echo "name is {{ name }}. city is {{ city }}"
      register: result
    - debug: var=result

image

# 逻辑处理
## 判断(when)
---
- hosts: all
  tasks:
    - name: hostname 7
      shell: hostnamectl set-hostname {{ inventory_hostname }}  # 内置变量
      when: ansible_distribution_major_version == "7"
    - name: hostname 6
      shell: hostname {{ inventory_hostname }}; sed "s/HOSTNAME=.*/HOSTNAME={{ inventory_hostname }}/" /etc/sysconfig/network
      register: result
    - debug: var=result
      when: ansible_distribution_major_version == "6"
    - name: modify etc hosts
      shell: grep "{{ ansible_ens33['ipv4']['address'] }} {{ inventory_hostname }}" /etc/hosts || echo "{{ ansible_ens33['ipv4']['address'] }} {{ inventory_hostname }}" >>/etc/hosts
      register: result
    - debug: var=result

## 循环(with_items、with_fileglob)
---
- hosts: all
  tasks:
    - name: xy with_items shell
      shell: echo {{ item }}
      with_items:
        - /root/xy1
        - /root/xy2
      register: result
    - debug: var=result
# Template Jinja2 模板
## ansible all -m setup (查看变量)  /root/xy.j2
cpu count: {{ ansible_processor_count }}
eth0 ip addr: {{ ansible_ens33['ipv4']['address'] }}
mem: {{ ansible_memtotal mb }}

## yml
- hosts: all
  tasks:
    - name: xy template
      template: src=/root/xy.j2 dest=/usr/local/src/xy.conf
      notify:
        - notify restart
  handlers:
    - name: notify restart
      shell: echo "running restart" >/tmp/xy.log 2>&1
# YAML文件由数据和规则组成,其数据以键值对的形式存储,其规则用于定义数据之间的关系。数据和规则可以用YAML语法中的缩进和空格来进行表示,以确保数据可以被正确地解析。
# - 代表数组[]
- host: all
  task:
    - name: synchronize script
      rsync_opts=--exclude=.git*

三、参考文档

Roles标准化Playbook

image

$ tree ./playbook/
./playbook/
|-- main.yml
`-- roles
    `-- nginx
        |-- files
        |   `-- xy.sh
        |-- handlers
        |   `-- main.yml
        |-- tasks
        |   `-- main.yml
        |-- templates
        |   `-- xy.j2
        `-- vars
            `-- main.yml

自动化运维工具--ansible详解(一) - 珂儿吖 - 博客园

Linux权限详解(chmod、600、644、700、711、755、777、4755、6755、7755)_林20的博客-CSDN博客_linux 权限

Ansible中文权威指南- 国内最专业的Ansible中文官方学习手册

Ansible入门 · Ansible入门

posted on 2023-04-16 23:44  anyu967  阅读(9)  评论(0编辑  收藏  举报