网站设计网站建设交通人才网站

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

网站设计网站,建设交通人才网站,唐河微网站建设,原创wordpress模板文章目录 六、playbook运行playbook方式Playbook VS ShellScripts忽略错误 ignore_errorshandlers和notify结合使用触发条件playbook中tags的使用playbook中变量的使用invertory参数模板templates迭代与条件判断迭代#xff1a;with_items迭代嵌套子变量roles 六、playbook 运… 文章目录 六、playbook运行playbook方式Playbook VS ShellScripts忽略错误 ignore_errorshandlers和notify结合使用触发条件playbook中tags的使用playbook中变量的使用invertory参数模板templates迭代与条件判断迭代with_items迭代嵌套子变量roles 六、playbook 运行playbook方式 ansible-playbook filename.yml … [options] 常见选项 –check (-C)只检测可能会发生的改变但不真正执行操作 –list-hosts 列出运行任务的主机 –limit 主机列表 只针对主机列表中的主机执行 -i 指定主机清单hosts -v 显示过程 -vv -vvv更详细 -t 指定执行的tags名称 示例 ansible-playbook file.yml –check 只检测 ansible-playbook –syntax-check file.yml 检查yaml文件是否正确 ansible-playbook file.yml –limit webserver 指定执行的机器 ansible-playbook file.yml –list-hosts # 查看主机 ansible-playbook file.yml –list-tasks #查看任务列表 ansible-playbook file.yml –list-tags # 查看标签注意 上图中copy连续使用两次这是错误操作这种操作只会执行最下面的copy其余copy不会执行应该将其分开分为两个name。
Playbook VS ShellScripts 安装httpd SHELL脚本 #!/bin/bash

安装Apache

yum install –quiet -y httpd

复制配置文件

cp /tmp/httpd.conf /etc/httpd/conf/httpd.conf cp/tmp/vhosts.conf /etc/httpd/conf.d/

启动Apache并设置开机启动

service httpd start

chkconfig httpd onPlaybook定义

  • hosts: allremote_user: roottasks:- name: 安装Apacheyum: namehttpd yum模块:安装httpd- name: 复制配置文件copy: src/tmp/httpd.conf dest/etc/httpd/conf/ copy模块: 拷贝文件- name: 复制配置文件copy: src/tmp/vhosts.conf dest/etc/httpd/conf.d/ - name: 启动Apache并设置开机启动service: namehttpd statestarted enabledyes service模块: 启动服务忽略错误 ignore_errors 如果一个task出错默认将不会继续执行其他task 利用ignore_errors:yes 可以忽略次task的错误继续指定playbook其他task —
  • hosts: alltasks- name: errorignore_errors: yeshandlers和notify结合使用触发条件 handlers 是tasks列表这些task与前述的task并没有本质上的不同用于当关注的资源发生变化时才会采取一定的操作 notify 此action可用于在每个play的最后被出发这样可以避免多次有改变发生时每次都执行指定的操作仅在所有的变化发生完后一次性执行指定的操作。在notify中列出的操作称为handler也即notify中调用handler中定义的操作 注意 如果多个task通知了相同的handlers此handlers仅会在所有task结束后运行一次 只有notify对应的task发生改变才会通知handlers handlers实在所有前面的task执行成功之后才触发可以使用force_handlers: yes强制执行handlers
  • hosts: allremote_user: rootforce_handlers: yes #强制执行handlerstasks:- name: install Apacheyum: namehttpd stateinstalled- name: copy confcopy: src/etc/httpd/conf/httpd.conf dest/etc/httpd/conf/ backupyesnotify: service restart- name: service Apacheservice: namehttpd statestarted enabledyeshandlers:- name: service restartservice: namehttpd staterestarted 小贴士selinux的开启导致apache更换端口后启动不成功。playbook中tags的使用 ansible-playbook -t conf httpd.yml 【使用-t 指定标签名字】 ansible-playbook -t conf,service httpd.yml ansible-playbook httpd.yml –list-tsgs #查看标签列表 注意tags标签命名可以相同不通模块下写入相同tags标签执行时打入标签的模块会同时执行 playbook中变量的使用 变量名仅能由字母、数字和下划线组成且只能以字母开头 setup模块显示主机所有变量 变量的优先级命令行中的-e playbook中定义的变量 主机清单中定义的变量 变量来源 使用setup变量示例var.yml- hosts: websrvsremote_user: roottasks:- name: create log filefile: name/var/log/ {{ ansible_fqdn }} statetouchansible-playbook var.ymlansible setup facts 远程主机的所有变量都可直接调用 (系统自带变量)setup模块可以实现系统中很多系统信息的显示可以返回每个主机的系统信息包括:版本、主机名、cpu、内存ansible all -m setup -a filteransible_nodename 查询主机名ansible all -m setup -a filteransible_memtotal_mb 查询主机内存大小ansible all -m setup -a filteransible_distribution_major_version 查询系统版本ansible all -m setup -a filteransible_processor_vcpus 查询主机cpu个数2 在/etc/ansible/hosts(主机清单)中定义变量普通变量主机组中主机单独定义优先级高于公共变量(单个主机 )公共(组)变量针对主机组中所有主机定义统一变量(一组主机的同一类别)通过命令行传递变量在运行playbook的时候也可以传递一些变量供playbook使用 示例var.yml
  • hosts: websrvsremote_user: roottasks:- name: install packageyum: name{{ pkname }} statepresentansible-playbook –e pknamehttpd var.yml通过命令行指定变量优先级最高 在playbook中定义 示例var.yml
  • hosts: websrvsremote_user: root vars:- username: user1- groupname: group1 tasks:- name: create groupgroup: name{{ groupname }} statepresent- name: create useruser: name{{ username }} statepresentansible-playbook var.yml ansible-playbook -e usernameuser2 groupnamegroup2” var2.yml变量文件中引用 cat vars.yml var1: httpd var2: nginxcat var.yml
  • hosts: webremote_user: rootvars_files:- vars.ymltasks:- name: create httpd logfile: name/app/{{ var1 }}.log statetouch- name: create nginx logfile: name/app/{{ var2 }}.log statetouchhostname app81.magedu.com hostname 不支持,认为_是非法字符 hostnamectl set-hostname app_80.magedu.com 可以更改主机名 在role中定义变量命名:变量名仅能由字母、数字和下划线组成且只能以字母开头变量定义keyvalue示例http_port80变量调用方式1 通过{{ variable_name }} 调用变量且变量名前后必须有空格有时用“{{ variable_name }}”才生效2 ansible-playbook –e 选项指定ansible-playbook test.yml -e hostswww usermagedu 在主机清单中定义变量,在ansible中使用变量 vim /etc/ansible/hosts [appsrvs] 192.168.38.17 http_port817 namewww 192.168.38.27 http_port827 nameweb调用变量 ansible appsrvs -m hostname -aname{{name}} 更改主机名为各自被定义的变量 针对一组设置变量 [appsrvs:vars] make-ansible appsrvs -m hostname -a name{{name}}{{mark}}{{http_port}} ansible调用变量针对主机和主机组的变量 主机变量 可以在inventory中定义主机时为其添加主机变量以便于在playbook中使用 [websrvs] www1.magedu.com http_port80 maxRequestsPerChild808 www2.magedu.com http_port8080 maxRequestsPerChild909组变量 组变量是指赋予给指定组内所有主机上的在playbook中可用的变量[websrvs]www1.magedu.comwww2.magedu.com[websrvs:vars]ntp_serverntp.magedu.comnfs_servernfs.magedu.com普通变量[websrvs]192.168.99.101 http_port8080 hnamewww1192.168.99.102 http_port80 hnamewww2公共组变量[websvrs:vars]httpport808mark[websrvs]192.168.99.101 http_port8080 hnamewww1192.168.99.102 http_port80 hnamewww2ansible websvrs –m hostname –a ‘name{{ hname }}{{ mark }}{{ http_port }}’组嵌套 inventory中组还可以包含其它的组并且也可以向组中的主机指定变量。 这些变量只能在ansible-playbook中使用而ansible命令不支持[apache]httpd1.magedu.comhttpd2.magedu.com[nginx]ngx1.magedu.comngx2.magedu.com[websrvs:children]apachenginx[webservers:vars]ntp_serverntp.magedu.cominvertory参数 invertory参数用于定义ansible远程连接目标主机时使用的参数而非传递给playbook的变量ansible_ssh_hostansible_ssh_portansible_ssh_useransible_ssh_passansbile_sudo_pass示例cat /etc/ansible/hosts[websrvs]192.168.0.1 ansible_ssh_userroot ansible_ssh_passmagedu192.168.0.2 ansible_ssh_userroot ansible_ssh_passmagedu模板templates 文本文件嵌套有脚本使用模板编程语言编写 jinja2语言使用字面量有下面形式: 字符串使用单引号或者双引号 数字整数浮点数 列表[item1itme2,…] 元组item1itme2,… 字典{key1:value1,key2:value2,…} 布尔型true/false 算术运算-*///%** 比较操作,,,,, 逻辑运算and,or,not 流表达式For If When循环语句 小记在模板目录template下写入模板文件文件中可以直接调用setup变量src可以直接书写模板目录下的文件 迭代与条件判断 when 条件测试如果需要根据变量facts或此前任务的执行结果来作为某task执行与否的前提时要用到条件测试通过when语句实现在task中使用jinja2的语法格式 when语句 在task后添加when子句即可使用户条件测试when语句支持jinji2表达式语法 示例 name: ‘shutdown redhad flavored systems’ command: /sbin/shutdown -h now when: ansible_os_family “RedHat” 迭代with_items 迭代当有需要重复执行的任务时可以使用迭代机制 对迭代项的引用固定变量名为“iftem” 要在task中使用with_items给定要迭代的元素列表 列表格式 字符串 字典
    迭代嵌套子变量 playbook中template模板对于for if 循环的使用
    for yml文件 —
  • hosts: web serverremote_user: rootvars:ports:- listen_port: 84- listen_port: 85- listen_port: 86tasks:- name: copy conftemplate: srcfor1.conf.j2 dest/data/for1.conf 模板文件 {% for port in ports %} #port自定义变量 server{listen {{ port.listen_port }} } {% endfor %}yml文件 —
  • hosts: webremote_user: rootvars:ports:- web1:port: 81name: web1.magedu.comrootdir: /data/website1- web2:port: 82name: web2.magedu.comrootdir: /data/website2tasks:- name: copy conftemplate: srcfor2.conf.j2 dest/data/for2.conf模板文件 {% for p in ports %} #p自定义变量 server{listen {{ p.port }}servername {{ p.name }}documentroot {{ p.rootdir }} } {% endfor %}if yml文件 —
  • hosts: webremote_user: rootvars:ports:- web1:port: 81name: web1.magedu.comrootdir: /data/website1- web2:port: 82#name: web2.magedu.comrootdir: /data/website2tasks:- name: copy conftemplate: srcif.conf.j2 dest/data/if.conf模板文件 {% for p in ports %} server{listen {{ p.port }} {% if p.name is defined %} #如果p.name被定义就执行下面的servername否则不执行servername {{ p.name }} {% endif %}documentroot {{ p.rootdir }} } {% endfor %}roles ansible自1.2版本引入的新特性用于层次性结构化地组织playbook。roles能够根据层次结构自动装载变量文件、tasks以及handlers等。要使用roles只需要在playbook中使用include指令即可。简单来讲roles就是通过分别将变量、文件、任务、模板及处理器放置于单独的目录中并可以便捷地include它们的一种机制。角色一般用于主机构建服务的场景中但也可以使用于构建守护进程等场景中 复杂场景建议使用roles代码复用度高 变更指定主机或主机组 如命令不规范维护和传承成本大 某些功能需要多个playbook通过includes可以实现 roles的使用
    roles目录结构 playbook.yml roles project/ tasks/ files/ vars/ 不常用 defaults/ 不常用 templates/ handlers/ meta/ 不常用 roles各目录的作用 /roles/project/:项目名称有以下目录 files/存放由copy模块或scripts模块等调用的文件 template/template模块查找所需要模板文件的目录 tasks/定义tasksroles的基本元素至少应该包含一个名为main.yml的文件其他的文件需要在此文件中通过include进行调用 handlers/至少应该包含一个名为main.yml的文件其他的文件需要在此文件中通过include进行调用 vars/定义变量至少应该包含一个名为main.yml的文件其他的文件需要在此文件中通过include进行调用 meta/定义当前角色的特殊设定及其依赖关系至少应该包含一个名为main.yml的文件其他的文件需要在此文件中通过include进行调用 default/设定默认变量时使用此目录中的main.yml文件