上海网站推广行业需求电信宽带做网站

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

上海网站推广行业需求,电信宽带做网站,网站的跳出率很高,网站seo的优化怎么做RHCE8 资料整理 第 31 章 变量的使用#xff08;一#xff09;31.1 手动定义变量31.2 变量文件31.3 字典变量31.4 列表变量31.5 数字变量的运算31.6 注册变量31.7 facts变量 第 31 章 变量的使用#xff08;一#xff09; 31.1 手动定义变量 通过vars来定义变量#xff… RHCE8 资料整理 第 31 章 变量的使用一31.1 手动定义变量31.2 变量文件31.3 字典变量31.4 列表变量31.5 数字变量的运算31.6 注册变量31.7 facts变量 第 31 章 变量的使用一 31.1 手动定义变量 通过vars来定义变量vars和tasks对齐格式如下 vars:var1: value1var2: value2…定义变量时不可有重复的变量否则后面定义的变量值会覆盖前面的会有提示信息 [rootnode-137 ansible]# ansible-playbook test6.yml [WARNING]: While constructing a mapping from /opt/ansible/test6.yml, line 6, column 5, found a duplicate dict key (v1). Using last defined value only.PLAY [echo vars] **********************************************************************************************************************TASK [debug] ************************************************************************************************************************** ok: [node-138] {msg: 456 }PLAY RECAP ****************************************************************************************************************************

node-138 : ok1 changed0 unreachable0 failed0 skipped0 rescued0 ignored0[rootnode-137 ansible]# cat test6.yml

  • hosts: db1name: echo varsgather_facts: falsevars:v1: 123v2: 321v1: 456tasks:- debug: msg{{v1}}引用变量时用{{ 变量名 }}大括号内存两边有无空格均可但相同大括号之间不能有空格 {{ var }} {{var}} {{ var}} { {var}}#错误[rootnode-137 ansible]# ansible-playbook test6.yml … The offending line appears to be:tasks:- debug: msg{ {v1}}^ here [rootnode-137 ansible]# cat test6.yml —
  • hosts: db1name: echo varsgather_facts: falsevars:v1: 123v2: 321v3: 456tasks:- debug: msg{ {v1}}31.2 变量文件 如果定义的变量太多可以把变量拿出来单独放在一个文件中然后在vars_files引用此变量文件就可以直接使用文件中的变量了。该文件中变量的格式要和在playbook的vars中变量的结构一致 [rootnode-137 ansible]# ansible-playbook test6.ymlPLAY [echo vars] **********************************************************************************************************************TASK [debug] ************************************************************************************************************************** ok: [node-138] {msg: 123 }PLAY RECAP **************************************************************************************************************************** node-138 : ok1 changed0 unreachable0 failed0 skipped0 rescued0 ignored0[rootnode-137 ansible]# cat vars.yaml v1: 123 v2: 456 v3: 789 [rootnode-137 ansible]# cat test6.yml —
  • hosts: db1name: echo varsgather_facts: falsevars_files:- vars.yamltasks:- debug: msg{{v1}}也可以这样写 [rootnode-137 ansible]# cat test6.yml —
  • hosts: db1name: echo varsgather_facts: falsevars_files: vars.yamltasks:- debug: msg{{v1}}31.3 字典变量 所谓字典dictionaries简写为dict这里和python中含义相同键不能重复。 字典中如果出现了相同的变量名则后面定义的变量的值会覆盖前面的 字典是在vars中定义的语法 字典名:var1: value1var2: value2…在字典中定义变量时变量前面是不加-的且定义变量没有先后顺序 通过字典名.变量名引用变量如 [rootnode-137 ansible]# cat test6.yml —
  • hosts: db1name: echo varsgather_facts: falsevars:dict1:v1: 123v2: 345v3: 456dict2:v1: 321v2: 543v3: 654tasks:- debug: msg{{dict1.v1}}- debug: msg{{dict2.v1}} [rootnode-137 ansible]# ansible-playbook test6.ymlPLAY [echo vars] **********************************************************************************************************************TASK [debug] ************************************************************************************************************************** ok: [node-138] {msg: 123 }TASK [debug] ************************************************************************************************************************** ok: [node-138] {msg: 321 }PLAY RECAP **************************************************************************************************************************** node-138 : ok2 changed0 unreachable0 failed0 skipped0 rescued0 ignored031.4 列表变量 在playbook中列表变量和字典变量比较容易混淆语法 列表名:
  • var1: value1var2: value2var3: value1- var1: value1var2: value2var3: value1- var1: value1var2: value2var3: value1…列表中变量通过索引来引用变量所以前后变量名相同并不会覆盖。每个元素的第一个变量前都加上-表示它是该元素的第一个变量。获取元素值通过列表名[n]n从0开始。获取变量值通过列表名[n].var1。 例如 [rootnode-137 ansible]# cat test6.yml —
  • hosts: db1name: echo varsgather_facts: falsevars:list1:- v1: 123v2: 345v3: 456- v1: 789v2: 987list2:- v1: 321v2: 543v3: 654- v1: 000v2: 222tasks:- debug: msg{{list1[0]}}- debug: msg{{list2[1].v1}} [rootnode-137 ansible]# ansible-playbook test6.ymlPLAY [echo vars] **********************************************************************************************************************TASK [debug] ************************************************************************************************************************** ok: [node-138] {msg: {v1: 123,v2: 345,v3: 456} }TASK [debug] ************************************************************************************************************************** ok: [node-138] {msg: 0 }PLAY RECAP **************************************************************************************************************************** node-138 : ok2 changed0 unreachable0 failed0 skipped0 rescued0 ignored0这里变量值为整数类型所以打印的是0而非000可以在定义时改为000试试 定义列表时可以直接写值而不写变量名如 vars:list1:- 123- 345- 456这种定义方式可以转换成如下内容 list1: [v1, v2, v3]不过这种方式好像只能表示一维列表笔者也不太确定 [rootnode-137 ansible]# cat test6.yml —
  • hosts: db1name: echo varsgather_facts: falsevars:list1:- 123,431- 345- 456tasks:- debug: msg{{list1[0]}}- debug: msg{{list1[0][1]}}[rootnode-137 ansible]# ansible-playbook test6.ymlPLAY [echo vars] *********************************************************************************************************************TASK [debug] ************************************************************************************************************************** ok: [node-138] {msg: 123,431 }TASK [debug] ************************************************************************************************************************** ok: [node-138] {msg: 2 }PLAY RECAP **************************************************************************************************************************** node-138 : ok2 changed0 unreachable0 failed0 skipped0 rescued0 ignored031.5 数字变量的运算 在YAML文件中定义的变量其值如果时数字则可以进行数学运算。常见的数学运算符包括,-,,/和**幂。 计算变量aa*2和aa的3次幂 [rootnode-137 ansible]# ansible-playbook 4-vars.yamlPLAY [vars] ***************************************************************************************************************************TASK [aa2] ************************************************************************************************************************** ok: [node-138] {msg: 6 }TASK [debug] ************************************************************************************************************************** ok: [node-138] {msg: 27 }PLAY RECAP **************************************************************************************************************************** node-138 : ok2 changed0 unreachable0 failed0 skipped0 rescued0 ignored0[rootnode-137 ansible]# cat 4-vars.yaml —
  • hosts: db1name: varsgather_facts: falsevars:aa: 3tasks:- name: aa*2debug: msg{{aa*2}}- debug: msg{{aa**3}}31.6 注册变量 在playbook中用shell模块执行某个系统命令后在结果中时不会显示这个命令结果的这和在命令行中用ansible命令调用shell模块不一样 [rootnode-137 ansible]# cat 5_reg1.yml —
  • hosts: db1name: hostnamegather_facts: falsetasks:- name: display hostnameshell: hostname [rootnode-137 ansible]# ansible-playbook 5_reg1.ymlPLAY [hostname] **********************************************************************************************************************TASK [display hostname] ************************************************************************************************************** changed: [node-138]PLAY RECAP **************************************************************************************************************************** node-138 : ok1 changed1 unreachable0 failed0 skipped0 rescued0 ignored0如果想要查看shell命令的结果可以把shell命令的结果保存在一个变量中这个变量就是注册变量然后打印这个变量的值即可。 修改上面的yaml文件 [rootnode-137 ansible]# cat 5_reg1.yml —
  • hosts: db1name: hostnamegather_facts: falsetasks:- name: display hostnameshell: hostnameregister: aa- name: display aadebug: msg{{aa}} [rootnode-137 ansible]# ansible-playbook 5_reg1.ymlPLAY [hostname] **********************************************************************************************************************TASK [display hostname] ************************************************************************************************************** changed: [node-138]TASK [display aa] ********************************************************************************************************************* ok: [node-138] {msg: {ansible_facts: {discovered_interpreter_python: /usr/bin/python},changed: true,cmd: hostname,delta: 0:00:00.032575,end: 2023-12-19 17:04:41.632157,failed: false,rc: 0,start: 2023-12-19 17:04:41.599582,stderr: ,stderr_lines: [],stdout: node-138,stdout_lines: [node-138]} }PLAY RECAP **************************************************************************************************************************** node-138 : ok2 changed1 unreachable0 failed0 skipped0 rescued0 ignored0结果中msg后面的内容就是aa的值可以看到aa是一个字典。其中cmd是执行的系统命令rc是此命令的返回值stdout表示此命令的结果。 如果只获取命令结果只要打印字典aa中的stdout变量即可 [rootnode-137 ansible]# cat 5_reg1.yml —
  • hosts: db1name: hostnamegather_facts: falsetasks:- name: display hostnameshell: hostnameregister: aa- name: display aadebug: msg{{aa.stdout}} [rootnode-137 ansible]# ansible-playbook 5_reg1.ymlPLAY [hostname] **********************************************************************************************************************TASK [display hostname] ************************************************************************************************************** changed: [node-138]TASK [display aa] ********************************************************************************************************************* ok: [node-138] {msg: node-138 }PLAY RECAP **************************************************************************************************************************** node-138 : ok2 changed1 unreachable0 failed0 skipped0 rescued0 ignored031.7 facts变量 ansible通过setup模块是可以获取到被管理主机的所有信息的这些信息都是以变量的方式存在的这些变量称为facts另外如果要获取facts不能把gather_facts设置为false可以不设置默认为true或者设置为true [rootnode-137 ansible]# cat 6-fact.yaml —
  • hosts: db1name: display ipv4.addressgather_facts: truetasks:- name: display ipdebug: msg{{ansible_default_ipv4.address}}- name: display fqdndebug: msg{{ansible_fqdn}} [rootnode-137 ansible]# ansible-playbook 6-fact.yamlPLAY [display ipv4.address] **********************************************************************************************************TASK [Gathering Facts] **************************************************************************************************************** ok: [node-138]TASK [display ip] ******************************************************************************************************************** ok: [node-138] {msg: 192.168.81.138 }TASK [display fqdn] ******************************************************************************************************************* ok: [node-138] {msg: node-138 }PLAY RECAP **************************************************************************************************************************** node-138 : ok3 changed0 unreachable0 failed0 skipped0 rescued0 ignored0在本系列文章 九 29.20 使用 setup 模块获取被管理服务器信息中提到 命令行中如果filter含有子键结果不会显示所以上面命令未看到IP。不过如果把这个键写入ansible-playbook剧本中会显示哦关于playbook后面会介绍。 在此解决