ansible all -m ping -k
#host_key_checking = False # 检查对应服务器的host_key,建议取消注释
反之则会要求:第一次必须用ssh连
ssh 172.20.0.1
#log_path = /var/log/ansible.log 建议启用
记录ansible的操作
不需要重启,立即生效,不是以服务方式运行的
ansible sdservs -u liu -k -m command -a 'ls /root' -b -K
sudo 以liu的身份去看root的家目录
ansible all -a 'removes=/etc/fs cat /etc/fstab' # 如果文件不存在,就不执行后面的
ansible all -a 'creates=/etc/fs cat /etc/fstab' # 如果文件不存在,就执行后面的
ansible all -a 'chdir=/boot ls' # 切换目录,执行ls命令
ansible 172.20.45.65 -a 'chdir=/data ./f1.sh' #通过它执行的脚本必须带#!/bin/bash机制
ansible all -a 'useradd test1' # 创建test1测试用户
ansible all -a 'getent passwd test1' # 查看用户是否创建成功
ansible all -m shell -a 'echo redhat|passwd --stdin test1' # 更改用户密码
ansible all -m copy -a 'src=/root/ansible/selinux dest=/etc/selinux/config backup=yes' # 复制文件到远程主机,如果文件存在,则覆盖且备份
ansible all -a 'cat /etc/sysconfig/selinux' # 查看远程主机的文件
ansible all -a 'getenforce' # 查看远程主机的selinux是否禁用
ansible all -m copy -a 'src=/etc/shadow dest=/data/ mode=000 owner=liu' # 复制文件到远程主机,并更改权限和所有者
ansible all -a 'ls -l /data/' # 在远程主机执行ls -l命令
ansible all -m copy -a 'content="hello\thanks\n" dest=/data/f2' # 在远程主机创建非空文件
ansible all -a 'cat /data/f2' # 查看在远程主机上创建的文件
ansible all -m shell -a 'tar Jcf log.tar.xz /var/log/*.log' # 远程主机文件打包压缩,这样就可以把多个文件拷贝到当前主机
ansible all -m fetch -a 'src=/root/log.tar.xz dest=/data/' # 拷贝远程主机的单个文件
tar tvf log.tar.xz # 预览打包文件
ansible all -m file -a 'name=/data/f3 state=touch' # 在远程主机创建文件
ansible all -m file -a 'name=/data/f3 state=absent' # 删除远程主机的文件
ansible all -m file -a 'name=/data/dir1 state=directory' # 在远程主机创建目录
ansible all -m file -a 'name=/data/dir1 state=absent' # 删除远程主机的目录
ansible all -m file -a 'src=/etc/fstab dest=/data/fstab.link state=link' # 在远程主机创建软连接
ansible all -m file -a 'dest=/data/fstab.link state=absent' # 删除远程主机的软连接
ansible all -m file -a 'dest=/data/ state=absent'
ansible all -m shell -a 'rm -f /data/*'
centos7主机名存放位置
cat /etc/hostname
cat /etc/hosts
centos6主机名存放位置
cat /etc/sysconfig/network
ansible 172.20.45.65 -m hostname -a 'name=nod1' # 更改主机名,立即生效,并同时保存
ansible all -m cron -a 'minute=* job="/usr/bin/wall FBI warning" name=warning' # 在远程主机创建计划任务
ansible all -m cron -a 'disabled=true job="/usr/bin/wall FBI warning" name=warning' # 在远程主机禁用计划任务
ansible all -m cron -a 'disabled=false job="/usr/bin/wall FBI warning" name=warning' # 在远程主机启用计划任务
ansible all -m cron -a 'disabled=yes job="/usr/bin/wall FBI warning" name=warning' # 在远程主机禁用计划任务
ansible all -m cron -a 'disabled=no job="/usr/bin/wall FBI warning" name=warning' # 在远程主机启用计划任务
ansible all -m cron -a 'job="/usr/bin/wall FBI warning" name=warning state=absent' # 彻底删除远程主机上的计划任务
ansible all -m yum -a 'name=httpd state=latest' # 安装httpd服务
ansible all -m yum -a 'name=vsftpd state=latest' # 安装vsftpd服务
ansible all -m yum -a 'list=installed' # 查看所有装好的包
ansible all -m yum -a 'name=vsftpd state=absent/removed' # 卸载远程主机上的安装包
ansible all -m shell -a 'rpm -q vsftpd' # 查看rpm包按是否安装
ansible all -m yum -a 'name=vsftpd,memcached,httpd' # 同时安装多个rpm包
ansible all -m yum -a 'name=vsftpd,memcached,httpd state=absent' # 同时卸载多个rpm包
ansible all -m copy -a 'src=/misc/cd/vsftpd-3.0.2-22.el7.x86_64.rpm dest=/data/' # 把单个安装包推送到远程主机
ansible all -m yum -a 'name=/data/vsftpd-3.0.2-22.el7.x86_64.rpm disable_gpg_check=yes' # 在远程主机上安装单个安装包,并且忽略key的检查
ansible all -m yum -a 'name=dstat update_cache=yes' # 在远程主机安装包,并且更新缓存 dstat 监控
ansible all -m service -a 'name=vsftpd state=started enabled=yes/true' # 在远程主机启用vsftpd服务,并设为开机自启
ansible all -m service -a 'name=vsftpd state=restarted' # 重启服务
ansible all -m service -a 'name=vsftpd state=stopped' # 停用服务
ansible all -m service -a 'name=vsftpd state=stopped enabled=no/false' # 开机不启动
ansible all -m user -a 'name=nginx shell=/sbin/nologin system=yes home=/var/nginx groups=root,bin uid=80 comment="nginx service"' # 在远程主机创建账号,并指定相应的属性
ansible all -a 'getent passwd nginx' # 查看创建的用户
ansible all -m user -a 'name=nginx state=absent remove=yes' # 删除远程主机上的用户账号,并删除相应的家目录以及相应的文件
ansible all -m group -a 'name=nginx system=yes gid=80' # 在远程主机上创建组,并指定相应的属性
ansible all -a 'getent group nginx' # 查看远程主机上创建的组
ansible all -m group -a 'name=nginx state=absent' # 删除远程主机上创建的账号
ansible-galaxy install geerlingguy.nginx
ansible-galaxy list geerlingguy.nginx # 查看安装的版本信息
连接 https://galaxy.ansible.com 下载相应的roles
列出所有已安装的galaxy ansible-galaxy list
安装galaxy ansible-galaxy install geerlingguy.redis
删除galaxy ansible-galaxy remove geerlingguy.redis
-----------------------------------------------------------
playbook:
cd /root/ansible
vim hello.yml
---
- hosts: webservs
remote_user: root
tasks:
- name: hello
command: hostname
ansible-playbook hello.yml
加密playbook
ansible-vault encrypt hello.yml
New Vault password:
Confirm New Vault password:
Encryption successful
cat hello.yml
$ANSIBLE_VAULT;1.1;AES256
35393465386162323131383635623862643064386565663263643435353933353038323231356437
3436326563336463663530313763633137323031373634300a633037363630646431396166313964
38366565636232313730623466653237383538316663653861346564346663363233326465303961
3966323330326439380a323962373635396364393935643962336434376533623830343661376264
62376464663232353233346237346335363836343132333135313639333834363965346166636533
32313565396266386637666630303933623061383139336362616134356262303864303931653936
39333832303364396536663666613766646330663836326561383161636130636130666631643664
31306239633161636263343731643062336262306631366438303335396662363364306531643764
35616337356531646437663261353834353762313932663962376266393461663165
ansible-vault view hello.yml # 查看加密的playbook
ansible-vault edit hello.yml # 编辑加密的playbook
ansible-vault rekey hello.yml # 更改playbook的加密口令
ansible-vault create new.yml # 创建新文
解密playbook
ansible-vault decrypt hello.yml
ansible-console # 交互式的工具
vim file.yml
---
-hosts: all
remote_user: root
tasks:
- name: create new file
file: name=/data/newfile state=touch
- name: create new user
user: name=test2 state=present system=yes shell=/sbin/nologin
- name: installl package
yum: name=httpd
- name: copy index.html
copy: src=/var/www/html/index.html dest=/var/www/html
- name: start service
service: name=httpd state=started enabled=yes
# 一个模块对应一个name,哪怕是相同的模块,name也得分开写
ansible-playbook -C file.yml # 检查一遍是否写错,干跑一次,不做任何操作
ansible all -m shell -a 'ss -tln|grep :80' # 查看httpd服务是否开启
curl 172.20.45.65 # 浏览器访问
如果命令或脚本的退出码不为零,可以使用如下方式替代
tasks:
- name: run this command and ignore the result
shell: /usr/bin/somecommand || /bin/true
或者使用ignore_errors来忽略错误信息: tasks:
- name: run this command and ignore the result
shell: /usr/bin/somecommand
ignore_errors: True
handlers和notify结合使用触发条件
Handlers
是task列表,这些task与前述的task并没有本质上的不同,用于当关注的资源发生变化时,才会采取一定的操作
Notify此action可用于在每个play的最后被触发,这样可避免多次有改变发生时每次都执行指定的操作,
仅在所有的变化发生完成后一次性地执行指定操作。在notify中列出的操作称为handler,也即notify中调用handler中定义的操作
vim httpd.yml
---
- hosts: all
remote_user: root
task:
- name: install httpd package
yum: name=httpd
tags: inshttpd # 添加标签
- name: copy conf file
copy: src=files/httpd.conf dest=/etc/httpd/conf/ backup=yes
notify: # 触发条件
- restart service
Check Nginx process
- name: start service
service: name=httpd state=started enabled=yes
tags: rshttpd # 添加标签
handlers: # 当发生变化时,执行的操作,比如配置文件修改了,重启服务生效
- name: restart service
service: name=httpd state=restarted
- name: Check Nginx process
shell: killall -0 > nginx.log # 探测以下此服务是否启动 $?
ansible-playbook httpd.yml
ansible-playbook -t rshttpd httpd.yml # tags标签的用途: 可以挑选指定的标签执行
ansible-playbook -t inshttpd,rshttpd httpd.yml # 执行两个标签
# 多个动作也可以共用一个标签
play-book中变量的使用
ansible all -m hostname -a 'name=host123'
172.20.45.65 | SUCCESS => {
"ansible_facts": {
"ansible_domain": "",
"ansible_fqdn": "host123",
"ansible_hostname": "host123",
"ansible_nodename": "host123"
},
"changed": true,
"name": "host123"
}
ansible all -m setup |less # 当前电脑的系统信息
ansible all -m setup -a 'filter=ansible_hostname' # 过滤
ansible all -m setup -a 'filter=ansible_all_ipv4_addresses' # 过滤
变量使用:pkname
vim app.yml
---
- hosts: all
remote_user: root
tasks:
- name: install packages
yum: name={{ pkname }}
- name: start service
service: name={{ pkname }} state=started enabled=yes
ansible-playbook -e 'pkname=vsftpd' app.yml
多个变量赋值:
vim app1.yml
---
- hosts: all
remote_user: root
tasks:
- name: install packages
yum: name={{ pkname1 }}
- name: install packages
yum: name={{ pkname2 }}
ansible-playbook -e 'pkname1=vsftpd pkname2=memcached' app.yml # 临时指定变量,装2个包
在playbook内部定义变量,vars:并且使用变量
vim app2.yml
---
- hosts: all
remote_user: root
vars: # 内部定义变量
- pkname1: httpd
pkname2: vsftpd
tasks:
- name: install packages
yum: name={{ pkname1 }}
- name: install packages
yum: name={{ pkname2 }}
在/etc/ansible/hosts中,针对主机进行变量定义
cat /etc/ansible/hosts
[webservs]
172.20.45.65 http_port=81
172.20.45.66 http_port=82
[webservs:vars] # 添加的通用变量
nodename=www
domainname=.magedu.com
[dbservs]
172.20.45.67
172.20.45.66
[appservs]
172.20.45.6[5:7]
-----------------------------------------------------------
设置不一样的主机名
vim hostname.yml
---
- hosts: webservs
remote_user: root
task:
- name: set hostname
hostname: name=www{{http_port}}.magedu.com
-----------------------------------------------------------
vim hostname1.yml
---
- hosts: webservs
remote_user: root
task:
- name: set hostname
hostname: name={{nodename}}{{http_port}}{{domainname}}
命令行的优先级,通通优先于配置文件
如果命令行里用-e定义了临时变量,那么优先于配置文件中定义的变量
普通变量的优先级,要高于公共(组)变量
Playbook中变量使用
变量名:仅能由字母、数字和下划线组成,且只能以字母开头
变量来源:
1、ansible setup facts 远程主机的所有变量都可直接调用
2、在/etc/ansible/hosts中定义
普通变量:主机组中主机单独定义,优先级高于公共变量
公共(组)变量:针对主机组中所有主机定义统一
3、通过命令行指定变量,优先级最高
ansible-playbook –e varname=value
4、在playbook中定义
vars: - var1: value1 - var2: value2 5 在role中定义
Playbook中变量使用
变量命名
变量名仅能由字母、数字和下划线组成,且只能以字母开头
变量定义: key=value
示例: http_port=80
变量调用方式:
通过{{ variable_name }} 调用变量,且变量名前后必须有空格,有时用 “{{ variable_name }}”才生效
ansible-playbook –e 选项指定
ansible-playbook test.yml -e "hosts=www user=mageedu"
#host_key_checking = False # 检查对应服务器的host_key,建议取消注释
反之则会要求:第一次必须用ssh连
ssh 172.20.0.1
#log_path = /var/log/ansible.log 建议启用
记录ansible的操作
不需要重启,立即生效,不是以服务方式运行的
ansible sdservs -u liu -k -m command -a 'ls /root' -b -K
sudo 以liu的身份去看root的家目录
ansible all -a 'removes=/etc/fs cat /etc/fstab' # 如果文件不存在,就不执行后面的
ansible all -a 'creates=/etc/fs cat /etc/fstab' # 如果文件不存在,就执行后面的
ansible all -a 'chdir=/boot ls' # 切换目录,执行ls命令
ansible 172.20.45.65 -a 'chdir=/data ./f1.sh' #通过它执行的脚本必须带#!/bin/bash机制
ansible all -a 'useradd test1' # 创建test1测试用户
ansible all -a 'getent passwd test1' # 查看用户是否创建成功
ansible all -m shell -a 'echo redhat|passwd --stdin test1' # 更改用户密码
ansible all -m copy -a 'src=/root/ansible/selinux dest=/etc/selinux/config backup=yes' # 复制文件到远程主机,如果文件存在,则覆盖且备份
ansible all -a 'cat /etc/sysconfig/selinux' # 查看远程主机的文件
ansible all -a 'getenforce' # 查看远程主机的selinux是否禁用
ansible all -m copy -a 'src=/etc/shadow dest=/data/ mode=000 owner=liu' # 复制文件到远程主机,并更改权限和所有者
ansible all -a 'ls -l /data/' # 在远程主机执行ls -l命令
ansible all -m copy -a 'content="hello\thanks\n" dest=/data/f2' # 在远程主机创建非空文件
ansible all -a 'cat /data/f2' # 查看在远程主机上创建的文件
ansible all -m shell -a 'tar Jcf log.tar.xz /var/log/*.log' # 远程主机文件打包压缩,这样就可以把多个文件拷贝到当前主机
ansible all -m fetch -a 'src=/root/log.tar.xz dest=/data/' # 拷贝远程主机的单个文件
tar tvf log.tar.xz # 预览打包文件
ansible all -m file -a 'name=/data/f3 state=touch' # 在远程主机创建文件
ansible all -m file -a 'name=/data/f3 state=absent' # 删除远程主机的文件
ansible all -m file -a 'name=/data/dir1 state=directory' # 在远程主机创建目录
ansible all -m file -a 'name=/data/dir1 state=absent' # 删除远程主机的目录
ansible all -m file -a 'src=/etc/fstab dest=/data/fstab.link state=link' # 在远程主机创建软连接
ansible all -m file -a 'dest=/data/fstab.link state=absent' # 删除远程主机的软连接
ansible all -m file -a 'dest=/data/ state=absent'
ansible all -m shell -a 'rm -f /data/*'
centos7主机名存放位置
cat /etc/hostname
cat /etc/hosts
centos6主机名存放位置
cat /etc/sysconfig/network
ansible 172.20.45.65 -m hostname -a 'name=nod1' # 更改主机名,立即生效,并同时保存
ansible all -m cron -a 'minute=* job="/usr/bin/wall FBI warning" name=warning' # 在远程主机创建计划任务
ansible all -m cron -a 'disabled=true job="/usr/bin/wall FBI warning" name=warning' # 在远程主机禁用计划任务
ansible all -m cron -a 'disabled=false job="/usr/bin/wall FBI warning" name=warning' # 在远程主机启用计划任务
ansible all -m cron -a 'disabled=yes job="/usr/bin/wall FBI warning" name=warning' # 在远程主机禁用计划任务
ansible all -m cron -a 'disabled=no job="/usr/bin/wall FBI warning" name=warning' # 在远程主机启用计划任务
ansible all -m cron -a 'job="/usr/bin/wall FBI warning" name=warning state=absent' # 彻底删除远程主机上的计划任务
ansible all -m yum -a 'name=httpd state=latest' # 安装httpd服务
ansible all -m yum -a 'name=vsftpd state=latest' # 安装vsftpd服务
ansible all -m yum -a 'list=installed' # 查看所有装好的包
ansible all -m yum -a 'name=vsftpd state=absent/removed' # 卸载远程主机上的安装包
ansible all -m shell -a 'rpm -q vsftpd' # 查看rpm包按是否安装
ansible all -m yum -a 'name=vsftpd,memcached,httpd' # 同时安装多个rpm包
ansible all -m yum -a 'name=vsftpd,memcached,httpd state=absent' # 同时卸载多个rpm包
ansible all -m copy -a 'src=/misc/cd/vsftpd-3.0.2-22.el7.x86_64.rpm dest=/data/' # 把单个安装包推送到远程主机
ansible all -m yum -a 'name=/data/vsftpd-3.0.2-22.el7.x86_64.rpm disable_gpg_check=yes' # 在远程主机上安装单个安装包,并且忽略key的检查
ansible all -m yum -a 'name=dstat update_cache=yes' # 在远程主机安装包,并且更新缓存 dstat 监控
ansible all -m service -a 'name=vsftpd state=started enabled=yes/true' # 在远程主机启用vsftpd服务,并设为开机自启
ansible all -m service -a 'name=vsftpd state=restarted' # 重启服务
ansible all -m service -a 'name=vsftpd state=stopped' # 停用服务
ansible all -m service -a 'name=vsftpd state=stopped enabled=no/false' # 开机不启动
ansible all -m user -a 'name=nginx shell=/sbin/nologin system=yes home=/var/nginx groups=root,bin uid=80 comment="nginx service"' # 在远程主机创建账号,并指定相应的属性
ansible all -a 'getent passwd nginx' # 查看创建的用户
ansible all -m user -a 'name=nginx state=absent remove=yes' # 删除远程主机上的用户账号,并删除相应的家目录以及相应的文件
ansible all -m group -a 'name=nginx system=yes gid=80' # 在远程主机上创建组,并指定相应的属性
ansible all -a 'getent group nginx' # 查看远程主机上创建的组
ansible all -m group -a 'name=nginx state=absent' # 删除远程主机上创建的账号
ansible-galaxy install geerlingguy.nginx
ansible-galaxy list geerlingguy.nginx # 查看安装的版本信息
连接 https://galaxy.ansible.com 下载相应的roles
列出所有已安装的galaxy ansible-galaxy list
安装galaxy ansible-galaxy install geerlingguy.redis
删除galaxy ansible-galaxy remove geerlingguy.redis
-----------------------------------------------------------
playbook:
cd /root/ansible
vim hello.yml
---
- hosts: webservs
remote_user: root
tasks:
- name: hello
command: hostname
ansible-playbook hello.yml
加密playbook
ansible-vault encrypt hello.yml
New Vault password:
Confirm New Vault password:
Encryption successful
cat hello.yml
$ANSIBLE_VAULT;1.1;AES256
35393465386162323131383635623862643064386565663263643435353933353038323231356437
3436326563336463663530313763633137323031373634300a633037363630646431396166313964
38366565636232313730623466653237383538316663653861346564346663363233326465303961
3966323330326439380a323962373635396364393935643962336434376533623830343661376264
62376464663232353233346237346335363836343132333135313639333834363965346166636533
32313565396266386637666630303933623061383139336362616134356262303864303931653936
39333832303364396536663666613766646330663836326561383161636130636130666631643664
31306239633161636263343731643062336262306631366438303335396662363364306531643764
35616337356531646437663261353834353762313932663962376266393461663165
ansible-vault view hello.yml # 查看加密的playbook
ansible-vault edit hello.yml # 编辑加密的playbook
ansible-vault rekey hello.yml # 更改playbook的加密口令
ansible-vault create new.yml # 创建新文
解密playbook
ansible-vault decrypt hello.yml
ansible-console # 交互式的工具
vim file.yml
---
-hosts: all
remote_user: root
tasks:
- name: create new file
file: name=/data/newfile state=touch
- name: create new user
user: name=test2 state=present system=yes shell=/sbin/nologin
- name: installl package
yum: name=httpd
- name: copy index.html
copy: src=/var/www/html/index.html dest=/var/www/html
- name: start service
service: name=httpd state=started enabled=yes
# 一个模块对应一个name,哪怕是相同的模块,name也得分开写
ansible-playbook -C file.yml # 检查一遍是否写错,干跑一次,不做任何操作
ansible all -m shell -a 'ss -tln|grep :80' # 查看httpd服务是否开启
curl 172.20.45.65 # 浏览器访问
如果命令或脚本的退出码不为零,可以使用如下方式替代
tasks:
- name: run this command and ignore the result
shell: /usr/bin/somecommand || /bin/true
或者使用ignore_errors来忽略错误信息: tasks:
- name: run this command and ignore the result
shell: /usr/bin/somecommand
ignore_errors: True
handlers和notify结合使用触发条件
Handlers
是task列表,这些task与前述的task并没有本质上的不同,用于当关注的资源发生变化时,才会采取一定的操作
Notify此action可用于在每个play的最后被触发,这样可避免多次有改变发生时每次都执行指定的操作,
仅在所有的变化发生完成后一次性地执行指定操作。在notify中列出的操作称为handler,也即notify中调用handler中定义的操作
vim httpd.yml
---
- hosts: all
remote_user: root
task:
- name: install httpd package
yum: name=httpd
tags: inshttpd # 添加标签
- name: copy conf file
copy: src=files/httpd.conf dest=/etc/httpd/conf/ backup=yes
notify: # 触发条件
- restart service
Check Nginx process
- name: start service
service: name=httpd state=started enabled=yes
tags: rshttpd # 添加标签
handlers: # 当发生变化时,执行的操作,比如配置文件修改了,重启服务生效
- name: restart service
service: name=httpd state=restarted
- name: Check Nginx process
shell: killall -0 > nginx.log # 探测以下此服务是否启动 $?
ansible-playbook httpd.yml
ansible-playbook -t rshttpd httpd.yml # tags标签的用途: 可以挑选指定的标签执行
ansible-playbook -t inshttpd,rshttpd httpd.yml # 执行两个标签
# 多个动作也可以共用一个标签
play-book中变量的使用
ansible all -m hostname -a 'name=host123'
172.20.45.65 | SUCCESS => {
"ansible_facts": {
"ansible_domain": "",
"ansible_fqdn": "host123",
"ansible_hostname": "host123",
"ansible_nodename": "host123"
},
"changed": true,
"name": "host123"
}
ansible all -m setup |less # 当前电脑的系统信息
ansible all -m setup -a 'filter=ansible_hostname' # 过滤
ansible all -m setup -a 'filter=ansible_all_ipv4_addresses' # 过滤
变量使用:pkname
vim app.yml
---
- hosts: all
remote_user: root
tasks:
- name: install packages
yum: name={{ pkname }}
- name: start service
service: name={{ pkname }} state=started enabled=yes
ansible-playbook -e 'pkname=vsftpd' app.yml
多个变量赋值:
vim app1.yml
---
- hosts: all
remote_user: root
tasks:
- name: install packages
yum: name={{ pkname1 }}
- name: install packages
yum: name={{ pkname2 }}
ansible-playbook -e 'pkname1=vsftpd pkname2=memcached' app.yml # 临时指定变量,装2个包
在playbook内部定义变量,vars:并且使用变量
vim app2.yml
---
- hosts: all
remote_user: root
vars: # 内部定义变量
- pkname1: httpd
pkname2: vsftpd
tasks:
- name: install packages
yum: name={{ pkname1 }}
- name: install packages
yum: name={{ pkname2 }}
在/etc/ansible/hosts中,针对主机进行变量定义
cat /etc/ansible/hosts
[webservs]
172.20.45.65 http_port=81
172.20.45.66 http_port=82
[webservs:vars] # 添加的通用变量
nodename=www
domainname=.magedu.com
[dbservs]
172.20.45.67
172.20.45.66
[appservs]
172.20.45.6[5:7]
-----------------------------------------------------------
设置不一样的主机名
vim hostname.yml
---
- hosts: webservs
remote_user: root
task:
- name: set hostname
hostname: name=www{{http_port}}.magedu.com
-----------------------------------------------------------
vim hostname1.yml
---
- hosts: webservs
remote_user: root
task:
- name: set hostname
hostname: name={{nodename}}{{http_port}}{{domainname}}
命令行的优先级,通通优先于配置文件
如果命令行里用-e定义了临时变量,那么优先于配置文件中定义的变量
普通变量的优先级,要高于公共(组)变量
Playbook中变量使用
变量名:仅能由字母、数字和下划线组成,且只能以字母开头
变量来源:
1、ansible setup facts 远程主机的所有变量都可直接调用
2、在/etc/ansible/hosts中定义
普通变量:主机组中主机单独定义,优先级高于公共变量
公共(组)变量:针对主机组中所有主机定义统一
3、通过命令行指定变量,优先级最高
ansible-playbook –e varname=value
4、在playbook中定义
vars: - var1: value1 - var2: value2 5 在role中定义
Playbook中变量使用
变量命名
变量名仅能由字母、数字和下划线组成,且只能以字母开头
变量定义: key=value
示例: http_port=80
变量调用方式:
通过{{ variable_name }} 调用变量,且变量名前后必须有空格,有时用 “{{ variable_name }}”才生效
ansible-playbook –e 选项指定
ansible-playbook test.yml -e "hosts=www user=mageedu"