¼ò½é
ansibleÊǸöʲô¶«Î÷ÄØ£¿¹Ù·½µÄtitleÊÇ¡°Ansible is Simple IT Automation¡±¡ª¡ª¼òµ¥µÄ×Ô¶¯»¯IT¹¤¾ß¡£Õâ¸ö¹¤¾ßµÄÄ¿±êÓÐÕâô¼¸Ï
- ×Ô¶¯»¯²¿ÊðAPP£»
- ×Ô¶¯»¯¹ÜÀíÅäÖÃÏ
- ×Ô¶¯»¯µÄ³ÖÐø½»»¥£»
- ×Ô¶¯»¯µÄ£¨AWS£©ÔÆ·þÎñ¹ÜÀí£»
ËùÓеÄÕ⼸¸öÄ¿±ê´Ó±¾ÖÊÉÏÀ´Ëµ¶¼ÊÇÔÚÒ»¸ǫ̈»òÕß¼¸Ì¨·þÎñÆ÷ÉÏ£¬Ö´ÐÐһϵÁеÄÃüÁî¶øÒÑ¡£Í¨Ë×µÄ˵¾ÍÊÇÅúÁ¿µÄÔÚÔ¶³Ì·þÎñÆ÷ÉÏÖ´ÐÐÃüÁî¡£µ±È»£¬×îÖ÷ÒªµÄÊÇËüÊÇ»ùÓÚ paramiko ¿ª·¢µÄ¡£Õâ¸öparamikoÊÇÊ²Ã´ÄØ£¿ËüÊÇÒ»¸ö´¿PythonʵÏÖµÄsshÐÒé¿â¡£Òò´ËfabricºÍansible»¹ÓÐÒ»¸ö¹²Í¬µã¾ÍÊDz»ÐèÒªÔÚÔ¶³ÌÖ÷»úÉϰ²×°client/agents£¬ÒòΪËüÃÇÊÇ»ùÓÚsshÀ´ºÍÔ¶³ÌÖ÷»úͨѶµÄ¡£¼òµ¥¹éÄÉһϣº
Ansible
¡ª»ùÓÚ Python paramiko ¿ª·¢£¬·Ö²¼Ê½£¬ÎÞÐè¿Í»§¶Ë£¬ÇáÁ¿¼¶£¬ÅäÖÃÓ﷨ʹÓà YMAL ¼° Jinja2Ä£°åÓïÑÔ£¬¸üÇ¿µÄÔ¶³ÌÃüÁîÖ´ÐвÙ×÷
ÀàËÆµÄ×Ô¶¯»¯ÔËά¹¤¾ßÓкܶೣÓõϹÓУº
Puppet
¡ª»ùÓÚ Ruby ¿ª·¢£¬²ÉÓà C/S ¼Ü¹¹£¬À©Õ¹ÐÔÇ¿£¬»ùÓÚ SSL£¬Ô¶³ÌÃüÁîÖ´ÐÐÏà¶Ô½ÏÈõ
SaltStack
¡ª»ùÓÚ Python ¿ª·¢£¬²ÉÓà C/S ¼Ü¹¹£¬Ïà¶Ô puppet ¸üÇáÁ¿¼¶£¬ÅäÖÃÓ﷨ʹÓà YMAL£¬Ê¹µÃÅäÖýű¾¸ü¼òµ¥
Ansible ¹¤×÷»úÖÆ
Ansible ÔÚ¹ÜÀí½Úµã½« Ansible Ä£¿éͨ¹ý SSH ÐÒ飨»òÕß Kerberos¡¢LDAP£©ÍÆË͵½±»¹ÜÀí¶ËÖ´ÐУ¬Ö´ÐÐÍêÖ®ºó×Ô¶¯É¾³ý£¬¿ÉÒÔʹÓà SVN µÈÀ´¹ÜÀí×Ô¶¨ÒåÄ£¿é¼°±àÅÅ


ÓÉÉÏÃæµÄͼ¿ÉÒÔ¿´µ½ Ansible µÄ×é³ÉÓÉ 5 ¸ö²¿·Ö×é³É£º
- Ansible £º ºËÐÄ
- Modules £º °üÀ¨ Ansible ×Ô´øµÄºËÐÄÄ£¿é¼°×Ô¶¨ÒåÄ£¿é
- Plugins £º Íê³ÉÄ£¿é¹¦ÄܵIJ¹³ä£¬°üÀ¨Á¬½Ó²å¼þ¡¢Óʼþ²å¼þµÈ
- Playbooks £º ¾ç±¾£»¶¨Òå Ansible ¶àÈÎÎñÅäÖÃÎļþ£¬ÓÉAnsible ×Ô¶¯Ö´ÐÐ
- Inventory £º ¶¨Òå Ansible ¹ÜÀíÖ÷»úµÄÇåµ¥
ansible °²×°
£¨1£©±àÒë°²×°
½â¾öÒÀÀµ£º
#yum -y install python-jinja2 PyYAML python-paramiko python-babel python-crypto |
°²×°
#tar xf ansible-1.5.4.tar.gz
#cd ansible-1.5.4
#python setup.py build
#python setup.py install
#mkdir /etc/ansible
#cp -r examples/* /etc/ansible |
£¨2£©YUM °²×°£¬ÒªÓÐepelÔ´
ansibleÃüÁî²ÎÊý
Óï·¨: ansible<host-pattern> [-f forks] [-m module_name] [-a args] ¡£¡£¡£
Ïêϸģʽ£¬Èç¹ûÃüÁîÖ´Ðгɹ¦£¬Êä³öÏêϸµÄ½á¹û (-vv ¨Cvvv -vvvv)
Ö¸¶¨ host ÎļþµÄ·¾¶£¬Ä¬ÈÏÊÇÔÚ /etc/ansible/hosts
NUM ÊÇÖ¸¶¨Ò»¸öÕûÊý£¬Ä¬ÈÏÊÇ 5 £¬Ö¸¶¨ fork ¿ªÆôͬ²½½ø³ÌµÄ¸öÊý¡£
- -m NAME,¨Cmodule-name=NAME
Ö¸¶¨Ê¹ÓÃµÄ module Ãû³Æ£¬Ä¬ÈÏÊÇ command
- -m DIRECTORY,¨Cmodule-path=DIRECTORY
Ö¸¶¨ module µÄĿ¼À´¼ÓÔØ module £¬Ä¬ÈÏÊÇ/usr/share/ansible,
Ö¸¶¨ module Ä£¿éµÄ²ÎÊý
ÌáʾÊäÈë ssh µÄÃÜÂ룬¶ø²»ÊÇʹÓûùÓÚ ssh µÄÃÜÔ¿ÈÏÖ¤
Ö¸¶¨Ê¹Óà sudo »ñµÃ root ȨÏÞ
ÌáʾÊäÈë sudo ÃÜÂ룬Óë ¨Csudo Ò»ÆðʹÓÃ
- -u USERNAME,¨Cuser=USERNAME
Ö¸¶¨Òƶ¯¶ËµÄÖ´ÐÐÓû§
²âÊÔ´ËÃüÁîÖ´Ðлá¸Ä±äʲôÄÚÈÝ£¬²»»áÕæÕýµÄÈ¥Ö´ÐÐ
YAML»ù±¾Óï·¨
YAMLµÄÓï·¨ºÍÆäËû¸ß½×ÓïÑÔÀàËÆ£¬²¢ÇÒ¿ÉÒÔ¼òµ¥±í´ïÇåµ¥¡¢É¢ÁÐ±í¡¢±êÁ¿µÈÊý¾Ý½á¹¹¡£Æä½á¹¹£¨Structure£©Í¨¹ý¿Õ¸ñÀ´Õ¹Ê¾£¬ÐòÁУ¨Sequence£©ÀïµÄÏîÓÃ"-"À´´ú±í£¬MapÀïµÄ¼üÖµ¶ÔÓÃ":"·Ö¸ô¡£ÏÂÃæÊÇÒ»¸öʾÀý¡£
name: John Smith
age: 41
gender: Male
spouse:
-name: Jane Smith
age:37
gender: Female
children:
-name: Jimmy Smith
age: 17
gender: Male
-name: Jenny Smith
age 13
gender: Female |
YAMLÎļþÀ©Õ¹Ãûͨ³£Îª.yaml£¬Èçexample.yaml¡£
×¢Ò⣬´úÂëµÄÅŰæÓÐÑϸñÒªÇó£¬Ëõ½øÎª2¸ö×Ö·û£¡ÐòÁÐÏîµÄ - ºó±ØÐë¸úÒ»¸ö¿Õ¸ñ£¡£ººóÒ²Òª¸úÒ»¸ö¿Õ¸ñ£¡
- listÁбíµÄËùÓÐÔªËØ¾ùʹÓá°-¡±´òÍ·£¬ÀýÈ磺
#A list of tasty fruits
-Apple
-Orange
-Strawberry
-Mango |
- dictionary×Öµäͨ¹ýkeyÓëvaluef½øÐбêʶ£¬ÀýÈ磺
---
#An employee record
name:Example Developer
job:Developer
skill:Elite
|
Ò²¿ÉÒÔ½«key:value·ÅÖÃÓÚ{}ÖнøÐбíʾ£¬ÀýÈ磺
---
#An employee record
{name:Example Developer, job: Developer, skill: Elite}
|
Ansible»ù´¡ÔªËØ
£¨1£©±äÁ¿
±äÁ¿ÃüÃû
±äÁ¿Ãû½öÄÜÓÉ×Öĸ¡¢Êý×ÖºÍÏ»®Ïß×é³É£¬ÇÒÖ»ÄÜÒÔ×Öĸ¿ªÍ·¡£
£¨2£©facts
factsÊÇÓÉÕýÔÚͨÐŵÄÔ¶³ÌÄ¿±êÖ÷»ú·¢»ØµÄÐÅÏ¢£¬ÕâЩÐÅÏ¢±»±£´æÔÚansible±äÁ¿ÖС£Òª»ñȡָ¶¨µÄÔ¶³ÌÖ÷»úËùÖ§³ÖµÄËùÓÐfacts£¬
¿ÉʹÓÃÈçÏÂÃüÁî½øÐУº
# ansible hostname -m setup |
»ò
ansible all -m setup ÏÔʾËùÓнڵãµÄÐÅÏ¢ |
£¨3£©register
°ÑÈÎÎñµÄÊä³ö¶¨ÒåΪ±äÁ¿£¬È»ºóÓÃÓÚÆäËûÈÎÎñ£¬Ê¾ÀýÈçÏÂ:
tasks:
- shell: /usr/bin/foo
register: foo_result
ignore_errors: True |
£¨4£©±äÁ¿´«µÝ
ÔÚÔËÐÐplaybookµÄʱºòÒ²¿ÉÒÔ´«µÝһЩ±äÁ¿¹©playbookʹÓã¬Ê¾ÀýÈçÏ£º
ansible-playbook test.yml --extra-vars "hosts=wwwuser=mageedu" |
µ±¸øÒ»¸öÖ÷»úÓ¦ÓýÇÉ«µÄʱºò¿ÉÒÔ´«µÝ±äÁ¿£¬È»ºóÔÚ½ÇÉ«ÄÚʹÓÃÕâЩ±äÁ¿£¬Ê¾ÀýÈçÏ£º
-hosts: webservers
roles:
- common
- { role: foo_app_instance, dir:'/web/htdocs/a.com', port: 8080 } |
£¨5£©Inventory
ansibleµÄÖ÷Òª¹¦ÓÃÔÚÓÚÅúÁ¿Ö÷»ú²Ù×÷£¬ÎªÁ˱ã½ÝµØÊ¹ÓÃÆäÖеIJ¿·ÖÖ÷»ú£¬¿ÉÒÔÔÚinventory fileÖн«Æä·Ö×éÃüÃû¡£Ä¬ÈϵÄ
inventoryfileΪ/etc/ansible/hosts£¬¿Éͨ¹ý/etc/ansible/ansible.cfg¶¨Òå¡£
inventory file¿ÉÒÔÓжà¸ö£¬ÇÒÒ²¿ÉÒÔͨ¹ýDynamic InventoryÀ´¶¯Ì¬Éú³É¡£
inventoryÎļþ¸ñʽ
inventoryÎļþ×ñÑINIÎļþ·ç¸ñ£¬ÖÐÀ¨ºÅÖеÄ×Ö·ûΪ×éÃû¡£¿ÉÒÔ½«Í¬Ò»¸öÖ÷»úͬʱ¹é²¢µ½¶à¸ö²»Í¬µÄ×éÖУ»´ËÍ⣬µ±ÈçÈôÄ¿±êÖ÷»úʹÓÃÁË·ÇĬÈϵÄSSH¶Ë¿Ú£¬»¹¿ÉÒÔÔÚÖ÷»úÃû³ÆÖ®ºóʹÓÃðºÅ¼Ó¶Ë¿ÚºÅÀ´±êÃ÷¡£
ntp.magedu.com
[webservers]
www1.magedu.com:2222
www2.magedu.com
[dbservers]
db1.magedu.com
db2.magedu.com
db3.magedu.com
|
Èç¹ûÖ÷»úÃû³Æ×ñÑÏàËÆµÄÃüÃûģʽ£¬»¹¿ÉÒÔʹÓÃÁбíµÄ·½Ê½±êʶ¸÷Ö÷»ú£¬ÀýÈ磺
[webservers]
www[01:50].example.com
[databases]
db-[a:f].example.com |
£¨6£©Ö÷»ú±äÁ¿
¿ÉÒÔÔÚinventoryÖж¨ÒåÖ÷»úʱΪÆäÌí¼ÓÖ÷»ú±äÁ¿ÒÔ±ãÓÚÔÚplaybookÖÐʹÓá£ÀýÈ磺
[webservers]
www1.magedu.com http_port=80maxRequestsPerChild=808
www2.magedu.com http_port=8080maxRequestsPerChild=909
|
£¨7£©×é±äÁ¿
×é±äÁ¿ÊÇÖ¸¸³Óè¸øÖ¸¶¨×éÄÚËùÓÐÖ÷»úÉϵÄÔÚplaybookÖпÉÓõıäÁ¿¡£ÀýÈ磺
[webservers]
www1.magedu.com
www2.magedu.com
[webservers:vars]
ntp_server=ntp.magedu.com
nfs_server=nfs.magedu.com
|
×¢Ò⣺ÉÏÃævarsΪ¹Ì¶¨µÄ¸ñʽ
£¨8£©×éǶÌ×
inventoryÖУ¬×黹¿ÉÒÔ°üº¬ÆäËüµÄ×飬²¢ÇÒÒ²¿ÉÒÔÏò×éÖеÄÖ÷»úÖ¸¶¨±äÁ¿¡£²»¹ý£¬ÕâЩ±äÁ¿Ö»ÄÜÔÚansible-playbookÖÐʹÓ㬶øansible²»Ö§³Ö¡£ÀýÈ磺
[apache]
httpd1.magedu.com
httpd2.magedu.com
[nginx]
ngx1.magedu.com
ngx2.magedu.com |
[webservers:children] childrenÊǹ̶¨¸ñʽ£¬±ØÐëҪдÉϵÄ
apache
nginx
[webservers:vars]
ntp_server=ntp.magedu.com
|
£¨9£© inventory ²ÎÊý
ansible»ùÓÚsshÁ¬½ÓinventoryÖÐÖ¸¶¨µÄÔ¶³ÌÖ÷»úʱ£¬»¹¿ÉÒÔͨ¹ý²ÎÊýÖ¸¶¨Æä½»»¥·½Ê½£»ÕâЩ²ÎÊýÈçÏÂËùʾ£º
£¨¿ÉÒÔʵÏÖÔÚinventoryÖÐÖ¸¶¨Õ˺ÅÃÜÂëÓÃÓÚssh Á¬½Ó£©
ansible_ssh_host
Thename of the host to connect to, if different from the alias you wish to give toit.
ansible_ssh_port
Thessh port number, if not 22
ansible_ssh_user
Thedefault ssh user name to use.
ansible_ssh_pass
Thessh password to use (this is insecure, we strongly recommend using --ask-passor SSH keys)
ansible_sudo_pass
Thesudo password to use (this is insecure, we strongly recommend using--ask-sudo-pass)
ansible_connection
Connection type of the host. Candidates are local, ssh or paramiko. The default is paramiko before Ansible
1.2,and 'smart' afterwards which detects whether usage of 'ssh' would be feasiblebased on whether ControlPersist is supported.
ansible_ssh_private_key_file
Private key file used by ssh.Useful if using multiple keys and you don't want to use SSH agent.
ansible_shell_type
Theshell type of the target system. By default commands are formatted using'sh'-style syntax by default. Setting this to 'csh' or 'fish' will causecommands executed on target systems to follow those shell's syntax instead.
ansible_python_interpreter
Thetarget host python path. This is useful for systems with morethan one Python or not located at
"/usr/bin/python" such as\*BSD, or where /usr/bin/pythonis not a 2.X series Python. We do not use the
"/usr/bin/env" mechanism as that requires the remote user'spath to be set right and also assumes the "python"
executableis named python, where the executable mightbe named something like "python26".
ansible\_\*\_interpreter
Works for anything such as ruby or perl and works just like ansible_python_interpreter.
This replaces shebang of modules which will run on that host.
|
£¨10£©Ìõ¼þ²âÊÔ
Èç¹ûÐèÒª¸ù¾Ý±äÁ¿¡¢facts»ò´ËǰÈÎÎñµÄÖ´Ðнá¹ûÀ´×öΪijtaskÖ´ÐÐÓë·ñµÄǰÌáʱҪÓõ½Ìõ¼þ²âÊÔ¡£
whenÓï¾ä
ÔÚtaskºóÌí¼Ówhen×Ӿ伴¿ÉʹÓÃÌõ¼þ²âÊÔ£»whenÓï¾äÖ§³ÖJinja2±í´ïʽÓï·¨¡£ÀýÈ磺
tasks:
-name: "shutdown Debian flavored systems"
command: /sbin/shutdown -h now
when: ansible_os_family == "Debian"
|
whenÓï¾äÖл¹¿ÉÒÔʹÓÃJinja2µÄ´ó¶à¡°filter¡±£¬ÀýÈçÒªºöÂÔ´ËǰijÓï¾äµÄ´íÎó²¢»ùÓÚÆä½á¹û£¨failed»òÕßsucess£©ÔËÐкóÃæÖ¸¶¨µÄÓï¾ä£¬¿ÉʹÓÃÀàËÆÈçÏÂÐÎʽ£º
tasks:
-command: /bin/false
register: result
ignore_errors: True
-command: /bin/something
when: result|failed
-command: /bin/something_else
when: result|success
-command: /bin/still/something_else
when: result|skipped
|
´ËÍ⣬whenÓï¾äÖл¹¿ÉÒÔʹÓÃfacts»òplaybookÖж¨ÒåµÄ±äÁ¿¡£
£¨11£©µü´ú
µ±ÓÐÐèÒªÖØ¸´ÐÔÖ´ÐеÄÈÎÎñʱ£¬¿ÉÒÔʹÓõü´ú»úÖÆ¡£ÆäʹÓøñʽΪ½«ÐèÒªµü´úµÄÄÚÈݶ¨ÒåΪitem±äÁ¿ÒýÓ㬲¢Í¨¹ýwith_itemsÓï¾äÀ´Ö¸Ã÷µü´úµÄÔªËØÁÐ±í¼´¿É¡£ÀýÈ磺
- name: add several users |
user: name={{ item }} state=present groups=wheel ÕâÐÐÖеÄitemÊǹ̶¨±äÁ¿Ãû£¬Ò»¶¨ÒªÕâÑùд£¬Ëü»áÑ»·Ê¹
ÓÃwith_items¶¨ÒåµÄÁбí
with_items:
- testuser1
- testuser2
|
ÉÏÃæÓï¾äµÄ¹¦ÄܵÈͬÓÚÏÂÃæµÄÓï¾ä£º
- name: add user testuser1
user: name=testuser1 state=present groups=wheel
- name: add user testuser2
user: name=testuser2 state=present groups=wheel
|
ÊÂʵÉÏ£¬with_itemsÖпÉÒÔʹÓÃÔªËØ»¹¿ÉΪhashes£¨£©£¬ÀýÈ磺
- name: add several users
user: name={{ item.name }} state=present groups={{ item.groups }}
with_items:
-{ name: 'testuser1', groups: 'wheel' }
-{ name: 'testuser2', groups: 'root' }
|
ansibleµÄÑ»·»úÖÆ»¹Óиü¶àµÄ¸ß¼¶¹¦ÄÜ£¬¾ßÌåÇë²Î¼û¹Ù·½Îĵµ£¨http://docs.ansible.com/playbooks_loops.html£©¡£
playbook µÄ×é³É½á¹¹
Inventory
Modules
AdHoc Commands
Playbooks
Tasks£ºÈÎÎñ£¬¼´µ÷ÓÃÄ£¿éÍê³ÉµÄij²Ù×÷
Variables£º±äÁ¿
Templates£ºÄ£°å
Handlers£º´¦ÀíÆ÷£¬ÓÉijʼþ´¥·¢Ö´ÐеIJÙ×÷
Roles£º½ÇÉ«
playbook »ù´¡×é¼þ¼ò½é
£¨1£©Hosts ºÍUsers
playbookÖеÄÿһ¸öplayµÄÄ¿µÄ¶¼ÊÇΪÁËÈÃij¸ö»òijЩÖ÷»úÒÔij¸öÖ¸¶¨µÄÓû§Éí·ÝÖ´ÐÐÈÎÎñ¡£hostsÓÃÓÚÖ¸¶¨ÒªÖ´ÐÐÖ¸¶¨ÈÎÎñµÄÖ÷»ú£¬Æä¿ÉÒÔÊÇÒ»¸ö»ò¶à¸öÓÉðºÅ·Ö¸ôÖ÷»ú×飻remote_userÔòÓÃÓÚÖ¸¶¨Ô¶³ÌÖ÷»úÉϵÄÖ´ÐÐÈÎÎñµÄÓû§¡£ÈçÉÏÃæÊ¾ÀýÖеÄ
-hosts:webnodes
remote_user: root
|
²»¹ý£¬remote_userÒ²¿ÉÓÃÓÚ¸÷taskÖС£Ò²¿ÉÒÔͨ¹ýÖ¸¶¨Æäͨ¹ýsudoµÄ·½Ê½ÔÚÔ¶³ÌÖ÷»úÉÏÖ´ÐÐÈÎÎñ£¬Æä¿ÉÓÃÓÚplayÈ«¾Ö»òijÈÎÎñ£»´ËÍ⣬ÉõÖÁ¿ÉÒÔÔÚsudoʱʹÓÃsudo_userÖ¸¶¨sudoʱÇл»µÄÓû§¡£
-hosts: webnodes
remote_user: mageedu
tasks:
- name: test connection
ping:
remote_user: mageedu
sudo: yes |
£¨2£©ÈÎÎñÁбíºÍaction
playµÄÖ÷Ì岿·ÖÊÇtask list¡£task listÖеĸ÷ÈÎÎñ°´´ÎÐòÖð¸öÔÚhostsÖÐÖ¸¶¨µÄËùÓÐÖ÷»úÉÏÖ´ÐУ¬¼´ÔÚËùÓÐÖ÷»úÉÏÍê³ÉµÚÒ»¸öÈÎÎñºóÔÙ¿ªÊ¼µÚ¶þ¸ö¡£ÔÚÔËÐÐ×ÔÉ϶øÏÂijplaybookʱ£¬Èç¹ûÖÐ;·¢Éú´íÎó£¬ËùÓÐÒÑÖ´ÐÐÈÎÎñ¶¼¿ÉÄܻعö£¬Òò´Ë£¬ÔÚ¸üÕýplaybookºóÖØÐÂÖ´ÐÐÒ»´Î¼´¿É¡£
taskµÄÄ¿µÄÊÇʹÓÃÖ¸¶¨µÄ²ÎÊýÖ´ÐÐÄ£¿é£¬¶øÔÚÄ£¿é²ÎÊýÖпÉÒÔʹÓñäÁ¿¡£Ä£¿éÖ´ÐÐÊÇÃݵȵģ¬ÕâÒâζ×Ŷà´ÎÖ´ÐÐÊǰ²È«µÄ£¬ÒòΪÆä½á¹û¾ùÒ»Ö¡£
ÿ¸ötask¶¼Ó¦¸ÃÓÐÆäname£¬ÓÃÓÚplaybookµÄÖ´Ðнá¹ûÊä³ö£¬½¨ÒéÆäÄÚÈݾ¡¿ÉÄÜÇåÎúµØÃèÊöÈÎÎñÖ´Ðв½Öè¡£Èç¹ûδÌṩname£¬ÔòactionµÄ½á¹û½«ÓÃÓÚÊä³ö¡£
¶¨ÒåtaskµÄ¿ÉÒÔʹÓá°action: moduleoptions¡±»ò¡°module: options¡±µÄ¸ñʽ£¬ÍƼöʹÓúóÕßÒÔʵÏÖÏòºó¼æÈÝ¡£Èç¹ûactionÒ»ÐеÄÄÚÈݹý¶à£¬Ò²ÖÐʹÓÃÔÚÐÐÊ×ʹÓü¸¸ö¿Õ°××Ö·û½øÐл»ÐС£
tasks:
- name: make sure apache is running
service: name=httpd state=running |
ÔÚÖÚ¶àÄ£¿éÖУ¬Ö»ÓÐcommandºÍshellÄ£¿é½öÐèÒª¸ø¶¨Ò»¸öÁÐ±í¶øÎÞÐèʹÓá°key=value¡±¸ñʽ£¬ÀýÈ磺
tasks:
- name: disable selinux
command: /sbin/setenforce 0 |
Èç¹ûÃüÁî»ò½Å±¾µÄÍ˳öÂ벻ΪÁ㣬¿ÉÒÔʹÓÃÈçÏ·½Ê½Ìæ´ú£º
tasks:
- name: run this command and ignore the result
shell: /usr/bin/somecommand || /bin/true |
»òÕßʹÓÃignore_errorsÀ´ºöÂÔ´íÎóÐÅÏ¢£º
tasks:
- name: run this command and ignore theresult
shell: /usr/bin/somecommand
ignore_errors: True |
£¨3£© handlers
ÓÃÓÚµ±¹Ø×¢µÄ×ÊÔ´·¢Éú±ä»¯Ê±²Éȡһ¶¨µÄ²Ù×÷¡£
¡°notify¡±Õâ¸öaction¿ÉÓÃÓÚÔÚÿ¸öplayµÄ×îºó±»´¥·¢£¬ÕâÑù¿ÉÒÔ±ÜÃâ¶à´ÎÓиı䷢Éúʱÿ´Î¶¼Ö´ÐÐÖ¸¶¨µÄ²Ù×÷£¬È¡¶ø´úÖ®£¬½öÔÚËùÓеı仯·¢ÉúÍê³ÉºóÒ»´ÎÐÔµØÖ´ÐÐÖ¸¶¨²Ù×÷¡£ÔÚnotifyÖÐÁгöµÄ²Ù×÷³ÆÎªhandler£¬Ò²¼´notifyÖе÷ÓÃhandlerÖж¨ÒåµÄ²Ù×÷¡£
-name: template configuration file
template: src=template.j2 dest=/etc/foo.conf
notify:
- restart memcached
- restart apache |
handlerÊÇtaskÁÐ±í£¬ÕâЩtaskÓëǰÊöµÄtask²¢Ã»Óб¾ÖÊÉϵIJ»Í¬¡£
handlers:
- name: restart memcached
service:name=memcached state=restarted
- name: restart apache
service: name=apache state=restarted |
Àý£º
heartbeat.yaml
-hosts: hbhosts
remote_user: root
tasks:
- name: ensure heartbeat latest version
yum: name=heartbeat state=present
- name: authkeys configure file
copy: src=/root/hb_conf/authkeysdest=/etc/ha.d/authkeys
- name: authkeys mode 600
file: path=/etc/ha.d/authkeys mode=600
notify:
- restart heartbeat
- name: ha.cf configure file
copy: src=/root/hb_conf/ha.cfdest=/etc/ha.d/ha.cf
notify:
-restart heartbeat
handlers:
- name:restart heartbeat
service: name=heartbeat state=restarted |
£¨4£©roles
ansilbe×Ô1.2°æ±¾ÒýÈëµÄÐÂÌØÐÔ£¬ÓÃÓÚ²ã´ÎÐÔ¡¢½á¹¹»¯µØ×éÖ¯playbook¡£rolesÄܹ»¸ù¾Ý²ã´ÎÐͽṹ×Ô¶¯×°ÔرäÁ¿Îļþ¡¢tasksÒÔ¼°
handlersµÈ¡£ÒªÊ¹ÓÃrolesÖ»ÐèÒªÔÚplaybookÖÐʹÓÃincludeÖ¸Áî¼´¿É¡£¼òµ¥À´½²£¬roles¾ÍÊÇͨ¹ý·Ö±ð½«±äÁ¿¡¢Îļþ¡¢ÈÎÎñ¡¢Ä£¿é
¼°´¦ÀíÆ÷·ÅÖÃÓÚµ¥¶ÀµÄĿ¼ÖУ¬²¢¿ÉÒÔ±ã½ÝµØincludeËüÃǵÄÒ»ÖÖ»úÖÆ¡£½Çɫһ°ãÓÃÓÚ»ùÓÚÖ÷»ú¹¹½¨·þÎñµÄ³¡¾°ÖУ¬µ«Ò²¿ÉÒÔÊÇÓÃÓÚ¹¹½¨ÊØ»¤½ø³ÌµÈ³¡¾°ÖС£
Ò»¸örolesµÄ°¸ÀýÈçÏÂËùʾ£º
site.yml
webservers.yml
fooservers.yml
roles/
common/
files/
templates/
tasks/
handlers/
vars/
meta/
webservers/
files/
templates/
tasks/
handlers/
vars/
meta/ |
¶øÔÚplaybookÖУ¬¿ÉÒÔÕâÑùʹÓÃroles£¨µ÷ÓÃcommonºÍwebservers½ÇÉ«ÁË£©£º
---
-hosts: webservers
roles:
- common
- webservers |
Ò²¿ÉÒÔÏòroles´«µÝ²ÎÊý£¬ÀýÈ磺
---
-hosts: webservers
roles:
- common
- { role: foo_app_instance, dir:'/opt/a', port: 5000 }
- { role: foo_app_instance, dir:'/opt/b', port: 5001 } |
ÉõÖÁÒ²¿ÉÒÔÌõ¼þʽµØÊ¹ÓÃroles£¬ÀýÈ磺
---
-hosts: webservers
roles:
- { role: some_role, when:"ansible_os_family == 'RedHat'" } |
a£©´´½¨roleµÄ²½Öè
(1)´´½¨ÒÔrolesÃüÃûµÄĿ¼£»
(2)ÔÚrolesĿ¼Öзֱ𴴽¨ÒÔ¸÷½ÇÉ«Ãû³ÆÃüÃûµÄĿ¼£¬ÈçwebserversµÈ£»
(3)ÔÚÿ¸ö½ÇÉ«ÃüÃûµÄĿ¼Öзֱ𴴽¨files¡¢handlers¡¢meta¡¢tasks¡¢templatesºÍvarsĿ¼£»Óò»µ½µÄĿ¼¿ÉÒÔ´´½¨Îª¿ÕĿ¼£¬Ò²¿ÉÒÔ²»´´½¨£»
(4)ÔÚplaybookÎļþÖУ¬µ÷Óø÷½ÇÉ«£»
b£© roleÄÚ¸÷Ŀ¼ÖпÉÓõÄÎļþ
- tasksĿ¼£ºÖÁÉÙÓ¦¸Ã°üº¬Ò»¸öÃûΪmain.ymlµÄÎļþ£¬Æä¶¨ÒåÁ˴˽ÇÉ«µÄÈÎÎñÁÐ±í£»´ËÎļþ¿ÉÒÔʹÓÃinclude°üº¬ÆäËüµÄλÓÚ´ËĿ¼ÖеÄtaskÎļþ£»
- filesĿ¼£º´æ·ÅÓÉcopy»òscriptµÈÄ£¿éµ÷ÓõÄÎļþ£»
- templatesĿ¼£ºtemplateÄ£¿é»á×Ô¶¯ÔÚ´ËĿ¼ÖÐѰÕÒJinja2Ä£°åÎļþ£»
- handlersĿ¼£º´ËĿ¼ÖÐÓ¦µ±°üº¬Ò»¸ömain.ymlÎļþ£¬ÓÃÓÚ¶¨Òå´Ë½ÇÉ«Óõ½µÄ¸÷handler£»ÔÚhandlerÖÐʹÓÃinclude°üº¬µÄÆäËüµÄhandlerÎļþÒ²Ó¦¸ÃλÓÚ´ËĿ¼ÖУ»
- varsĿ¼£ºÓ¦µ±°üº¬Ò»¸ömain.ymlÎļþ£¬ÓÃÓÚ¶¨Òå´Ë½ÇÉ«Óõ½µÄ±äÁ¿£»
- metaĿ¼£ºÓ¦µ±°üº¬Ò»¸ömain.ymlÎļþ£¬ÓÃÓÚ¶¨Òå´Ë½ÇÉ«µÄÌØÊâÉ趨¼°ÆäÒÀÀµ¹ØÏµ£»ansible 1.3¼°ÆäÒÔºóµÄ°æ±¾²ÅÖ§³Ö£»
- defaultĿ¼£ºÎªµ±Ç°½ÇÉ«É趨ĬÈϱäÁ¿Ê±Ê¹ÓôËĿ¼£»Ó¦µ±°üº¬Ò»¸ömain.ymlÎļþ£»
c£© rolesʹÓð¸Àý
1.½¨Á¢ÏàӦĿ¼
ansible_playbooks/roles/ {websrvs,dbsrvs}/ {tasks,files,templates,meta, handlers,vars}
2.½â¾öµÚÒ»¸ö½ÇÉ«websrvs
ÏȰÑÒªÓõ½µÄÅäÖÃÎļþ¿½¹ýÀ´£¨´ý»áÒª¸´ÖƸø¸÷¸ö·þÎñÆ÷ʹÓõģ©
cp/etc/httpd/conf/httpd.conf /ansible_playbooks/roles/websrvs/files
3.¶¨ÒåÈÎÎñtasks vim/ansible_playbooks /roles/websrvs/tasks/main.yml
ÄÚÈÝ£º
-name: install httpd package
yum: name=httpd
-name:install configuration file
copy: src=httpd.conf dest= /etc/httpd/conf/httpd.conf ×¢Òâ·¾¶£¬¶¼¿ÉÒÔʹÓÃÏà¶Ô·¾¶Ö±½Óµ÷ÓÃ
tags:
- conf
notify:
- restart httpd
-name: start httpd
service: name=httpd state=started |
4.ÓÉÓÚtasksÖÐʹÓÃÁËnotify,¼´ÐèÒªÁíÍⶨÒåhandler£¬ËùÒÔ±ØÐëÔÚ/ansible_playbooks /roles/websrvs/handlers±àд
Ìí¼Ómain.ymlÎļþ
vim/ansible_playbooks/roles/ websrvs/handlers/main.yml
ÄÚÈÝÈçÏ£º
-name: restart httpd
service: name=httpd state=restarted |
5.Èç¹ûûÓÐÆäËûÄÚÈÝÁ˾ͿÉÒÔÁË£¬Óеϰ¼ÌÐøÔÚÏàÓ¦µÄĿ¼Ï½¨Á¢main.yml¶¨Òå
¼ÙÈçÓÖʹÓÃÁ˱äÁ¿£¬¾ÍÒªÔÚvars϶¨ÒåÒ»¸ömain.ymlÖ¸¶¨±äÁ¿
- httpd_port: 80
- maxClients: 180 |
6.´´½¨/ansible_playbooks/site.yml Ö¸¶¨´´½¨Á˵ĽÇÉ«
- hosts: websrvs
remote_user: root
roles:
- websrvs |
ÖÁ´Ëroles´´½¨Íê³É£¬ÒªÏë°ÑÏàÓ¦µÄ½ÇÉ«ÓÃÔÚij¸öÖ÷»úÉϵϰ£¬Ö±½ÓÔÚsite.ymlÉÏ- hosts:websrvs Ö¸¶¨£¬rolesÏÂÉèÖÃ
¶ÔÓ¦½ÇÉ«¼´¿É¡£
ÕâÑù£º
-hosts: websrvs
remote_user: root
roles:
- websrvs
-hosts: websrvs2
remote_user: root
roles:
- websrvs2
- dbsrvs |
×îºóÖ´ÐÐansible-playbooks site.yml
×¢Ò⣺¸´ÖƵ½ÏàӦĿ¼µÄÎļþ£¬¶¼¿ÉÒÔÖ±½ÓдÎļþÃûµ÷ÓÃ
d£©Tags
tagsÓÃÓÚÈÃÓû§Ñ¡ÔñÔËÐлòÂÔ¹ýplaybookÖеIJ¿·Ö´úÂë¡£ansible¾ßÓÐÃݵÈÐÔ£¬Òò´Ë»á×Ô¶¯Ìø¹ýûÓб仯µÄ²¿·Ö£¬¼´±ãÈç´Ë£¬ÓÐЩ
´úÂëΪ²âÊÔÆäȷʵûÓз¢Éú±ä»¯µÄʱ¼äÒÀÈ»»á·Ç³£µØ³¤¡£´Ëʱ£¬Èç¹ûÈ·ÐÅÆäûÓб仯£¬¾Í¿ÉÒÔͨ¹ýtagsÌø¹ý´ËЩ´úÂëÆ¬¶Ï¡£
apache.ymlÄÚÈÝ£º
- hosts: websrvs
remote_user: root
vars:
-package: httpd
-service: httpd
tasks:
-name: install httpd package
yum: name={{ package }} state=latest
-name: install configuration file for httpd
template: src= /root/templates/httpd.conf.j2dest =/etc/httpd/conf/httpd.conf
tags:
-conf
notify:
-restart httpd
-name: start httpd service
service: enabled=true name={{ service }} state=started
handlers:
-name:restart httpd
service: name=httpd state=restarted |
µ÷Óãº
ansible-playbook apache.yml--tags="conf"£¬ |
ÕâÑùÖ»Ö´ÐÐÁË
-name: install configuration file for httpd
template: src= /root/templates/httpd.conf.j2dest =/etc/httpd/conf/httpd.conf
tags:
-conf |
e£©Jinja2Ïà¹Ø
1.1 ×ÖÃæÁ¿
±í´ïʽ×î¼òµ¥µÄÐÎʽ¾ÍÊÇ×ÖÃæÁ¿¡£×ÖÃæÁ¿±íʾÖîÈç×Ö·û´®ºÍÊýÖµµÄ Python ¶ÔÏó¡£ÏÂÃæ µÄ×ÖÃæÁ¿ÊÇ¿ÉÓõÄ:
¡°HelloWorld¡±:
Ë«ÒýºÅ»òµ¥ÒýºÅÖмäµÄÒ»Çж¼ÊÇ×Ö·û´®¡£ÎÞÂÛºÎʱÄãÐèÒªÔÚÄ£°åÖÐʹÓÃÒ»¸ö×Ö·û´®£¨±ÈÈ纯Êýµ÷ÓᢹýÂËÆ÷»òÖ»Êǰüº¬»ò¼Ì³ÐÒ»¸öÄ£°åµÄ²ÎÊý£©£¬ËüÃǶ¼ÊÇ ÓÐÓõġ£
42/ 42.23:
Ö±½ÓдÏÂÊýÖµ¾Í¿ÉÒÔ´´½¨ÕûÊýºÍ¸¡µãÊý¡£Èç¹ûÓÐСÊýµã£¬ÔòΪ¸¡µãÊý£¬·ñÔòΪÕûÊý¡£¼ÇסÔÚ Python À 42 ºÍ 42.0
ÊDz»Ò»ÑùµÄ¡£
[¡®list¡¯,¡®of¡¯, ¡®objects¡¯]: |
Ò»¶ÔÖÐÀ¨ºÅÀ¨ÆðÀ´µÄ¶«Î÷ÊÇÒ»¸öÁÐ±í¡£ÁбíÓÃÓÚ´æ´¢ºÍµü´úÐòÁл¯µÄÊý¾Ý¡£ÀýÈçÄã¿ÉÒÔÈÝÒ×µØÔÚ for Ñ»·ÖÐÓÃÁбíºÍÔª×é´´½¨Ò»¸öÁ´½ÓµÄÁбí:
<ul>
{%for href, caption in [('index.html', 'Index'), ('about.html', 'About'),
('downloads.html','Downloads')] %}
<li><a href="{{ href}}">{{ caption }}</a></li>
{%endfor %}
</ul>
(¡®tuple¡¯,¡®of¡¯, ¡®values¡¯): |
Ôª×éÓëÁбíÀàËÆ£¬Ö»ÊÇÄã²»ÄÜÐÞ¸ÄÔª×é¡£Èç¹ûÔª×éÖÐÖ»ÓÐÒ»¸öÏÄãÐèÒªÒÔ¶ººÅ½áβËü¡£Ôª×éͨ³£ÓÃÓÚ±íʾÁ½¸ö»ò¸ü¶àÔªËØµÄÏî¡£¸ü¶àϸ½Ú¼ûÉÏÃæµÄÀý×Ó¡£
{¡®dict¡¯:¡®of¡¯, ¡®key¡¯: ¡®and¡¯, ¡®value¡¯: ¡®pairs¡¯}: |
PythonÖеÄ×ÖµäÊÇÒ»ÖÖ¹ØÁª¼üºÍÖµµÄ½á¹¹¡£¼ü±ØÐëÊÇΨһµÄ£¬²¢ÇÒ¼ü±ØÐëÖ»ÓÐÒ»¸ö Öµ¡£×ÖµäÔÚÄ£°åÖкÜÉÙʹÓ㬺±ÓÃÓÚÖîÈç xmlattr() ¹ýÂËÆ÷Ö®Àà¡£
true/ false:
trueÓÀÔ¶ÊÇ true £¬¶ø false ʼÖÕÊÇ false ¡£
2.2 ËãÊõÔËËã
Jinja ÔÊÐíÄãÓüÆËãÖµ¡£ÕâÔÚÄ£°åÖкÜÉÙÓõ½£¬µ«ÊÇΪÁËÍêÕûÐÔÔÊÐíÆä´æÔÚ¡£Ö§³ÖÏÂÃæµÄÔËËã·û:
+ °ÑÁ½¸ö¶ÔÏó¼Óµ½Ò»Æð¡£Í¨³£¶ÔÏóÊÇËØÖÊ£¬µ«ÊÇÈç¹ûÁ½ÕßÊÇ×Ö·û´®»òÁÐ±í£¬Äã¿ÉÒÔÓÃÕâÖÖ·½Ê½À´ÏνÓËüÃÇ¡£ÎÞÂÛÈçºÎÕâ²»ÊÇÊ×Ñ¡µÄÁ¬½Ó×Ö·û´®µÄ·½Ê½£¡Á¬½Ó×Ö·û´®¼û ~ ÔËËã·û¡£ {{ 1 + 1 }} µÈ
ÓÚ 2 ¡£
- ÓõÚÒ»¸öÊý¼õÈ¥µÚ¶þ¸öÊý¡£ {{ 3 - 2 }} µÈÓÚ 1 ¡£
/ ¶ÔÁ½¸öÊý×ö³ý·¨¡£·µ»ØÖµ»áÊÇÒ»¸ö¸¡µãÊý¡£ {{ 1 / 2 }} µÈÓÚ {{ 0.5 }} ¡£
// ¶ÔÁ½¸öÊý×ö³ý·¨£¬·µ»ØÕûÊýÉÌ¡£ {{ 20 // 7 }} µÈÓÚ 2 ¡£
% ¼ÆËãÕûÊý³ý·¨µÄÓàÊý¡£ {{ 11 % 7 }} µÈÓÚ 4 ¡£
* ÓÃÓұߵÄÊý³Ë×ó±ßµÄ²Ù×÷Êý¡£ {{ 2 * 2 }} »á·µ»Ø 4 ¡£Ò²¿ÉÒÔÓÃÓÚÖØ¸´Ò»¸ö×Ö·û´®¶à´Î¡£ {{
¡®=¡¯ * 80 }} »á´òÓ¡ 80 ¸öµÈºÅµÄºáÌõ¡£
** È¡×ó²Ù×÷ÊýµÄÓÒ²Ù×÷Êý´ÎÃÝ¡£ {{ 2**3 }} »á·µ»Ø 8 ¡£
3.3 ±È½Ï²Ù×÷·û
== ±È½ÏÁ½¸ö¶ÔÏóÊÇ·ñÏàµÈ¡£
!= ±È½ÏÁ½¸ö¶ÔÏóÊÇ·ñ²»µÈ¡£
> Èç¹û×ó±ß´óÓÚÓұߣ¬·µ»Ø true ¡£
>= Èç¹û×ó±ß´óÓÚµÈÓÚÓұߣ¬·µ»Ø true ¡£
< Èç¹û×ó±ßСÓÚÓұߣ¬·µ»Ø true ¡£
<= Èç¹û×ó±ßСÓÚµÈÓÚÓұߣ¬·µ»Ø true ¡£
4.4 Âß¼ÔËËã·û
¶ÔÓÚ if Óï¾ä£¬ÔÚ for ¹ýÂË»ò if ±í´ïʽÖУ¬Ëü¿ÉÒÔÓÃÓÚÁªºÏ¶à¸ö±í´ïʽ:
and Èç¹û×ó²Ù×÷ÊýºÍÓÒ²Ù×÷ÊýÍ¬ÎªÕæ£¬·µ»Ø true ¡£
or Èç¹û×ó²Ù×÷ÊýºÍÓÒ²Ù×÷ÊýÓÐÒ»¸öÎªÕæ£¬·µ»Ø true ¡£
not ¶ÔÒ»¸ö±í´ïʽȡ·´£¨¼ûÏ£©¡£
(expr)
±í´ïʽ×é¡£
yaml ÎļþÖ´Ðз½·¨
ºÜ¼òµ¥£ºansible-play ÎļþÃû
ansible ³£ÓÃÄ£¿é¼°Ê¾Àý
Òª²é¿´ÏêϸÐÅÏ¢ ansible-doc -s Ä£¿éÃû³Æ
£¨1£©command: ÃüÁîÄ£¿é£¬Ä¬ÈÏÄ£¿é£¬ÓÃÓÚÔÚÔ¶³ÌÖ´ÐÐÃüÁ
Àý ansible all -a 'date' »ò ansible a2 -a 'date' ²é¿´a2Ö÷»úÉϵÄÈÕÆÚ
£¨2£©cron:¼Æ»®ÈÎÎñÄ£¿é
²ÎÊý
state:
present: °²×°
absent: ÒÆ³ý
Àý£º
ansible websrvs -m cron -a 'minute="*/10" job="/bin/echo hell" name="test cronjob"'
ansible a2 -m cron -a 'hour="*/10" job="/bin/echo 11" name="test"'
Ìí¼ÓÃ÷ΪtestµÄ¶¨Ê±ÈÎÎñ£¬Õâ¸önameÆäʵÊÇ×¢ÊÍ£¬¿´crontabÄÚÈݾÍÖªµÀ
ansible a2 -m corn -a 'state=absent name="test"'
ɾ³ýa2ÉÏÃûΪtestµÄ¶¨Ê±ÈÎÎñ
£¨3£©user£ºÓû§Ä£¿é
name=: Ö¸Ã÷´´½¨µÄÓû§µÄÃû×Ö£»
Àý£º
ansible websrvs -m user -a 'name=mysqluid=306 system=yes group=mysql'
ansible a2 -m user -a 'name=mytest password=123456 createhome=false shell=/bin/tcsh'
Ìí¼ÓÃÜÂëΪ123456µÄÓû§mytest£¬²»½¨¼ÒĿ¼£¬ÓÃtcsh shell
£¨4£©group: ×éÄ£¿é
Àý£º
ansible websrvs -m group -a 'name=mysql gid=306 system=yes'
£¨5£©copy£º¸´ÖÆÎļþ
src=:¶¨Òå±¾µØÔ´Îļþ·¾¶
dest=:¶¨ÒåÔ¶³ÌÄ¿±êÎļþ·¾¶
content=:È¡´úsrc=£¬±íʾֱ½ÓÓô˴¦Ö¸¶¨µÄÐÅÏ¢Éú³ÉΪĿ±êÎļþÄÚÈÝ£»
Àý£º
ansible all -m copy -a 'src=/etc/fstabdest= /tmp/fstab.ansbile owner=root mode=640'
ansible all -m copy -a 'content= "HelloAnsible\nHi MageEdu" dest=/tmp/test.ansible'
ansible a2 -m copy -a 'src=/root/a1-filedest =/root/file.ansible owner= mytest group=mytest mode=640'
£¨6£©file: É趨ÎļþÊôÐÔ
path=:Ö¸¶¨Îļþ·¾¶£¬¿ÉÒÔʹÓÃname»òdestÀ´Ìæ»»£»
´´½¨ÎļþµÄ·ûºÅÁ´½Ó£º
src=:Ö¸Ã÷Ô´Îļþ
path=:Ö¸Ã÷·ûºÅÁ´½ÓÎļþ·¾¶
Àý
ansible all -m file -a 'path =/tmp/fstab.link src =/tmp/fstab.ansbile state=link'
´´½¨·ûºÅÁ´½ÓÎļþfstab.link
£¨7£©ping£º²âÊÔÖ¸¶¨Ö÷»úÊÇ·ñÄÜÁ¬½Ó£»
Àý£º
ansible a2 -m ping
ansible all -m ping
£¨8£©service£ºÖ¸¶¨ÔËÐÐ״̬£»
enabled=:ÊÇ·ñ¿ª»ú×Ô¶¯Æô¶¯£¬È¡ÖµÎªtrue»òÕßfalse£»
name=:·þÎñÃû³Æ
state=:״̬£¬È¡ÖµÓÐstarted, stopped, restarted;
Àý£º
ansiblea2 -m service -a 'name=mysqld state=started'
ansiblea2 -m service -a 'name=mysqld enabled=true'
£¨9£©shell£ºÔÚÔ¶³ÌÖ÷»úÉÏÔËÐÐÃüÁî
ÓÈÆäÊÇÓõ½¹ÜµÀµÈ¹¦Äܵĸ´ÔÓÃüÁî¾ÍÒªÓÃshell¶ø²»ÄÜÓÃcommandÁË£»
Àý£º
ansibleall -m command -a 'echo 123456 | passwd --stin user1' ÕâÑùÖ´ÐÐÊÇʧ°ÜµÄ
ansibleall -m shell -a 'echo 123456 | passwd --stin user1'ÕâÑù²ÅÊÇÕýÈ·µÄ
£¨10£©script£º½«±¾µØ½Å±¾¸´ÖƵ½Ô¶³ÌÖ÷»ú²¢ÔËÐÐÖ®£»
×¢Ò⣺ҪʹÓÃÏà¶Ô·¾¶Ö¸¶¨½Å±¾
Àý£º
ansiblea2 -m script -a 'test.sh'
£¨11£©yum£º°²×°³ÌÐò°ü
name=:Ö¸Ã÷Òª°²×°µÄ³ÌÐò°ü£¬¿ÉÒÔ´øÉϰ汾ºÅ£»
state=:present£¨Ä¬ÈÏ£©, latest±íʾ°²×°£¬absent±íÊ¾Ð¶ÔØ£»
Àý£º
ansible a2 -m yum -a 'name=zsh'
£¨12£©setup: ÊÕ¼¯Ô¶³ÌÖ÷»úµÄfacts
ÿ¸ö±»¹ÜÀí½ÚµãÔÚ½ÓÊÕ²¢ÔËÐйÜÀíÃüÁî֮ǰ£¬»á½«×Ô¼ºÖ÷»úÏà¹ØÐÅÏ¢£¬Èç²Ù×÷ϵͳ°æ±¾¡¢IPµØÖ·µÈ±¨¸æ¸øÔ¶³ÌµÄansbile
Ö÷»ú£»
Àý£º
ansible all -m setup ÏÔʾËùÓнڵãµÄÐÅÏ¢ |