name: tom
age: 21
gender: male
spourse:
name: lily
gender: female
children:
- name: susan
age: 2
gender: feamle
- name: sunny
age: 10
gender: male
vim /root/first.yml
hosts: all
remote_user: root
vars: httpd_port=80
tasks:
hosts 定义单个主机或组,vars定义变量,remote_user定义执行命令的远程用户,tasks定义执行哪些命令,handlers定义调用哪些处理器
vars(变量):
变量命名: 字母数字下划线组成,只能以字母开头
变量种类:
facts(内置变量)
由远程主机发回的主机属性信息,这些信息被保存在ansible变量当中
例如:ansible 192.168.238.170 -m setup 来获取远程主机上的属性信息,这些属性信息保存在facts中
通过命令行传递
通过命令行传递:ansible-playbook test.yml --extra-vars “host=www user=tom“(如果剧本中已有此处定义的变量则会被覆盖)
通过roles传递
主机变量
在/etc/ansible/hosts中定义
[web1]
192.168.1.1 name=haha
组变量
[group_name:vars]
foo=bar
hosts :
/etc/abible/hosts 中指定的远程主机,并用指定的属性进行连接
ansible_ssh_port 连接远程主机使用的端口
ansible_ssh_user 连接远程主机使用的用户
ansible_ssh_pass 连接远程主机使用的密码
cat /etc/ansible/hosts
[web1]
web1.hostname ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass=123
web2.hostname
vim /root/second.yml
hosts: web1
remote_user: root
vars:
username: bob
password: 123
tasks:
在playbook中调用变量的方式为{{ variable }}
when语句用来条件测试
ansible_os_family 是facts中内置的属性信息 ansible_os_family的信息可以使用ansible all -m setup | grep ansible_os_family 查看
在task中调用内置的item变量;在某task后面使用with_items语句来定义元素列表
vim /root/third.yml
hosts: web1
remote_user: root
vars:
httpd_port=80
tasks:
handlers:
上面的意思是copy中复制过去的文件跟远程主机上的文件不同,就通过notify调用handlers,即重启httpd服务。
handler是重启服务是最通用的用法
vim /etc/ansible/hosts
[web1]
192.168.1.1 http_port=80
vim /root/httpd.conf
……
Listen {{ http_port }}
……
vim /root/fourth.yml
hosts: web1
remote_user: root
vars:
httpd_port=80
tasks:
handlers:
templates:用于生成文本文件(配置文件)
模板文件中可使用jinja2表达式,表达式要定义在{{ }},也可以简单地仅执行变量替换
roles:roles用于实现“代码复用”,roles以特定的层次型格式组织起来的playbook元素(variables, tasks, templates,handlers);可被playbook以role的名字直接进行调用
roles的文件结构:
mkdir /root/roles
cd /root/roles
mkdir -p web1/{files, templayes, tasks, handlers, vars, meta}
vim web1/vars/main.yml
user: tom
group: tom
http_port: 8080
vim web1/tasks/main.yml
这里的template指的是相对路径-->web1/templates
tags可以在运行时指定标签任务
vim web1/handlers/main.yml
handlers:
vim web1/templates/httpd.conf
……
Listen {{ http_port }}
……
运行
ansible-playbook web1.yml
指定运行任务:
ansible-playbook -t conf web1.yml
vim /etc/ansible/hosts
[mini]
129.139.153.78:16283
155.139.190.94:12573
shell > vim /etc/ansible/install_zabbix_agent.yml
tree /etc/ansible/roles/install_zabbix_agent/
├── files
│ └── zabbix-2.4.5.tar.gz
├── tasks
│ └── main.yml
├── templates
│ ├── zabbix_agentd
│ └── zabbix_agentd.conf
└── vars
└── main.yml
cat /etc/ansible/roles/install_zabbix_agent/tasks/main.yml
cat /etc/ansible/roles/install_zabbix_agent/vars/main.yml
zabbix_dir: /usr/local
zabbix_version: 2.4.5
zabbix_user: zabbix
zabbix_port: 10050
zabbix_server_ip: 131.142.101.120
cat /etc/ansible/roles/install_zabbix_agent/templates/zabbix_agentd
#!/bin/bash
. /etc/init.d/functions
# Zabbix-Directory
BASEDIR={{ zabbix\_dir }}/zabbix
# Binary File
BINARY\_NAME=zabbix\_agentd
# Full Binary File Call
FULLPATH=$BASEDIR/sbin/$BINARY\_NAME
# PID file
PIDFILE=/tmp/$BINARY\_NAME.pid
# Establish args
ERROR=0
STOPPING=0
#
if [ -f $PIDFILE ] && [ -s $PIDFILE ]
then
PID=`cat $PIDFILE`
if \[ "x$PID" != "x" \] && kill -0 $PID 2>/dev/null && \[ $BINARY\_NAME == \`ps -e | grep $PID | awk '{print $4}'\` \]
then
STATUS="$BINARY\_NAME (pid \`pidof $APP\`) running.."
RUNNING=1
else
rm -f $PIDFILE
STATUS="$BINARY\_NAME (pid file existed ($PID) and now removed) not running.."
RUNNING=0
fi
else
if [ `ps -e | grep $BINARY_NAME | head -1 | awk '{ print $1 }'` ]
then
STATUS="$BINARY_NAME (pid `pidof $APP`, but no pid file) running.."
else
STATUS="$BINARY_NAME (no pid file) not running"
fi
RUNNING=0
fi
start() {
if [ $RUNNING -eq 1 ]
then
echo "$0 $ARG: $BINARY_NAME (pid $PID) already running"
else
action $"Starting $BINARY_NAME: " $FULLPATH
touch /var/lock/subsys/$BINARY_NAME
fi
}
stop() {
echo -n $"Shutting down $BINARY_NAME: "
killproc $BINARY_NAME
RETVAL=$?
echo
[ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/$BINARY_NAME
RUNNING=0
}
case "$1" in
start)
start
;;
stop)
stop
;;
status)
status $BINARY_NAME
;;
restart)
stop
sleep 10
start
;;
help|*)
echo $"Usage: $0 {start|stop|status|restart|help}"
cat <<EOF
start - start $BINARY\_NAME
stop - stop $BINARY\_NAME
status - show current status of $BINARY\_NAME
restart - restart $BINARY\_NAME if running by sending a SIGHUP or start if not running
help - this screen
EOF
exit 1
;;
esac
exit 0
shell > cat /etc/ansible/roles/install_zabbix_agent/templates/zabbix_agentd.conf
############ GENERAL PARAMETERS #################
LogFile=/tmp/zabbix_agentd.log
Server={{ zabbix_server_ip }}
ListenPort={{ zabbix_port }}
#ServerActive=127.0.0.1:10051
Hostname={{ ansible_all_ipv4_addresses[1] }}
############ ADVANCED PARAMETERS #################
Timeout=20
####### USER-DEFINED MONITORED PARAMETERS #######
UnsafeUserParameters=1
####### LOADABLE MODULES #######
ansible-playbook /etc/ansible/install_zabbix_agent.yml
PLAY [mini] *******************************************************************
GATHERING FACTS ***************************************************************
ok: [129.139.153.78]
ok: [155.139.190.94]
TASK: [install_zabbix_agent | Install Software] *******************************
changed: [155.139.190.94] => (item=libcurl-devel)
changed: [129.139.153.78] => (item=libcurl-devel)
TASK: [install_zabbix_agent | Create Zabbix User] *****************************
changed: [129.139.153.78]
changed: [155.139.190.94]
TASK: [install_zabbix_agent | Copy Zabbix.tar.gz] *****************************
changed: [129.139.153.78]
changed: [155.139.190.94]
TASK: [install_zabbix_agent | Uncompression Zabbix.tar.gz] ********************
changed: [129.139.153.78]
changed: [155.139.190.94]
TASK: [install_zabbix_agent | Copy Zabbix Start Script] ***********************
changed: [155.139.190.94]
changed: [129.139.153.78]
TASK: [install_zabbix_agent | Copy Zabbix Config File] ************************
changed: [129.139.153.78]
changed: [155.139.190.94]
TASK: [install_zabbix_agent | Modify Zabbix Dir Permisson] ********************
changed: [155.139.190.94]
changed: [129.139.153.78]
TASK: [install_zabbix_agent | Start Zabbix Service] ***************************
changed: [129.139.153.78]
changed: [155.139.190.94]
TASK: [install_zabbix_agent | Add Boot Start Zabbix Service] ******************
changed: [129.139.153.78]
changed: [155.139.190.94]
PLAY RECAP ********************************************************************
155.139.190.94 : ok=10 changed=9 unreachable=0 failed=0
129.139.153.78 : ok=10 changed=9 unreachable=0 failed=0
手机扫一扫
移动阅读更方便
你可能感兴趣的文章