macos环境下ansible学习笔记

简介

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


安装

本机环境:
macos high sierra 10.13
python 2.7.10

在macos下安装ansible主要有三种方法,建议采用源码安装的方法安装ansible。
1.brew安装(需要安装homebrew模块)

brew install ansible 

2.pip安装

pip install ansible

3.源码安装

git clone https://github.com/ansible/ansible.git
cd ansible
sudo python setup.py install 

安装完成后 用 ansible --version 命令 检查安装是否成功

tips:mac下安装后缺少 /etc/ansible 目录,需要手动添加,并从源码中将example目录中的文件拷贝到创建的 /etc/ansible 目录下。


主机免秘钥连接

生成本地ssh秘钥

ssh-keygen

将本地秘钥发给远端服务器(例:用户名为root ip地址为192.168.1.1)

ssh-copy-id root@192.168.1.1

出现Are you sure you want to continue connecting (yes/no)? 时,输入yes,之后输入目标服务器的密码,大功告成。

再次测试连接远端服务器,不需要密码连接上就表明成功


ansible的简单使用

当我们需要使用ansible直接向远端服务器发送指令时,一般需要以下步骤:

配置hosts文件,默认的hosts文件在 /etc/ansible 目录下

vim /etc/ansible/hosts

hosts文件基本格式(将需要控制的远端服务器ip地址写入,后面也可写入参数)

[hostname] #可以随意命名
192.168.1.2
192.168.1.3
[hostname1]#可以有多个分组
192.168.1.4
192.168.1.5

测试能否ping通

ansible all -m ping 
192.168.1.2 | SUCCESS => {
    "changed": false, 
    "failed": false, 
    "ping": "pong"
}
ansible命令参数及说明
ansible远程批量命令

远程执行命令的模块有command、shell、scripts、以及raw模块;

command模块

command模块为ansible默认模块,不指定-m参数时,使用的就是command模块;comand模块比较简单,常见的命令都可以使用,但其命令的执行不是通过shell执行的,所以,像这些 "<", ">", "|", and "&"操作都不可以,当然,也就不支持管道;示例:显示远程路径:

ansible hostname  -a 'pwd'
192.168.1.2 | success | rc=0 >>
/home/root
192.168.1.3 | success | rc=0 >>
/home/root
10.6.143.37 | success | rc=0 >>
/home/root

缺点:不支持管道,就没法批量执行命令;

shell模块

使用shell模块,在远程命令通过/bin/sh来执行;所以,我们在终端输入的各种命令方式,都可以使用; 但是我们自己定义在.bashrc/.bash_profile中的环境变量shell模块由于没有加载,所以无法识别;如果需要使用自定义的环境变量,就需要在最开始,执行加载自定义脚本的语句;
对shell模块的使用可以分成两块:1) 如果待执行的语句少,可以直接写在一句话中:

ansible hostname  -a ". .bash_profile;ps -fe |grep sa_q" -m shell
  1. 如果在远程待执行的语句比较多,可写成一个脚本,通过copy模块传到远端,然后再执行;但这样就又涉及到两次ansible调用;对于这种需求,ansible已经为我们考虑到了,script模块就是干这事的;
script模块

使用scripts模块可以在本地写一个脚本,在远程服务器上执行(远程服务器不需要python环境):

ansible hostname -m script -a "/home/test/test.sh"

ansible playbook

playbook就是把上述在命令行的操作,以yml格式写在文件中来执行而已。复杂的playbook只是更多的命令行操作的集合。

例:将本机的某个文件拷贝到远端服务器

 vim copytest.yml   #创建yml执行文件
---
- hosts: hostname  # hosts中指定
  remote_user: root  # 如果和当前用户一样,则无需指定
  tasks:
      - name: copyfile   #建议每个任务指定一个name,方便出错时检查
        copy: src=/root/test.txt dest=root/test.txt  #  本地拷贝到远端

注解:
tasks定义了playbook中要执行的任务,包括任务名name以及具体的任务内容,tasks只有一个,而任务可以有多个.

---
- hosts: hostname  
  remote_user: root 
  tasks:
      - name: copyfile  
        copy: src=~  dest=~
      - name: testshell
        shell: 'touch test.txt'
      - name: testshell2     
        shell: 'touch test2.txt'      #遵循这样的格式

playbook执行方法:

sudo ansible-playbook copytest.yml    #主机名、执行命令都已在yml中指定了。

小测试

目标:通过连接git仓库的方法,远端服务器将本机的bash配置文件分发给其他指定的服务器,并执行生效。

1.创建yml文件编写task,并上传到git仓库

- hosts: host
  remote_user: root
  tasks:
    - name: copyprofile
      copy: src=/root/.bash_profile dest=/root/.bash_profile owner=root  mode=0600
    - name: runprofile
      shell: source /root/.bash_profile

2.编写shell脚本,交给远端服务器执行

# !bin/bash
mypath="User/root/itservercontrol"
if [ ! -d "$mypath"]; then
  git clone git@example.git #填写git仓库地址
    sudo ansible-playbook Change_Profile.yml
else
    cd itservercontrol
    git pull
    sudo ansible-playbook Change_Profile.yml
fi

3.向远端服务器发送本地编写的脚本,并执行

ansible hostname -m script -a "/root/itservertest.sh"

运行成功!


本笔记仅供参考,水平较低,还望包涵。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 195,783评论 5 462
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 82,360评论 2 373
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 142,942评论 0 325
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,507评论 1 267
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,324评论 5 358
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,299评论 1 273
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,685评论 3 386
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,358评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,652评论 1 293
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,704评论 2 312
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,465评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,318评论 3 313
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,711评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,991评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,265评论 1 251
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,661评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,864评论 2 335

推荐阅读更多精彩内容