网站建设与管理出来工资,网站加载速度慢,网站推广位怎么设置,福州市工程建设质量管理网站目录
1.playbook剧本组成
2.playbook剧本实战演练
2.1 实战演练一#xff1a;给被管理主机安装httpd服务
2.2 实战演练二#xff1a;定义、引用变量
2.3 实战演练三#xff1a;指定远程主机sudo切换用户
2.4 实战演练四#xff1a;when条件判断
2.5 实战演练五…目录
1.playbook剧本组成
2.playbook剧本实战演练
2.1 实战演练一给被管理主机安装httpd服务
2.2 实战演练二定义、引用变量
2.3 实战演练三指定远程主机sudo切换用户
2.4 实战演练四when条件判断
2.5 实战演练五迭代循环
3.总结 1.playbook剧本组成
1Tasks任务即通过task调用ansible的模板将多个操作组织在一个playbook中运行 2Variables变量 3Templates模板 4Handlers处理器当changed状态条件满足时notify触发执行的操作 5Roles角色
2.playbook剧本实战演练
示例
vim test1.yaml
--- #yaml文件以---开头以表明这是一个yaml文件可省略
- name: first play #定义一个play的名称可省略gather_facts: false #设置不进行facts信息收集这可以加快执行速度可省略hosts: webservers #指定要执行任务的被管理主机组如多个主机组用冒号分隔remote_user: root #指定被管理主机上执行任务的用户tasks: #定义任务列表任务列表中的各任务按次序逐个在hosts中指定的主机上执行- name: test connection #自定义任务名称ping: #使用 module: [options] 格式来定义一个任务- name: disable selinuxcommand: /sbin/setenforce 0 #command模块和shell模块无需使用keyvalue格式ignore_errors: True #如执行命令的返回值不为0就会报错tasks停止可使用ignore_errors忽略失败的任务- name: disable firewalldservice: namefirewalld statestopped #使用 module: options 格式来定义任务option使用keyvalue格式- name: install httpdyum: namehttpd statelatest- name: install configuration file for httpdcopy: src/opt/httpd.conf dest/etc/httpd/conf/httpd.conf #这里需要一个事先准备好的/opt/httpd.conf文件notify: restart httpd #如以上操作后为changed的状态时会通过notify指定的名称触发对应名称的handlers操作- name: start httpd serviceservice: enabledtrue namehttpd statestartedhandlers: #handlers中定义的就是任务此处handlers中的任务使用的是service模块- name: restart httpd #notify和handlers中任务的名称必须一致service: namehttpd staterestarted
##Ansible在执行完某个任务之后并不会立即去执行对应的handler而是在当前play中所有普通任务都执行完后再去执行handler这样的好处是可以多次触发notify但最后只执行一次对应的handler从而避免多次重启。2.1 实战演练一给被管理主机安装httpd服务
在ansible服务器主机给远程被管理主机制作安装httpd服务的剧本文件play1.yam
mkdir playbook
cd playbook/
vim play1.yaml
- name: first playgather_facts: falsehosts: dbserversremote_user: roottasks:- name: disable firewalldservice: namefirewalld statestopped enabledno- name: disable selinuxcommand: setenforce 0ignore_errors: true- name: mount cdrommount: src/dev/sr0 path/mnt fstypeiso9660 statemounted- name: install httpdyum: namehttpd statelatest- name: start httpdservice: namehttpd statestarted enabledyes运行playbook
ansible-playbook play1.yaml
//补充参数
-k–ask-pass用来交互输入ssh密码
-K-ask-become-pass用来交互输入sudo密码
-u指定用户
ansible-playbook play1.yaml --syntax-check #检查yaml文件的语法是否正确
ansible-playbook play1.yaml --list-task #检查tasks任务
ansible-playbook play1.yaml --list-hosts #检查生效的主机
ansible-playbook play1.yaml --start-at-taskinstall httpd #指定从某个task开始运行被控制端验证安装情况 添加触发器 scp /etc/httpd/conf/httpd.conf 192.168.9.114:/opt/ #将httpd服务端下的httpd.conf文件复制到ansible服务器 vim /opt/httpd.conf ansible服务器
修改42行端口为8080以便测试
vim play1.yaml
- name: first playgather_facts: falsehosts: dbserversremote_user: roottasks:- name: disable firewalldservice: namefirewalld statestopped enabledno- name: disable selinuxcommand: setenforce 0ignore_errors: true- name: mount cdrommount: src/dev/sr0 path/mnt fstypeiso9660 statemounted- name: install httpdyum: namehttpd statelatest- name: copy config filecopy: src/opt/httpd.conf dest/etc/httpd/conf/notify: reload httpd- name: start httpdservice: namehttpd statestarted enabledyeshandlers:- name: reload httpdservice: namehttpd statereloadedansible-playbook play1.yaml --syntax-check
ansible-playbook play1.yaml 被控制端查看端口是否同步 2.2 实战演练二定义、引用变量
vim play2.yaml
- name: second playremote_user: roothosts: dbserversvars:- myname: scj- myclass: xy101tasks:- name: create groupgroup: name{{myclass}}- name: create useruser: name{{myname}} groups{{myclass}}ansible-playbook play2.yaml --syntax-check
ansible-playbook play2.yaml 被控制主机验证 使用facts信息做变量 vim play2.yaml- name: second playremote_user: roothosts: dbserversgather_facts: truevars:- myname: scj- myclass: xy101tasks:- name: create groupgroup: name{{myclass}}- name: create useruser: name{{myname}} groups{{myclass}}- name: copy filecopy: content{{ansible_default_ipv4}} dest/opt/ipv4.txtansible-playbook play2.yaml被控制节点验证 指定子字段名称查看具体内容获取子字段内容使用.13.51解释 vim play2.yaml
- name: second playremote_user: roothosts: dbserversgather_facts: truevars:- myname: scj- myclass: xy101tasks:- name: create groupgroup: name{{myclass}}- name: create useruser: name{{myname}} groups{{myclass}}- name: copy filecopy: content{{ansible_default_ipv4.network}} dest/opt/ipv4.txtansible-playbook play2.yaml被控制节点验证 运行时指定变量 ansible-playbook play2.yaml -e mynamezhuxiang #在命令行里定义变量2.3 实战演练三指定远程主机sudo切换用户
vim /etc/sudoers #被控制节点为用户授权并设置密码
zhuxiang ALL(ALL) ALLecho 123456 | passwd --stdin zhuxiang vim play2.yaml
- name: second playremote_user: zhuxiangbecome: yes #2.6版本以后的参数之前是sudo意思为切换用户运行become_user: root #指定sudo用户为roothosts: dbserversgather_facts: truevars:- myname: wangwang- myclass: xy102tasks:- name: create groupgroup: name{{myclass}}- name: create useruser: name{{myname}} groups{{myclass}}- name: copy filecopy: content{{ansible_default_ipv4.network}} dest/opt/ipv4.txtansible-playbook play2.yaml -k -K
-k–ask-pass用来交互输入ssh密码
-K-ask-become-pass用来交互输入sudo密码被控制节点验证 2.4 实战演练四when条件判断 在Ansible中提供的唯一一个通用的条件判断是when指令当when指令的值为true时则该任务执行否则不执行该任务。 vim play3.yaml
- name: third playremote_user: roothosts: webserversgather_facts: truetasks:- name: copy scj.sh to 9.111copy: src/opt/scj.sh dest/optwhen: ansible_default_ipv4.address 192.168.9.111- name: run sjc.sh on 9.113script: /opt/scj.sh scj tangjunwhen: inventory_hostname ! 192.168.9.111192.168.9.111节点 192.168.9.113节点 2.5 实战演练五迭代循环
vim play4.yaml
- name: four playremote_user: roothosts: dbserversgather_facts: notasks:- debug: msg{{item}}with_items:- a- b- cansible-playbook play4.yaml 迭代创建用户 vim play4.yaml- name: four playremote_user: roothosts: dbserversgather_facts: notasks:- name: create usersuser: name{{item}} groupsxy101with_items:- zhang- san- liansible-playbook play4.yaml 被控制节点验证
vim /etc/group
vim /etc/passwd
#可根据两条命令查看是否创建成功 创建多个用户并加入不同组 vim play4.yaml
- name: four playremote_user: roothosts: dbserversgather_facts: novars:- mygroups: [xy1, xy2, xy3]tasks:- name: create groupsgroup: name{{item}}with_items: {{mygroups}}- name: create usersuser: name{{item.myname}} groups{{item.myclass}}with_items:- myname: simyclass: xy1- myname: wangmyclass: xy2- myname: wumyclass: xy3
ansible-playbook play4.yaml 被控制节点验证
vim /etc/group
vim /etc/passwd
#可根据两条命令查看是否创建成功
3.总结
playbook剧本的格式 vim XXX.yaml XXX.yml
- name: #设置play的名称一个playbook文件里可以有多个playhosts: #设置执行此play的远程主机组多个组用 : 分隔remote_user: #设置在远程主机执行此play的用户名默认为rootbecome: yes #设置是否需要在远程主机sudo切换执行任务become_user: root #设置sudo切换的用户一般为rootgather_facts: true|false #设置是否收集facts信息默认为truevars: #设置此play中使用的自定义变量- 变量1: 值1- 变量2: 值2tasks: #设置此play的任务列表- name: #定义任务的名称模块名: 模块参数 #定义此任务要使用的模块和参数(键值对格式 keyvalue)- name: 模块名: 模块参数ignore_errors: true #忽略此任务可能的失败如果不忽略则任务失败会导致中断后续任务的执行- name: 模块名: 模块参数when: 条件表达式 #条件表达式成立则执行此任务不成立则不执行此任务- name: 模块名: 模块参数{{item}} #循环遍历with_items: #定义循环的取值列表- name: 模块名: 模块参数notify: 任务名 #定义此任务执行状态为changed时要触发的handler任务handlers: #设置notify触发的任务- name: 任务名模块名: 模块参数playbook运行命令
ansible-playbook XXX.yaml -u 远程用户 -k--become-user sudo切换的用户 -K--syntax-check--list-task--list-hosts--start-at-task任务名-e 变量值模块参数的格式
横向格式模块名: 参数1值 参数2{{变量名}} ....纵向格式模块名: 参数1: 值参数2: {{变量名}}....vars 和 with_items 的格式
#值为纯量类型时
tasks:
- name:模块名: 参数1{{item}}with_items:- 值1 #纵向格式- 值2....tasks:
- name:模块名: 参数1{{item}}with_items: [值1, 值2, ....] #横向格式#先使用vars定义循环取值列表再用with_items引用vars的变量
vars:
- 变量1:- 值1 #纵向格式- 值2....
- 变量2: [值1, 值2, ....] #横向格式tasks:
- name:模块名: 参数1{{item}}with_items: {{变量1}} #使用with_items引用vars的变量
- name:模块名: 参数1{{item}}with_items: {{变量2}}#当值为对象类型键值对时
tasks:
- name:模块名: 参数1{{item.key1}} 参数2{{item.key2}}with_items: - key1: 值1 #纵向格式key2: 值2- key1: 值3key2: 值4....with_items:- {key1: 值1, key2: 值2} #横向格式- {key1: 值3, key2: 值4}....vars:
- 变量1: - key1: 值1 #纵向格式key2: 值2- key1: 值3key2: 值4....
- 变量2:- {key1: 值1, key2: 值2} #横向格式- {key1: 值3, key2: 值4}....
tasks:
- name:模块名: 参数1{{item.key1}} 参数2{{item.key2}}with_items: {{变量1}}