|
Ò»¡¢½éÉÜ£º
Ä£¿é»¯£¬µ÷ÓÃÌØ¶¨µÄÄ£¿éÀ´Íê³ÉÌØ¶¨ÈÎÎñ£»
»ùÓÚPythonÓïÑÔʵÏÖ£¬ÓÉParamiko, PyYAMLºÍJinja2Èý¸ö¹Ø¼üÄ£¿é>ʵÏÖ£»
Ö§³Ö×Ô¶¨ÒåÄ£¿é
Ö§³Öplaybook£º ¿ÉÒ԰Ѷà¸öÈÎÎñ±àÅźã¬Ò»´ÎÐÔµÄÖ´ÐÐÍê¡£
ÃݵÈÐÔ£º¶à´ÎÖ´ÐеĽá¹ûÊÇÒ»ÑùµÄ¡£
ansibleÃüÁîµÄʹÓ÷½Ê½»¹ÊǺܼòµ¥µÄ£º
| ansible
<host-pattern> [-f forks]
[-m module_name]
[-a args] |
host_pattern ÊÇÀ´Ö¸¶¨Ö÷»úµÄ£¬¿ÉÒÔÊǵ¥Ì¨Ö÷»ú£¬Ò²¿ÉÒÔÊÇÖ÷»ú×顣ǰÌáÊÇÒªÔÚansibleµÄhostsÅäÖÃÎļþÖÐÖ¸¶¨¡£
-f Ö¸¶¨Ò»´ÎÅúÁ¿¹ÜÀíµÄÖ÷»úÊýÁ¿¡£ ¿ÉÒÔ˵¾ÍÊDz¢·¢¹ÜÀíÊýÁ¿¡£ Óë×ܵÄÊýÁ¿Ã»ÓйØÏµ¡£
-m Ö¸¶¨Ä£¿é¡£
-a Ä£¿é²ÎÊý
ËüËùÓеĹÜÀí¹¦Äܶ¼ÊÇÓɸ÷¸öÄ£¿éËùÌṩ£¬²é¿´Ä£¿éʹÓ÷½·¨£º
| ansible-doc
[-M module_path] [-l] [-s] [module...] |
-M ²é¿´Ä£¿éµÄÏêϸÐÅÏ¢£¬ÒªÖ¸¶¨Ä£¿éµÄ·¾¶
-l ÁгöËùÓÐÄ£¿é¡£
-s ²é¿´Ä£¿éʹÓ÷½Ê½¡£
°²×°£º
ansibleÒÀÀµÓÚPython 2.6»ò¸ü¸ßµÄ°æ±¾¡¢paramiko¡¢PyYAML¼°Jinja2¡£
±àÒë°²×°
| #
yum -y install python-jinja2 PyYAML
python-paramiko
python-babel python-crypto
# python setup.py build
# python setup.py install
# mkdir /etc/ansible
# cp -r examples/* /etc/ansible |
×¢Ò⣺²»Í¬°æ±¾µÄansibleµÄ¹¦ÄܲîÒì¿ÉÄܽϴó¡£
ÎÒÕâÀï¾ÍÖ±½Óyum°²×°ÁË¡£
»·¾³£º
ϵͳ£º CentOS Linux release 7.1.1503 (Core)
Èí¼þ£º ansible-1.9.2-1.el7
¿´Ò»ÏÂËùÉú³ÉµÄÎļþ£º
| /etc/ansible
/etc/ansible/ansible.cfg #ansibleÖ÷ÅäÖÃÎļþ¡£
Ò»°ã²»ÓÃÐ޸ģ¬Èç¹ûÏë×Ô¶¨Òåһϣ¬Çë¿´ÉÏÃæµÄÍøÖ·¡£
/etc/ansible/hosts #Ö÷ÅäÖÃÎļþÖÐËùÖ¸¶¨µÄÖ÷»úÇåµ¥Îļþ
/etc/ansible/roles #ÓÃÀ´¶¨ÒårolesµÄĿ¼
/usr/bin/ansible
/usr/bin/ansible-doc
/usr/bin/ansible-galaxy
/usr/bin/ansible-playbook
..... |
Ê×ÏÈÎÒÃÇÐèÒªÔÚhostsÀïÃæ¶¨Òå¸÷±»¹ÜÖ÷»ú¡£Õâ¸öÎļþ±»³ÆÎªinventoryÎļþ¡£
| [root@localhost
~]# vim /etc/ansible/hosts
[wserver]
172.16.40.11
172.16.40.12
[dbserver]
172.16.40.20 |
Õâ¸öÎļþÀïÃæ¶¼ÊÇһЩ¶¨ÒåÖ÷»úµÄÀý×Ó£¬ÎÒÕâÀï°ÑËüÃÇ×¢ÊÍÁË£¬Ìí¼ÓÁËÉÏÃæ¼¸¸ö¡£
inventoryÎļþ×ñÑINIÎļþ·ç¸ñ,ÖÐÀ¨ºÅÖеÄÊÇ×éÃû£¬¿ÉÒÔÓø÷¸ö×éÃû±íʾ¶à¸öÖ÷»ú¡£ Ò²¿ÉÒÔÓÃallÀ´±íʾËùÓÐÖ÷»ú¡£
µ±È»Ò²¿ÉÒÔʹÓõ¥¸öÖ÷»ú¡£Í¬Ò»¸öÖ÷»ú¿ÉÒÔ³öÏÖÔÚ¶à¸ö×éÖС£
´ËÍ⣬µ±ÈçÈôÄ¿±êÖ÷»úʹÓÃÁË·ÇĬÈϵÄSSH¶Ë¿Ú£¬»¹¿ÉÒÔÔÚÖ÷»úÃû³ÆÖ®ºóʹÓÃðºÅ¼Ó¶Ë¿ÚºÅÀ´±êÃ÷¡£
È磺 172.16.40.11:22022
×黹¿ÉÒÔ°üº¬ÆäËüµÄ×飬×éǶÌס£
ÔÚÕâÀïÈç¹ûËù¹ÜÀíÖ÷»úµÄϵͳ°æ±¾²»Ò»ÑùҲûÎÊÌ⣬ÒòΪansible»á¼ì²âÖ÷»úµÄϵͳ²ÎÊý²¢×ö³ö²»Í¬µÄÉèÖᣵ«²¢²»ÊǾø¶Ô²»»áÓÐÎÊÌâ¡£
ÿ´ÎÖ´ÐвÙ×÷»á·¢ËÍpython½Å±¾µ½¿Í»§¶ËµÄ ¶ÔÓ¦Óû§¼ÒĿ¼ÏµÄ.ansible/tmpĿ¼ÏÂÃæ¡£
¾ßÌå×÷ÓÃÔÝʱ²»Çå³þ£¬¿ÉÄÜÊÇÓÃÀ´ÊÕ¼¯ÐÅÏ¢¡¢Ö´ÐÐÈÎÎñºÍµ÷Óñ¾µØµÄÃüÁîµÄ°É¡£
¶þ¡¢³£ÓÃÄ£¿é½éÉÜ£º
ÕâÀïÖ»Êdz£ÓõIJ¿·Ö£¬ÏêϸµÄ¿ÉÒÔÓÃansible-docÀ´²é¿´¡£Èç²é¿´Ò»ÏÂuserÄ£¿é¡£
| [root@localhost
~]# ansible-doc -s user |
´ø=ºÅµÄ±íʾ±ØÑ¡Ïî¡£
| http://docs.ansible.com/ansible/modules
_by_category.html |
user: Óû§¹ÜÀí
| state={present|absent}
#present±íʾ´´½¨£¬
absent±íʾɾ³ý¡£
force=yes #Ç¿ÖÆÉ¾³ýÓû§¡£ Ò»°ãÇé¿öÏÂÓû§
ÔÚÒѵǼ״̬ÏÂÊDz»ÄÜɾ³ýµÄ¡£Ï൱ÓÚuserdel
-f
remove=yes #ÔÚɾ³ýÓû§µÄʱºò£¬Í¬Ê±É¾³ý¼Ò
Ŀ¼Óëmail spool¡£Ï൱ÓÚuserdel
-r
system=yes #´´½¨µÄϵͳÓû§
uid #Ö¸¶¨uid
shell #Ö¸¶¨shell
password #ÓÃÀ´Ö¸¶¨ÃÜÂ룬ҪÓÃÒѼÓÃܵÄÃÜÂë¡£ |
ÉÏÃæµÄpasswordºóÃæµÄÃÜÂë¿ÉÒÔÓÃopenssl passwd À´Éú³É¡£µ«ÊǺÃÏñÖ»ÄÜÊÇmd5¼ÓÃܵġ£
| [root@localhost
~]# openssl passwd --help
Usage: passwd [options] [passwords]
where options are
-crypt standard Unix password algorithm
(default)
-1 MD5-based password algorithm
..... |
Àý£º
| root@localhost
~]# openssl passwd -1
Password:
Verifying - Password:
$1$.0isU960$NDoCtqtkDBa2q9TQJYQml1
[root@localhost ~]# ansible all -m user -a
'name=test1 password="$1$.0isU960$NDoCtqtkD
Ba2q9TQJYQml1"'
172.16.40.11 | success >> {
"changed": true,
"comment": "",
"createhome": true,
"group": 1007,
"home": "/home/test1",
"name": "test1",
"password": "NOT_LOGGING_PASSWORD",
"shell": "/bin/bash",
"state": "present",
"system": false,
"uid": 1007
}
..... |
ɾ³ý£º
| [root@localhost
~]# ansible all -m user -a
'name=test1 state=absent'
|
Óëuser²î²»¶à£¬¶øÇÒ²ÎÊýÒ²¾ÍÖ»ÓÐÕ⼸¸ö¡£
cron: ¹ÜÀícron¼Æ»®ÈÎÎñ
|
day # Day of the month the job should run
( 1-31, *, */2,
etc )hour # Hour when the
job should run
( 0-23, *, */2, etc )
job # The command to execute. Required
if state=present.minute
# Minute when the
job should run
( 0-59, *, */2, etc )
month # Month of the year the job should
run ( 1-12, *,
*/2, etc )name= # Description
of a crontab entry.state
# Whether to ensure
the job is present
or absent.user # The specific
user whose crontab
should be modified.weekday
# Day of the week
that the job should run
( 0-6 for Sunday-Saturday,
*, etc )
|
ֻҪʹÓùýcron£¬ÎÒÏëÒ²²»Óùý¶à½âÊͰɡ£stateÓëÉÏÃæµÄÄ£¿éÒ»¸öÒâ˼£¬Ê±¼ä²ÎÊý²»Ð´±íʾ*¡£
nameÓÃÀ´ÃèÊöÈÎÎñ£¬andibleÒ²ÓÃËüÀ´Ê¶±ð¸÷¸öÌí¼ÓµÄÈÎÎñ£¬²ÅÄÜÓÃÀ´É¾³ý²»Í¬µÄÈÎÎñ¡£
Èç¹ûÓÐnameÏàͬµÄÈÎÎñ£¬»á¸²¸Ç¡£
Àý£º
| [root@localhost
~]# ansible wserver -m cron -a
'name=sync_time
minute=*/5 job="/sbin/ntpdate
172.16.0.1 >
/dev/null;/sbin/hwclock -w"' |
Á¬µ½Ò»Ì¨Ö÷»ú¿´Ò»ÏÂcrontab¡£
| [root@localhost
~]# crontab -l
*/15 * * * * /sbin/ntpdate 172.16.0.1 >
/dev/null;/sbin/hwclock
> /dev/null #Õâ¸ö
ÊÇÔÀ´¾ÍÓеġ£
#Ansible: sync_time #Õâ¸ö¾ÍÊÇÎÒÃǸÕÌí¼ÓµÄ¡£
*/5 * * * * /sbin/ntpdate 172.16.0.1 >
/dev/null;/sbin/hwclock
-w |
ɾ³ý£º
| [root@localhost
~]# ansible wserver -m cron
-a 'name=sync_time
state=absent' |
²é¿´Ò»Ï£º
| #Ansible:
etc_tar
30 2 */2 * * /bin/tar -Jcf /var/backup/`/bin
/date +\%Y\%m\%d-\%H\%M`.tar.xz
/etc |
ping: ̽²âÖ÷»úÊÇ·ñÔÚÏß
| [root@localhost
~]# ansible all -m ping |
Õâ¸öÄ£¿éûÓвÎÊý£¬Ö»ÊÇÓÃÀ´Ì½²âÖ÷»úÊÇ·ñÔÚÏߵġ£
file: Îļþ¹ÜÀí
| path=
#±íʾÎļþ·¾¶£¬±ØÑ¡Ïî¡£
mode #±íʾÉèÖÃȨÏÞ
owner #ÊôÖ÷
group #Êô×é
state=directory #´´½¨Ä¿Â¼»òÐÞ¸ÄĿ¼ȨÏÞ¡£
state=touch #´´½¨Îļþ»òÐÞ¸ÄÎļþȨÏÞ¡£
state=file #ÐÞ¸ÄÎļþȨÏÞ¡£
state=link #´´½¨ÎļþµÄ·ûºÅÁ´½Ó¡£src=Ô´Îļþ path=Á´½ÓÎļþ
state=absent #ɾ³ýÎļþ»òĿ¼¡£ |
´´½¨Ä¿Â¼Êǵݹ鴴½¨µÄ£¬Ò²¾ÍÊÇ»á×Ô¶¯´´½¨ËùÐèµÄĿ¼¡£ ¶øÎļþ»òÁ´½ÓÎļþ¶¼²»ÐС£
Àý£º´´½¨Ä¿Â¼¡£
| [root@localhost
~]# ansible wserver -m file
-a 'path=/var/backup/
state=directory'
[root@localhost ~]# ansible wserver -m file
-a 'path=/tmp/6/7/8/9
state=directory' |
Àý£º´´½¨Á´½ÓÎļþ¡£°ÑetcĿ¼Á´½ÓÖÁ/tmp/etc¡£
| [root@localhost
~]# ansible wserver -m file
-a 'path=/tmp/etc
src=/etc state=link' |
copy: ¸´ÖÆÎļþ
| content
#´úÌæsrc£¬ÉèÖÃÎļþÖеÄÄÚÈÝΪָ¶¨µÄÄÚÈÝ¡£
Èç¹ûÄ¿±êÎļþ²»´æÔÚ£¬Ôò×Ô¶¯´´½¨Ëæ»úÃû³ÆÎļþ¡£
#Èç¹ûÔÀ´ÎļþÓÐÊý¾Ý£¬Ôò¸²¸Ç¡£ ÔÝʱ²»ÖªµÀÓÐʲôÓá£
src #Ô´Îļþ·¾¶¡£
owner #ÊôÖ÷¡£
group #Êô×é¡£
mode #ȨÏÞ¡£
dest= #Ä¿±ê·¾¶¡£
backup #¸²¸ÇÎļþ֮ǰ£¬Ïȱ¸·Ý¡£ yes/no
|
Àý£º °Ñ/etc/nginxĿ¼¸´ÖƵ½Ô¶³ÌÖ÷»úµÄ/etc/ÏÂÃæ¡£
| [root@localhost
~]# ansible wserver -m copy
-a 'src=/etc/nginx
dest=/etc/' |
Àý£º¸´ÖƱ¾µØµÄ/home/star/httpd.confÎļþµ½Ô¶³ÌÖ÷»úµÄ/e
| ansible
wserver -m copy -a 'src=/home/star/
httpd.conf owner=root
group=root mode=644
dest=/etc/httpd/conf/' |
tc/httpd/conf/Ŀ¼Ï£¬²¢ÐÞ¸ÄȨÏÞ¡£
Àý£º ÐÞ¸ÄÔ¶³ÌÖ÷»úµÄ/var/listenÎļþÄÚÈÝΪ, µÚÒ»ÐÐlisten=80 µÚ¶þÐÐlisten=8080
| [root@localhost
~]# ansible wserver -m copy -a 'content="listen=80\nlisten=8080\n"
dest=/var/listen' |
²é¿´Ò»ÏÂÔ¶³ÌÖ÷»úµÄÕâ¸öÎļþ£º
| [root@localhost
~]# ssh 172.16.40.11 'cat /var/listen'
listen=80
listen=8080 |
template£ºÄ£°å¸´ÖÆÎļþ
Ò²ÊÇÓÃÀ´¸´ÖÆÊý¾ÝµÄ£¬Ö»²»¹ýÎļþÖеÄÊý¾Ý¿ÉÒÔÓñäÁ¿Ìæ»»£¬Îª²»Í¬µÄÖ÷»ú¸½¼Ó²»Í¬µÄ±äÁ¿£¬»á°ÑÎļþÖж¨ÒåµÄ±äÁ¿ÔÚ·¢ËÍ֮ǰת»»Îª¸ø¶ÔÓ¦Ö÷»úËù¶¨ÒåµÄ±äÁ¿µÄÖµ£¬Ò²¾Í¿ÉÒÔʵÏÖ²»Í¬µÄÖ÷»úËù¸´ÖƵÄÎļþÖеÄÊý¾ÝÊDz»Í¬µÄ¡£
¶øÍ¬×éÖÐÖ÷»ú¶¨Ò岻ͬµÄ±äÁ¿¿ÉÒÔͨ¹ý¶¨ÒåÖ÷»ú±äÁ¿À´ÊµÏÖ
Ö÷»ú±äÁ¿£º¶¨ÒåÔÚinventoryÖеÄÖ÷»úÖ®ºóµÄ±äÁ¿
È磺
| [wserver]
172.16.40.11 port=8800
172.16.40.12 port=8888 |
Òª¸´ÖƵÄÔ´ÎļþÖÐÒýÓñäÁ¿¿ÉÒÔÕâÑù£º Listen {{ port }}
µ«ÎÒÕâÀïºÃÏñ˵µ±Ç°°æ±¾ÖÐtemplate²»Ö§³ÖÃüÁîÐÐʹÓÃ
| [root@localhost
~]# ansible wserver -m
template -a 'src=/home/star/http.conf
dest=/etc/httpd/conf'
172.16.40.11 | FAILED => in current versions
of ansible, templates
are only usable in
playbooks
172.16.40.12 | FAILED => in current versions
of ansible, templates
are only usable in playbooks |
Ò»»á¶ùÔÚplaybooksµÄʱºòÔÙÀ´ËµÃ÷templateÄ£¿é¡£ ÆäËü±äÁ¿Ò²ÔÚÄÇÀï˵Ã÷¡£
yum: yum°²×°Èí¼þ£¬Ò²ÓÐapt,zypper¡£
| conf_file
#É趨Զ³Ìyum°²×°Ê±ËùÒÀÀµµÄÅäÖÃÎļþ¡£
ÈçÅäÖÃÎļþûÓÐÔÚĬÈϵÄλÖá£
disable_gpg_check #ÊÇ·ñ½ûÖ¹GPG checking£¬
Ö»ÓÃÓÚ`present' or
`latest'¡£
disablerepo #ÁÙʱ½ûֹʹÓÃyum¿â¡£ Ö»ÓÃÓÚ°²×°»ò¸üÐÂʱ¡£
enablerepo #ÁÙʱʹÓõÄyum¿â¡£Ö»ÓÃÓÚ°²×°»ò¸üÐÂʱ¡£
name= #Ëù°²×°µÄ°üµÄÃû³Æ
state #present°²×°£¬ latest°²×°×îеÄ, absent Ð¶ÔØÈí¼þ¡£
update_cache #Ç¿ÖÆ¸üÐÂyumµÄ»º´æ¡£
|
Àý£º°²×°httpd¡£
ÕâÀïÖ»ÊÇ˵Ã÷Ò»ÏÂconf_fileµÄÓ÷¨£¬yumµÄ²Ö¿âÎļþûÓÐÔÚ/etc/yum.repos.d/Ŀ¼ÏµĻ°¡£
| [root@localhost
~]# ansible wserver -m yum
-a 'name=httpd state=present
conf_file="
/root/local.repo"'
|
Èç¹û¿â±¾À´ÊǽûֹʹÓõ쬾ÍÒªÓÃenablerepoÀ´ÁÙʱʹÓÃÕâ¸ö¿â¡£
ÕâÀïµÄyum¿âÎļþÒѾÔÚ/etc/yum.repos.d/Ŀ¼ÏÂÁË£¬²»ÐèÒªconf_fileÖ¸¶¨ÅäÖÃÎļþÁË¡£
| [root@localhost
html]# ansible wserver -m
yum -a 'name=httpd
state=present enablerepo=local' |
ÕâÀïµÄ¿âID ¾ÍÊÇlocal.
Ð¶ÔØ£º
|
[root@localhost html]# ansible wserver -m
yum -a 'name=httpd state=absent'
|
×¢Ò⣺·µ»ØµÄÊý¾ÝµÄ "changed": true,
°²×°°ü×飬ֻҪÔÚÃû³ÆÇ°Ãæ¼ÓÉÏ@¾Í¿ÉÒÔÁË¡£
È磺°²×°¿ª·¢¹¤¾ßµÄ°ü×飺
| [root@localhost
html]# ansible dbserver
-m yum -a 'name="@Development
Tools" state=present' |
service: ·þÎñ³ÌÐò¹ÜÀí
| arguments
#ÃüÁîÐÐÌṩ¶îÍâµÄ²ÎÊý
enabled #ÉèÖÿª»úÆô¶¯¡£
name= #·þÎñÃû³Æ
runlevel #¿ª»úÆô¶¯µÄ¼¶±ð£¬Ò»°ã²»ÓÃÖ¸¶¨¡£
sleep #ÔÚÖØÆô·þÎñµÄ¹ý³ÌÖУ¬ÊÇ·ñµÈ´ý¡£
ÈçÔÚ·þÎñ¹Ø±ÕÒÔºóµÈ´ý2ÃëÔÙÆô¶¯¡£
state #startedÆô¶¯·þÎñ£¬ stoppedÍ£Ö¹·þÎñ£¬
restartedÖØÆô·þÎñ£¬ reloadedÖØÔØÅäÖá£
|
Æô¶¯httpd·þÎñ£º
| [root@localhost
html]# ansible all -m service
-a 'name=httpd
state=started'
|
ÉèÖÿª»úÆô¶¯£º
| [root@localhost
~]# ansible all -m service
-a 'name=httpd
enabled=yes' |
ÖØÆô·þÎñ£º
| [root@localhost
~]# ansible all -m service
-a 'name=httpd
sleep=2 state=restarted' |
command: Ö±½ÓÖ´ÐÐÃüÁĬÈÏÄ£¿é£¬¿ÉÒÔ²»ÓÃÖ¸¶¨¡£
ÏÔʾËùÓÐÖ÷»úʱ¼ä£º
| [root@localhost
~]# ansible all -a 'date'
172.16.40.20 | success | rc=0 >>
Thu Feb 11 16:04:37 CST 2016
172.16.40.12 | success | rc=0 >>
Thu Feb 11 16:04:37 CST 2016
172.16.40.11 | success | rc=0 >>
Thu Feb 11 16:04:37 CST 2016 |
Õâ¸öÄ£¿éÓëshell²î²»¶à£¬µ«ÊDz»ÄÜÖ´ÐйܵÀÀàµÄ²Ù×÷£¬È磺
»¹Óе㲻ͬÊÇ£¬commandÊÇÔÚµ±Ç°shellËùÖ´ÐеÄÃüÁ¶øshellÊÇÔÚ×ÓshellÖÐÖ´ÐеÄÃüÁî¡£µ«ÊÇÔÚ±»¿Ø¶ËºÍ¹ÜÀí¶ËÓÃpstree²é¿´½ø³ÌµÄʱºò£¬È´Ò²Ã»·¢ÏÖ²»Ò»ÑùµÄ¡£Õâ¸ö˵·¨ÏÖÔÚÊÇÓе㲻Ã÷°×¡£
shell: Ö±½ÓÖ´ÐÐÃüÁ²ÎÊýÒ»°ãÒ²Óò»µ½¡£
Õâ¸ö¿ÉÒÔÖ´ÐйܵÀÀàµÄÃüÁÈ磺

script£º·¢Ëͽű¾µ½¸÷±»¹ÜÀí½Úµã£¬²¢Ö´ÐС£Í¬Ñù²»ÐèÒª²ÎÊý¡£
| [root@localhost
~]# ansible all -m script -a 'test.sh' |
Ö±½ÓÔÚ-a ºóÃæÖ¸¶¨½Å±¾¼´¿É¡£
selinux£º ¹ÜÀíselinux¡£
| conf
#Ö¸¶¨Ó¦ÓÃselinuxµÄÅäÖÃÎļþ¡£
state=enforcing|permissive|disabled
#¶ÔÓ¦ÓÚselinuxÅäÖÃÎļþµÄSELINUX¡£
policy=targeted|minimum|mls #¶ÔÓ¦ÓÚ
selinuxÅäÖÃÎļþµÄSELINUXTYPE |
¹Ø±Õselinux:
| [root@localhost
~]# ansible all -m
selinux -a 'state=disabled' |
ÔÚselinux´¦ÓÚenforceing״̬ϵÄʱºòºÃÏñÖ»ÄÜÓÃpermissive¡£
ÔÚstate·ÇdisabledµÄÇé¿öϱØÐëÒªÖ¸¶¨policy¡£
setup£º»ñȡָ¶¨Ö÷»úµÄfacts¡£
factsÊÇÓÉÕýÔÚͨÐŵÄÔ¶³ÌÄ¿±êÖ÷»ú·¢»ØµÄÐÅÏ¢£¬ÕâЩÐÅÏ¢±»±£´æÔÚansible±äÁ¿ÖС£
| [root@localhost
~]# ansible 172.16.40.11 -m setup |
·µ»ØºÜ¶à¶ÔÓ¦Ö÷»úµÄÐÅÏ¢£¬ÔÚºóÃæµÄ²Ù×÷ÖпÉÒÔ¸ù¾Ý²»Í¬µÄÐÅÏ¢À´×ö²»Í¬µÄ²Ù×÷¡£ÈçredhatϵÁÐÓÃyum°²×°£¬¶ødebianϵÁÐÓÃaptÀ´°²×°Èí¼þ¡£
Èý¡¢playbook¡£
playbook¾ÍÊÇÒ»¸öÓÃyamlÓï·¨°Ñ¶à¸öÄ£¿é¶ÑÆðÀ´µÄÒ»¸öÎļþ¶øÒÑ¡£
yaml£º http://www.yaml.org
3.1: ½á¹¹½éÉÜ
playbooksºËÐÄÔªËØ£º
Tasks ¶¨ÒåÈÎÎñ
Variables ¶¨Òå±äÁ¿
Templates ¶¨ÒåÄ£°å
Handlers Notify ´¦Àí
Roles
³ýÁ˺ËÐÄÔªËØÒÔÍ⻹ÓжîÍâµÄÔªËØ£¬¶øÃ¿¸öÔªËØÒ²°üº¬Á˶ÀÓеÄÔªËØ¡£
YAML²Î¿¼Á˶àÖÖÓïÑÔ£¬ÆäÖоÍÓÐpython¡£ËùÒÔÔÚдplaybookµÄʱºò£¬¶ÎÂäËõ½øºÜÖØÒª¡£
¿´Ò»ÏÂÏÂÃæÕâ¸öÀý×Ó£¬×îÍâΧ¾ÍÊÇÖ÷ÒªµÄÔªËØ£¬¶ø¸÷¸öÖ÷ÔªËØÀïÃæ»¹Óи÷¸ö×ÓÔªËØ¡£
ÿһ¸ö-¿ªÊ¼±íʾһ¸öÁбíµÄ¿ªÊ¼£¬µ½ÏÂÒ»¸ö-֮ǰ½áÊø£¬Ò²¿ÉÒÔ˵ÕâÖ®¼ä¾ÍÊÇÒ»¸öÏîÄ¿£¬Ò»³öÏ·¡£
¸÷¸öÁбíÖ®¼äÊÇûÓйØÏµµÄ£¬ÎÒÃÇÖ»ÒªÇø·Ö¿ªÒ²¾Í²»»ìÂÒÁË¡£tasksÀïÃæ¾ÍÊÇÄ£¿éµÄʹÓÃÁË£¬ËùÒÔÕûÌåÀ´Ëµ½á¹¹»¹ÊǺÜÖ±¹ÛµÄ¡£
| -
hosts: 172.16.100.68 #¶¨ÒåÖ÷»ú
vars: #¶¨Òå±äÁ¿
var1: value
var2: value
tasks: #¶¨ÒåÈÎÎñ
- name: #ÈÎÎñÃû³Æ¡£
#ÕâÀï¾Í¿ÉÒÔ¿ªÊ¼ÓÃÄ£¿éÀ´Ö´ÐоßÌåµÄÈÎÎñÁË¡£
- name:
- name:
handlers: #¶¨Òå´¥·¢Í¨ÖªËù×÷µÄ²Ù×÷¡£
ÀïÃæÒ²ÊǸútasksÒ»Ñù£¬ÓÃÄ£¿é¶¨ÒåÈÎÎñ¡£
- name:
remote_user: #Ô¶³ÌÖ÷»úÖ´ÐÐÈÎÎñʱµÄÓû§¡£
Ò»°ã¶¼ÊÇroot£¬Ò»°ãÒ²²»ÓÃÖ¸¶¨¡£
- hosts: 172.16.100.69
vars:
tasks:
handlers:
remote_user:
|
-±íʾһ¸öÁбíµÄ¿ªÊ¼£¬Ò»¸öÁбí±íʾһ¸ö¶ÀÁ¢µÄÕûÌå½á¹¹£¬¶øÁбíÀïÃæµÄÔªËØ(±íÏÊÇÓÉ×Öµä×é³ÉµÄ£¬×ÖµäÖд洢µÄ¾ÍÊǸ÷¸öÒª¶¨ÒåµÄ¼üÖµ¡£È磺tasksÊÇ×ÖµäµÄ¼ü£¬ÀïÃæµÄ¸÷²¿·ÖÊÇÖµ¡£Ö»²»¹ýÕⲿ·ÖͬʱÓÖÊÇÁÐ±í¡£
varsÊÇÓÃÀ´¶¨Òå±äÁ¿µÄ£¬ËùÒÔÀïÃæµÄ¸÷±äÁ¿¶¼ÊÇ×ֵ䶸²»ÊÇÁÐ±í¡£Ö»²»¹ývarsÊÇ×ÖµäµÄ¼ü£¬ÀïÃæµÄÁ½ÏîÊÇ×ÖµäµÄÖµ£¬¶øÕâ¸öֵͬÑùÒ²ÊÇ×ֵ䡣
ÍøÉÏÓеÄ˵ÿһ¸ö-±íʾһ¸ö±íÏî¡£²»¹ýÒâ˼²î²»¶à£¬Ö»²»¹ý×îÍâΧ¼ÓÁËÒ»¸öÁÐ±í¶øÒÑ¡£²»¹ýÕâÑùºÃÂÒ°¡¡£
ÕâÀï¸úʹÓÃûÓйØÏµ£¬Èç¹û¸Ð¾õ»ìÂҾͲ»ÓùÜÁË¡£Á˽âÒ»ÏÂpythonµÄ»°Ò²¾ÍÈÝÒ×Àí½âÁË¡£
½á¹¹²î²»¶àÒ²¾ÍÊÇÕâÑùÁË£¬À´²¹³äµã£º
¸÷×ÖµäÏîµÄ¼üðºÅÓëÖµÖ®¼äÒªÓпոñ¡£ È磺hosts: abc
×ÖµäÏîÒªÓë-Ö®¼äÓпոñ¡£±íʾÔڽṹÄÚ¡£²¢²»ÊÇ˵HostsÌØÊâÒªÔÚ-µÄºóÃæ¡£ ËüÒ²¿ÉÒÔÔÚÏÂÃæµÄÒ»ÐпªÊ¼¡£È磺
-±íʾÁбíµÄ¿ªÊ¼£¬ºóÃæµÄhosts¸úÏÂÃæµÄvarsÖ®ÀàµÄ¶¼ÊÇͬһ¼¶¡£²»¹ýҪעÒâÇ°Ãæ¶¼ÒªÓÐÁ½¸ö¿Õ¸ñµÄËõ½ø£¬±íʾÔڴ˽ṹÄÚ¡£¾ÍºÃÏñÊǵÚÒ»¼¶½á¹¹Îª-
£¬ ÿ¶þ¼¶½á¹¹ÓëµÚÒ»¼¶½á¹¹Ö®¼äÒªÓÿոñ¸ô¿ª¡£
3.2:±äÁ¿
±äÁ¿Ãû½öÄÜÓÉ×Öĸ¡¢Êý×ÖºÍÏ»®Ïß×é³É£¬ÇÒÖ»ÄÜÒÔ×Öĸ¿ªÍ·¡£
±äÁ¿ÖÖÀࣺ
1¡¢facts£ºÓÉÔ¶³ÌÖ÷»ú·¢»ØµÄÖ÷»úÊôÐÔÐÅÏ¢£¬ÕâЩÐÅÏ¢±»±£´æÔÚansible±äÁ¿ÖУ»ÎÞÐ붨Ò壬¿ÉÖ±½Óµ÷Óã»
2¡¢×Ô¶¨Òå±äÁ¿£º
2.1¡¢Í¨¹ýÃüÁîÐд«µÝ£º ansible-playbook Ö¸ÁîºóÃæÖ¸¶¨±äÁ¿£º--extra-vars
"var1= var2=" £¬¼òд -e ¡°vars="
2.2¡¢Í¨¹ýroles´«µÝ
2.3¡¢Ö÷»ú±äÁ¿£º¶¨ÒåÔÚinventoryÖеÄÖ÷»úÖ®ºóµÄ±äÁ¿
2.4¡¢×é±äÁ¿£º¶¨ÒåÔÚinventoryÖеÄ×éÉϵıäÁ¿¡£È磺
| [wserver]
172.16.40.11 port=8800
172.16.40.12 port=8888
[wserver:vars]
port=80
[dbserver]
172.16.40.20
[dbserver:vars]
port=3306 |
2.5¡¢ÔÚplaybookµÄvarsÔªËØÏÂÃæ¶¨Òå±äÁ¿.
3.3 ʹÓãº
ʵÏÖÄ¿±ê£º
1¡¢wserver×éÖ÷»ú°²×°httpd¡£
2¡¢¸´ÖƱ¾»úÒÑÅäÖúõÄhttpdÅäÖÃÎļþµ½¸÷Ö÷»ú¡£
3¡¢Æô¶¯httpd£¬²¢ÉèÖÿª»úÆô¶¯¡£
| [root@localhost
~]# vim httpd.yml
- hosts: wserver
remote_user: root
tasks:
- name: install httpd
yum: name=httpd state=present
- name: copy httpd configuration
copy: src=/root/httpd dest=/etc/
- name: start httpd
service: name=httpd state=started
- name: boot httpd start
service: name=httpd enabled=yes |

Ö´Ðйý³Ì¡£ÓÃansible-playbookÀ´Ö´ÐÐplaybookÎļþ¡£ÎļþÀ©Õ¹ÃûËæÒ⣬ÎÒÕâÀïϰ¹ßÓÃymlÁË¡£

***±íʾ·¢Éú±ä»¯£¬ÂÌÉ«±íʾδ±ä»¯£¬ºìÉ«±íʾ´íÎó¡£ ok=5 changed=4 ±íʾÍê³ÉÁË5¸ö£¬ÆäÖÐ4¸ö·¢Éú±ä»¯¡£
²é¿´httpdÊÇ·ñÆô¶¯£º
| [root@localhost
~]# ansible wserver -m shell
-a 'ss -tnlp' #Ö±½Ó²é¿´ÐÅÏ¢£¬µ«¶àÁËÒԺ󡣡£¡£
[root@localhost ~]# ansible wserver -m shell
-a 'ss -tnlp' |
grep httpd | wc -l #¿ÉÒÔÖ±½ÓÓÃ
wcÀ´¼ÆÊý¡£ |
ÊÇ·ñ¿ª»úÆô¶¯£º
| [root@localhost
~]# ansible wserver -m shell
-a 'systemctl status
httpd'
»òÕߣº
[root@localhost ~]# ansible wserver -m shell
-a 'systemctl status
httpd' | grep enabled | wc -l |
Ìõ¼þÅжϣº
Èç¹ûÒª¹ÜÀíÓÐÖ÷»úÖÐÓв»Í¬ÏµÁеÄϵͳ£¬ÕâÀïÖ»ÊÇ×ö¸ö±ÈÓ÷¡£Õý³£Çé¿öÏÂÓ¦¸ÃÁ¬ÏµÍ³°æ±¾¶¼ÊÇÏàͬµÄ¡£
±ÈÈçÓÐһ̨ubuntuµÄÖ÷»ú£¬ÒòΪËüµÄÈí¼þ¹ÜÀíÓõÄÊÇapt-get¡£ÔÚansibleÀïÃæÊÇÓÃaptÄ£¿éÀ´²Ù×÷µÄ¡£¶øÇÒÅäÖÃÎļþÒ²²»Ò»Ñù£¬Èí¼þµÄÃû³ÆÒ²²»Ò»Ñù£¬·þÎñ½Å±¾Ò²²»Ò»Ñù¡£¶î£¬¸´ÔÓÁ˺ÃÏñ¡£
Ö»ÒªÔÚÒ»¸öÈÎÎñµÄ×îºó¼ÓÉÏwhen¾Í¿ÉÒÔÁË£¬Òâ˼ÊÇ˵ֻÓе±ºóÃæµÄÌõ¼þÂú×ãµÄʱºò²ÅÖ´ÐдËÈÎÎñ¡£
Ìõ¼þ±äÁ¿¾ÍÊÇfactsÀàµÄ±äÁ¿¡£¿ÉÒÔÓÃansible Ö÷»ú -m setupÀ´²é¿´£¬ÉÏÃæÄ£¿é²¿·ÖҲ˵ÁË¡£¿ÉÒÔÓÃansible_os_familyÕâ¸ö±äÁ¿¡£

| -
hosts: wserver
remote_user: root
tasks:
- name: install httpd redhat
yum: name=httpd state=present
when: ansible_os_family == "RedHat"
- name: copy httpd configuration
copy: src=/root/httpd dest=/etc/
when: ansible_os_family == "RedHat"
- name: install apache2 debian
apt: name=apache2 state=present
when: ansible_os_family == "Debian"
- name: copy apache2 configuration
copy: src=/root/apache2 dest=/etc/
when: ansible_os_family == "Debian"
- name: start httpd
service: name=httpd state=started
when: ansible_os_family == "RedHat"
- name: boot httpd start
service: name=httpd enabled=yes
when: ansible_os_family == "RedHat"
- name: start apache2
service: name=apache2 state=started
when: ansible_os_family == "Debian"
- name: boot apache2 start
service: name=apache2 enabled=yes
when: ansible_os_family == "Debian" |
Ö´ÐÐЧ¹û£º

ÕâÀïÒòΪapache2µÄÅäÖÃÎļþûÓÐÐ޸ģ¬Óë°²×°Íê³ÉËùÉú³ÉµÄÅäÖÃһģһÑù£¬Í¨¹ý¼ìÑé·¢ÏÖÒ»Ñù¾Í²»»áÔÙ¸´ÖÆÁË¡£ËùÒÔÊÇÂÌÉ«µÄ×Ö¡£
ÓÐûÓз¢ÏÖÕâÑùÂé·³µÄ²»ÊÇÒ»Ðǰëµã°¡¡£
ÔÙÌùÒ»¸öɾ³ýÕâЩÈí¼þµÄ£º
| -
hosts: wserver
remote_user: root
tasks:
- name: stop httpd
service: name=httpd state=stopped
when: ansible_os_family == "RedHat"
- name: erase httpd
yum: name=httpd state=absent
when: ansible_os_family == "RedHat"
- name: erase /etc/httpd
file: path=/etc/httpd state=absent
when: ansible_os_family == "RedHat"
- name: stop apache2
service: name=apache2 state=stopped
when: ansible_os_family == "Debian"
- name: erase apache2
apt: name=apache2 state=absent purge=yes
when: ansible_os_family == "Debian"
- name: erase /etc/apache2
file: path=/etc/apache2 state=absent
when: ansible_os_family == "Debian" |
±êÇ©£º
ÓÐʱºòÖ»ÏëÓÃÕâ¸öÎļþÖеĸ´ÖÆÅäÖÃÎļþµÄ¹¦ÄÜ£¬¶ø²»ÏëÔÙÿһÏî¶¼¼ì²é£¬ËäȻҲûʲôÎÊÌâ¡£
| -
hosts: wserver
remote_user: root
tasks:
- name: install httpd redhat
yum: name=httpd state=present
- name: copy httpd configuration
copy: src=/root/httpd dest=/etc/
tags: config #¼ÓÁËÒ»¸ötags.
- name: start httpd
service: name=httpd state=started
- name: boot httpd start
service: name=httpd enabled=yes |

ÎÒÕâÀïµÄhttpd¸øÖØÐ°²×°ÁË£¬ËùÒÔÅäÖÃÎļþÊDz»Í¬µÄ£¬²Å»áÏÔʾchanged¡£²»È»»áÊÇÂÌÉ«µÄok¡£
ÏÖÔÚÖ»Ö´ÐÐÁËconfig±ê·ûËùÖ¸¶¨µÄÈÎÎñÁË¡£ ÎÒÕâÀïÍüÁ˰ÑhostsÎļþÖеÄ172.16.40.1È¥µôÁË¡£
ÄÇô¸´ÖÆÍêÅäÖÃÎļþÒÔºóÓ¦¸ÃÖØÔØÅäÖÃÎļþ²Å¶Ô¡£¿ÉÊǾÍËãÔÙÌí¼ÓÒ»¸öÈÎÎñ£¬ÒòΪÎÒÃÇÖ¸¶¨Á˱êǩҲ²»»áÖ´ÐС£ÄÇô¾Í¿ÉÒÔÓÃhandlersÀ²¡£
handlers£º
Ò²ÊÇtaskÈÎÎñ£¬µ«Ö»ÓÐÆä¹Ø×¢µÄÌõ¼þÂú×ãʱ£¬²Å»á±»´¥·¢Ö´ÐС£ÕâÀïµÄÌõ¼þÆäʵ¾ÍÊÇ·¢ÉúÐ޸ġ£
Èç¹ûÎÒÃǸ´ÖÆÅäÖÃÎļþºÍÔ¶³ÌÖ÷»úÉϵÄÒ»Ñù£¬ÄǾͲ»»á´¥·¢ÁË¡£
| -
hosts: wserver
remote_user: root
tasks:
- name: install httpd redhat
yum: name=httpd state=present
- name: copy httpd configuration
copy: src=/root/httpd dest=/etc/
notify: reload httpd #Ìí¼ÓÁËÒ»ÐÐÕâ¸ö¡£
ÓÃÒÔ´¥·¢Ãû³ÆÎªreload httpdµÄhandlers¡£
tags: config
- name: start httpd
service: name=httpd state=started
- name: boot httpd start
service: name=httpd enabled=yes
handlers:
- name: reload httpd
service: name=httpd state=reloaded
|
ÏÖÔÚÅäÖÃÎļþûÓÐÐÞ¸Ä֮ǰ£º

ÐÞ¸ÄÖ®ºó£º

templates£º
ÓÃÓÚÉú³ÉÎı¾Îļþ£¨ÅäÖÃÎļþ£©£»Ä£°åÎļþÖпÉʹÓÃjinja2±í´ïʽ£¬±í´ïʽҪ¶¨ÒåÔÚ{{ }}£¬Ò²¿ÉÒÔ¼òµ¥µØ½öÖ´ÐбäÁ¿Ìæ»»£»ÎÒÃÇÕâÀïÒ²Ö»À´ÑÝʾһϱäÁ¿Ìæ»»µÄ¡£
ÈçÎÒÏë¸ø²»Í¬µÄÖ÷»úµÄÅäÖÃÎļþËù¼àÌýµÄ¶Ë¿Ú²»Ò»Ñù¡£
¿ÉÒÔͨ¹ýÖ÷»ú±äÁ¿£¬¶¨Òå/etc/ansible/hostsÎļþ£º
| [wserver]
172.16.40.11 port=8800
172.16.40.12 port=8888 |
ÐÞ¸ÄÒª¸´ÖƹýÈ¥µÄÅäÖÃÎļþ£¬
| Listen
{{ port }} #httpdµÄÅäÖÃÎļþ£¬
listenÓÃÀ´¼àÌý¶Ë¿Ú¡£ÔÚ¸´ÖÆÖ®Ç°ansible»á°Ñ
{{ port }}Ìæ»»Îª¶ÔÓ¦Ö÷»úËùÉèÖõıäÁ¿Öµ¡£ |
ÏÖÔÚµÄplaybookÎļþ£ºÎªÁ˽Úʡƪ·ù£¬ÎÒÕâÀï°ÑÏÖÔÚÓò»µ½¶¼É¾ÁË¡£¶øÒòΪÊÇÐ޸Ķ˿ڣ¬ËùÒÔ°Ñreload¸Ä³ÉÁËrestart¡£
| -
hosts: wserver
remote_user: root
tasks:
- name: template httpd configuration
template: src=/root/httpd/conf/httpd.conf
dest=/etc/httpd/conf/
#srcºÃÏñ²»ÄÜÔÙָĿ¼ÁË¡£
notify: restart httpd
handlers:
- name: restart httpd
service: name=httpd state=restarted |

һ̨Ö÷»ú¼àÌýÔÚ8800£¬Ò»Ì¨Ö÷»ú¼àÌýÔÚ8888¡£
µü´ú£º
Èç¹ûÏëÒªÅúÁ¿´´½¨¶à¸öÓû§Ôõô°ì£¬µ±È»ÓÃscriptÄ£¿é×î¼òµ¥ÁË£¬²»¹ýÕâÀïÒ²Ö»ÊÇÀ´ËµÃ÷Ò»ÏÂÎÊÌâ¶øÒÑ£º
ÔÚtaskÖе÷ÓÃÄÚÖõÄitem±äÁ¿£»ÔÚij¸ötaskºóÃæÊ¹ÓÃwith_itemsÓï¾äÀ´¶¨ÒåÔªËØÁÐ±í£»
| -
hosts: wserver
remote_user: root
tasks:
- name: create test user
user: name={{ item }} state=present
with_items:
- test1
- test2
- test3
- test4 |

¶øÉÏÃæËùÖ¸¶¨item»¹¿ÉÒÔÓÐ×Ó¼¯£¬ ¿ÉÒÔÓÃ×ÖµäÀ´±íʾitemÖеĸ÷¸ö¼üÖµ£¬¶ø²»Ö»ÊÇÓñíʾµ¥¸öÖµ¡£
È磺
| -
hosts: wserver
remote_user: root
tasks:
- name: create test user
user: name={{ item.user }} group={{ item.group
}}
state=present
with_items:
- { user: "test10", group: "root"
}
- { user: "test11", group: "root"
}
- { user: "test12", group: "root"
} |

һֱûÓнéÉÜvars×Ô¶¨Òå±äÁ¿£¬ÕâÀïÎÒÃÇÀ´¿´Ò»Ï¡£

ÕâÑùÏë´´½¨Ê²Ã´Óû§£¬¾Í¿ÉÒÔÖ±½ÓÐÞ¸ÄvarsÀïÃæµÄ±äÁ¿¾Í¿ÉÒÔ¡£
ËÄ¡¢roles¡£
rolesÖ»ÊǰÑÈÎÎñ¸ø·ÖÀë³öÈ¥ÁË¡£Ö»ÒªÔÚplaybookÎļþÖе÷ÓôËrole¾Í¿ÉÖ´ÐÐÕâЩÈÎÎñ¡£
ÈçÎÒÃǶ¨ÒåÁËÒ»¸öºÜ¸´ÔÓµÄÈÎÎñ£¬µ«ÊÇÒªÓÃÔÚÁíÍâµÄÖ÷»ú×é»òÖ»ÏëÓÃÓÚµ¥Ì¨Ö÷»úµÄʱºò¾ÍÒªÐÞ¸ÄÕâ¸öÎļþ£¬×ÜÐÞ¸ÄÒ²²»Êǰ취¡£
¿ÉÒÔ¸´Öƶà·Ý£¬µ«ÓÐʱºòÒ²²»¹»Áé»î¡£
ËùÒԾͿÉÒÔÓÃrole°ÑÈÎÎñÖ÷Ìå·ÖÀë³öÀ´£¬Ö»ÔÚplaybookÖÐдһЩ¶îÍâµÄ¶«Î÷£¬Èç±äÁ¿£¬Ö÷»úµÈµÈ¡£
rolesÓÃÓÚʵÏÖ¡°´úÂ븴Óᱡ£
rolesÒÔÌØ¶¨µÄ²ã´ÎÐ͸ñʽ×éÖ¯ÆðÀ´playbookÖеĸ÷Ö÷ÔªËØ£¨vars, tasks, handlers£©¡£Ã¿Ò»¸öÖ÷ÔªËØ¶¼ÒÔÒ»¸öĿ¼À´±íʾ¡£
¸÷Ŀ¼ÈçÏ£º
files£º´Ë½ÇÉ«ÖÐÓõ½µÄËùÓÐÎļþ¾ù·ÅÖÃÓÚ´ËĿ¼ÖУ» ¶ÔÓ¦ÓÚcopyÄ£¿é¡£
templates£ºJinja2Ä£°åÎļþ´æ·ÅλÖÃ; ¶ÔÓ¦ÓÚtemplateÄ£¿é¡£
tasks£ºÈÎÎñÁбíÎļþ£»ÀïÃæ¿ÉÒÔÓжà¸öÎļþ£¬µ«ÖÁÉÙÓÐÒ»¸ö½Ð×ömainµÄÎļþ£»
handlers£º´¦ÀíÆ÷ÁбíÎļþ£»ÀïÃæ¿ÉÒÔÓжà¸öÎļþ£¬µ«ÖÁÉÙÓÐÒ»¸ö½Ð×ömainµÄÎļþ£»
vars£º±äÁ¿×ÖµäÎļþ£»ÀïÃæ¿ÉÒÔÓжà¸öÎļþ£¬µ«ÖÁÉÙÓÐÒ»¸ö½Ð×ömainµÄÎļþ£»
meta£º´Ë½ÇÉ«µÄÌØÊâÉ趨¼°ÒÀÀµ¹ØÏµ£»
ÔÚ/etc/ansible/roles/Ŀ¼ÏÂÃæµÄĿ¼¾ÍÊǸ÷¸öµ¥¶ÀµÄrule¡£µ÷ÓõÄʱºòÖ±½Óµ÷ÓÃĿ¼Ãû³Æ¡£
| [root@localhost
createweb]# pwd
/etc/ansible/roles/createweb
[root@localhost createweb]# ls
files handlers meta tasks templates vars
[root@localhost createweb]# tree -L 2
.
©À©¤©¤ files #´æ·ÅcopyÓõ½µÄÎļþ¡£
©¦ ©À©¤©¤ config
©¦ ©À©¤©¤ httpd
©¦ ©À©¤©¤ index.php
©¦ ©À©¤©¤ iptables.bak.conf
©¦ ©¸©¤©¤ rc.local
©À©¤©¤ handlers #¶¨Òåhandlers¡£
©¦ ©¸©¤©¤ main
©À©¤©¤ meta
©À©¤©¤ tasks #¶¨ÒåÈÎÎñ¡£
©¦ ©¸©¤©¤ main
©À©¤©¤ templates #´æ·ÅtemplateÄ£¿éÓõ½µÄÎļþ¡£
©¦ ©¸©¤©¤ httpd.conf
©¸©¤©¤ vars #¶¨Òå±äÁ¿¡£
©¸©¤©¤ main |
ÈçÎÒÕâÀïµÄtasks/mainÎļþ£º
Ч¹û¾ÍÊÇ£º°²×°httpd£¬´´½¨ËùÐèÒªµÄÍøÒ³Ä¿Â¼£¬´´½¨ÈÕ־Ŀ¼£¬¸´ÖÆËùÓÐÅäÖÃÎļþ£¬¸´ÖÆphp²âÊÔÒ³Ãæ¡£²¢Æô¶¯httpd¡£
| -
name: install httpd
yum: name=httpd state=present
- name: install php
yum: name=php state=present
- name: install mod_ssl
yum: name=mod_ssl state=present
#create http_page file
- name: create directory
file: state=directory path={{ http_page_path_www
}}
file: state=directory path={{ http_page_path_myadm
}}
#create log_file directory
- name: create log directory
file: state=directory path={{ http_log_path_www
}}
file: state=directory path={{ http_log_path_myadm
}}
- name: copy all web config
copy: src=httpd dest=/etc/
notify: restart httpd
- name: copy php_test file
copy: src=index.php dest=/web/vhosts/www/
copy: src=index.php dest=/web/vhosts/myadm/
- name: start httpd and enabled
service: name=httpd state=started enabled=yes
|
handlers/main
| -
name: restart httpd
service: name=httpd state=restarted |
vars/main
| http_port:
8000
http_log_path_www: /var/log/httpd/www
http_log_path_myadm: /var/log/httpd/myadm
http_page_path_www: /web/vhosts/www
http_page_path_myadm: /web/vhosts/myadm |
¶¨Òåplaybook:
| -
hosts: wserver
roles:
- createweb |
ÎÒÕâ¸öµÄÖ´Ðнá¹ûÔÚÔ¶³ÌÖ÷»úÉÏÓеãÎÊÌâ¡£²»¹ý´óÌåÉÏÒ²¾ÍÊÇÕâÖֽṹ£¬ÔÚplaybookµÄrolesÀïÃæ»¹¿ÉÒÔ¶¨ÒåºÜ²ÎÊý£¬ÕâÀï¾ÍÏȲ»½éÉÜÁË£¬ÒÔºóÓÐʱ¼äÔÙÀ´¸Ä¸Ä¡£
|