Ansible常用模块

cron 模块

用途:cron模块⽤于设置定时任务,也⽤于管理定时任务中的环境变量
使用方法:

  1. [root@ansible ~]# ansible-doc -s cron
  2. - name: Manage cron.d and crontab entries
  3. cron:
  4. backup: # (yes/on)如果设置了,则会在修改远程cron_file前备份这些文件
  5. cron_file: # 自定义cron_file的文件名,使用相对路径则表示在/etc/cron.d/中,必选同时制定user选项
  6. minute: # 分(0-59,*,/N),不写时默认为*
  7. hour: # 时(0-23,*,/N),不写时默认为*
  8. day: # 日(1-31,*,/N),不写时默认为*
  9. month: # 月(1-12,*,/N),不写时默认为*
  10. weekday: # 周(0-6 for Sunday-Saturday,*),不写时默认为*
  11. disabled: # 禁用crontab中的某个任务,要求state=present
  12. env: # (yes/on)设置一个环境变量,将添加在crontab的顶端,使用name=value定义变量名和值.
  13. job: # 需要执行的命令,如果设置了env,则表示环境变量的值,此时job="xxxx"等价于value="xxxx"
  14. name: # 描述crontab的字符串,但如果设置的是env,则name为环境变量的名称,要求state=absent,注意,若没有设置name,且state=present,则总会创建一条新的job条目,即使cron_file中已经存在同样的条目.
  15. reboot: # 如果任务应该在重新启动时运行。不赞成使用此选项。用户应该使用special_time.
  16. special_time: # 定时任务的别称,用于定义何时运行job条目.有效值有reboot/hourly/daily/weekly/monthly/yearly/annually
  17. state: # job或者env的状态是present(默认)还是absent,present用于创建,absent用于删除
  18. user: # 指定那个用户的crontab任务将要被修改,默认root.

示例:

  1. 1)每分钟执行一次同步阿里云的时间
  2. [root@ansible ~]# ansible all -m cron -a "name='ntpdate aly' minute=*/1 job='/usr/sbin/ntpdate ntp1.aliyun.com'"
  3. 192.168.192.129 | CHANGED => {
  4. "changed": true,
  5. "envs": [],
  6. "jobs": [
  7. "ntpdate aly"
  8. ]
  9. }
  10. 查看结果(已经创建一条同步时间的计划任务)
  11. [root@ansible ~]# ansible all -m shell -a "crontab -l"
  12. 192.168.192.129 | CHANGED | rc=0 >>
  13. #Ansible: ntpdate aly
  14. */1 * * * * /usr/sbin/ntpdate ntp1.aliyun.com
  15.  
  16. 2)backup参数(备份cron文件)
  17. [root@ansible ~]# ansible all -m cron -a "name='ntpdate aly' minute=0 hour=0 day=* month=* weekday=* backup=yes job='/usr/sbin/ntpdate ntp1.aliyun.com'"
  18. 192.168.192.129 | CHANGED => {
  19. "backup_file": "/tmp/crontabJOrXXY",
  20. "changed": true,
  21. "envs": [],
  22. "jobs": [
  23. "ntpdate aly"
  24. ]
  25. }
  26. 上面返回的结果中包含一个backup_file,备份的文件在被控制端的/tmp下面
  27. 查看结果(可以看到计划任务改变,和被控制端的备份文件)
  28. [root@ansible ~]# ansible all -m shell -a "crontab -l && ls -l /tmp | grep crontab"
  29. 192.168.192.129 | CHANGED | rc=0 >>
  30. #Ansible: ntpdate aly
  31. 0 0 * * * /usr/sbin/ntpdate ntp1.aliyun.com
  32. -rw------- 1 root root 68 Dec 27 10:47 crontabJOrXXY
  33.  
  34. 3)env参数(设置环境变量)
  35. [root@ansible ~]# ansible all -m cron -a "env=yes name='TEST' backup=yes job='echo test'"
  36. 192.168.192.129 | CHANGED => {
  37. "backup_file": "/tmp/crontabFgNUhH",
  38. "changed": true,
  39. "envs": [
  40. "TEST"
  41. ],
  42. "jobs": [
  43. "ntpdate aly"
  44. ]
  45. }
  46. 查看结果(发现在开头多了个TEST="echo test",也就是说明env=yes的时候name='TEST'就是变量名job='echo test'就是变量的值)
  47. [root@ansible ~]# ansible all -m shell -a "crontab -l"
  48. 192.168.192.129 | CHANGED | rc=0 >>
  49. TEST="echo test"
  50. #Ansible: ntpdate aly
  51. 0 0 * * * /usr/sbin/ntpdate ntp1.aliyun.com
  52.  
  53. 4)special_time参数
  54. 重启时执行任务
  55. [root@ansible ~]# ansible all -m cron -a "name='special time reboot' special_time=reboot job='echo test'"
  56. 192.168.192.129 | CHANGED => {
  57. "changed": true,
  58. "envs": [
  59. "TEST"
  60. ],
  61. "jobs": [
  62. "ntpdate aly",
  63. "special time reboot"
  64. ]
  65. }
  66. 查看结果
  67. [root@ansible ~]# ansible all -m shell -a "crontab -l"
  68. 192.168.192.129 | CHANGED | rc=0 >>
  69. TEST="echo test"
  70. #Ansible: ntpdate aly
  71. 0 0 * * * /usr/sbin/ntpdate ntp.aliyun.com
  72. #Ansible: special time reboot
  73. @reboot echo test
  74.  
  75. 每小时执行一次计划任务
  76. [root@ansible ~]# ansible all -m cron -a "name='special time reboot' special_time=hourly job='echo test'"
  77. 192.168.192.129 | CHANGED => {
  78. "changed": true,
  79. "envs": [
  80. "TEST"
  81. ],
  82. "jobs": [
  83. "ntpdate aly",
  84. "special time reboot"
  85. ]
  86. }
  87. 查看结果
  88. [root@ansible ~]# ansible all -m shell -a "crontab -l"
  89. 192.168.192.129 | CHANGED | rc=0 >>
  90. TEST="echo test"
  91. #Ansible: ntpdate aly
  92. 0 0 * * * /usr/sbin/ntpdate ntp.aliyun.com
  93. #Ansible: special time reboot
  94. @hourly echo test
  95.  
  96. 上面发现@reboot echo test换成了@hourly echo test原因是因为两次执行的name的名字是一样的所有直接就覆盖了
  97.  
  98. 5)state=absent(删除计划任务)
  99. [root@ansible ~]# ansible all -m cron -a "name='special time reboot' backup=yes state=absent"
  100. 192.168.192.129 | CHANGED => {
  101. "backup_file": "/tmp/crontab02rAD6",
  102. "changed": true,
  103. "envs": [
  104. "TEST"
  105. ],
  106. "jobs": [
  107. "ntpdate aly"
  108. ]
  109. }
  110. 查看结果(发现special time reboot任务已经删除了)
  111. [root@ansible ~]# ansible all -m shell -a "crontab -l"
  112. 192.168.192.129 | CHANGED | rc=0 >>
  113. TEST="echo test"
  114. #Ansible: ntpdate aly
  115. 0 0 * * * /usr/sbin/ntpdate ntp.aliyun.com

service 模块

用途:service 模块可以帮助我们管理远程主机上的服务。比如,启动或停止远程主机中的 nginx 服务
使用方法:

  1. [root@ansible ~]# ansible-doc -s service
  2. - name: Manage services
  3. service:
  4. arguments: # 服务命令行参数传递
  5. enabled: # 设置服务为开机自启(yes/no),默认为no
  6. name: # (必选项)指定服务名.
  7. pattern: # 如果服务没有做出相应,可以通过这个参数指定使用ps或者其他方式查看服务的状态.
  8. runlevel: # 设置服务启动级别
  9. sleep: # 如果服务正在"重新启动",那么在停止和开始命令之间设置休眠时间.
  10. state: # started和stoped分别是启动和停止服务,它们是幂等操作,多次启动或者停止服务都是一样的,也就是说对于运行中的服务不会再次启动操作,同理停止也是一样的;
  11. # restarted重启服务,restarted总是重读配置文件如果服务是未运⾏状态,则reloaded会启动服务(state和enabled两者⾄少要给⼀个)

示例:

  1. nginx服务为例做示例(这里面返回的打印的数据太多了就不放到博客了)
  2. 1)state=started(启动服务)
  3. [root@ansible ~]# ansible all -m service -a "name=nginx state=started"
  4.  
  5. 2)state=stopped(停止服务)
  6. [root@ansible ~]# ansible all -m service -a "name=nginx state=stopped"
  7.  
  8. 3)state=restarted(重启服务)
  9. [root@ansible ~]# ansible all -m service -a "name=nginx state=restarted"
  10.  
  11. 4)state=reloaded(重载服务)
  12. [root@ansible ~]# ansible all -m service -a "name=nginx state=reloaded"
  13.  
  14. 5)enabled(设置开机自启)
  15. [root@ansible ~]# ansible all -m service -a "name=nginx enabled=yes"

systemd 模块

用途:systemd 模块可以帮助我们使用systemd管理远程主机上的服务。比如,启动或停止远程主机中的 nginx 服务
使用方法:

  1. [root@ansible ~]# ansible-doc -s systemd
  2. - name: Manage services
  3. systemd:
  4. daemon_reload: # 在执行任何其他操作之前运行守护进程重新加载,以确保systemd已经读取其他更改.
  5. enabled: # 设置服务为开机自启(yes/no),默认为no
  6. force: # 是否覆盖现有符号链接(yes/on).
  7. masked: # 是否将服务设置为masked状态(yes/no),被mask的服务是无法启动的
  8. name: # 指定服务名称.
  9. no_block: # 不要同步等待操作请求完成(yes/no)
  10. state: # started和stoped分别是启动和停止服务,它们是幂等操作,多次启动或者停止服务都是一样的,也就是说对于运行中的服务不会再次启动操作,同理停止也是一样的;

示例:

  1. nginx服务为例做示例(这里面返回的打印的数据太多了就不放到博客了)
  2. 1)state=started(启动服务)
  3. [root@ansible ~]# ansible all -m systemd -a "name=nginx state=started"
  4.  
  5. 2)state=stopped(停止服务)
  6. [root@ansible ~]# ansible all -m systemd -a "name=nginx state=stopped"
  7.  
  8. 3)state=restarted(重启服务)
  9. [root@ansible ~]# ansible all -m systemd -a "name=nginx state=restarted"
  10.  
  11. 4)state=reloaded(重载服务)
  12. [root@ansible ~]# ansible all -m systemd -a "name=nginx state=reloaded"
  13.  
  14. 5)enabled(设置开机自启)
  15. [root@ansible ~]# ansible all -m systemd -a "name=nginx enabled=yes"

user 模块

用途:user 模块可以帮助我们管理远程主机上的用户,比如创建用户、修改用户、删除用户、为用户创建密钥对等操作
使用方法:

  1. [root@ansible ~]# ansible-doc -s user
  2. - name: Manage user accounts
  3. user:
  4. append: # 如果用户原本就存在多个附加组,那么当使用 groups 参数设置附加组时,当前设置会覆盖原来的附加组设置
  5. # 如果不想覆盖原来的附加组设置,需要结合 append 参数,将 append 设置为 yes,表示追加附加组到现有的附加组设置,append 默认值为 no.
  6. comment: # 设置用户的描述信息
  7. create_home: # 创建家⽬录,或者已有的⽤户但家⽬录不存在也会创建。设置为no则不创建家⽬录
  8. expires: # 此参数用于指定用户的过期时间,相当于设置 /etc/shadow 文件中的的第8列
  9. # 比如,你想要设置用户的过期日期为2018年12月31日,那么你首先要获取到2018年12月31日的 unix 时间戳,使用命令 “date -d 2018-12-31 +%s” 获取到的时间戳为1546185600,
  10. # 所以,当设置 expires=1546185600 时,表示用户的过期时间为2018年12月31日0点0分,
  11. # 设置成功后,查看远程主机的 /etc/shadow 文件,对应用户的第8八列的值将变成17895(表示1970年1月1日到2018年12月31日的天数,unix 时间戳的值会自动转换为天数,我们不用手动的进行换算,
  12. # 目前此参数只支持在 Linux 和 FreeBSD 系统中使用。
  13. force: # 强制删除用户、用户目录,只在state=absent中生效,相当于userdel --force命令
  14. generate_ssh_key: # 是否为相关用户生成SSH密钥。这将“不会”覆盖现有SSH密钥.
  15. group: # 设置⽤户的primary group(主组).
  16. groups: # 将⽤户加⼊到辅助组列表中。如果设置"groups=",则会将此⽤户从所有辅助组中移除
  17. home: # 指定要创建的家⽬录路径
  18. move_home: # 如果设置为yes,则"home="则表⽰将家⽬录移动到此选项指定的路径下
  19. name: # (必选项)要创建、修改、移除的⽤户名.
  20. non_unique: # 当与 -u 选项一起使用时,该选项允许将用户ID更改为非唯一值
  21. password: # 设置⽤户密码。此处只能使⽤加密密码作为值.
  22. password_lock: # 锁定用户的密码(等价于usermod -L命令)这个选项并不总是意味着用户不能通过其他方法登录。这个选项没有禁用用户,只锁定密码.
  23. remove: # 配合'state=absent'时,等价于'userdel --remove',即删除家⽬录和邮件列表
  24. seuser: # 在启用selinux的系统上设置seuser类型.
  25. shell: # 设置⽤户的shell
  26. ssh_key_bits: # 当 generate_ssh_key 参数的值为 yes 时,使用此参数指定要创建的SSH密钥中的位数.
  27. ssh_key_comment: # 当 generate_ssh_key 参数的值为 yes 时,在创建证书时,使用此参数设置公钥中的注释信息。但是如果同名的密钥对已经存在,则并不会修改原来的注释信息,即不做任何操作。
  28. # 当不指定此参数时,默认的注释信息为”ansible-generated on 远程主机的主机名.
  29. ssh_key_file: # 当 generate_ssh_key 参数的值为 yes 时,使用此参数自定义生成 ssh 私钥的路径和名称,对应公钥会在同路径下生成,公钥名以私钥名开头,以”.pub”结尾.
  30. ssh_key_passphrase: # 当 generate_ssh_key 参数的值为 yes 时,在创建证书时,使用此参数设置私钥的密码。但是如果同名的密钥对已经存在,则并不会修改原来的密码,即不做任何操作.
  31. ssh_key_type: # 当 generate_ssh_key参数的值为yes时,在创建证书时,使用此参数设置密钥对的类型。默认密钥类型为 rsa,但是如果同名的密钥对已经存在,并不会对同名密钥做任何操作.
  32. state: # 创建⽤户(present)还是删除⽤户(absent)。默认为present.
  33. system: # 设置为yes表⽰创建⼀个系统⽤户,只能⽤于创建,不能⽤于修改已有⽤户为系统⽤户
  34. uid: # 设置用户的UID
  35. update_password: # user是幂等模块,"always"将总是修改密码。"on_create"将只在创建⽤户时设置密码

示例:

  1. 1)name参数(创建用户)
  2. 创建名为brian的用户,如果用户已经存在,则不进行任何操作
  3. [root@ansible ~]# ansible all -m user -a "name=brian"
  4. 192.168.192.129 | CHANGED => {
  5. "changed": true,
  6. "comment": "",
  7. "create_home": true,
  8. "group": 1000,
  9. "home": "/home/brian",
  10. "name": "brian",
  11. "shell": "/bin/bash",
  12. "state": "present",
  13. "system": false,
  14. "uid": 1000
  15. }
  16.  
  17. 2)state=absent参数(删除用户但不删除目录)
  18. 删除名为brian的用户,但是不会删除 brian 用户的家目录
  19. [root@ansible ~]# ansible all -m user -a "name=brian state=absent"
  20. 192.168.192.129 | CHANGED => {
  21. "changed": true,
  22. "force": false,
  23. "name": "brian",
  24. "remove": false,
  25. "state": "absent"
  26. }
  27.  
  28. 3)state=absent remove=yes参数(删除用户并删除用户目录)
  29. 删除名为brian的用户,同时会删除brian用户的家目录等信息。如果已经不存在brian的用户,则不做任何操作
  30. [root@ansible ~]# ansible all -m user -a "name=brian state=absent remove=yes"
  31. 192.168.192.129 | SUCCESS => {
  32. "changed": false,
  33. "name": "brian",
  34. "state": "absent"
  35. }
  36.  
  37. 4)group参数(为用户指定组)
  38. 指定brian用户的主组为yunweiyunwei组需要提前存在,当不使用group设置主组时,默认主组与用户名相同
  39. 创建yunwei
  40. [root@ansible ~]# ansible all -m shell -a "groupadd yunwei"
  41.  
  42. [root@ansible ~]# ansible all -m user -a "name=brian group=yunwei"
  43. 192.168.192.129 | CHANGED => {
  44. "changed": true,
  45. "comment": "",
  46. "create_home": true,
  47. "group": 1000,
  48. "home": "/home/brian",
  49. "name": "brian",
  50. "shell": "/bin/bash",
  51. "state": "present",
  52. "system": false,
  53. "uid": 1000
  54. }
  55.  
  56. 5)groups参数(为用户添加附加组)、append参数(设置yes可添加多个附加组)
  57. 指定brian用户的附加组为pythonpython组需要提前存在,当不使用groups设置附属组时,默认附加组与用户名相同。
  58. 注意,为了保险起见,在不知道用户原来的附加组设定的情况下,最好将append参数设置为yes我们也可以一次性设置多个附加组,附加组之间用逗号隔开
  59. 创建python
  60. [root@ansible ~]# ansible all -m shell -a "groupadd python"
  61.  
  62. [root@ansible ~]# ansible all -m user -a "name=brian groups=python append=yes"
  63. 192.168.192.129 | CHANGED => {
  64. "append": true,
  65. "changed": true,
  66. "comment": "",
  67. "group": 1001,
  68. "home": "/home/brian",
  69. "move_home": false,
  70. "name": "brian",
  71. "shell": "/bin/bash",
  72. "state": "present",
  73. "uid": 1000
  74. }
  75.  
  76. 6)expires参数(设置用户的过期时间)
  77. 指定brian用户的过期时间为20181231日。使用"date -d 2018-12-31 +%s"命令可以获取到对应日期的unix时间戳
  78. 获取unix时间戳
  79. [root@ansible ~]# date -d 2018-12-31 +%s
  80. 1546185600
  81.  
  82. [root@ansible ~]# ansible all -m user -a "name=brian expires=1546185600"
  83. 192.168.192.129 | CHANGED => {
  84. "append": false,
  85. "changed": true,
  86. "comment": "",
  87. "group": 1001,
  88. "home": "/home/brian",
  89. "move_home": false,
  90. "name": "brian",
  91. "shell": "/bin/bash",
  92. "state": "present",
  93. "uid": 1000
  94. }
  95.  
  96. 7)comment参数(指定用户的注释信息)
  97. 指定brian用户的注释信息
  98. [root@ansible ~]# ansible all -m user -a "name=brian comment='my name is zhujingzhi'"
  99. 192.168.192.129 | CHANGED => {
  100. "append": false,
  101. "changed": true,
  102. "comment": "my name is zhujingzhi",
  103. "group": 1001,
  104. "home": "/home/brian",
  105. "move_home": false,
  106. "name": "brian",
  107. "shell": "/bin/bash",
  108. "state": "present",
  109. "uid": 1000
  110. }
  111.  
  112. 8)password参数(为用户设置密码)
  113. brian用户的密码设置为hahahaha
  114. hahahaha加密
  115. [root@ansible ~]# python
  116. Python 2.7.5 (default, Jul 13 2018, 13:06:57)
  117. [GCC 4.8.5 20150623 (Red Hat 4.8.5-28)] on linux2
  118. Type "help", "copyright", "credits" or "license" for more information.
  119. >>> import crypt
  120. >>> crypt.crypt('hahahaha')
  121. '$6$Zfj8DrWsbhwHSpCq$vuWpw.5FX97egYaWEUTavkP3ahi294yO5brO9qm3XDdvjM0hJKwaoXt7ue/9ZRIm8sYzgxsGZdKi8Qxdk3xDD.'
  122.  
  123. [root@ansible ~]# ansible all -m user -a 'name=brian password="$6$Zfj8DrWsbhwHSpCq$vuWpw.5FX97egYaWEUTavkP3ahi294yO5brO9qm3XDdvjM0hJKwaoXt7ue/9ZRIm8sYzgxsGZdKi8Qxdk3xDD."'
  124. 192.168.192.129 | CHANGED => {
  125. "append": false,
  126. "changed": true,
  127. "comment": "my name is zhujingzhi",
  128. "group": 1001,
  129. "home": "/home/brian",
  130. "move_home": false,
  131. "name": "brian",
  132. "password": "NOT_LOGGING_PASSWORD",
  133. "shell": "/bin/bash",
  134. "state": "present",
  135. "uid": 1000
  136. }
  137.  
  138. 9)generate_ssh_key参数(生成ssh密钥对)
  139. brian用户生成ssh密钥对。默认在用户家目录的./ssh 目录中生成名为 id_rsa 的私钥和名为 id_rsa.pub 的公钥,如果已经存在同名密钥,并不会覆盖原来的密钥,即不做任何操作
  140. [root@ansible ~]# ansible all -m user -a "name=brian generate_ssh_key=yes"
  141. 192.168.192.129 | CHANGED => {
  142. "append": false,
  143. "changed": true,
  144. "comment": "my name is zhujingzhi",
  145. "group": 1001,
  146. "home": "/home/brian",
  147. "move_home": false,
  148. "name": "brian",
  149. "shell": "/bin/bash",
  150. "ssh_fingerprint": "2048 SHA256:67RLzlQYCjfOctm7K4cXrd+ctuTl6WEGW0oboP9/4Qc ansible-generated on ansible_node1 (RSA)",
  151. "ssh_key_file": "/home/brian/.ssh/id_rsa",
  152. "ssh_public_key": "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC5OKH1DicFwXMVhJioQyYAt3I/C+axJ8qG4lynUMxXQNRa1NCGXPcnBXDUATAwfzG7O5itRrFOGZracMb63B9WrhkPzWPiJHjv9fRAibuydmro0al6GkUqU/Ma2UME1c+OWKR5HrhGHU/8KfD/EHcsaSmeI0G5qWsstNzzjsxpCTDL/cGWK841s1UE6n4dHs+fxp0r7NDqzB4HceTIKZKdB0ScetchMCHJzBpV+nu3uqacgZrTRp1T5EHIXjoS9D+NeH5/9YVevTrlMqBks8RdGjXeds8G3LyqQMdjR2X5WPW0+cS8oECtEPY1xERPdgbN7c643Xh2oXDoEBMZ/GfT ansible-generated on ansible_node1",
  153. "state": "present",
  154. "uid": 1000
  155. }
  156.  
  157. 10)ssh_key_file参数(指定密钥生成的路径)
  158. brian用户生成ssh密钥对,密钥对生成在/opt目录下,私钥名为 id_rsa_brian,公钥名为 id_rsa_brian.pub
  159. [root@ansible ~]# ansible all -m user -a "name=brian generate_ssh_key=yes ssh_key_file=/opt/id_rsa_brian"
  160. 192.168.192.129 | CHANGED => {
  161. "append": false,
  162. "changed": true,
  163. "comment": "my name is zhujingzhi",
  164. "group": 1001,
  165. "home": "/home/brian",
  166. "move_home": false,
  167. "name": "brian",
  168. "shell": "/bin/bash",
  169. "ssh_fingerprint": "2048 SHA256:/A0hgTZ4GA7qMKhikPe+QMJiAlKHmzk560IaMC5uRHI ansible-generated on ansible_node1 (RSA)",
  170. "ssh_key_file": "/opt/id_rsa_brian",
  171. "ssh_public_key": "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCSlNUc0TCduB6CqHr65zyC4MN/UI36DsdQB9JgBNT2MymoV9oCgcrg6m5TcuOcyv57BqZg1/l78LMHg9bCL0cn+EC3Pv7lNVgTGIRlRLFsXCnvVIbQ7nwygH1mqRR2VxNY5RsrxLSnvCADdTuc+AQ7Y7/5CMI3BLHAUju8VbfVSUfluUoR4V+ifT0zHPPbN9GWSTVBWgwPqsB6huw5odFJoY20AxTKzT5TZDLSFk1SVWV/T3knndBReHwM+OSYu7UTCCf5cI+3OImDDBscEr4GLEGfxSOXepUqI0EoYZrqhWUeuFWvSzvcJwX3Z+rz9UA1kv68wWtw/mPtaszX94Pp ansible-generated on ansible_node1",
  172. "state": "present",
  173. "uid": 1000
  174. }
  175.  
  176. 11)ssh_key_comment参数(指定公钥中的注释信息)
  177. brian用户生成ssh密钥对,同时指定公钥中的注释信息为"www.brian.com",此参数只能在创建密钥时使用才会生效,并不能操作同名的老密钥
  178. [root@ansible ~]# ansible all -m user -a "name=brian generate_ssh_key=yes ssh_key_comment='brian ssh-rsa'"
  179. 192.168.192.129 | CHANGED => {
  180. "append": false,
  181. "changed": true,
  182. "comment": "my name is zhujingzhi",
  183. "group": 1001,
  184. "home": "/home/brian",
  185. "move_home": false,
  186. "name": "brian",
  187. "shell": "/bin/bash",
  188. "ssh_fingerprint": "2048 SHA256:jDU5RLudX3WcDKDM6C/4yUO2K0sGgVI/g/EkIPcUfB4 brian ssh-rsa (RSA)",
  189. "ssh_key_file": "/home/brian/.ssh/id_rsa",
  190. "ssh_public_key": "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQD1/JVoM14IRpTWxAbiOrvnvgxfTQQyErC3w4lfbATdldeaz2cZt1Ancq5xycyFMf++1UFNevPAKmlfTH37aFclVR2cH3jL/LZZefpjDvIeXb3GPYW6lDautrB/AuMgYwkhgfT8fj6/Zx+/Uq/PWCSXmkGUqT8bkM3hjF1kKc0HtUMljK3dLgJgluSifFSHSl8NO7575HxzY+KVXTzGFJmXwwRssHkoJq38kRqua2DMzBWjBd9LcYRSa2wHwfXK12fJVEMx6xIUqPljLFslDfL++NiDeMtf9dP9Dp7+/3/o2XW3CWanjTcDLLT8cbzKC4j2MvmTTIXmXG6SiQ98deNp brian ssh-rsa",
  191. "state": "present",
  192. "uid": 1000
  193. }
  194.  
  195. 12)ssh_key_passphrase参数(指定私钥的密码)
  196. brian用户生成ssh密钥对,同时指定私钥的密码为123456,此参数只能在创建密钥时使用才会生效,并不能操作同名的老密钥
  197. [root@ansible ~]# ansible all -m user -a "name=brian generate_ssh_key=yes ssh_key_passphrase='123456'"
  198. 192.168.192.129 | CHANGED => {
  199. "append": false,
  200. "changed": true,
  201. "comment": "my name is zhujingzhi",
  202. "group": 1001,
  203. "home": "/home/brian",
  204. "move_home": false,
  205. "name": "brian",
  206. "shell": "/bin/bash",
  207. "ssh_fingerprint": "2048 SHA256:kv2+zW6bqC8YAPazS7YvVtK4gz5uFCglfqmm9AoAfi0 ansible-generated on ansible_node1 (RSA)",
  208. "ssh_key_file": "/home/brian/.ssh/id_rsa",
  209. "ssh_public_key": "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC6RAfCIyGz9kLF2KGBSOk6cQZb7O+tkOxwqJmxGE7bqKwgAprX917C7mj6ugIADeFeRtnP3/0oU0TLl4m0mFepVDEzGfZTRIR7Op1M6QCvveOJM/eP92vUv9TIKPY83iAaog7+l6/ZItBVWqC3OKmKHpuiZeH06dayq805lrYA+3jUagCKZSmevejyFTuVMYQJEZ77afWnJqtnCgUE6Mc/H5eD8ffPZgey3FEs+OTPA96N85gfZ6j+wT5AqPNPhmE7+I/Z6tZUnnPMGbHUhp53/TSMcIV5MZIPEcCpJq0KIFYR6xp2uW6aFhkQ58DhDwkHvFE34IVpnJMCoA8fesvn ansible-generated on ansible_node1",
  210. "state": "present",
  211. "uid": 1000
  212. }
  213.  
  214. 13)ssh_key_type参数(指定加密类型)
  215. brian用户生成ssh密钥对,同时指定密钥对的类型为dsa,当不显式指定密钥类型时,默认类型为rsa,此参数只能在创建密钥时使用才会生效,并不能操作同名的老密钥
  216. [root@ansible ~]# ansible all -m user -a "name=brian generate_ssh_key=yes ssh_key_type=dsa"
  217. 192.168.192.129 | CHANGED => {
  218. "append": false,
  219. "changed": true,
  220. "comment": "my name is zhujingzhi",
  221. "group": 1001,
  222. "home": "/home/brian",
  223. "move_home": false,
  224. "name": "brian",
  225. "shell": "/bin/bash",
  226. "ssh_fingerprint": "1024 SHA256:R5H7/BUdOIku2uWdp6UVSmibTqbq3mXCQKkPWhHWsAQ ansible-generated on ansible_node1 (DSA)",
  227. "ssh_key_file": "/home/brian/.ssh/id_dsa",
  228. "ssh_public_key": "ssh-dss AAAAB3NzaC1kc3MAAACBAM9iCp0cVUWqutnrlLWgFMms4cGaxR8bPgCa/Sec+OPbA3LjO/UwoYhyxCDu7eCCjUNcNwhEzssl3jtQRaCEzGV4rjO4mJaPkfCLpnDnYbKuWd9zio6vz4TU/qGJoG6Z5gpRqyv0TPKRw+FB10eL283/9/RJ49ZGWnf/v+hnF/DJAAAAFQDhz74tTItuAowX8VtzLTFKJXjhjwAAAIA8X7MxjCBvK38qICDCvjfsSU+WA5uWP1doyf7CQ/PEF3j0aPXe+rd4u1WRpNqkYxTQiZVr+uVQ4NqPAdvszkWpQ86tIW36rTXecLX6dbr59Gd/0uEpvIFagbPK0RPB+F8Z/LudQvcz+qqwAO+JMUR3FGBOT7nL9ZlPeocXhetpkQAAAIBUbmWo/IDFp3mVx7cYkqJH94RG1YJ/HE77SUFF/doAZmpvRVK4IttBojGDeEnPNsN49cHXVY/pGKquGoLMMKI3qJBuYDsd2YUSxRGRIdbDyRWMAPQkC6W+/tSFFSrrHndpUtzPtI4rNZX5w/wbcxxEMsPDsxYcQB1VRhIf2+YiWQ== ansible-generated on ansible_node1",
  229. "state": "present",
  230. "uid": 1000
  231. }

authorized_key 模块

用途:添加或删除SSH授权密钥
使用方法:

  1. [root@ansible ~]# ansible-doc -s authorized_key
  2. - name: Adds or removes an SSH authorized key
  3. authorized_key:
  4. comment: # 更改公钥上的注释。重写注释在从GitHub或GitLab中提取注释等情况下非常有用。如果没有指定注释,则保留现有注释
  5. exclusive: # 是否移除authorized_keys文件中其它非指定key.
  6. follow: # 是否遵循目的机器中的文件系统链接(可选值为:yes|on)
  7. key: # (必选项)公钥路径,可以是本地⽂件,可以是url地址
  8. key_options: # 附加到key中的字符串 不加参数会删除上次带参数时添加的字符串
  9. manage_dir: # 是否创建或修改⽬标authorized_keys所在⽬录的所有者和权限。默认为yes 使用自定义的目标路径时,必选设置为no或者false.
  10. path: # authorized_keys所在的⽬录,默认为家⽬录下的.ssh⽬录中
  11. state: # present/absent,是否将密钥添加到⽬标authorized_keys⽂件中,state=present表示添加;state=absent表示删除
  12. user: # (必选项)添加到远程哪个⽤户下的authorized_keys⽂件
  13. validate_certs: # 这只适用于使用https url作为密钥源的情况。如果设置为“no”,则不会验证SSL证书.

示例:

正在更新中。。。。。请等待

debug 模块

用途:⽤于输出⾃定义的信息,类似于echo、print等输出命令。ansible中的debug主要⽤于输出变量值、表达式值,以及⽤于when条件判断时。使⽤⽅式⾮常简单
使用方法:

  1. [root@ansible ~]# ansible-doc -s debug
  2. - name: Print statements during execution
  3. debug:
  4. msg: # 输出⾃定义信息。如果省略,则输出普通字符.
  5. var: # 指定待调试的变量。只能指定变量,不能指定⾃定义信息,且变量不能加{{}}包围,⽽是直接的变量名.
  6. verbosity: # 控制debug运⾏的调试级别,有效值为⼀个数值N

示例:

  1. 1) msg参数(输出⾃定义信息)
  2. [root@ansible ~]# ansible all -m debug -a "msg='i want to print this messages'"
  3. 192.168.192.129 | SUCCESS => {
  4. "msg": "i want to print this messages"
  5. }
  6.  
  7. 2) var参数(指定待调试的变量)
  8. [root@ansible ~]# ansible all -m debug -a "var=ansible_eth0.ipv4.address"
  9. 192.168.192.129 | SUCCESS => {
  10. "ansible_eth0.ipv4.address": "VARIABLE IS NOT DEFINED!"
  11. }
  12.  
  13. 3) verbosity(控制debug运⾏的调试级别)
  14. [root@ansible ~]# ansible all -m debug -a "verbosity=3"
  15. 192.168.192.129 | SKIPPED

archive 模块

用途:创建一个或多个文件或树的压缩存档
使用方法:

  1. [root@ansible ~]# ansible-doc -s archive
  2. - name: Creates a compressed archive of one or more files or trees
  3. archive:
  4. dest: # ⽬标归档⽂件名。除⾮path指定要压缩的是单⽂件,否则需要dest选项.
  5. exclude_path: # 要从归档文件中排除的文件的远程绝对路径
  6. format: # 指定压缩格式,默认为gz格式.
  7. group: # ⽂件/⽬录的所属组.
  8. mode: # 设置⽂件/⽬录的的权限,⽀持'0644'或'u+rwx'或'u=rw,g=r,o=r'等格式
  9. owner: # ⽂件/⽬录的所属者
  10. path: # (必选项) 要压缩的⽂件,可以是绝对路径,也可以是glob统配的路径,还可以是⽂件列表
  11. remove: # 压缩后删除源⽂件
  12. unsafe_writes: # 是否以不安全的方式进行,可能导致数据损坏(unsafe_writes=yes|on).

示例:

正在更新中。。。。。请等待

unarchive 模块

用途:复制归档压缩文件后解压
使用方法:

  1. [root@ansible ~]# ansible-doc -s unarchive
  2. - name: Unpacks an archive after (optionally) copying it from the local machine.
  3. unarchive:
  4. creates: # 如果指定的⽂件存在则不执⾏该任务。可⽤于实现幂等性
  5. decrypt: # 此选项使用vault控制源文件的自动解密
  6. dest: # (必选项) 远程机器上需要被解包的归档⽂件,要求是绝对路径
  7. exclude: # 列出解包过程中想要忽略的⽬录和⽂件
  8. extra_opts: # 通过传入数组指定其他选项
  9. group: # ⽂件/⽬录的所属组.
  10. keep_newer: # 在解包过程中,如果⽬标路径中和包中有同名⽂件,且⽐包中的⽂件更新,则保留新的⽂件
  11. list_files: # 设置为true时,将返回归档⽂件中的⽂件列表
  12. mode: # 设置⽂件/⽬录的的权限,⽀持'0644'或'u+rwx'或'u=rw,g=r,o=r'等格式
  13. owner: # ⽂件/⽬录的所属者
  14. remote_src: # 设置为yes表⽰远程主机上已有⽬标归档⽂件,即不再从本地复制归档⽂件到远端,直接在远端解包,默认no.
  15. src: # (必选项)如果remote_src=no,将复制本地归档⽂件到远端,可相对路径也可绝对路径.如果remote_src=yes, 将解包远程已存在的归档⽂件,如果remote_src=yes且src中包含了"://",将指挥远程主机从url中下载⽂件并解包
  16. unsafe_writes: # 是否以不安全的方式进行,可能导致数据损坏(unsafe_writes=yes|on)
  17. validate_certs: # 这只适用于使用https url作为密钥源的情况。如果设置为“no”,则不会验证SSL证书

示例:

正在更新中。。。。。请等待

get_url 模块

用途:类似于wget和curl的功能,可以进行下载以及webapi交互等操作
使用方法:

  1. [root@ansible ~]# ansible-doc -s get_url
  2. - name: Downloads files from HTTP, HTTPS, or FTP to node
  3. get_url:
  4. backup: # 下载⽂件时同时创建⼀个名称中包含时间戳的备份⽂件
  5. dest: # (必选项)⽂件保存路径,必须为绝对路径。
  6. # 如果dest是⼀个⽬录,则使⽤url的base name作为⽂件名
  7. # 如果dest是⼀个⽬录,则'force'选项不⽣效
  8. # 如果dest是⼀个⽬录,则总是会下载⽬标⽂件,但只在已存在的⽂件变化了才会替换旧⽂件
  9. force: # 如果设置为yes,且dest不是⼀个⽬录时,则总是会下载⽂件,但只在已存在的⽂件变化了才会替换旧⽂件,如果设置为no(默认),则只会在⽬录路径下不存在该⽂件时才会进⾏下载
  10. force_basic_auth: # 此选项在初始请求时强制基本身份验证标头.
  11. group: # ⽂件/⽬录的所属组.
  12. headers: # 以字典格式向请求添加自定义HTTP头(key=value格式)
  13. mode: # 设置⽂件/⽬录的的权限,⽀持'0644'或'u+rwx'或'u=rw,g=r,o=r'等格式.
  14. others: # 模块接受的所有参数
  15. owner: # ⽂件/⽬录的所属者
  16. sha256sum: # 如果将SHA-256校验和传递给该参数,则在下载后计算目标文件摘要,以确保其完整性并验证传输成功。这个选项不赞成使用。使用“校验和”代替.
  17. timeout: # 请求url时的超时时间,默认10秒钟.
  18. tmp_dest: # 下载时临时存放⽬录,在任务执⾏完成前会删除下载的临时⽂件
  19. unsafe_writes: # 是否以不安全的方式进行,可能导致数据损坏(unsafe_writes=yes|on)
  20. url: # (required) 要下载的url路径,(http|https|ftp)://[user[:pass]]@host.domain[:port]/path
  21. # 还⽀持file格式的路径,实现复制功能。file:///path/to/file
  22. url_password: # 用于HTTP基本身份验证的密码。如果没有指定“url_username”参数,则不会使用“url_password”参数
  23. url_username: # 用于HTTP基本身份验证的用户名。对于允许空密码的站点,可以在不使用“url_password”的情况下使用此参数
  24. use_proxy: # 如果no,它将不使用代理,即使在目标主机上的环境变量中定义了代理.
  25. validate_certs: # 如果no,SSL证书将不被验证。这应该只在使用自签名证书的个人控制站点上使用

示例:

正在更新中。。。。。请等待

wait_for 模块

用途:⽤于判断任务在满⾜什么条件的情况下会继续。主要⽤来判断端⼝是否开启、⽂件是否存在、⽂件中是否存在某些字符串
使用方法:

  1. [root@ansible ~]# ansible-doc -s wait_for
  2. - name: Waits for a condition before continuing
  3. wait_for:
  4. active_connection_states: # 被算作活动连接的TCP连接状态列表.
  5. connect_timeout: # 在关闭和重试之前等待连接发生的最大秒数.
  6. delay: # 在检查操作进⾏之前等待的秒数
  7. exclude_hosts: # 在寻找处于“耗尽”状态的活动TCP连接时要忽略的主机或ip的列表
  8. host: # 等待这个主机处于启动状态,默认为127.0.0.1.
  9. msg: # 这将覆盖来自无法满足所需条件的故障的正常错误消息.
  10. path: # 这个⽂件是否已经存在
  11. port: # 等待这个端⼝已经开放.
  12. search_regex: # 在⽂件中进⾏正则匹配
  13. sleep: # 两次检查之间sleep的秒数,默认1秒
  14. state: # present/started/stopped/absent/drained.默认started
  15. # 当检查的是⼀个端⼝时:
  16. # started:保证端⼝是开放的
  17. # stopped:保证端⼝是关闭的
  18. # 当检查的是⼀个⽂件时:
  19. # present/started:在检查到⽂件存在才会继续
  20. # absent:检查到⽂件被移除后才会继续
  21. timeout: # 检查的等待超时时间(秒数,默认300).

示例:

正在更新中。。。。。请等待

group 模块

用途:添加或删除组
使用方法:

  1. [root@ansible ~]# ansible-doc -s group
  2. - name: Add or remove groups
  3. group:
  4. gid: # 用于指定组的gid
  5. name: # (必选项) 用于指定要操作的组名称
  6. state: # 用于指定组的状态,两个值可选,present,absent,默认为 present,设置为absent 表示删除组。
  7. system: # 如果是yes,表示指定的组是系统组

示例:

  1. 1) name参数(创建组)
  2. 创建kaifa
  3. [root@ansible ~]# ansible all -m group -a "name=kaifa"
  4. 192.168.192.129 | CHANGED => {
  5. "changed": true,
  6. "gid": 1002,
  7. "name": "kaifa",
  8. "state": "present",
  9. "system": false
  10. }
  11.  
  12. 2) state=absent参数(删除组)
  13. 删除成功的前提是不能有用户把被删除的组当成主组
  14. [root@ansible ~]# ansible all -m group -a "name=kaifa state=absent"
  15. 192.168.192.129 | CHANGED => {
  16. "changed": true,
  17. "name": "kaifa",
  18. "state": "absent"
  19. }
  20.  
  21. 3) gid参数(指定组的gid)
  22. [root@ansible ~]# ansible all -m group -a "name=kaifa gid=6666"
  23. 192.168.192.129 | CHANGED => {
  24. "changed": true,
  25. "gid": 6666,
  26. "name": "kaifa",
  27. "state": "present",
  28. "system": false
  29. }
  30.  
  31. 4) system参数(将组设置成为系统组)
  32. [root@ansible ~]# ansible all -m group -a "name=admin system=yes"
  33. 192.168.192.129 | CHANGED => {
  34. "changed": true,
  35. "gid": 992,
  36. "name": "admin",
  37. "state": "present",
  38. "system": true
  39. }

Ansible--常用模块使用(2)的更多相关文章

  1. ansible常用模块用法

    ansible常用模块用法 2015-07-21 10:25 24458人阅读 评论(1) 收藏 举报  分类: Linux(44)   ansible 版权声明:本文为博主原创文章,未经博主允许不得 ...

  2. Ansible常用模块介绍及使用(week5_day1_part2)--技术流ken

    Ansible模块 在上一篇博客<Ansible基础认识及安装使用详解(一)--技术流ken>中以及简单的介绍了一下ansible的模块.ansible是基于模块工作的,所以我们必须掌握几 ...

  3. Ansible常用模块命令

    Ansible常用模块命令 一.安装ansible yum install epel-release yum install ansible 二.配置文件配置 vi /etc/ansible/ansi ...

  4. Ansible常用模块介绍及使用(2)

    Ansible模块 在上一篇博客<Ansible基础认识及安装使用详解(一)–技术流ken>中以及简单的介绍了一下ansible的模块.ansible是基于模块工作的,所以我们必须掌握几个 ...

  5. Ansible常用模块及API

    Ansible安装 安装EPEL作为安装Ansible的yum源(CentOS6.4): rpm -Uvh http://ftp.linux.ncsu.edu/pub/epel/6/i386/epel ...

  6. ansible常用模块入门

    常用模块有以下几个 command copy shell crond yum service setup 1.command模块 ansible george -m command -a " ...

  7. Ansible常用模块基本操作

    Ansible是一个系列文章,我会尽量以通俗易懂.诙谐幽默的总结方式给大家呈现这些枯燥的知识点,让学习变的有趣一些. 前言 对于任何一个框架,一个应用,为了更便于推广,便于使用,便于商业化,都会顺便提 ...

  8. Ansible 常用模块详解

    经过前面的介绍,我们已经熟悉了 Ansible 的一些常识性的东西和如何编译安装Ansible,从本章开始我们将全面介绍 Ansible 的各种生产常用模块,这些也是我们使用 Ansible 的过程中 ...

  9. ansible常用模块详解(三)

    1.模块介绍 明确一点:模块的执行就类似是linux命令的一条命令,就单单的是为了执行一条语句,不是批量的操作,批量操作需要用到playbook内类似shell编写脚本进行批量. 1.1 模块的使用方 ...

  10. Linux之ansible 常用模块

    目的 代码发布系统 代码发布:把本地的代码通过某些方式弄到线上,可以供别人访问 部署 前戏 ansible 批量在远程主机上执行命令 puppet ruby ansible saltstack pyt ...

随机推荐

  1. Java学习笔记52(网络编程:UDP协议案例)

    InetAddress类: 表示互联网中的IP地址,示例: package demo; import java.net.InetAddress; import java.net.UnknownHost ...

  2. Java学习笔记39(转换流)

    转换流:字符流和字节流之间的桥梁 用于处理程序的编码问题 OutputStreamWriter类:字符转字节流 写文本文件: package demo; import java.io.FileOutp ...

  3. 人脸检测第一文---A Dream of Spring

    人脸识别研究的人很多,可是,真正具有划时代意义的还要当属Paul Viola的一篇文章<RobustReal-time Object Detection>.这篇文章让 人脸识别在实际应用中 ...

  4. Linux基础命令 ls

    目录 1. ls 列出目录的内容 -a --all: -A --almost-all: -b --escape: --block-size=SIZE: --color: --d --directory ...

  5. 字符串replaceAll()方法报错:java.util.regex.PatternSyntaxException:Unclosed group near index...

    Unclosed group near index错误 之前自己写的一个模块在项目上线后最近频频出现tomcat崩掉的情况,从log看出现如下的报错信息: java.util.regex.Patter ...

  6. C# 中集合类型需要按多个条件排序

    在 C# (.net 3.5 之后) 中集合是可以通过 OrderBy() 和 OrderByDescending()方法来进行排序的,如果需要集合中的元素是对象,还可以通过 Lambda表达式进行按 ...

  7. Lucene 7.2.1 自定义TokenFilter

    1.自定义TokenFilter import org.apache.lucene.analysis.TokenFilter; import org.apache.lucene.analysis.To ...

  8. Redis之集群环境搭建

    前面文章介绍了Redis的主从复制,虽然该模式能够在一定程度上提高系统的稳定性,但是在数据访问量比较大的情况下,单个master应付起来还是比较吃力的,这时我们可以考虑将redis集群部署,本文就来重 ...

  9. [HEOI2017] 相逢是问候

    Description 支持以下两个操作: 将第 \(l\) 个数到第 \(r\) 个数 \(a_l,a_{l+1},\dots a_r\) 中的每个数 \(a_i\) 替换为 \(c^{a_i}\) ...

  10. [POI2006] PRO-Professor Szu

    Description \(n\) 个别墅以及一个主建筑楼,从每个别墅都有很多种不同方式走到主建筑楼,其中不同的定义是(每条边可以走多次,如果走边的顺序有一条不同即称两方式不同). 询问最多的不同方式 ...