±à¼ÍƼö: |
±¾ÎÄÀ´Ô´51cto.com£¬½éÉÜÁËAnsible
ÊÇʲô£¬ÄÜ×öʲô£¬AnsibleÌØÐÔ£¬¼Ü¹¹£¬¹¤×÷ÔÀí£¬Ö÷Òª×é³É²¿·Ö¹¦ÄÜ˵Ã÷µÈ֪ʶ¡£ |
|
ǰÑÔ
ÌìÌì˵ÔËά£¬¾¿¾¹ÊǸÉʲôµÄ£¿ÏÈ¿´¿´¹¤×÷Á÷³Ìß¡£Ò»°ãÀ´Ëµ£¬ÔËά¹¤³ÌʦÔÚÒ»¼ÒÆóÒµÀïÊôÓÚ¸öλÊýµÄ¸Ú룬ÉõÖÁÖ»ÓÐÒ»¸ö¡£Ãæ¶ÔÉú²úÖÐNNN̨·þÎñÆ÷£¬NN¸öÈËÔ±,¹¤×÷Á¿Ò²ÊǷdz£´óµÄ¡£
ËùÒÔÂͼÖеÄÎҺôõÒ²»áÅäÖÿø¼×µÄ¡£

Õâ¾ÍÊÇÎÒÖ÷Òª¸ÉµÄÊÂÇ飨ºÇºÇ£©

¾ÍËãÄã»áºÜÀ÷º¦µÄ½Å±¾£¬Ãæ¶Ô³É°ÙÉÏǧ£¬ÉõÖÁÉÏÍòµÄÖ÷»ú£¬Ð§ÂÊÎÊÌ⽫»áÀ§ÈÅÄãµÄ¡£
Òò´Ë£¬ÓÐûÓнâ·ÅµÄ¹¤¾ßÄØ£¿
Ansible ÊÇʲô
Ansible ¼òµ¥µÄ˵ÊÇÒ»¸öÅäÖùÜÀíϵͳ(configuration management system)¡£ÄãÖ»ÐèÒª¿ÉÒÔʹÓÃ
ssh ·ÃÎÊÄãµÄ·þÎñÆ÷»òÉ豸¾ÍÐС£ËüÒ²²»Í¬ÓÚÆäËû¹¤¾ß£¬ÒòΪËüʹÓÃÍÆË͵ķ½Ê½£¬¶ø²»ÊÇÏñ puppet
µÈ ÄÇÑùʹÓÃÀÈ¡°²×°agentµÄ·½Ê½¡£Äã¿ÉÒÔ½«´úÂ벿Êðµ½ÈÎÒâÊýÁ¿µÄ·þÎñÆ÷ÉÏ!
AnsibleÄÜ×öʲô
ansible¿ÉÒÔ°ïÖúÎÒÃÇÍê³ÉһЩÅúÁ¿ÈÎÎñ£¬»òÕßÍê³ÉһЩÐèÒª¾³£Öظ´µÄ¹¤×÷¡£
±ÈÈ磺ͬʱÔÚ100̨·þÎñÆ÷Éϰ²×°nginx·þÎñ£¬²¢ÔÚ°²×°ºóÆô¶¯ËüÃÇ¡£
±ÈÈ磺½«Ä³¸öÎļþÒ»´ÎÐÔ¿½±´µ½100̨·þÎñÆ÷ÉÏ¡£
±ÈÈ磺ÿµ±ÓÐзþÎñÆ÷¼ÓÈ빤×÷»·¾³Ê±£¬Ä㶼ҪΪзþÎñÆ÷²¿Êðij¸ö·þÎñ£¬Ò²¾ÍÊÇ˵ÄãÐèÒª¾³£Öظ´µÄÍê³ÉÏàͬµÄ¹¤×÷¡£
ÕâЩ³¡¾°ÖÐÎÒÃǶ¼¿ÉÒÔʹÓõ½ansible¡£
AnsibleÌØÐÔ
Ä£¿é»¯£ºµ÷ÓÃÌØ¶¨µÄÄ£¿é£¬Íê³ÉÌØ¶¨ÈÎÎñ
ÓÐParamiko£¬PyYAML£¬Jinja2£¨Ä£°åÓïÑÔ£©Èý¸ö¹Ø¼üÄ£¿é
Ö§³Ö×Ô¶¨ÒåÄ£¿é
»ùÓÚPythonÓïÑÔʵÏÖ
²¿Êð¼òµ¥£¬»ùÓÚpythonºÍSSH(ĬÈÏÒѰ²×°)£¬agentless
°²È«£¬»ùÓÚOpenSSH
Ö§³Öplaybook±àÅÅÈÎÎñ
ÃݵÈÐÔ£ºÒ»¸öÈÎÎñÖ´ÐÐ1±éºÍÖ´ÐÐn±éЧ¹ûÒ»Ñù£¬²»ÒòÖØ¸´Ö´ÐдøÀ´ÒâÍâÇé¿ö
ÎÞÐè´úÀí²»ÒÀÀµPKI£¨ÎÞÐèssl£©
¿ÉʹÓÃÈκαà³ÌÓïÑÔдģ¿é
YAML¸ñʽ£¬±àÅÅÈÎÎñ£¬Ö§³Ö·á¸»µÄÊý¾Ý½á¹¹
½ÏÇ¿´óµÄ¶à²ã½â¾ö·½°¸
Ansible¼Ü¹¹

Ansible¹¤×÷ÔÀí

AnsibleÖ÷Òª×é³É²¿·Ö¹¦ÄÜ˵Ã÷
PLAYBOOKS£º
ÈÎÎñ¾ç±¾£¨ÈÎÎñ¼¯£©£¬±àÅŶ¨ÒåAnsibleÈÎÎñ¼¯µÄÅäÖÃÎļþ£¬ÓÉAnsible˳ÐòÒÀ´ÎÖ´ÐУ¬Í¨³£ÊÇJSON¸ñʽµÄYMLÎļþ
INVENTORY£º
Ansible¹ÜÀíÖ÷»úµÄÇåµ¥/etc/anaible/hosts
MODULES£º
AnsibleÖ´ÐÐÃüÁîµÄ¹¦ÄÜÄ£¿é£¬¶àÊýΪÄÚÖõĺËÐÄÄ£¿é£¬Ò²¿É×Ô¶¨Òå,ansible-doc ¨Cl ¿É²é¿´Ä£¿é
PLUGINS£º
Ä£¿é¹¦ÄܵIJ¹³ä£¬ÈçÁ¬½ÓÀàÐͲå¼þ¡¢Ñ»·²å¼þ¡¢±äÁ¿²å¼þ¡¢¹ýÂ˲å¼þµÈ£¬¸Ã¹¦Äܲ»³£ÓÃ
API£º
¹©µÚÈý·½³ÌÐòµ÷ÓõÄÓ¦ÓóÌÐò±à³Ì½Ó¿Ú
ANSIBLE£º
×éºÏINVENTORY¡¢ API¡¢ MODULES¡¢PLUGINSµÄÂÌ¿ò£¬¿ÉÒÔÀí½âΪÊÇansibleÃüÁ¾ß£¬ÆäΪºËÐÄÖ´Ðй¤¾ß
×¢ÒâÊÂÏî
Ö´ÐÐansibleµÄÖ÷»úÒ»°ã³ÆÎªÖ÷¿Ø¶Ë£¬Öпأ¬master»ò±¤ÀÝ»ú
Ö÷¿Ø¶ËPython°æ±¾ÐèÒª2.6»òÒÔÉÏ
±»¿Ø¶ËPython°æ±¾Ð¡ÓÚ2.4ÐèÒª°²×°python-simplejson
±»¿Ø¶ËÈ翪ÆôSELinuxÐèÒª°²×°libselinux-python
windows²»ÄÜ×öΪÖ÷¿Ø¶Ë
°²×°Ansible
°²×°·½·¨Óкܶ࣬ÕâÀï½ö½öÒÔCentos yum°²×°ÎªÀý¡£
AnsibleĬÈϲ»ÔÚ±ê×¼²Ö¿âÖУ¬ÐèÒªÓõ½EPELÔ´¡£
Çë×ÔÐвο¼
https: //mirrors.aliyun.com /help /centos |

#ansible --
version
ansible 2.4.2.0
config file = /etc/ansible /ansible.cfg
executable location = /usr /bin/ansible
python version = 2.7.5 |
Ansible ¹¦ÄÜÏê½â
ÅäÖÃÎļþ 
Ansible ÅäÖÃÎļþ
Ansible ÅäÖÃÎļþ/etc/ansible/ansible.cfg
£¨Ò»°ã±£³ÖĬÈÏ£©
[defaults]
#inventory = /etc/ansible /hosts # Ö÷»úÁбíÅäÖÃÎļþ
#library = /usr /share/my_modules/ # ¿âÎļþ´æ·ÅĿ¼
#remote_tmp = $HOME/ .ansible/tmp # ÁÙʱpyÃüÁîÎļþ´æ·ÅÔÚÔ¶³ÌÖ÷»úĿ¼
#local_tmp = $HOME /.ansible/tmp # ±¾»úµÄÁÙʱÃüÁîÖ´ÐÐĿ¼
#forks = 5 # ĬÈϲ¢·¢Êý
#sudo_user = root # ĬÈÏsudo Óû§
#ask_sudo_pass = True #ÿ´ÎÖ´ÐÐ ansibleÃüÁîÊÇ·ñѯÎÊsshÃÜÂë
#ask_pass = True #Á¬½ÓʱÌáʾÊäÈësshÃÜÂë
#remote_port = 22 #Ô¶³ÌÖ÷»úµÄĬÈ϶˿ڣ¬Éú²úÖÐÕâ¸ö¶Ë¿ÚÓ¦¸Ã»á²»Í¬
#log_path = /var /log /ansible.log #ÈÕÖ¾
#host_ key_ checking = False # ¼ì²é¶ÔÓ¦·þÎñÆ÷µÄ host_
key£¬½¨ÒéÈ¡Ïû×¢ÊÍ¡£Ò²¾ÍÊDz»»áµ¯³ö
Are you sure you want to continue connecting (yes/no)?
|
ʵÑ鹿»®
ʵÑé»·¾³£ºVMware
Workstation Pro 14£¨ÊÔÓð棩
ϵͳƽ̨£º
CentOS Linux release 7.4.1708 (Core) ÄÚºË 3.10.0-693
.el7 .x86 _64
×îС»¯°²×°
ʵÑé»·¾³£ºVMware Workstation Pro 14£¨ÊÔÓð棩
ϵͳƽ̨£º
CentOS release 6.9 (Final) ÄÚºË 2.6.32 -696.el6
.x86_ 64
×îС»¯°²×° |

³ýÁË6-DNS-1ÒÔÍ⣬ËùÓеÄÖ÷»úµÄDNS¾ùÖ¸Ïò192.168.7.254
ÕýÏòÇøÓòÉèÖÃ
#dig - t axfr hunk.tech
; <<>> DiG 9.8.2rc1- RedHat- 9.8.2-
0.62.rc1.el6 <<>> - t axfr hunk .tech
;; global options : + cmd
hunk.tech. 600 IN SOA 6- dns- 1.hunk.tech. admin.hunk.tech.
24 720 600 86400 10800
hunk.tech . 600 IN NS 6- dns- 1.hunk.tech.
6-dns-1.hunk .tech. 600 IN A 192.168.7.254
6-web-1.hunk .tech. 600 IN A 192.168.7.201
7-db-3.hunk .tech. 600 IN A 192.168.7.203
7-web-0.hunk .tech. 600 IN A 192.168.7.200
7-web-2.hunk .tech. 600 IN A 192.168.7.202
hunk.tech . 600 IN SOA 6-dns- 1.hunk.tech. admin.hunk
.tech . 24 720 600 86400 10800 |
Inventory Ö÷»úÇåµ¥
Ansible±ØÐëͨ¹ýInventory À´¹ÜÀíÖ÷»ú¡£Ansible ¿Éͬʱ²Ù×÷ÊôÓÚÒ»¸ö×éµÄ¶ą̀Ö÷»ú,×éºÍÖ÷»úÖ®¼äµÄ¹ØÏµÍ¨¹ý
inventory ÎļþÅäÖá£
Óï·¨¸ñʽ£º
µ¥Ì¨Ö÷»ú
green.example.com > FQDN
192.168.100.10 > IPµØÖ·
192.168.100.11:2222 > ·Ç±ê×¼SSH¶Ë¿Ú
[webservers] > ¶¨ÒåÁËÒ»¸ö×éÃû
alpha.example.org > ×éÄڵĵ¥Ì¨Ö÷»ú
192.168.100.10
[dbservers]
192.168.100.10 > һ̨Ö÷»ú¿ÉÒÔÊDz»Í¬µÄ×飬Õą̂Ö÷»úͬʱÊôÓÚ[webservers]
[group:children] > ×éǶÌ××飬group Ϊ×Ô¶¨ÒåµÄ×éÃû£¬childrenÊǹؼü×Ö£¬¹Ì¶¨Óï·¨£¬±ØÐëÌîд¡£
dns > group ×éÄÚ°üº¬µÄÆäËû×éÃû
db > group ×éÄÚ°üº¬µÄÆäËû×éÃû
[webservers]
www[001:006].hunk.tech > ÓйæÂɵÄÃû³ÆÁÐ±í£¬
ÕâÀï±íʾÏ൱ÓÚ£º
www001.hunk.tech
www002.hunk.tech
www003.hunk.tech
www004.hunk.tech
www005.hunk.tech
www006.hunk.tech
[databases]
db-[a:e].example.com > ¶¨Òå×Öĸ·¶Î§µÄ¼òдģʽ,
ÕâÀï±íʾÏ൱ÓÚ£º
db-a.example.com
db-b.example.com
db-c.example.com
db-d.example.com
db-e.example.com
ÒÔÏÂÕâ2Ìõ¶¨ÒåÁËһ̨Ö÷»úµÄÁ¬½Ó·½Ê½£¬¶ø²»ÊǶÁȡĬÈϵÄÅäÖÃÉ趨
localhost ansible_ connection = local
www.163.com ansible_ connection = ssh ansible_
ssh_ user = hunk
×îºó»¹ÓÐÒ»¸öÒþ²ØµÄ·Ö×飬ÄǾÍÊÇ all£¬´ú±íÈ«²¿Ö÷»ú,Õâ¸öÊÇÒþʽµÄ£¬²»ÐèҪд³öÀ´µÄ¡£ |
Inventory ²ÎÊý˵Ã÷
ansible_ ssh_
host
½«ÒªÁ¬½ÓµÄÔ¶³ÌÖ÷»úÃû.ÓëÄãÏëÒªÉ趨µÄÖ÷»úµÄ±ðÃû²»Í¬µÄ»°,¿Éͨ¹ý´Ë±äÁ¿ÉèÖÃ.
ansible_ssh_port
ssh¶Ë¿ÚºÅ .Èç¹û²»ÊÇĬÈϵĶ˿ںÅ,ͨ¹ý´Ë±äÁ¿ÉèÖÃ.ÕâÖÖ¿ÉÒÔʹÓà ip :¶Ë¿Ú 192.168.1.100
:2222
ansible_ ssh_ user
ĬÈ쵀 ssh Óû§Ãû
ansible_ ssh_ pass
ssh ÃÜÂë(ÕâÖÖ·½Ê½²¢²»°²È«,ÎÒÃÇÇ¿ÁÒ½¨ÒéʹÓà -- ask- pass »ò SSH ÃÜÔ¿
)
ansible_ sudo_ pass
sudo ÃÜÂë(ÕâÖÖ·½Ê½²¢²»°²È«,ÎÒÃÇÇ¿ÁÒ½¨ÒéʹÓà --ask-sudo - pass)
ansible_sudo_exe (new in version 1.8)
sudo ÃüÁî·¾¶(ÊÊÓÃÓÚ1.8¼°ÒÔÉϰ汾)
ansible_connection
ÓëÖ÷»úµÄÁ¬½ÓÀàÐÍ .±ÈÈç: local, ssh »òÕß paramiko. Ansible
1.2 ÒÔǰĬÈÏʹÓà paramiko .1.2 ÒÔºóĬÈÏʹÓà 'smart' ,'smart'
·½Ê½»á¸ù¾ÝÊÇ·ñÖ§³Ö ControlPersist, À´ÅжÏ'ss h' ·½Ê½ÊÇ·ñ¿ÉÐÐ.
ansible_ ssh_ private _key_ file
ssh ʹÓõÄ˽ԿÎļþ.ÊÊÓÃÓÚÓжà¸öÃÜÔ¿,¶øÄã²»ÏëʹÓà SSH ´úÀíµÄÇé¿ö.
ansible_shell_type
Ä¿±êϵͳµÄ shellÀàÐÍ.ĬÈÏÇé¿öÏÂ,ÃüÁîµÄÖ´ÐÐʹÓà 'sh' Óï·¨,¿ÉÉèÖÃΪ 'csh'
»ò 'fish'.
ansible_ python_ interpreter
Ä¿±êÖ÷»úµÄ python ·¾¶.ÊÊÓÃÓÚµÄÇé¿ö: ϵͳÖÐÓжà¸ö Python, »òÕßÃüÁî·¾¶²»ÊÇ"/usr
/bin /python",±ÈÈç \* BSD , »òÕß /usr /bin /python
²»ÊÇ 2.X °æ±¾µÄ Python.
ÎÒÃDz»Ê¹Óà "/usr /bin /env" »úÖÆ,ÒòΪÕâÒªÇóÔ¶³ÌÓû§µÄ·¾¶ÉèÖÃÕýÈ·,ÇÒÒªÇó
"python" ¿ÉÖ´ÐгÌÐòÃû²»¿ÉΪ python ÒÔÍâµÄÃû×Ö(ʵ¼ÊÓпÉÄÜÃûΪpython26).
Óë ansible_ python_ interpreter µÄ¹¤×÷·½Ê½Ïàͬ,¿ÉÉ趨Èç ruby
»ò perl µÄ·¾¶.... |
ÉÏÃæµÄ²ÎÊýÓÃÕ⼸¸öÀý×ÓÀ´Õ¹Ê¾¿ÉÄÜ»á¸ü¼ÓÖ±¹Û
some_host ansible_
ssh_port = 2222 ansible_ ssh_ user = manager
aws_host ansible_ssh_private_key_ file = /home
/example / .ssh /aws .pem
freebsd_host ansible_ python_ interpreter = /usr
/local / bin /python
ruby_ module_ host ansible_ ruby_ interpreter
= /usr / bin /ruby. 1.9 .3 |
µÚÒ»Ìõ Ansible ÃüÁî
ºÜÖØÒªµÄÒ»µã£¬Ö÷»úÇåµ¥±ØÐëÒªÏÈÅäÖã¬ÓÉÓÚÕâ´î½¨ÁËÄÚ²¿DNS·þÎñÆ÷£¬ËùÒÔ£¬ÕâÀïµÄÖ÷»úʹÓÃÁËFQDNÃû³Æ¡£
#cat /etc /ansible
/hosts
[web]
6-web- 1.hunk.tech
7-web- 0.hunk.tech
7-web- 2.hunk.tech
[group :children]
dns
db
[dns]
6-dns-1.hunk .tech [db]
7-db-3.hunk.tech
192.168.7.[200 :203]
192.168.7.254 |
#ansible dns
-m ping # ʹÓÃansible¶Ôdns×éÄÚµÄÖ÷»ú½øÐÐping Ä£¿é²âÊÔ |

·Ç³£±§Ç¸Å¶£¬¾¹È»ÊÇʧ°ÜµÄ¡£ÎªÊ²Ã´ÄØ£¿AnsibleÊÇ»ùÓÚssh½øÐй¤×÷µÄ£¬ÄÇôµ±sshһ̨Զ³ÌÖ÷ÒªµÄʱºò£¬ÊDz»ÊÇÐèÒªÊäÈëÃÜÂëÄØ£¿¿ÉÊÇÕâÒ»ÌõÖ¸ÁûÓÐÌáʾÊäÈë¿ÚÁîÄØ
#ansible dns
-m ping -k
¼ÓÉÏ-kÑ¡Ïîºó£¬»áÌáʾÊäÈëssh ÃÜÂëÁË¡£ |

ÁíÍ⣬ֵµÃ×¢ÒâµÄÊÇ£¬µ±Ö¸Áî³É¹¦ºÍʧ°Ü¶¼»áÓв»Í¬µÄÑÕÉ«·´Ó³³öÀ´£¬ÅäÒÔchanged :false,changed
:SUCCESS,¿ÉÒÔÈÃÎÒÃǷdz£ÇåÎúµÄÖªµÀÖ´ÐеĽá¹û¡£
µ±Ö÷»úÊýÁ¿¶àµÄʱºò£¬ÊäÈëÃÜÂë¿É²»ÊÇÒ»¸öºÃ²îÊÂÄØ£¿Ç°ÃæµÄÕ½ÚÒѾ½²¹ýÖ÷»úÖ®¼ä¿ÉÒÔʹÓûùÓÚÃÜÔ¿µÄSSHÁ´½Ó¡£ÎªÁ˸ü·½±ãµÄ¹ÜÀíÖ÷»ú£¬Õâ¸öÕ½ڵÄʵÑé¶¼ÓÃÕâÖÖ·½·¨¡£
»ùÓÚkeyµÄÃâÃÜÂëµÇ¼
#ssh-keygen
#ssh-copy-id 6-web-1.hunk.tech
#ssh-copy-id 6-DNS-1.hunk.tech
#ssh-copy-id 7-web-0.hunk.tech
#ssh-copy-id 7-web-2.hunk.tech
#ssh-copy-id 7-db-3.hunk.tech |
ÏÖÔھͲ»»áÔÙÌáʾÃÜÂëµÄÎÊÌâÁË¡£
#ansible all
-m ping
6-web-1.hunk.tech | SUCCESS
7-web-0.hunk.tech | SUCCESS
7-web-2.hunk.tech | SUCCESS
7-db-3.hunk.tech | SUCCESS
6-dns-1.hunk.tech | SUCCESS
192.168.7.201 | SUCCESS
192.168.7.200 | SUCCESS |
ÊDz»ÊǺܼòµ¥Ñ½£¬AnsibleÓõÄÖ¸ÁîÒ²²»ÊÇÌ«¶à£¬¿ÉÒÔʹÓÃman ansibleºÍ¹Ù·½ÍøÕ¾È¥²éѯ¡£
http: //docs.ansible.com /ansible
/latest/
Ansible³£ÓÃÃüÁîÓï·¨
ansible <host-pattern>
[-m module_name] [options]
Ö¸Áî Æ¥Å乿ÔòµÄÖ÷»úÇåµ¥ -m Ä£¿éÃû Ñ¡Ïî
--version ÏÔʾ°æ±¾
-a Ä£¿é²ÎÊý£¨Èç¹ûÓУ©
-m module Ö¸¶¨Ä£¿é£¬Ä¬ÈÏΪcommand
-v Ïêϸ¹ý³Ì ¨Cvv -vvv¸üÏêϸ
--list- hosts ÏÔʾÖ÷»úÁÐ±í£¬¿É¼òд--list
-k, --ask -pass ÌáʾÁ¬½ÓÃÜÂ룬ĬÈÏKeyÑéÖ¤
-K£¬--ask- become-pass ÌáʾʹÓÃsudo ÃÜÂë
-C, -- check ¼ì²é£¬²¢²»Ö´ÐÐ
-T, --timeout = TIMEOUT Ö´ÐÐÃüÁîµÄ³¬Ê±Ê±¼ä£¬Ä¬ÈÏ10s
-u, --user=REMOTE_ USER Ö´ÐÐÔ¶³ÌÖ´ÐеÄÓû§
-U£¬ SUDO_USER, --sudo- user Ö¸¶¨sudu Óû§
-b, --become ´úÌæ¾É°æµÄsudo Çл» |
ansible- doc:
ÏÔʾģ¿é°ïÖú
ansible- doc [options] [module...]
-a ÏÔʾËùÓÐÄ£¿éµÄÎĵµ
-l, --list Áгö¿ÉÓÃÄ£¿é
-s, --snippet ÏÔʾָ¶¨Ä£¿éµÄ¼òҪ˵Ã÷
Àý×Ó£º#ansible-doc ping
ÓÉÓÚansibleµÄÄ£¿éÓÐ1378¸ö (2.4.2.0),²¢ÇÒÒ»Ö±ÔÚ³ÖÐø¸üС£Òò´Ë£¬Õâ¸öÖ¸Áî±ØÐëÒªÕÆÎյġ£
# ansible-doc -l |wc -l
1378 |
Ansible Ö÷»ú Æ¥ÅäÁбí
ͨÅä·û
×¢ÒâÓõ¥ÒýºÅ
* Æ¥ÅäÈÎÒâ×Ö·û
#ansible '*' -m ping µÈͬÓÚ #ansible all -m ping
#ansible '*dns*' -m ping
6-dns-1.hunk.tech | SUCCESS
? Æ¥Åäµ¥¸ö×Ö·û
#ansible '192.168.7.20?' -m ping
192.168.7.201 | SUCCESS
192.168.7.203 | SUCCESS
192.168.7.202 | SUCCESS
192.168.7.200 | SUCCESS
: »òÕß
#ansible '192.168.7.201:192.168.7.254' -m ping
192.168.7.201 | SUCCESS
192.168.7.254 | SUCCESS
:& ²¢ÇÒ (Âß¼Óë)
#ansible 'test3: &test' --list
hosts (1):
192.168.7.254
:! Âß¼·Ç¡£ÔÚtest3 ×éÄÚ£¬µ«ÊDz¢²»ÔÚtest×éÄÚ
#ansible 'test3:!test' --list > Óõ½¸Ð̾ºÅµÄʱºò£¬¼ÇµÃÒýºÅΪµ¥ÒýºÅ£¬·ñÔò»á±»bash½âÎöΪÀúÊ·ÃüÁî
hosts (2):
192.168.7.200
192.168.7.203
ʹÓÃÕýÔò±í´ïʽ
~±íʾºóÃæÊÇÕýÔòÆ¥Å䣬עÒâ~ºóÃæ²»ÄÜÓпոñ
#ansible '~[67]- (db|dns).*\.hunk.*' --list
hosts (2):
6-dns-1.hunk.tech
7-db-3.hunk.tech |
ÕâÀïдһÌõÕýÔòµÄ¿Ó,ÎÒÃÇÔÚÓÃbash½Å±¾µÄʱºò£¬Æ¥ÅäÊý×Ö¿ÉÒÔʹÓÃ[0-9]»ò[[:digit:]],ÔÚÓÃAnsibleµÄʱºò£¬ÎÒÃÇÀ´¿´Ï²»Í¬µÄЧ¹û°É
#cat /etc /ansible
/hosts
[web]
6web-1.hunk.tech
7web-0.hunk.tech
7web-2.hunk.tech
[group:children]
dns
db
[dns]
6-dns-1.hunk.tech
[db]
7-db-3.hunk.tech
[test2]
192.168.7.[200:203]
192.168.7.254
[test]
192.168.7.254
[test3]
192.168.7.200
192.168.7.254
192.168.7.203
DNS¶¼ÊÇ¿ÉÒÔÕýÈ·½âÎö³öÀ´µÄ£¬²»Òª»³ÒÉ
6-dns-1.hunk.tech. 600 IN A 192.168.7.254
6-web-1.hunk.tech. 600 IN A 192.168.7.201
7-db-3.hunk.tech. 600 IN A 192.168.7.203
7-web-0.hunk.tech. 600 IN A 192.168.7.200
7-web-2.hunk.tech. 600 IN A 192.168.7.202
#ansible '~^[[:digit:]]' --list ÓÐÈË˵ÕâÖÖд·¨»á±¨´í£¬¿ÉÊÇÖ÷»ú¶¼ÊÇ
centos7.4£¬°æ±¾¶¼ÊÇÒ»Ñù
hosts (7): ÕâÀïÆ¥Åä³ö7̨Ö÷»ú
192.168.7.200
192.168.7.201
192.168.7.202
192.168.7.203
192.168.7.254
6-dns-1.hunk.tech
7-db-3.hunk.tech
#ansible '~^[0-9]' --list
hosts (10): ÕâÀïÆ¥Åä³ö10̨Ö÷»ú
6web- 1.hunk.tech
6-dns- 1.hunk.tech
7-db- 3.hunk.tech
7web- 0.hunk.tech
7web- 2.hunk.tech
192.168.7.254
192.168.7.201
192.168.7.200
192.168.7.203
192.168.7.202
#ansible '~^[ [:digital:] ]' --list
hosts (10): ÕâÀïÆ¥Åä³ö10̨Ö÷»ú
6web-1.hunk.tech
7web-0.hunk.tech
7web-2.hunk.tech
192.168.7.200
192.168.7.201
192.168.7.202
192.168.7.203
192.168.7.254
6- dns- 1.hunk.tech
7- db -3.hunk.tech |
·ÖÏí2¸öÕýÔò±í´ïʽµÄÍøÖ·
https://en.wikipedia.org /wiki /Regular_
expression#POSIX_ basic_ and_ extended
python2µÄ
https://docs.python.org /2 /library
/re.html
²»Í¬Èí¼þ¶ÔÕýÔòµÄ±í´ï¶¼²»Ò»Ñù£¬»¹ÊÇÓÃÄÇЩͨÓÃÐÔÇ¿µÄ°É¡£
[0-9]´¿Êý×Ö
[a-zA-Z0-9]Êý×ÖºÍ×Öĸ |
Ansible µÄÃüÁîÖ´Ðйý³Ì
ÒÔ ansible db -m command -a 'ls -l
/' -vvv ÕâÌõÃüÁîΪÀý£¬¸ù¾ÝÏÔʾµÄÐÅϢʱÐнâ¶Á
1. ¼ÓÔØ×Ô¼ºµÄÅäÖÃÎļþ£¬Ä¬ÈÏ/etc
/ansible/ansible.cfg
Using /etc /ansible /ansible.cfg as config file
2.Æ¥ÅäÖ÷»úÇåµ¥
Parsed /etc /ansible /hosts inventory source with
ini plugin
3. ¼ÓÔØÖ¸Áî¶ÔÓ¦µÄÄ£¿éÎļþ£¬Èç command£¬Éú³É.pyµÄÎļþµ½±¾»úµÄÁÙʱĿ¼£¬Õâ¸öĿ¼¾ÍÊÇÔÚ/etc
/ansible /ansible .cfg ¶¨ÒåµÄ
Using module file /usr/lib/python2.7/site-packages
/ ansible / modules/ commands /command.py
PUT /tmp /tmp4JvsLH TO /root/.ansible/tmp/ansible-
tmp -1517301292 .6 - 155771303493861 /command.py
4. ͨ¹ýansible ½«Ä£¿é»òÃüÁîÉú³É¶ÔÓ¦µÄÁÙʱpyÎļþ£¬²¢½«¸ÃÎļþ´«ÊäÖÁÔ¶³Ì·þÎñÆ÷µÄ¶ÔÓ¦Ö´ÐÐÓû§$HOME
/.ansible /tmp /ansible- tmp- Êý×Ö/XXX .PY Îļþ£¬
Õâ¸öĿ¼¾ÍÊÇÔÚ/etc/ansible/ansible.cfg¶¨ÒåµÄ
( umask 77 && mkdir - p "` echo /root
/.ansible /tmp/ ansible - tmp- 1517301292.6- 155771303493861
`" ....)
sftp > put /tmp/tmp4JvsLH /root/.ansible/tmp/ansible-tmp
- 1517301292.6- 155771303493861 /command.py\n'
5. ¸øÎļþ+x ȨÏÞ
'chmod u+x /root /.ansible /tmp /ansible- tmp-151730129
2.6- 155771303493861 / /root /.ansible /tmp/ ansible-
tmp- 1517301292.6- 155771303493861 / command.py
&& sleep 0'
6. Ö´Ðв¢·µ»Ø½á¹û
'/usr /bin/ python /root/.ansible /tmp /ansible-tmp-1517301292
.6- 155771303493861 /command.py;
7. ɾ³ýÁÙʱpyÎļþ£¬sleep 0Í˳ö
rm -rf "/root /.ansible /tmp/ansible-tmp-1517301292.6-155771303493861
/" > /dev /null 2 >&1 &&
sleep 0
8.¶Ï¿ªÔ¶³ÌÖ÷»úÁ¬½Ó
'Shared connection to 7- db -3.hunk.tech closed.\r\n')
|
Ö´Ðнá¹û״̬
ÂÌÉ«£ºÖ´Ðгɹ¦²¢ÇÒ²»ÐèÒª×ö¸Ä±äµÄ²Ù×÷
¡Á¡Á¡Á£ºÖ´Ðгɹ¦²¢ÇÒ¶ÔÄ¿±êÖ÷»ú×ö±ä¸ü
ºìÉ«£ºÖ´ÐÐʧ°Ü
¿ÉÒÔÔÚÅäÖÃÎļþÖж¨Òå
[colors]
#highlight = white
#verbose = blue
#warn = bright purple
#error = red
#debug = dark gray
#deprecate = purple
#skip = cyan
#unreachable = red
#ok = green
#changed = yellow
#diff_add = green
#diff_remove = red
#diff_lines = cyan |
|