ansible 入门与进阶
Configuration、Command and Control
是什么 ? SSH-based configuration management, deployment, and task execution system
运维工具的分类:
agent:基于专用的agent程序完成管理功能,puppet, func, zabbix, …
agentless:基于ssh服务完成管理,ansible, fabric, …
架构:
Ansible Core
Modules:
Core Modules
Customed Modules
Host Iventory
Files
CMDB
PlayBooks
Hosts
roles
Connection Plugins:
特性:
模块化:调用特定的模块,完成特定的任务;
基于Python语言研发,由Paramiko, PyYAML和Jinja2三个核心库实现;
部署简单:agentless;
支持自定义模块,使用任意编程语言;
强大的playbook机制;
幂等性;
安装及程序环境:
程序:
ansible
ansible-playbook
ansible-doc
配置文件:
/etc/ansible/ansible.cfg
主机清单:
/etc/ansible/hosts
插件目录:
/usr/share/ansible_plugins/
首先安装ansible : 这里我使用的是openSUSE 直接安装的
安装完成后配置一下/etc/ansible/hosts 下的主机列表
采用的是test组中的的四台主机, 这四台主机已经提前通过ssh-copy-id 命令分发ssh的公钥
! 注意 : 在这里我之前给自己挖了个坑, 在 /root/.bashrc 文件中加入了一段命令用于登陆时显示当前主机的IP地址, 造成了ansible 命令执行时总是显示主机不在线, 注释掉就执行正常.
命令语法
ansible <host-pattern> [options]
模块简介 :
ping:探测目标主机是否存活;
命令示例 :
ansible test -m ping
command:在远程主机执行命令;
命令示例 :
ansible test -m command -a “ls -l /tmp”
shell:在远程主机上调用shell解释器运行命令,支持shell的各种功能,例如管道等 ;[ 推荐使用! ]
注意:
command和shell模块的核心参数直接为命令本身;而其它模块的参数通常为“key=value”格式;
参数帮助中参数后面有等于号的通常是此选项的必须模块
使用示例 :
ansible test -m shell -a “hostnamectl | head -1”
copy: C o p i e s f i l e s t o r e m o t e l o c a t i o n s .
用法:
(1) 复制文件
-a “src= dest= “
(2) 给定内容生成文件
-a “content= dest= “
其它参数:mode, owner, group, …
file:S e t s a t t r i b u t e s o f f i l e s
用法:
(1) 创建目录:
-a “path= state=directory”
(2) 创建链接文件:
-a “path= src= state=link”
(3) 删除文件:
-a “path= state=absent“
fetch:F e t c h e s a f i l e f r o m r e m o t e n o d e s
将远程主机上的 文件通过复制保存到本地, 自动按照主机IP进行分类
使用示例 :
ansible test -m fetch -a “src=/root/.bashrc dest=/root/test1”
cron:M a n a g e c r o n . d a n d c r o n t a b e n t r i e s .
为远程主机设定计划任务
-a “”
minute=
hour=
day=
month=
weekday=
job=
name=
user=
state={present|absent} present 为默认的选项, absent显示声明
hostname:M a n a g e h o s t n a m e
为远程主机设定主机名
name=
yum:M a n a g e s p a c k a g e s w i t h t h e I ( y u m ) p a c k a g e m a n a g e r
-a “”
(1) name= state= (present|latest|absent)
(2) name= state=absent
为远程主机进行软件包管理
service:M a n a g e s e r v i c e s .
-a “”
name= 软件包名
state=
started
stopped
restarted
enabled=
runlevel=
group: A d d o r r e m o v e g r o u p s
增加或删除一个用户组
-a “”
name=
state=
system=
gid=
user:M a n a g e u s e r a c c o u n t s
管理用户
-a “”
name=
group=
groups=
comment=
uid=
system=
shell=
expires=
home=
setup:G a t h e r s f a c t s a b o u t r e m o t e h o s t s
YAML:
YAML is a data serialization format designed for human readability and interaction with scripting languages.
数据结构:
key:value
– item1
– item2
– item3
{name:jerry, age:21}
PlayBook:
核心元素:
Tasks:任务,由模块定义的操作的列表;
Variables:变量
Templates:模板,即使用了模板语法的文本文件;
Handlers:由特定条件触发的Tasks;
Roles:角色;
playbook的基础组件:
Hosts:运行指定任务的目标主机;
remote_user:在远程主机以哪个用户身份执行;
sudo_user:非管理员需要拥有sudo权限;
tasks:任务列表
模块,模块参数:
格式:
(1) action: module arguments
(2) module: arguments
Playbook准备 :(不知道为什么, 在openSUSE出现了playbook总是不能正确运行的错误)
原创文章,作者:M20-石俊,如若转载,请注明出处:http://www.178linux.com/58695