一、ansible 安装
ansible 依赖于python2.6或更高的版本、paramiko、PyYAML及Jinja2。
https://www.python.org/ftp/python/2.7.8/Python-2.7.8.tgz
将python头文件拷贝到标准目录,以避免编译ansible时,找不到所需的头文件
备份旧版本的python,并符号链接新版本的python
修改yum脚本,使其指向旧版本的python,已避免其无法运行
1.1 编译安装
解决依赖关系
解压安装包
https://github.com/ansible/ansible/archive/v1.7.2.tar.gz
编译安装
拷贝配置文件
1.2 rpm包安装
使用阿里云镜像源即可,这里为了方便使用,就直接使用yum安装了。
Fedora 用户可直接安装Ansible, 但RHEL或CentOS用户,需要 配置 EPEL # yum install -y epel-release # yum install -y ansible
注意:不同版本的ansible的功能差异可能较大。
二、配置
配置文件:/etc/ansible/ansible.cfg
hostfile=/etc/ansible/hosts #指定默认hosts配置的位置 host_key_checking = False #不进行host_key检查,省去目标key发生变化时输入(yes/no)的步骤 ask_pass=True # 每次执宏桥衫行ansible命令是否询问ssh密码 ask_sudo_pass=True # 每次执行ansible命令时是否询问sudo密码
主机清单:/etc/ansible/hosts
主程序:ansible、ansible paly-book、ansible-doc
1、将要管理的主机纳入 /etc/ansible/hosts配置文件中,可以填写IP或是主机名
[WebServers] 10.10.10.3 10.10.10.4
2、.基于ssh的方式与被管理的主机进行通信,在管理的主机上(部署ansible的主机上)生成一对非对称密钥,将公钥发给被管理的主机。
a,生成密钥对:ssh-keygen -t rsa
b,将密钥发放到要管理的主机:ssh-copy-id -i 10.10.10.3 或 ssh-copy-id -i /root/.ssh/id_rsa.pub root@10.10.10.3
3、使用ansible命令测试
[root@wlm yum.repos.d]# ansible all -m ping 10.10.10.4 | SUCCESS =>{ "changed": false, "ping": "pong" }
三、基本使用
1、常用命令
ansible-doc 命令:获取模块列表、模块使用格式。
ansible-doc -l :获取列表
ansible-doc -s module_name:获取指定模块信息
2、ansible 命令格式
ansible <host-pattern>[-f forks] [-m module_name] [-a args]
<host-pattern>指明管控主机,以模式表示或者直接指定ip,必须事先指定在文件中;all所有
[-f forks] 指明每批管控多少主机,默认是5个主机一批次
[-m module_name] 使用何种模块 *** 作,所有 *** 作都需要通过模块指定
[-a args] 指明模块专用参数;args 一般是 key=value格式。注:command模块的参数不是kv模蔽腔式,而是直接给出要执行的命令。
注意:<host-pattern>默认读取/etc/ansible/hosts,也可以指明自定义文件消森路径 -iPATH,--inventory=PATH:指明使用的 host inventory文件路径;
3、常用模块介绍
1、command模块:远程主机上运行命令
例:ansible hosts -m command -a "ls /tmp" 注:command模块也可以省略。
给远程主机添加用户、设置密码:
ansible hosts -a 'useradd user1'
ansible hosts -a 'echo abc | passwd --stdin user1'
2、shell模块:远程主机在shell进程下运行命令,支持shell特性,也支持管道符。
10.10.10.4 | SUCCESS | rc=0 >>
3、copy模块:把当前主机文件复制到远程主机位置,可以指定mode、own、group
10.10.10.4 | SUCCESS =>{ "changed": true, "checksum": "325287cee456533bf76025312e5d05e842cb43a9", "dest": "/root/abc.txt", "gid": 0, "group": "root", "md5sum": "1c6d47c6e4d59c630751b47fff140b89", "mode": "0644", "owner": "ansible", "size": 15, "src": "/root/.ansible/tmp/ansible-tmp-1484639082.19-114656107854348/source", "state": "file", "uid": 0 }
4、cron模块:在远程主机指定crontab周期性计划任务
minute= hour= day= month= weekday= job= name= (必须填写) state=
ansible all -m cron -a "minute=*/10 job='/sbin/ntpdate 10.10.10.10 &>/dev/null' name=synctime" 可使用crontab -l查看
在管理的主机上可以删除制定的计划任务
10.10.10.4 | SUCCESS =>{ "changed": true, "envs": [], "jobs": [] }
5、fetch模块:和copy相反,从远程主机拷贝文件到本地主机
可以不要flat=yes参数,但作用:
当dest=/root/kel/ ,abc.txt会保存在/root/kel/目录下
当dest=/root/kel ,会拷贝abc.txt文件,并命名成kel
6、file模块:file模块包含了文件、文件夹、超级链接类的创建、拷贝、移动、删除
path=/etc/foo.conf owner=foo group=foo mode=0644
src=/file/to/link/to dest=/path/ro/symlink owner=foo group=foo state=link
src=/tmp/{{item.path}} dest={{item.dest}} state=link with_items:
path=/etc/foo.conf state=touch mode="u=rw,g=w,o=r"
path=/etc/foo.conf state=touch mode="u+w,g-w,o-rw"
7、yum模块:用于yum安装安装和卸载
8、service模块:服务管理
9、user/group模块:user模块管理用户;group模块管理group
四、Playbook剧本
playbook 是ansible更强大的配置管理组件,实现基于文本文件编排执行的多个任务,且多次重复执行。playbook组织格式为使用YAML语言来编写的。
playbook 是由一个或多个“play”组成的列表。play的主要功能在于将事先归为一组的主机装扮成事先通过ansible中的task定义好的角色。从根本上讲,所谓的task无非是调用ansible的一个module。将多个play组织在一个playbook中,即可以让他们联通起来按事先编排的机制生效。
1、例子:
在ansible主机上的root目录下创建httpd目录,将本机的httpd.conf文件拷贝到该目录下,修改配置文件里的监听端口是8081
remote_user:root #root前不能有空格
tasks: #任务列表
yum name=httpd state=present #yum后的: 删除掉
copy src=/root/httpd/httpd.conf dest=/etc/httpd/conf
service name=httpd state=started
注意:yaml文件中支持#;下面的 *** 作要跟上面的name对齐。
测试:
ansible-playbook --check playbook :只检测可能会发生的改变,但不真正执行 *** 作
ansible-playbook playbook :直接执行
ansible-playbook --list-hosts :列出运行任务的主机
2、playbook介绍
设置在特定条件下触发:
a,某任务的状态在运行后为changed时,可通过“notify”通知给相应的handles;
handles:任务在特定条件下触发;接收到其他任务的通知是被触发;
b,任务可以通过“tags”打标签,而后可在ansible-playbook命令上使用-t指定进行调用;
原文地址: Ansible系列-基础篇-Ansible 的安装、配置和基本使用
1、Ansible 目尺链前支持Linux和MacOS作为控制节点,管理节点可以是Linux、MacOS、其他类Unix系统和Windows。
2、Ansible 节点主要分为两类,管理节点和被管理节点
需要主要的是 管理节点 和 被管理节点 之间需要配置好 SSH免密通道
3、如果可以的话,个人建议Python还是使用3.0以上版本,虽然系统预装了 2.7.5 但是官方都宣布不再维护该版本了,其他类似 openssl 、 git 等系统默认的版本就已经满足
4、本系列教程用到的环境
1、方式一 包管理器安装
比如 CentOS 、 Fedora 、 Redhat 等系统下使用 yum , Mac下使用 brew , Ubuntu、Debian等系统使用 apt-get ,如上说明,本系列都是在Centos系统下进行
2、方式二 源码安装
源码安装一般是为了尝鲜安装的最新版本,用的较少
3、方式三 采用Python PIP包安装
这里 建议采用方式三安装 ,Python可以通过 pyenv 来管理虚拟环境,同时后续可以通过 Ansible API 进行Python集成,方便平台化定制开发
Ansible 安装成功之后的验证
在正式聊 Ansible 配置之前,我们可以先仔细观察下上面 ansible --version 的输出结果,其中 config file 是 Ansible 配置文件存放的位置, 另外注意 jinja 和 libyaml ,其中 jinja 是 Ansible Role 中的 templates 用到的,而 libyaml 是 Ansible playbook 编写时用到的文件格式,具体我们都会在后续文章中进行详细说明。这里先了解下就行。
其实这里还有个文件格式没有展示出来,就是 Ansible Inventory 文件的格式 ,采用的是 ini 格式
好了我们正式聊聊如果配置 Ansible,其实除了上面提到的 config file 制定的配置之外。Ansible 会从以下方式按照由上到下优先级加载配置
ansible.cfg 配置文件详解
ansible.cfg 的配置项很多,实际环境中其实不会所有的配置项都配置,遵循二八法则。而且 Ansible 没有启动服务一说,说明配置文件的更改是即时生效的。
这里先看看本环境中用到的配置,然后做详细说明
Ansible 免密登录
在配置之前,先说个 运维规范 ,一般为了安全要求,郑信Linux环境会禁用密码登录,采用公私钥对登录(特殊主机建议禁用root登录),因为通过ansible管理一般都是内网,这里默认是允许root登录的。
这里可能可能有人会问,为啥不统一也把root登录给全部禁用呢,这样岂不是更安全呢?
所以视自己实际环境而定哦
好了,我们回到正题,我们知道Ansible的调用是通过ssh远程执行,如果在配置文件中配置了 private_key_file 那么不管你使用哪个账号去执行,对应的公钥就是该私钥匹配的, 这样就会导致不同账号得使用相同的公私钥,这样不安全,也不友好
实际中,在配置文件中不配置 private_key_file , 然后新增的SA账喊困轮号单独配置免密登录,员工离职清理账号也不影响其他人。
至于如果配置SSH免密登录,网上教程一大堆,这里就不啰嗦了
这里我们在 /etc/ansible/inventory/pro.hosts 配置几个测试主机,类似
这种命令执行的方式叫做 Ad-hoc , 具体 Ansible 都有哪些内置模块,可以参考 Ansible.Builtin
如果知道模块,但是不知道怎么用,可以尝试 ansible-doc -s module-name ,比如上面的 shell 模块
下一篇我们来说说工作中常用的模块及其用法
参考:
1、 https://www.cnblogs.com/yangmingxianshen/p/12655843.html
2、 https://docs.ansible.com/ansible/latest/collections/ansible/builtin/index.html
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)