当前位置: 首页 > news >正文

企聚网站建设静态网站建设中源码

企聚网站建设,静态网站建设中源码,域名是否被注册查询,安全优化大师目录 实施任务控制 一#xff0c;循环#xff08;迭代#xff09;--- loop 1#xff0c;利用loop----item循环迭代任务 2#xff0c;item---loop循环案例 1#xff0c;定义item循环列表 2#xff0c;通过变量应用列表格式 3#xff0c;字典列表#xff08;迭代嵌套子… 目录 实施任务控制 一循环迭代--- loop 1利用loop----item循环迭代任务  2item---loop循环案例 1定义item循环列表 2通过变量应用列表格式 3字典列表迭代嵌套子变量 4register变量与loop                    二when条件任务语法 1 when条件测试案例 2when条件表达语法 3 多条件表达and or语法 4组合循环和有条件判断任务 三实施处理程序 1Handlers和notify触发条件 2 tags标签定义 四处理任务失败 1ignore_errors 忽略错误继续任务 2 force_handlers: yes 3 failed_when 4 change_when 满足条件输出change状态 5block、rescue、always块和错误处理 实施任务控制 一循环迭代--- loop 1利用loop----item循环迭代任务 通过循环管理员不需要编写多个使用同一模块的任务。例他们不需要编写五个任务来确保存在五个用户而是只需要编写一个任务来对含有五个用户的列表迭代从而确保他们都在。 ansible支持loop关键字对一组项目迭代任务可以配置循环以利用各个项目、列表中各个文件的内容、生成数字序列化或更为复杂的结构来重复任务。     2item---loop循环案例 loop关键字添加到任务中将应对其迭代任务的项目列表取为值。 循环item保存每个迭代过程中使用的值。 确定多个服务运行 1定义item循环列表 1查看node1主机上的httpd与named服务是否启动发现没启动 [rootnode1 ~]# systemctl status httpd [rootnode1 ~]# systemctl status named 2查看node2主机上的httpd与named服务是否启动发现没启动 [rootnode2 ~]# systemctl status httpd [rootnode2 ~]# systemctl status named 3编辑playbook4.yml文件 --- - name: play1   hosts: test   tasks:     - name: task1       service:         name: {{ item }}         state: started       loop:         - httpd                 //定义item循环列表         - named                 bind的服务名位named 4执行脚本文件playbook4.yml使其启动httpd服务与bind服务 [rootserver var_test]# ansible-playbook playbook4.yml 5查看node1主机上的httpd与named服务是否启动发现此时已经启动 [rootnode1 ~]# systemctl status httpd [rootnode1 ~]# systemctl status named 6查看node2主机上的httpd与named服务是否启动发现此时已经启动 [rootnode2 ~]# systemctl status httpd [rootnode2 ~]# systemctl status named 2通过变量应用列表格式 1此时node1上的httpd与named服务是关闭的 [rootnode1 ~]# systemctl status httpd [rootnode1 ~]# systemctl status named 2此时node2上的httpd与named服务是关闭的 [rootnode2 ~]# systemctl status httpd [rootnode2 ~]# systemctl status named 3编辑playbook4.yml文件 --- - name: play1   hosts: test   vars:     pkname:       - httpd       - named   tasks:     - name: task1       service:         name: {{ item }}         state: started       loop: {{ pkname }}           //通过变量应用列表格式 4执行playbook4.yml剧本文件 [rootserver var_test]# ansible-playbook playbook4.yml 5查看node1主机上的httpd与named服务是否启动发现此时已经启动 [rootnode1 ~]# systemctl status httpd [rootnode1 ~]# systemctl status named 6查看node2主机上的httpd与named服务是否启动发现此时已经启动 [rootnode2 ~]# systemctl status httpd [rootnode2 ~]# systemctl status named 3字典列表迭代嵌套子变量 1编辑剧本playbook4.yml --- - name: play1   hosts: test   tasks:     - name: task1       user:         name: {{ item.name }}         state: present         groups: {{ item.groups }}       loop:         - { name: jane,groups: wheel}         - { name: joe, groups: root } 2执行剧本playbook4.yml [rootserver var_test]# ansible-playbook playbook4.yml 3在node1上可以查看到playbook4中创建的用户以及附加组 [rootnode1 ~]# id jane [rootnode1 ~]# id joe 4在node2上可以查看到playbook4中创建的用户以及附加组 [rootnode2 ~]# id jane [rootnode2 ~]# id joe 4register变量与loop 1编写剧本文件playbook4.yml - name: play1   gather_facts: no   hosts: localhost   tasks:     - name: task1       shell: echo this is my item: {{ item }}               loop:         - one         - two       register: echo_results               //变量注册     - name: task2       debug:         var: echo_results                    //变量内容显示在屏幕上 2执行剧本文件 [rootserver var_test]# ansible-playbook playbook4.yml                      二when条件任务语法 when语句用于有条件运行任务。它取要测试的条件为值。如果条件满足则运行任务。如果条件不满足则跳过任务。     1 when条件测试案例 案例一可以测试当run_my_task 为true的时候执行否则不执行 1此时的node1主机上没有安装bind [rootnode1 ~]# rpm -q bind   2编辑playbool4.yml文件使得当my_task为true在node1安装bind --- - name: play1   hosts: node1   vars:     my_test: true   tasks:     - name: task1       yum:         name: bind       when: my_test 3执行剧本playbool4.yml [rootserver var_test]# ansible-playbook playbook4.yml 4此时在node1主机上查看bind发现已经被安装 [rootnode1 ~]# rpm -q bind     案例2 判断my_service是否有值若有值则用作安装的软件包名称若没有定义变量则跳过任务不显示错误 1此时的node1主机上没有vsftpd包 [rootnode1 ~]# rpm -q vsftpd 2编辑playbook4.yml文件在node1上安装vsftpd包 --- - name: play1   hosts: node1   vars:     my_package: vsftpd   tasks:     - name: task1       yum:         name: {{ my_package }}       when: my_package is defined 3执行剧本playbook4.yml [rootserver var_test]# ansible-playbook playbook4.yml 4此时在node1主机上查看vsftpd发现已经被安装 [rootnode1 ~]# rpm -q vsftpd 2when条件表达语法 操作 示例 等于值为字符串 ansible_machine x86_64 等于值为数字 max_memory 512 小于(小于等于) Min_memory 128 min_memory 512 大于 大于等于 Min_memory 256 max_memory 512 不等于 Min_memory ! 512 变量存在 Min_memory is defined 变量不存在 Min_memory is not defined 布尔值变量是true. 1、True 或yes 的求值为true 变量Memory_available值存在为true则执行 Memory_available 布尔值变量是false. 0、 False 或no的求值为false 变量Memory_available值存在为true则执行 Not memory_available 第一个变量的值存在在第二个变量的列表中条件满足 事实变量在变量列表中满足要求 Ansible_distribution in supported_distros - name Demonstrate the inkeyword   hosts: all   gather_facts: yes   Vars:     supperted_distros:         - Redhat         - Fedora   Tasks:     - name: Install httpd using yum, where supported        yum:            name: http            state:  present        when: ansible_distribution in supperted_distros 注     When 语句的缩进由于when语句不是模块变量他必须通过缩进到任务的最高级别放置在模块的外面。     任务是YAML散列/字典when语句只是任务重的又一个键就如任务的名称以及它所使用的模块一样。通常的惯例是将可能存在的任何when关键字放在任务名称和模块的后面。 ​       3 多条件表达and or语法 语法一 whenansible_distribution Redhat or ansible_distribution Fedora When: ansible_distribution_version 7.5 and ansible_kernel 3.10.0-327.el7.x86_64 语法二 使用and语句时则必须要所有条件为真时才执行相应任务     when:         - ansible_distribution_version 7.5         - ansible_kernel 3.10.0-327.el7.x86_64     使用括号分组条件可以更好的表达复制的条件语句     When:          ( ansible_distribution_version redhat and           ansible_distribution_major_version 7 )          or           (  ansible_distribution_version fedora and           ansible_distribution_major_version 28 ) ​ 4组合循环和有条件判断任务 对某类任务结合使用when和loop时将对每项检查when语句 yum安装软件包只要/上挂载的文件系统有超过300M的可用空间。 Ansible_mounts 事实是一组字典各自代表一个已挂在文件系统的相关事实。循环迭代每个字典只要找到了代表两个条件都为真的已挂载文件系统的字典时条件语句才得到满足。 - name: install mariadb-server if enough space on root   yum:     name: mariadb-server     state: latest   loop: { ansible_mounts }                        //字典循环   when: item.mount / and item.size_available 300000000            //当两个条件都满足则执行安装 三实施处理程序 1Handlers和notify触发条件 notify 通知此action可用于每个play最后被触发这样避免多次发生改变时都执行指定操作仅在所有变化发生完成后一次性的执行操作。在notify中列出的操作作为handler及notify中调用handlers中定义的操作。notify判断是否有发生改变一旦发生改变触发handlers执行指定操作handlers 操作者是task列表这些task和前述的task没有本质区别用于当关注资源发生变化时才会采取一定的操作。  案例实现只有修改了配置文件才会重启服务  1将/etc/httpd/conf/httpd.conf 复制到/目录下 [rootserver var_test]# cp /etc/httpd/conf/httpd.conf /   2编辑文件/httpd.conf将端口改为10000 #Listen 80 Listen 10000     3在受控主机node1与node2上关闭防火墙并设置selinux为permissive [rootnode1 ~]# systemctl stop firewalld [rootnode1 ~]# setenforce 0   [rootnode2 ~]# systemctl stop firewalld [rootnode2 ~]# setenforce 0   4创建playbook5.yml文件 - name: handlers test   hosts: all   tasks:     - name: install httpd service       yum:         name: httpd         state: installed     - name: copy config file       copy:         src:  /httpd.conf         dest: /etc/httpd/conf/httpd.conf       notify:          - restart service     - name: start httpd service       service:         name: httpd         state: started   handlers:      - name: restart service       service:         name: httpd         state: restarted       5执行剧本playbook5.yml 因为控制端的端口号为10000发生了修改所以会重启服务 [rootserver var_test]# ansible-playbook playbook5.yml   6再次执行剧本文件playbook5.yml此时的配置文件并未发生任何改变所以服务并未重新启动 [rootserver var_test]# ansible-playbook playbook5.yml   7此时再将配置文件的端口号由10000改为80 Listen 80     8再次执行剧本playbook5.yml发现又会重启服务因为/etc/httpd文件发生改变 [rootserver var_test]# ansible-playbook playbook5.yml   注意handlers写在notify模块之后 2 tags标签定义 tags标签: 通过此标签来指定playbook文件执行哪条命令 执行 -t   标签名   案例仅执行playbook5.yml中的安装httpd命令  1编辑playbook5.yml文件 - name: handlers test   hosts: all   tasks:     - name: install httpd service       yum:         name: httpd         state: installed       tags: yum_httpd     - name: copy config file       copy:         src:  /httpd.conf         dest: /etc/httpd/conf/httpd.conf       notify:          - restart service     - name: start httpd service       service:         name: httpd         state: started   handlers:      - name: restart service       service:         name: httpd         state: restarted        2此时执行剧本文件playbook.yml会发现只执行了装包命令 [rootserver var_test]# ansible-playbook -t yum_httpd playbook5.yml       四处理任务失败 1ignore_errors 忽略错误继续任务 默认情况下任务失败时play会终止。可以通过ingnore乎略失败其他任务可以继续执行。 案例 1编辑剧本文件playbook6.yml - name: restart httpd is postfix is running   hosts: all   tasks:     - name: get postfix server status       command: /usr/bin/systemctl is-active postfix       #  ignore_errors: yes                register: result            - name: restart apache httpd based on postfix status       service:         name: httpd         state: restarted       when: result.rc 0 2此时受控端主机并未安装postfix所以任务执行会失败 [rootserver var_test]# ansible-playbook playbook6.yml 3编辑剧本文件playbook6.yml - name: restart httpd is postfix is running   hosts: all   tasks:     - name: get postfix server status       command: /usr/bin/systemctl is-active postfix       ignore_errors: yes                register: result     - name: restart apache httpd based on postfix status       service:         name: httpd         state: restarted       when: result.rc 3 4此时受控端主机虽然并未安装postfix但是会跳过失败继续执行下面的任务 [rootserver var_test]# ansible-playbook playbook6.yml 2 force_handlers: yes 如果任务失败并且play在该主机上终止则收到play中早前任务通知的处理程序将不会运行。   1此时的/etc/http配置文件并未做任何改变所以服务httpd不会自启 [rootserver var_test]# ansible-playbook playbook5.yml     2将/etc/httpd配置文件进行修改notify触发成功但是后面的服务名错误force_handlers: yes 关键字还是会执行handlers中的命令   Listen 1004    3编辑playbook5.yml文件  - name: handlers test   force_handlers: yes   hosts: all   tasks:     - name: install httpd service       yum:         name: httpd         state: installed     - name: copy config file       copy:         src:  /httpd.conf         dest: /etc/httpd/conf/httpd.conf       notify:          - restart service     - name: start httpd service       service:         name: http         state: started   handlers:       - name: restart service        service:         name: httpd         state: restarted   4此时执行剧本文件playbook5.yml即使后面的服务名写错了也能执行handlers [rootserver var_test]# ansible-playbook playbook5.yml       3 failed_when failed_when其实是ansible的一种错误处理机制是由fail模块使用了when条件语句的组合效果。 我们也可以直接通过fail模块和when条件语句写成如下  - name: run user    shell: /usr/local/bin/create_users.sh    register: result    ignore_errors: yes - name: fail the play if the previous command did not succeed   fail:       msg: please create user   when: not in  result.stdout   4 change_when 满足条件输出change状态  当我们控制一些远程主机执行某些任务时当任务在远程主机上成功执行状态发生更改时会返回changed状态响应状态未发生更改时会返回OK状态响应当任务被跳过时会返回skipped状态响应。我们可以通过changed_when来手动更改changed响应状态。   1Playbook5.yml案例中如果配置文件/httpd.conf并未发生改变执行显示ok [rootserver var_test]# ansible-playbook playbook5.yml    2编辑playbook5.yml文件 - name: handlers test   hosts: all   tasks:     - name: install httpd service       yum:         name: httpd         state: installed     - name: copy config file       copy:         src:  /httpd.conf         dest: /etc/httpd/conf/httpd.conf       register: cmd_v1       changed_when: not cmd_v1.changed       notify:          - restart service     - name: start httpd service       service:         name: httpd         state: started   handlers:      - name: restart service       service:         name: httpd         state: restarted     3修改后此时来执行剧本文件playbook5.yml已经由ok状态变为changed状态 [rootserver var_test]# ansible-playbook playbook5.yml     5block、rescue、always块和错误处理 通过块也可结合rescue和always语句来处理错误如果块中的任何任务失败则执行其rescue块中的任务来进行恢复。在block子句中的任务以及rescue子句中的任务如果出现故障运行之后always子句中的任务运行。 总结 block: 定义要运行的主要的任务。rescue: 定义要在block子句中定义的任务失败时运行的任务。always:定义始终都独立运行的任务不论block和rescue子句中定义的任务是否成功还是失败。block有错才会执行rescuealways怎么都会执行 案例 在playbook中实施块即使block子句中定义的任务失败rescue和always子句中定义的任务也会执行。 创建目录文件和文本文件注意如果默认路径下存在同名文件需要进一步处理才能创建该文件。 1编辑playbook7.yml文件 --- - name:   hosts: localhost   tasks:     - name: block module       block:         - name:  create directory           file:             name: /aaa             state: directory         rescue:         - name: backup filenmae           shell: mv /aaa /aaa.backup         - name: create directory force           file:             name: /aaa             state: directory             force: yes       always:         - name:  create file           file:             name: /newfile             state: touch 2执行剧本playbook7.yml文件 [rootserver var_test]# ansible-playbook playbook7.yml 3目录/aaa与文件/newfile已经被创建 [rootserver var_test]# ls -l /aaa [rootserver var_test]# ls -l /newfile [rootserver var_test]# cd /aaa
http://www.sczhlp.com/news/263621/

相关文章:

  • 公司网站建设需要哪些方面品牌策划论文
  • 石家庄住房城乡建设厅网站saas小程序开发
  • 北京建设执业资格注册网站建设黄页大全网站入口
  • 用插件做网站关于营销方面的网站
  • 国外做机械设计任务的网站网站制作原理
  • 手机模板网站生成制作互联网营销顾问
  • 定制制作网站哪家好办公室装修设计网站
  • 陕西建设厅继续教育网站如何经营自己的网站
  • 建站免费平台合肥网站运营管理公司
  • 怎么用网站做word文件电商网站开发分销商
  • 做公司网站都需要什么资料长沙网站seo推广公司
  • STL初识project11
  • 如何选择适合的海外外呼系统电销服务商?
  • 循环队列通用模版
  • 猴子测试
  • 做家政有什么网站做推广好南京医院网站建设方案
  • 江苏有什么网站找工程建设人员马尾网站建设
  • 在搜狐快站上做网站怎么跳转温州网络问政平台
  • 怎么搭建自己的博客网站汕头免费建设网站制作
  • 镇江有哪些网站怎样申请一个免费网站
  • 谁有马和人做的网站网站建设 福田
  • 建立一个公司自己的网站广东深圳网站建设方便
  • 微网站开发与制作个人总结网页设计尺寸比例
  • 找人做个网站大概多少钱四川省建设工程设备安全协会网站
  • 杭州国外网站推广公司百度网络营销的概念和含义
  • 网站建设的淘宝模板免费设计室内装修网址
  • 国内做性视频网站有哪些wordpress的DUX主题
  • 公司网站建设的策划方案wordpress 三主题
  • 仪征市建设发展有限公司网站已备案域名交易
  • 合肥官方网站建设网站制作深圳