ansible 变量、模块、判断、循环、渲染、jinjia、幂等性、过滤器、辛苦大总结


这里声明一下,以下所有内容,都是我百度朱双印老师的博客内容,做了一个类似大清单,方便我自己能一下查找到,没有任何其他目地,内容有错误的请大家多多包涵,谢谢大家

关键字

run_once关键字

我们就需要借助到”run_once”关键字了,”run_once”关键字能让对应的任务只运行一次

block关键字

block”关键字将多个任务整合成一个”块”,这个”块”将被当做一个整体,
我们可以对这个”块”添加判断条件,当条件成立时,则执行这个块中的所有任务
block除了能够与when结合在一起使用,还有一个很有用的功能,就是”错误处理”功能

action关键字

使用action关键字调用对应的模块,在当前版本中(博客中的ansible版本为2.4)仍然兼容这种语法

register”关键字

使用”register”关键字将当前shell任务的返回值写入了名为”testvar”的变量中,
第二个任务使用debug模块输出了第一个任务中的注册变量的值,
没错,注册变量就是这么简单,使用register关键字指定对应的变量名即可

delegate_to”关键字

通过”delegate_to”关键字,可以指定某个任务在特定的主机上执行,
这个特定的主机可以是目标主机中的某一个,也可以不是目标主机中的任何一个

ignore_errors”关键字

添加了”ignore_errors”关键字,并且设置”ignore_errors”的值为true,
表示shell模块执行报错后,ansible会忽略报错,继续执行之后的task。

with_items关键字

使用关键字”with_items”接收了返回信息,然后使用debug模块输出了名为”item”变量的变量值,
聪明如你一定已经明白了,”with_items”关键字会把返回的列表信息自动处理,
将每一条信息单独放在一个名为”item”的变量中,我们只要获取到名为”item”变量的变量值,
即可循环的获取到列表中的每一条信息所以,上例中返回信息中的每一条信息都会循环的被debug模块处理

max_fail_percentage:最大失败百分比

个人理解是允许失败的次数吧,这里请自行百度一下
max_fail_percentage:最大失败百分比

激活权限提升

become:设置为yes激活权限提升。

解压ansible管理机上的压缩文件到远程主机并设置权限

unarchive:  #解压ansible管理机上的压缩文件到远程主机并设置权限

encrypt”关键字

encrypt”关键字对字符串进行哈希加密,还能够使用”confirm”关键字实现类似确认密码的功能,
我们在为用户设置密码时,通常需要输入两次完全相同的密码,才能够设置成功,通过”confirm”关键字就能实现类似的效果

创建完目录同时创建文件

with_cartesian”关键字的作用就是将每个小列表中的元素按照”笛卡尔的方式”组合后,循环的处理每个组合
还有一个关键字可以代替”with_cartesian”,它就是”with_nested”,”with_nested”与”with_cartesian”的效果一致,可以无差别使用他们

failed_when’关键字

failed_when’关键字对应的条件成立时,’ failed_when’会将对应的任务的执行状态设置为失败,以停止playbook的运行,
但是需要注意的时,’ failed_when’虽然会将任务的执行状态设置为失败,但是并不代表任务真的失败了
理解了’ failed_when’关键字以后,顺势理解’changed_when’关键字就容易多了。
‘ failed_when’关键字的作用是在条件成立时,将对应任务的执行状态设置为失败
‘changed_when’关键字的作用是在条件成立时,将对应任务的执行状态设置为changed

loop”关键字

loop”关键字,替换了之前总结的”with_list”这种”with_X”风格的关键字,它们的效果是完全相同的

变量

include_vars

外一个变量,它可以动态的以任务的方式在合适的时机引用变量文件中的变量使用’include_vars’引入变量,
可以把变量文件中的变量全部赋值给另外一个变量

不显示搜集主机相关信息

使用变量并不显示搜集主机相关信息
gather_facts参数:指定了在任务部分执行前,是否先执行setup模块获取主机相关信息,
默认值为true,改成false之后在执行过程中不会搜集主机相关信息

幂等性

幂等性”是什么意思呢?举个例子,你想把一个文件拷贝到目标主机的某个目录上,
但是你不确定此目录中是否已经存在此文件,当你使用ansible完成这项任务时,就非常简单了,
因为如果目标主机的对应目录中已经存在此文件,那么ansible则不会进行任何操作,
如果目标主机的对应目录中并不存在此文件,ansible就会将文件拷贝到对应目录中,说白了,
ansible是”以结果为导向的”,我们指定了一个”目标状态”,ansible会自动判断,
”当前状态”是否与”目标状态”一致,如果一致,则不进行任何操作,如果不一致,
那么就将”当前状态”变成”目标状态”,这就是”幂等性”,”幂等性”可以保证我们重复的执行同一项操作时,
得到的结果是一样的

标签

使用–tags选项指定某个标签,当指定标签后,只有标签对应的任务会被执行,其他任务都不会被执行

交互式变量

我们使用”vars_prompt”关键字创建了两个变量,这两个变量的名称分别为
”your_name” 和 “your_age”,当运行上例playbook时,会出现 “What is your name”的提示信息,
然后用户输入的信息会存入到”your_name”变量中,之后,会出现 “How old are you”的提示信息,
用户输入的信息会存入到”your_age”变量中,上例中的”output vars”任务会输出一句话,
这句话中包含了上述两个变量的值

内置变量hostvars

除了ansible_version,还有一些非常有用的内置变量。比如内置变量hostvars
hostvars可以帮助我们在操作当前主机时获取到其他主机中的信息。

内置变量inventory_hostname

通过inventory_hostname变量可以获取到被操作的当前主机的主机名称,
这里所说的主机名称并不是linux系统的主机名,而是对应主机在清单中配置的名称

内置变量inventory_hostname_short

与内置变量inventory_hostname类似,通过inventory_hostname_short
也可以获取当前play操作的主机在清单中对应的名称,但是这个名称更加简短

内置变量inventory_dir

我们可以通过inventory_dir变量获取到ansible主机中清单文件的存放路径,
我使用的是默认的清单文件/etc/ansible/hosts,所以,inventory_dir变量对应的值为/etc/ansible

users变量

字典格式的users变量经过”with_dict”处理后,字典中的每个键值对被放到了item变量中,而且,
键值对中的”键”被放入了”key”关键字中,键值对中的”值”被放入了”value”关键字中,所以,
我们可以通过key关键字和value关键字分别获取到字典中键值对的”键”和”值

模块

set_fact模块

set_fact模块可以让我们在tasks中创建变量,也可以将一个变量的值赋值给另一个变量。

debug模块”。

debug模块的作用就是帮助我们进行调试的,
debug模块可以帮助我们把信息输出到ansible控制台上,以便我们能够定位问题
debug模块除了能够使用msg参数输出自定义的信息,还能够直接输出变量中的信息,
通过debug模块直接输出变量信息需要使用var参数

debug模块

debug模块除了能够使用msg参数输出自定义的信息,
还能够直接输出变量中的信息,通过debug模块直接输出变量信息需要使用var参数

template”模块

使用ansible调用”template”模块,对”模板文件”
进行渲染,根据模板生成每个主机对应的配置文件,并将最终生成的配置文件拷贝到目标主机中。

script模块

script模块,script模块可以帮助我们在远程主机上执行ansible主机上的脚本,也就是说
,脚本一直存在于ansible主机本地,不需要手动拷贝到远程主机后再执行

cron模块

cron模块可以帮助我们管理远程主机中的计划任务,功能相当于crontab命令。

yum_repository模块

yum_repository模块可以帮助我们管理远程主机上的yum仓库

meta模块

默认情况下,所有task执行完毕后,才会执行各个handler,并不是执行完某个task后,
立即执行对应的handler,如果你想要在执行完某些task以后立即执行对应的handler,则需要使用meta模块

加密文件

encrypt”是”ansible-vault”的子命令,如果我们想要加密某个文件,则可以使用”ansible-vault encrypt”命令,
执行上述命令后,会提示输入密码,你需要记住密码,因为如果你想要运行加密过的剧本,或者解密,都需要使用这个密码
(也可以使用密码文件,之后会有示例),输入两遍密码后,即可看到”Encryption successful”的字样,表示加密成功,
此刻如果再次查看test.yml文件的内容

循环

label

item的信息并没有完全显示出来,而是只显示出了item.key的值,达到了我们想要的效果,这就是label选项的作用,它可以在循环输出信息时,简化输出item的信息。
with_list、with_items、with_flattened之间的区别了,在处理简单的单层列表时,他们没有区别,
但是当处理嵌套的多层列表时,with_items与with_flattened会将嵌套列表”拉平展开”,循环的处理每个元素
,而with_list只会处理最外层的列表,将最外层的列表中的每一项循环处理
with_subelements”可以处理一个像上例中一样的复合结构的字典数据,在处理这个字典的同时,
需要指定一个子元素,这个子元素的值必须是一个列表,之后,”with_subelements”
会将子元素的列表中的每一项作为一个整体,将其他子元素作为一个整体,然后将两个整体组合成item

条件判断

绝大多数语言中,都使用”if”作为条件判断的关键字,而在ansible中,条件判断的关键字是”when”,

and  :逻辑与,当左边与右边同时为真,则返回真
or  :逻辑或,当左边与右边有任意一个为真,则返回真
not  :取反,对一个操作体取反
( )  :组合,将一组操作体包装在一起,形成一个较大的操作体
==  :比较两个对象是否相等,相等为真
!=  :比较两个对象是否不等,不等为真
>   :比较两个值的大小,如果左边的值大于右边的值,则为真
<  :比较两个值的大小,如果左边的值小于右边的值,则为真
>=  :比较两个值的大小,如果左边的值大于右边的值或左右相等,则为真
<=  :比较两个值的大小,如果左边的值小于右边的值或左右相等,则为真

判断变量的一些tests

defined :判断变量是否已经定义,已经定义则返回真
undefind :判断变量是否已经定义,未定义则返回真
none :判断变量值是否为空,如果变量已经定义,但是变量值为空,则返回真

判断执行结果的一些tests

success 或 succeeded:通过任务的返回信息判断任务的执行状态,任务执行成功则返回真
failure 或 failed:通过任务的返回信息判断任务的执行状态,任务执行失败则返回真
change 或 changed:通过任务的返回信息判断任务的执行状态,任务执行状态为changed则返回真
skip 或 skipped:通过任务的返回信息判断任务的执行状态,当任务没有满足条件,而被跳过执行时,则返回真

判断路径的一些tests

注:如下tests的判断均针对于ansible主机中的路径,与目标主机无关
file : 判断路径是否是一个文件,如果路径是一个文件则返回真
directory :判断路径是否是一个目录,如果路径是一个目录则返回真
link :判断路径是否是一个软链接,如果路径是一个软链接则返回真
mount:判断路径是否是一个挂载点,如果路径是一个挂载点则返回真
exists:判断路径是否存在,如果路径存在则返回真
注:上述test名均为2.6版本中的名称,在2.5版本之前某些test需要加上”is_”前缀

过滤器

upper”就是一个”过滤器”,执行上例playbook后你会发现,testvar中的所有小写字母都被变成了大写
字符串操作有关的过滤器

#将字符串转换成纯大写
      msg: "{{ testvar | upper }}"
      #将字符串转换成纯小写
      msg: "{{ testvar | lower }}"
      #将字符串变成首字母大写,之后所有字母纯小写
      msg: "{{ testvar | capitalize }}"
      #将字符串反转
      msg: "{{ testvar | reverse }}"
      #返回字符串的第一个字符
      msg: "{{ testvar | first }}"
      #返回字符串的最后一个字符
      msg: "{{ testvar | last }}"
      #将字符串开头和结尾的空格去除
      msg: "{{ testvar1 | trim }}"
      #将字符串放在中间,并且设置字符串的长度为30,字符串两边用空格补齐30位长
      msg: "{{ testvar1 | center(width=30) }}"
      #返回字符串长度,length与count等效,可以写为count
      msg: "{{ testvar2 | length }}"
      #将字符串转换成列表,每个字符作为一个元素
      msg: "{{ testvar3 | list }}"
      #将字符串转换成列表,每个字符作为一个元素,并且随机打乱顺序
      #shuffle的字面意思为洗牌
      msg: "{{ testvar3 | shuffle }}"
      #将字符串转换成列表,每个字符作为一个元素,并且随机打乱顺序
      #在随机打乱顺序时,将ansible_date_time.epoch的值设置为随机种子
      #也可以使用其他值作为随机种子,ansible_date_time.epoch是facts信息
      msg: "{{ testvar3 | shuffle(seed=(ansible_date_time.epoch)) }}"

数字操作有关的过滤器

 - debug:
      #将对应的值转换成int类型
      #ansible中,字符串和整形不能直接计算,比如{{ 8+'8' }}会报错
      #所以,我们可以把一个值为数字的字符串转换成整形后再做计算
      msg: "{{ 8+('8' | int) }}"
  - debug:
      #将对应的值转换成int类型,如果无法转换,默认返回0
      #使用int(default=6)或者int(6)时,如果无法转换则返回指定值6
      msg: "{{ 'a' | int(default=6) }}"
  - debug:
      #将对应的值转换成浮点型,如果无法转换,默认返回'0.0'
      msg: "{{ '8' | float }}"
  - debug:
      #当对应的值无法被转换成浮点型时,则返回指定值’8.8‘
      msg: "{{ 'a' | float(8.88) }}"
  - debug:
      #获取对应数值的绝对值
      msg: "{{ testvar4 | abs }}"
  - debug:
      #四舍五入
      msg: "{{ 12.5 | round }}"
  - debug:
      #取小数点后五位
      msg: "{{ 3.1415926 | round(5) }}"
  - debug:
      #从0到100中随机返回一个随机数
      msg: "{{ 100 | random }}"
  - debug:
      #从5到10中随机返回一个随机数
      msg: "{{ 10 | random(start=5) }}"
  - debug:
      #从5到15中随机返回一个随机数,步长为3
      #步长为3的意思是返回的随机数只有可能是5、8、11、14中的一个
      msg: "{{ 15 | random(start=5,step=3) }}"
  - debug:
      #从0到15中随机返回一个随机数,这个随机数是5的倍数
      msg: "{{ 15 | random(step=5) }}"
  - debug:
      #从0到15中随机返回一个随机数,并将ansible_date_time.epoch的值设置为随机种子
      #也可以使用其他值作为随机种子,ansible_date_time.epoch是facts信息
      #seed参数从ansible2.3版本开始可用
      msg: "{{ 15 | random(seed=(ansible_date_time.epoch)) }}"

列表操作相关的过滤器

  - debug:
      #返回列表长度,length与count等效,可以写为count
      msg: "{{ testvar7 | length }}"
  - debug:
      #返回列表中的第一个值
      msg: "{{ testvar7 | first }}"
  - debug:
      #返回列表中的最后一个值
      msg: "{{ testvar7 | last }}"
  - debug:
      #返回列表中最小的值
      msg: "{{ testvar7 | min }}"
  - debug:
      #返回列表中最大的值
      msg: "{{ testvar7 | max }}"
  - debug:
      #将列表升序排序输出
      msg: "{{ testvar7 | sort }}"
  - debug:
      #将列表降序排序输出
      msg: "{{ testvar7 | sort(reverse=true) }}"
  - debug:
      #返回纯数字非嵌套列表中所有数字的和
      msg: "{{ testvar7 | sum }}"
  - debug:
      #如果列表中包含列表,那么使用flatten可以'拉平'嵌套的列表
      #2.5版本中可用,执行如下示例后查看效果
      msg: "{{ testvar8 | flatten }}"
  - debug:
      #如果列表中嵌套了列表,那么将第1层的嵌套列表‘拉平’
      #2.5版本中可用,执行如下示例后查看效果
      msg: "{{ testvar8 | flatten(levels=1) }}"
  - debug:
      #过滤器都是可以自由结合使用的,就好像linux命令中的管道符一样
      #如下,取出嵌套列表中的最大值
      msg: "{{ testvar8 | flatten | max }}"
  - debug:
      #将列表中的元素合并成一个字符串
      msg: "{{ testvar9 | join }}"
  - debug:
      #将列表中的元素合并成一个字符串,每个元素之间用指定的字符隔开
      msg: "{{ testvar9 | join(' , ') }}"
  - debug:
      #从列表中随机返回一个元素
      #对列表使用random过滤器时,不能使用start和step参数
      msg: "{{ testvar9 | random }}"
  - debug:
      #从列表中随机返回一个元素,并将ansible_date_time.epoch的值设置为随机种子
      #seed参数从ansible2.3版本开始可用
      msg: "{{ testvar9 | random(seed=(ansible_date_time.epoch)) }}"
  - debug:
      #随机打乱顺序列表中元素的顺序
      #shuffle的字面意思为洗牌
      msg: "{{ testvar9 | shuffle }}"
  - debug:
      #随机打乱顺序列表中元素的顺序
      #在随机打乱顺序时,将ansible_date_time.epoch的值设置为随机种子
      #seed参数从ansible2.3版本开始可用
      msg: "{{ testvar9 | shuffle(seed=(ansible_date_time.epoch)) }}"
  - debug:
      #将列表中的每个元素变成纯大写
      msg: "{{ testvar10 | upper }}"
  - debug:
      #将列表中的每个元素变成纯小写
      msg: "{{ testvar10 | lower }}"
  - debug:
      #去掉列表中重复的元素,重复的元素只留下一个
      msg: "{{ testvar11 | unique }}"
  - debug:
      #将两个列表合并,重复的元素只留下一个
      #也就是求两个列表的并集
      msg: "{{ testvar11 | union(testvar12) }}"
  - debug:
      #取出两个列表的交集,重复的元素只留下一个
      msg: "{{ testvar11 | intersect(testvar12) }}"
  - debug:
      #取出存在于testvar11列表中,但是不存在于testvar12列表中的元素
      #去重后重复的元素只留下一个
      #换句话说就是:两个列表的交集在列表1中的补集
      msg: "{{ testvar11 | difference(testvar12) }}"
  - debug:
      #取出两个列表中各自独有的元素,重复的元素只留下一个
      #即去除两个列表的交集,剩余的元素
      msg: "{{ testvar11 | symmetric_difference(testvar12) }}"

常用的过滤器。

 #在调用shell模块时,如果引用某些变量时需要添加引号,则可以使用quote过滤器代替引号
  #示例如下,先看示例,后面会有注解
  - shell: "echo {{teststr | quote}} > /testdir/testfile"
    vars:
      teststr: "a\nb\nc"
  #上例中shell模块的写法与如下写法完全等效
  #shell: "echo '{{teststr}}' > /testdir/testfile"
  #没错,如你所见,quote过滤器能够代替引号
  #上例中,如果不对{{teststr}}添加引号,则会报错,因为teststr变量中包含"\n"转义符
  ######################################################################
  #ternary过滤器可以实现三元运算的效果 示例如下
  #如下示例表示如果name变量的值是John,那么对应的值则为Mr,否则则为Ms
  #简便的实现类似if else对变量赋值的效果
  - debug: 
      msg: "{{ (name == 'John') | ternary('Mr','Ms') }}"
    vars:
      name: "John"
  ######################################################################
  #basename过滤器可以获取到一个路径字符串中的文件名
  - debug:
      msg: "{{teststr | basename}}"
    vars:
      teststr: "/testdir/ansible/testfile"
  ######################################################################
  #获取到一个windows路径字符串中的文件名,2.0版本以后的ansible可用
  - debug:
      msg: "{{teststr | win_basename}}"
    vars:
      teststr: 'D:\study\zsythink'
  ######################################################################
  #dirname过滤器可以获取到一个路径字符串中的路径名
  - debug:
      msg: "{{teststr | dirname}}"
    vars:
      teststr: "/testdir/ansible/testfile"
  ######################################################################
  #获取到一个windows路径字符串中的文件名,2.0版本以后的ansible可用
  - debug:
      msg: "{{teststr | win_dirname}}"
    vars:
      teststr: 'D:\study\zsythink'
  ######################################################################
  #将一个windows路径字符串中的盘符和路径分开,2.0版本以后的ansible可用
  - debug:
      msg: "{{teststr | win_splitdrive}}"
    vars:
      teststr: 'D:\study\zsythink'
  #可以配合之前总结的过滤器一起使用,比如只获取到盘符,示例如下
  #msg: "{{teststr | win_splitdrive | first}}"
  #可以配合之前总结的过滤器一起使用,比如只获取到路径,示例如下
  #msg: "{{teststr | win_splitdrive | last}}"
  ######################################################################
  #realpath过滤器可以获取软链接文件所指向的真正文件
  - debug:
      msg: "{{ path | realpath }}"
    vars:
      path: "/testdir/ansible/testsoft"
  ######################################################################
  #relpath过滤器可以获取到path对于“指定路径”来说的“相对路径”
  - debug:
      msg: "{{ path | relpath('/testdir/testdir') }}"
    vars:
      path: "/testdir/ansible"
  ######################################################################
  #splitext过滤器可以将带有文件名后缀的路径从“.后缀”部分分开
  - debug:
      msg: "{{ path | splitext }}"
    vars:
      path: "/etc/nginx/conf.d/test.conf"
  #可以配置之前总结的过滤器,获取到文件后缀
  #msg: "{{ path | splitext | last}}"
  #可以配置之前总结的过滤器,获取到文件前缀名
  #msg: "{{ path | splitext | first | basename}}"
  ######################################################################
  #to_uuid过滤器能够为对应的字符串生成uuid
  - debug:
      msg: "{{ teststr | to_uuid }}"
    vars:
      teststr: "This is a test statement" 
  ######################################################################
  #bool过滤器可以根据字符串的内容返回bool值true或者false
  #字符串的内容为yes、1、True、true则返回布尔值true,字符串内容为其他内容则返回false
  - debug:
      msg: "{{ teststr | bool }}"
    vars:
      teststr: "1"
  #当和用户交互时,有可能需要用户从两个选项中选择一个,比如是否继续,
  #这时,将用户输入的字符串通过bool过滤器处理后得出布尔值,从而进行判断,比如如下用法
  #- debug:
  #    msg: "output when bool is true"
  #  when: some_string_user_input | bool
  ######################################################################
  #map过滤器可以从列表中获取到每个元素所共有的某个属性的值,并将这些值组成一个列表
  #当列表中嵌套了列表,不能越级获取属性的值,也就是说只能获取直接子元素的共有属性值。
  - vars:
      users:
      - name: tom
        age: 18
        hobby:
        - Skateboard
        - VideoGame
      - name: jerry
        age: 20
        hobby:
        - Music
    debug:
      msg: "{{ users | map(attribute='name') | list }}"
  #也可以组成一个字符串,用指定的字符隔开,比如分号
  #msg: "{{ users | map(attribute='name') | join(';') }}"
  ######################################################################
  #与python中的用法相同,两个日期类型相减能够算出两个日期间的时间差
  #下例中,我们使用to_datatime过滤器将字符串类型转换成了日期了类型,并且算出了时间差
  - debug:
      msg: '{{ ("2016-08-14 20:00:12"| to_datetime) - ("2012-12-25 19:00:00" | to_datetime) }}'
  #默认情况下,to_datatime转换的字符串的格式必须是“%Y-%m-%d %H:%M:%S”
  #如果对应的字符串不是这种格式,则需要在to_datetime中指定与字符串相同的时间格式,才能正确的转换为时间类型
  - debug:
      msg: '{{ ("20160814"| to_datetime("%Y%m%d")) - ("2012-12-25 19:00:00" | to_datetime) }}'
  #如下方法可以获取到两个日期之间一共相差多少秒
  - debug:
      msg: '{{ ( ("20160814"| to_datetime("%Y%m%d")) - ("20121225" | to_datetime("%Y%m%d")) ).total_seconds() }}'
  #如下方法可以获取到两个日期“时间位”相差多少秒,注意:日期位不会纳入对比计算范围
  #也就是说,下例中的2016-08-14和2012-12-25不会纳入计算范围
  #只是计算20:00:12与08:30:00相差多少秒
  #如果想要算出连带日期的秒数差则使用total_seconds()
  - debug:
      msg: '{{ ( ("2016-08-14 20:00:12"| to_datetime) - ("2012-12-25 08:30:00" | to_datetime) ).seconds }}'
  #如下方法可以获取到两个日期“日期位”相差多少天,注意:时间位不会纳入对比计算范围
  - debug:
      msg: '{{ ( ("2016-08-14 20:00:12"| to_datetime) - ("2012-12-25 08:30:00" | to_datetime) ).days }}'
  ######################################################################
  #使用base64编码方式对字符串进行编码
  - debug:
      msg: "{{ 'hello' | b64encode }}"
  #使用base64编码方式对字符串进行解码
  - debug:
      msg: "{{ 'aGVsbG8=' | b64decode }}"
  #######################################################################
  #使用sha1算法对字符串进行哈希
  - debug:
      msg: "{{ '123456' | hash('sha1') }}"
  #使用md5算法对字符串进行哈希
  - debug:
      msg: "{{ '123456' | hash('md5') }}"
  #获取到字符串的校验和,与md5哈希值一致
  - debug:
      msg: "{{ '123456' | checksum }}"
  #使用blowfish算法对字符串进行哈希,注:部分系统支持
  - debug:
      msg: "{{ '123456' | hash('blowfish') }}"
  #使用sha256算法对字符串进行哈希,哈希过程中会生成随机"盐",以便无法直接对比出原值
  - debug:
      msg: "{{ '123456' | password_hash('sha256') }}"
  #使用sha256算法对字符串进行哈希,并使用指定的字符串作为"盐"
  - debug:
      msg: "{{ '123456' | password_hash('sha256','mysalt') }}"
  #使用sha512算法对字符串进行哈希,哈希过程中会生成随机"盐",以便无法直接对比出原值
  - debug:
      msg: "{{ '123123' | password_hash('sha512') }}"
  #使用sha512算法对字符串进行哈希,并使用指定的字符串作为"盐"
  - debug:
      msg: "{{ '123123' | password_hash('sha512','ebzL.U5cjaHe55KK') }}"
  #如下方法可以幂等的为每个主机的密码生成对应哈希串
  #有了之前总结的过滤器用法作为基础,你一定已经看懂了
  - debug:
      msg: "{{ '123123' | password_hash('sha512', 65534|random(seed=inventory_hostname)|string) }}"
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值