原创网站模版,网站建设推推蛙,315网站专题怎么做,做网站端口内容无法替换目录
Playbooks中tasks语法使用
1、file
创建文件#xff1a;touch
创建目录#xff1a;directory
2、lineinfile
修改文件某一行文本
3、replace
根据正则表达式替换文件内容#xff08;指定换字符串#xff09;
5、template/copy
模板作用类似于copy#xff0…
目录
Playbooks中tasks语法使用
1、file
创建文件touch
创建目录directory
2、lineinfile
修改文件某一行文本
3、replace
根据正则表达式替换文件内容指定换字符串
5、template/copy
模板作用类似于copy可将文件分发到不同节点上可以在模板文件中引入变量 8、wait_for
等待某些操作完成以后再进行后续操作
9、when
条件判断满足后再执行任务 环境准备 下载ansible 配置两台web主机一台ansible服务器 ansible主机ip192.168.158.150 web1主机IP192.168.158.158 web2主机IP192.168.158.161 修改好配置文件 关闭防火墙和安全上下文
[rootbogon ~]# hostnamectl set-hostname ansible
[rootbogon ~]# setenforce 0
ansible主机
创建playbook编辑yml文件
[rootbogon ~]# mkdir playbook
[rootbogon ~]# cd playbook/
[rootbogon playbook]# vim test.yml
操作如下
Playbooks中tasks语法使用
1、file
操作文件比如创建文件或目录、删除文件或目录、修改文件权限等
常用参数 path指定要操作的文件或目录 state参数非常灵活可以包含的值及含义如下 directory - 与path结合说明我们要操作的是一个目录 touch - 与path结合说明我们要操作的是一个文件 link - 创建软连接 hard - 创建硬链接 absent - 删除目标 src当state设置为link或hard创建链接时用于说明链接哪个文件指定链接源 force值为yes表示强制创建 owner指定被操作文件的属主 group指定被操作文件的属组 mode指定被操作文件的权限
示例 - name: 创建一个testfile文件file: path/tmp/testfile statetouch
- name: 创建一个目录并指定目录权限file: path/tmp/data statedirectory mode0755
- name: 删除一个目录file: path/tmp/data stateabsent
- name: recurse默认为no指定为yes代表以递归方式指定文件权限file: dest/user/bin mode0755 recurseyes 示例
创建文件touch
vim test.yml 测试成功
[rootbogon playbook]# ansible-playbook -C test.yml
PLAY [adda] **********************************************************************TASK [Gathering Facts] ***********************************************************
ok: [192.168.158.161]
ok: [192.168.158.158]TASK [在/opt/目录下创建文件f1.txt文件] *******************************************
changed: [192.168.158.161]
changed: [192.168.158.158]PLAY RECAP ***********************************************************************
192.168.158.158 : ok2 changed1 unreachable0 failed0 skipped0 rescued0 ignored0
192.168.158.161 : ok2 changed1 unreachable0 failed0 skipped0 rescued0 ignored0 翻译
执行结果汇总 ***********************************************************************
192.168.158.158 : 成功2 已变更1 不可达0 失败0 跳过0 救援0 忽略0
各字段含义详解
ok2 (成功2)
该主机上成功完成了2个任务无论是否产生变更
changed1 (已变更1)
其中有1个任务实际修改了系统状态例如创建了文件/安装了软件
unreachable0 (不可达0)
主机连接正常SSH/WinRM等连接成功
failed0 (失败0)
没有任务执行失败
skipped0 (跳过0)
没有任务因条件不满足而被跳过
rescued0 (救援0)
没有触发任何错误恢复机制block-rescue结构
ignored0 (忽略0)
没有主动忽略任何错误
执行成功
[rootbogon playbook]# ansible-playbook test.yml PLAY [adda] **********************************************************************TASK [Gathering Facts] ***********************************************************
ok: [192.168.158.161]
ok: [192.168.158.158]TASK [在/opt/目录下创建文件f1.txt文件] *******************************************
changed: [192.168.158.158]
changed: [192.168.158.161]PLAY RECAP ***********************************************************************
192.168.158.158 : ok2 changed1 unreachable0 failed0 skipped0 rescued0 ignored0
192.168.158.161 : ok2 changed1 unreachable0 failed0 skipped0 rescued0 ignored0
查验已成功创建 web主机
[rootweb1 ~]# cd /opt/
[rootweb1 opt]# ls
f1.txt
创建目录directory
[rootbogon playbook]# vim test.yml---
- name: addahosts: alltasks:- name: 在/opt/目录下创建文件f1.txt文件file:path: /opt/f1.txtstate: touch- name: 在/opt/目录下创建dir目录file:path: /opt/dir/state: directory 测试
[rootbogon playbook]# ansible-playbook -C test.yml PLAY [adda] **********************************************************************TASK [Gathering Facts] ***********************************************************
ok: [192.168.158.161]
ok: [192.168.158.158]TASK [在/opt/目录下创建文件f1.txt文件] *******************************************
changed: [192.168.158.161]
changed: [192.168.158.158]TASK [在/opt/目录下创建dir目录] **************************************************
changed: [192.168.158.158]
changed: [192.168.158.161]PLAY RECAP ***********************************************************************
192.168.158.158 : ok3 changed2 unreachable0 failed0 skipped0 rescued0 ignored0
192.168.158.161 : ok3 changed2 unreachable0 failed0 skipped0 rescued0 ignored0 执行
[rootbogon playbook]# ansible-playbook test.yml PLAY [adda] **********************************************************************TASK [Gathering Facts] ***********************************************************
ok: [192.168.158.161]
ok: [192.168.158.158]TASK [在/opt/目录下创建文件f1.txt文件] *******************************************
changed: [192.168.158.161]
changed: [192.168.158.158]TASK [在/opt/目录下创建dir目录] **************************************************
changed: [192.168.158.158]
changed: [192.168.158.161]PLAY RECAP ***********************************************************************
192.168.158.158 : ok3 changed2 unreachable0 failed0 skipped0 rescued0 ignored0
192.168.158.161 : ok3 changed2 unreachable0 failed0 skipped0 rescued0 ignored0 查验
[rootweb1 opt]# ls
dir f1.txt
2、lineinfile
修改文件某一行文本
常用参数
* path操作的文件路径 * regexp正则表达式要替换的内容 * line指定修改后的文本内容 * state当设置为absent代表删除匹配的行 * backrefs默认为no当未匹配到时line对应的内容会被插入到文本的末尾为yes表示不插入 * insertafter借助insertafter参数可以将文本插入到“指定的行”之后 * insertbefore借助insertbefore参数可以将文本插入到“指定的行”之前 * backup是否进行备份 * create操作的文件不存在时是否创建
示例
- name: 替换文件中包含line123的行为testlinelineinfile: path/tmp/test regexp^line linetestlinevim test.yml 注意缩进
---
- name: addagather_facts: nohosts: alltasks:- name: 在/opt/目录下创建文件f1.txt文件file:path: /opt/f1.txtstate: touch- name: 在/opt/目录下创建dir目录file:path: /opt/dir/state: directory- name: 精确替换包含line123的行lineinfile:path: /opt/f1.txtregexp: ^lineline: testtags: t1 [rootweb1 opt]# cat f1.txt
line1231
lineoqoweiqwe
opoiline 测试 只在web1上f1.txt有内容
[rootansible playbook]# ansible-playbook -C -t t1 test.ymlPLAY [adda] **********************************************************************TASK [Gathering Facts] ***********************************************************
ok: [192.168.158.158]
ok: [192.168.158.161]TASK [精确替换包含line123的行] ***************************************************
changed: [192.168.158.158]
ok: [192.168.158.161]PLAY RECAP ***********************************************************************
192.168.158.158 : ok2 changed1 unreachable0 failed0 skipped0 rescued0 ignored0
192.168.158.161 : ok2 changed0 unreachable0 failed0 skipped0 rescued0 ignored0 执行成功
[rootansible playbook]# ansible-playbook -t t1 test.ymlPLAY [adda] **********************************************************************TASK [Gathering Facts] ***********************************************************
ok: [192.168.158.158]
ok: [192.168.158.161]TASK [精确替换包含line123的行] ***************************************************
ok: [192.168.158.161]
changed: [192.168.158.158]PLAY RECAP ***********************************************************************
192.168.158.158 : ok2 changed1 unreachable0 failed0 skipped0 rescued0 ignored0
192.168.158.161 : ok2 changed0 unreachable0 failed0 skipped0 rescued0 ignored0 查验 因为没有循环一次只能执行一个
[rootweb1 opt]# cat f1.txt
line1231
test
opoiline
[rootweb1 opt]# cat f1.txt
test
test
opoiline 第二次 3、replace
根据正则表达式替换文件内容指定换字符串
常用参数 path操作文件的路径 regexp正则表达式 replace指定最终要替换的字符串 backup是否在修改文件之前对文件进行备份yes是进行备份 vim test.yml - name: 将/opt/f1.txt文件中的test替换为linereplace:path: /opt/f1.txtregexp: testreplace: linetags: t2 测试
[rootansible playbook]# ansible-playbook -C -t t2 test.ymlPLAY [adda] **********************************************************************TASK [Gathering Facts] ***********************************************************
ok: [192.168.158.158]
ok: [192.168.158.161]TASK [将/opt/f1.txt文件中的test替换为line] ***************************************
changed: [192.168.158.161]
changed: [192.168.158.158]PLAY RECAP ***********************************************************************
192.168.158.158 : ok2 changed1 unreachable0 failed0 skipped0 rescued0 ignored0
192.168.158.161 : ok2 changed1 unreachable0 failed0 skipped0 rescued0 ignored0 执行
[rootansible playbook]# ansible-playbook -t t2 test.ymlPLAY [adda] **********************************************************************TASK [Gathering Facts] ***********************************************************
ok: [192.168.158.161]
ok: [192.168.158.158]TASK [将/opt/f1.txt文件中的test替换为line] ***************************************
changed: [192.168.158.158]
changed: [192.168.158.161]PLAY RECAP ***********************************************************************
192.168.158.158 : ok2 changed1 unreachable0 failed0 skipped0 rescued0 ignored0
192.168.158.161 : ok2 changed1 unreachable0 failed0 skipped0 rescued0 ignored0 查验 5、template/copy
模板作用类似于copy可将文件分发到不同节点上可以在模板文件中引入变量
常用参数 src: 源文件路径 dest目标文件路径 group目标文件属组 mode目标文件权限 backup如果目标文件存在则先备份目标文件 force是否强制覆盖默认为yes validate在复制之前通过命令验证目标文件如果验证通过则复制
示例 - template: src/mytemplates/tt.j2 dest/etc/file.conf
- template: src/mytemplates/tt.j2 dest/etc/file.conf groupwheel mode0644
- template: src/mytemplates/suzuka.j2 dest/etc/suzuka validatevisudo -cf %s 示例
第一步先从远程主机拷贝一份nginx配置文件
[rootansible playbook]# scp 192.168.158.158:/etc/nginx/nginx.conf ./
nginx.conf 100% 2334 1.0MB/s 00:00 第二步编辑yml文件 mag输出文本
vim test.yml - name: print facts variabledebug:msg: The {{ ansible_default_ipv4.interface }} IPV4 address is {{ ansible_default_ipv4.address }} 第三步执行
[rootansible playbook]# ansible-playbook -t t3 test.ymlPLAY [adda] **********************************************************************TASK [Gathering Facts] ***********************************************************
ok: [192.168.158.158]
ok: [192.168.158.161]TASK [print facts variable] ******************************************************
ok: [192.168.158.158] {msg: The default IPV4 address is 192.168.158.158
}
ok: [192.168.158.161] {msg: The default IPV4 address is 192.168.158.161
}PLAY RECAP ***********************************************************************
192.168.158.158 : ok2 changed0 unreachable0 failed0 skipped0 rescued0 ignored0
192.168.158.161 : ok2 changed0 unreachable0 failed0 skipped0 rescued0 ignored0 我们可以将default改为变量
第四步过滤之后拷贝到一个文件里
[rootansible playbook]# ansible 192.168.158.158 -m setup | grep -n ansible_default_ipv4
57: ansible_default_ipv4: { [rootansible playbook]# ansible 192.168.158.158 -m setup facts.txt interface是ens33 第五步将变量引用到文本里 - name: print facts variabledebug:msg: The {{ ansible_default_ipv4.interface }} IPV4 address is {{ ansible_default_ipv4.address }}tags: t3- name: 拷贝nginx配置文件template: src./nginx.j2 dest/etc/nginx/nginx.conftags: t4 执行看一下 变量引用了
[rootansible playbook]# ansible-playbook -t t3 test.ymlPLAY [adda] **********************************************************************TASK [Gathering Facts] ***********************************************************
ok: [192.168.158.158]
ok: [192.168.158.161]TASK [print facts variable] ******************************************************
ok: [192.168.158.158] {msg: The ens33 IPV4 address is 192.168.158.158
}
ok: [192.168.158.161] {msg: The ens33 IPV4 address is 192.168.158.161
}PLAY RECAP ***********************************************************************
192.168.158.158 : ok2 changed0 unreachable0 failed0 skipped0 rescued0 ignored0
192.168.158.161 : ok2 changed0 unreachable0 failed0 skipped0 rescued0 ignored0 将变量引用到nginx配置文件里
[rootansible playbook]# ls
facts.txt nginx.conf test.yml
[rootansible playbook]# vim nginx.conf ----------------------server {listen {{ ansible_default_ipv4.address }}:80;listen [::]:80;server_name _;root /usr/share/nginx/html;
------------------------- 修改文件后缀
[rootansible playbook]# mv nginx.conf nginx.j2
[rootansible playbook]# ls
facts.txt nginx.j2 test.yml 执行成功
[rootansible playbook]# ansible-playbook -t t4 test.ymlPLAY [adda] **********************************************************************TASK [Gathering Facts] ***********************************************************
ok: [192.168.158.158]
ok: [192.168.158.161]TASK [拷贝nginx配置文件] *********************************************************
changed: [192.168.158.161]
changed: [192.168.158.158]PLAY RECAP ***********************************************************************
192.168.158.158 : ok2 changed1 unreachable0 failed0 skipped0 rescued0 ignored0
192.168.158.161 : ok2 changed1 unreachable0 failed0 skipped0 rescued0 ignored0 去web主机上查验nginx配置文件
成功引用 8、wait_for
等待某些操作完成以后再进行后续操作
**常用参数**
* connect\_timeout在下一个任务执行之前等待连接的超时时间 * delay指在等待过程中轮询的时间间隔 * host等待的主机地址默认是127.0.0.1 * port等待的主机端口 * path文件路径只有当这个文件存在时才开始执行下一个任务 * state等待的状态值可以为started/stoped/absent/present * timeout等待的超时时间默认300秒
**示例** - name: 每隔10s检查一次等待8080端口正常监听才开始下一个任务直到超时 wait_for: port8080 statestarted delay10 - name: 等待文件创建 wait_for: path/tmp/tt 示例
此时web两台主机都是启用nginx了的此时80号端口已被监听
vim test.yml - name: 每隔10s检查一次等待80端口正常监听才开始下一个任务直到超时wait_for: port80 statestarted delay10- name: 如果上个任务为真执行下一个,创建文件file:path: /opt/1.txtstate: touch 当80号端口被监听后才执行下一个任务创建文件 执行
[rootansible playbook]# ansible-playbook test.yml PLAY [adda] **********************************************************************TASK [Gathering Facts] ***********************************************************
ok: [192.168.158.158]
ok: [192.168.158.161]TASK [每隔10s检查一次等待80端口正常监听才开始下一个任务直到超时] ***********
ok: [192.168.158.158]
ok: [192.168.158.161]TASK [如果上个任务为真执行下一个,创建文件] ***************************************
changed: [192.168.158.161]
changed: [192.168.158.158]PLAY RECAP ***********************************************************************
192.168.158.158 : ok3 changed1 unreachable0 failed0 skipped0 rescued0 ignored0
192.168.158.161 : ok3 changed1 unreachable0 failed0 skipped0 rescued0 ignored0 查验成功执行 9、when
条件判断满足后再执行任务
示例 when是条件 - name: 判断变量tt是否定义shell: echo Ive got {{ tt }}when: tt is defined 当主机名是web1时下载httpd软件包 (此时只有一台web1另一台web2)
vim test.yml - name: outputdebug:msg: {{ ansible_hostname }}- name: 条件任务yum:name: httpdstate: present when: ansible_hostname web1 执行成功
[rootansible playbook]# ansible-playbook test.yml PLAY [adda] *************************************************************************************************TASK [Gathering Facts] **************************************************************************************
ok: [192.168.158.158]
ok: [192.168.158.161]TASK [output] ***********************************************************************************************
ok: [192.168.158.158] {msg: web1
}
ok: [192.168.158.161] {msg: agent2
}TASK [条件任务] *********************************************************************************************
skipping: [192.168.158.161]
changed: [192.168.158.158]PLAY RECAP **************************************************************************************************
192.168.158.158 : ok3 changed1 unreachable0 failed0 skipped0 rescued0 ignored0
192.168.158.161 : ok2 changed0 unreachable0 failed0 skipped1 rescued0 ignored0 去web主机查验
hostname为web1的主机安装了httpd软件包