学习Ansible

ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet、cfengine、chef、func、fabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。

ansible是基于模块工作的,本身没有批量部署的能力。

不错的文章: http://blog.51cto.com/191226139/2066936 

 

一、安装ansible: yum install ansible -y

配置hosts:/etc/ansible/hosts

# test on es-si-os-ohn-81

[test]
10.181.132.203
10.181.133.81
10.181.133.86
 

将公钥写入被管理机:

ssh-copy-id -i .ssh/id_rsa.pub root@10.181.133.86

将.ssh/id_rsa.pub的内容拷贝到10.181.133.86服务器的.ssh/authorized_keys里面

 

测试ansible:

[root@alice-test-ansible ~]# ansible test -m ping
10.181.133.81 | SUCCESS => {
    "changed": false, 
    "ping": "pong"
}
10.181.133.86 | SUCCESS => {
    "changed": false, 
    "ping": "pong"
}
10.181.132.203 | SUCCESS => {
    "changed": false, 
    "ping": "pong"
}
 

二、ansible模块

1. ansible远程命令模块command、script、shell

1)command 作为 Ansible 的默认模块,可以运行远程权限范围所有的 shell 命令,不支持管道符。        

[root@alice-test-ansible ~]# ansible test -m command -a "free -m"      # 查看test分组主机内存使用情况
10.181.133.81 | SUCCESS | rc=0 >>
              total        used        free      shared  buff/cache   available
Mem:          88619         707       87605          24         306       87283
Swap:             0           0           0

10.182.65.169 | SUCCESS | rc=0 >>
              total        used        free      shared  buff/cache   available
Mem:         145068        1920         710          96      142436      141929

2)script 的功能是在远程主机执行主控端存储的 shell 脚本文件,相当于 scp + shell 组合。

[root@alice-test-ansible ~]# ansible test -m script -a "a.sh "  #远程执行本地文件,a.sh在主控端
10.181.132.203 | SUCCESS => {
    "changed": true, 
    "rc": 0, 
    "stderr": "Shared connection to 10.181.132.203 closed.\r\n", 
    "stderr_lines": [
        "Shared connection to 10.181.132.203 closed."
    ], 
    "stdout": "test script module\r\n", 
    "stdout_lines": [
        "test script module"
    ]
}

3)shell 的功能是执行远程主机上的 shell 脚本文件,支持管道符。

ansible test -m shell -a "/home/a.sh"      #远程执行脚本,a.sh脚本在所有的远程主机上。

2.  copy 模块(实现主控端向目标主机拷贝文件,类似于 scp 功能) 

#拷贝Master服务器上/root/a.sh 到远程主机的/root/test/目录,这个目录必须已经存在

ansible test -m copy -a "src=/root/a.sh dest=/root/test/ "

#指定属主和组,以及权限

ansible test -m copy -a "src=/root/a.sh dest=/root/test/ owner=root group=root mode=0755"

3.  yum 模块(软件包管理)

ansible test -m yum -a "name=curl state=latest" #安装最新版本的curl

 ansible test81 -m yum -a "name=python36"

4.  mount 模块(远程主机分区挂载)

ansible test -m mount -a "name=/mnt/ltesdkroot src=hz11.china.nsn-net.net:/vol/ltesdkroot fstype=nfs opts=rw state=present"

ansible test81 -m mount -a "name=/build/ltesdk src=hzchon11tesdkroot fstype=nfs opts=rw state=mounted"

4种state解释:

present:只更新/etc/fstab 文件,但不执行mount命令

mounted:更新/etc/fstab文件,创建dest目录, 执行mount命令

unmounted:不更新/etc/fstab文件,只执行unmount命令

absent:删除/etc/fstab文件中条目,删除dest目录,执行unmount命令

5. service 模块(远程主机系统服务管理)

ansible test -m service -a "name=nginx state=stoped"
ansible test -m service -a "name=nginx state=restarted"
ansible test -m service -a "name=nginx state=reloaded"

6.  get_url 模块(实现在远程主机下载指定 URL 到本地,支持 sha256sum 文件校验)

ansible test -m get_utl -a "url=http://www.baidu.com dest=/tmp/index.html mode=0440 force=yes"

7.  user 服务模块(远程主机用户管理) 

ansible test81 -m user -a "name=alice"                           # 创建alice用户
ansible test81 -m user -a "name=wang comment='user wang'"        # 更新用户信息
ansible test81 -m user -a "name=wang state=absent remove=yes"    # 删除用户以及相关的目录

8.  cron 模块(远程主机 crontab 配置) 

ansible test -m cron -a "name='check dirs' hour='5,2' job='ls -alh > /dev/null'"

9.  stat 模块(获取远程文件状态信息,atime/ctime/mtime/md5/uid/gid 等信息)

ansible test -m stat -a "path=/etc/fstab"

三、Ansible-playbook

使用 Ansible-playbook 可以完成一组复杂的动作,例如部署环境、搭建服务、修改配置等 

# hosts        指定执行操作主机
# remote_user  指定执行用户
# tasks        指明有哪些动作
# name         动作描述
# shell        模块,后面为具体指令

简单示例:

# vi /etc/ansible/playbook.yml      在test远程主机上,将服务器的内存信息保存到info.txt文件中

- hosts: test
  remote_user: root
  tasks:
    - name: Save Memory To info.txt
      shell: "free -m > ~/info.txt"

# ansible-playbook /etc/ansible/playbook.yml

PLAY [test] ****************************************************************************************************************************************************************

TASK [Gathering Facts] *****************************************************************************************************************************************************
ok: [10.181.132.203]
ok: [10.181.133.86]
TASK [Save Memory To info.txt] *********************************************************************************************************************************************
changed: [10.181.132.203]
changed: [10.181.133.86]

PLAY RECAP *****************************************************************************************************************************************************************
10.181.132.203             : ok=2    changed=1    unreachable=0    failed=0   
10.181.133.86              : ok=2    changed=1    unreachable=0    failed=0

 一般使用框架:

## 建立 files     目录,用于存放将要拷贝到远程主机的安装包等
## 建立 tasks     目录,用于编写将要执行的任务
## 建立 templates 目录,用于存放可变的模板文件,比如某种条件下变量的值不一样
## 建立 vars      目录,用于存放变量信息

# tree /etc/ansible

|-- ansible.cfg
|-- a_playbook.yml
|-- hosts
|-- playbook.yml
|-- roles
|   |-- memory_check
|   |   |-- files
|   |   |-- tasks
|   |   |   `-- main.yml   #这里文件名字必须是main.yml,否则会报错
|   |   |-- templates
|   |   `-- vars
|   |       `-- main.yml  #这里文件名必须是main.yml,否则会报错;这里定义的变量可用于tasks/main.yml({{ var_name }})
|-- test_memory_check.yml

# ansible-playbook /etc/ansible/test_memory_check.yml

# cat test_memory_check.yml 
- hosts: test     #定义主机组
  roles:
  - memory_check     #定义角色

# cat roles/memory_check/tasks/main.yml 
- name: Save Memory To info.txt
  shell: "free -m > ~/{{ filename }}"
- name: copy file a
  copy: src=a dest=~/b                 # 文件a存放在/etc/ansible/roles/memory_check/files/目录下

# cat roles/memory_check/vars/main.yml 
filename: info.txt


 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值