ansible 1

Ansible配置文件
1. 使用默认的配置文件/etc/ansible/ansible.cfg
2. 将ansible.cfg复制到当前运行ansible的目录使用

Ansible的Invertory 主机清单
第一种方法: IP+端口+用户+密码
10.0.0.7 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass='1'

第二种方法: 单机定义方式 掌握
10.0.0.7
10.0.0.8

第三种方法: 组定义方式   掌握
[webservers]
10.0.0.7
10.0.0.8

第四种方法: 定义多个组为一个组
[lnmp:children]
webservers
dbservers


查看主机清单所有的客户端: 常用方式
[root@m01 ~]# ansible all --list-host
  hosts (1):
    10.0.0.7
    
指定客户端主机方法:
ansible all         # 表示管理所有客户端
ansible 10.0.0.7    # 表示管理WEB01
ansible webservers  # 表示管理这个组内所有的客户端

跳过指纹验证:
[root@m01 ~]# grep check /etc/ansible/ansible.cfg
# uncomment this to disable SSH key host checking
host_key_checking = False
# host key checking setting above.


对单台进行操作:
[root@m01 ~]# ansible 10.0.0.7 -m ping

对组进行操作:
[root@m01 ~]# ansible webservers -m ping


第一步: 定义主机清单
1)做底层的ssh免密钥
2)将客户端写入/etc/ansible/hosts
[root@m01 ~]# cat /etc/ansible/hosts
10.0.0.7
10.0.0.8

[webservers]
web01 ansible_ssh_host=10.0.0.7 
web02 ansible_ssh_host=10.0.0.8

3)测试与客户端的连接性
ansible 10.0.0.7 -m ping
ansible servers -m ping 
ansible all -m ping

ssh密钥一键分发,可以使用
ansible all -m authorized_key -a "user=root exclusive=true manage_dir=true key='$(< /root/.ssh/id_rsa.pub)'" -k


通过-i参数指定invertory主机清单(默认读取的/etc/ansible/hosts)  名称可以随意
[root@m01 ~]# ansible all -m ping -i test.txt
10.0.0.7 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": false, 
    "ping": "pong"
}


Ansible的第一个模块:
command模块  不支持管道

语法结构: 用来执行shell命令 但是不建议使用命令模块
ansible 主机/组 -m command -a '具体执行的命令'
查看WEB02磁盘使用情况
[root@m01 ~]# ansible web01 -m command -a 'df -h'
web01 | CHANGED | rc=0 >>
Filesystem      Size  Used Avail Use% Mounted on
devtmpfs        513M     0  513M   0% /dev
tmpfs           524M     0  524M   0% /dev/shm
tmpfs           524M  8.1M  516M   2% /run
tmpfs           524M     0  524M   0% /sys/fs/cgroup
/dev/sda3        18G  1.9G   16G  11% /
/dev/sda1       197M  110M   88M  56% /boot
tmpfs           105M     0  105M   0% /run/user/0

Ansible的第二个模块:
shell模块 具体执行shell脚本
[root@m01 ~]# ansible web01 -m shell -a 'ip add|grep eth0'
web01 | CHANGED | rc=0 >>
2: eth0: mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    inet 10.0.0.7/24 brd 10.0.0.255 scope global eth0

第三个模块:
scripts     # 执行shell脚本  脚本需要在Ansible主机端


第四个模块:
yum_repository      # 配置yum仓库
[root@m01 ~]# ansible web01 -m yum_repository -a 'name=CentOS-Base description=base baseurl=http://mirrors.aliyun.com/centos/$releasever/os/$basearch/ enabled=yes'

name:        指定仓库的名称
description: 描述仓库的信息 随意
baseurl:     仓库的url地址
enabled:     yes为开启这个仓库 no为关闭这个仓库


执行成功后: 显示如下
[root@web01 ~]# cat /etc/yum.repos.d/CentOS-Base.repo 
[CentOS-Base]
baseurl = http://mirrors.aliyun.com/centos/$releasever/os/$basearch/
enabled = 1            # 1为开启仓库 0为关闭仓库
name = base


第五个模块:
yum  安装服务或者软件
[root@m01 ~]# ansible web01 -m yum -a 'name=lrzsz state=present'
name: 软件的名称或者服务的名称
state: 状态 
     present  表示安装软件 安装默认的版本
     absent   表示卸载软件
     latest      表示安装最新的版本


第六个模块:
copy
- name: Copy file with owner and permissions
  copy:                            # 模块名称
    src: /srv/myfiles/foo.conf  # 源文件
    dest: /etc/foo.conf            # 放在客户端的哪个位置
    owner: foo                    # 属主
    group: foo                    # 属组
    mode: '0644'                # 权限
    backup: yes                    # 如果客户端存在该文件是否先备份 然后在拷贝(文件中必须存在内容)

案例: 复制当前的test.txt 到目标主机的/root目录下
[root@m01 ~]# 
[root@m01 ~]# ansible lnmp -m copy -a 'src=test.txt dest=/root/test.txt owner=root group=root mode=0600'

案例1: 将content中的字符串写入到目标主机的test.txt文件中
copy:
  content: '# This file was moved to /etc/other.conf'
  dest: /etc/mine.conf

[root@m01 ~]# ansible lnmp -m copy -a 'content="web01..." dest=/root/test.txt'

案例2: 拷贝目录需要有内容
mkdir oldboy
touch oldboy/test.txt
[root@m01 ~]# ansible lnmp -m copy -a 'src=./oldboy dest=/opt/'

copy模块:
src: 源文件/目录(目录下有文件)
dest: 目标的路径
mode: 权限 
owner: 属主 
group: 属组
backup: 复制过去 如果目标已存在是否备份

不使用src使用content将内容直接写入到目标主机文件
copy:
     content: 'web01...........'
     dest:     /root/test.txt
     
第七个模块:
file                # 建立目录或文件
- name: Change file ownership, group and permissions
  file:
    path: /etc/foo.conf        # 文件路径
    owner: foo                # 属主 
    group: foo                # 属组 
    mode: '0644'            # 权限
    state: touch            # 创建普通文件
    state: directory        # 创建目录

案例: 创建普通文件oldboy.txt 属主apache 属组Apache
[root@m01 ~]# ansible web01 -m file -a 'path=/root/oldboy.txt state=touch owner=apache group=apache'

案例2: 创建目录 test1 属主root 属组apache权限 777
[root@m01 ~]# ansible web01 -m file -a 'path=/root/test1 state=directory owner=root group=apache mode=777'

案例3: 递归创建目录
[root@m01 ~]# ansible web01 -m file -a 'path=/root/test1/test2/test3 state=directory owner=root group=apache mode=777'


案例4: 复制test目录到目标主机的oldboy目录下 如果oldboy目录不存在 则自动创建
[root@m01 ~]# ansible web01 -m copy -a 'src=./test dest=/root/oldboy'
web01 | CHANGED => {
    "changed": true, 
    "dest": "/root/oldboy/", 
    "src": "/root/./test"
}

删除文件和目录
absent: 删除文件或目录
案例1: 递归删除目录
[root@m01 ~]# ansible web01 -m file -a 'path=/root/oldboy state=absent'

案例2: 删除文件
[root@m01 ~]# ansible web01 -m file -a 'path=/root/test.txt state=absent'

第八个模块:
systemd             # 启动与停止服务
systemd:
 state: started
        stopped
        restarted
        reloaded
 name: httpd
 enabled: yes
 
 
案例1: 启动服务 加入开机自动运行
[root@m01 ~]# ansible web01 -m systemd -a 'name=httpd state=started enabled=yes'

案例2: 关闭服务禁止开机自动运行
[root@m01 ~]# ansible web01 -m systemd -a 'name=httpd state=stopped enabled=no'
 
第九个模块:
group
user
mount               # 挂载设备
cron                # 定时任务
get_url             # 下载软件
firewalld           # 防火墙
selinux             # selinux

小结:
1.Ansible /etc/ansible/ansible.cfg  # 默认的配置文件
2.跳过指纹验证
host_key_checking = False
3.定义主机清单
[root@m01 ~]# cat /etc/ansible/hosts 
10.0.0.7        # 单个主机
10.0.0.8

[webservers]    # 定义组
web01 ansible_ssh_host=10.0.0.7         # 以别名的方式定义

[dbservers]
web02 ansible_ssh_host=10.0.0.8

[lnmp:children]    # 定义多个组都属于lnmp组
webservers
dbservers

4.调用主机
ansible 10.0.0.7 -m ping  单个主机
ansible webservers -m ping 调用组
ansible all                  调用所有的主机


查看主机清单所有的主机 
ansible all --list-host

5.Ad-hoc
模块: command shell script yum_repository
yum_repository
yum
   安装服务:
   ansible web01 -m yum -a 'name=lrzsz state=present'
   卸载服务:
   ansible web01 -m yum -a 'name=lrzsz state=absent'

copy
   复制文件
   ansible web01 -m copy -a 'src=test.txt dest=/root/test.txt   owner=www group=www mode=0600'
   复制目录 目录下必须有内容 复制oldboy目录到目标主机的/root目录下
   ansible web01 -m copy -a 'src=./oldboy dest=/root/'
   将内容直接写入到目标文件中
   ansible web01 -m copy -a 'content="web....." dest=/root/oldboy.txt'
file
   创建文件
   ansible web01 -m file -a 'path=/root/test.txt state=touch owner=www group=www mode=0644'
   创建目录
   ansible web01 -m file -a 'path=/root/oldboy state=diretory owner=www group=www mode=0755'
   删除文件/目录
   ansible web01 -m file -a 'path=/root/oldboy state=absent owner=www group=www mode=0755'
systemd
   启动
   ansible web01 -m systemd -a 'name=nginx state=started  eanbled=yes'
   停止
   ansible web01 -m systemd -a 'name=nginx state=stopped'
   重启
   ansible web01 -m systemd -a 'name=nginx state=restarted'
   加载
   ansible web01 -m systemd -a 'name=nginx state=reloaded'
   开机自启
   ansible web01 -m systemd -a 'name=nginx state=started enbled=yes'

你可能感兴趣的:(linux)