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.www58058.com/58695