{"msg":"操作成功","code":200,"data":{"createBy":"admin","createTime":"2020-07-15 16:51:41","updateBy":"admin","updateTime":"2020-07-15 16:51:41","remark":null,"id":30,"articleTitle":"Ansible（三）常用选项及模块2","articleUrl":"ansible_modules_2","articleThumbnail":"https://www.asumimoe.com/imgfiles/20220908/5969ef61cf754d1aa6e0f5c28219aefa.jpg","articleFlag":"1","draftStatus":"1","reprintStatement":"0","articleSummary":"ansible是基于模块工作的，本身没有批量部署的能力。真正具有批量部署的是ansible所运行的模块，ansible只是提供一种框架。","articleContent":"### authorzied_key模块\n\n```shell\nansible-doc -s authorized_key\n- name: Adds or removes an SSH authorized key\n  action: authorized_key\n    key=        # 公钥路径，可以是本地⽂件，可以是url地址。\n                # 本地⽂件时使⽤{{ lookup('file', '~/.ssh/id_rsa.pub') }}，\n                # url使⽤https://github.com/username.keys。\n    manage_dir  # 是否创建或修改⽬标authorized_keys所在⽬录的所有者和权限。默认为yes。\n                # 使⽤⾃定义的⽬标路径时，必须设置为no或false\n    path        # authorized_keys所在的⽬录，默认为家⽬录下的.ssh⽬录中\n    state       # present/absent，是否将密钥添加到⽬标authorized_keys⽂件中。\n    user=       # 添加到远程哪个⽤户下的authorized_keys⽂件\n```\n\n将公钥添加到centos组中的机器中。使用-k选项用于询问ssh连接密码。\n\n```shell\nansible centos -m authorized_key -a \"key={{lookup('file','~/.ssh/id_rsa.pub')}} state=present user=root\" -k\n```\n\n要想使⽤该模块实现⾮交互，需要在inventory⽂件中指定主机或主机组中加\n上\"ansible_ssh_pass='PASSWORD'\"参数。例如：\n\n```bash\n192.168.10.11 ansible_ssh_pass='root'\n[centos6]\nhost1\nhost2\nhost3\n[centos6:vars]\nansible_ssh_pass='root'\n```\n\n但这样不会将主机密钥添加到主控制端的known_hosts⽂件中，因此下次执⾏ansible时会失败。可以在配置⽂件\n中做如下设置：\n\n```shell\nhost_key_checking = False\n```\n\n### debug模块\n\n⽤于输出⾃定义的信息，类似于echo、print等输出命令。ansible中的debug主要⽤于输出变量值、表达式值，以\n及⽤于when条件判断时。使⽤⽅式⾮常简单。\n\n```bash\nansible-doc -s debug\n- name: Print statements during execution\n  action: debug\n    msg         # 输出⾃定义信息。如果省略，则输出普通字符。\n    var         # 指定待调试的变量。只能指定变量，不能指定⾃定义信息，且变量不能加{{}}包围，⽽是直接的变量名。\n    verbosity   # 控制debug运⾏的调试级别，有效值为⼀个数值N。\n```\n\n如：\n    \n\n```bash\nansible centos -m debug -a 'msg=\"i want to print this messages\"'\nansible centos -m debug -a 'var=ansible_eth0.ipv4.address' \n```\n\n### cron模块\n\n用于设置定时任务，也用于管理定时任务中的环境变量。\n\n```bash\nansible-doc -s cron\n- name: Manage cron.d and crontab entries.\n  action: cron\n    backup          # (yes/no)如果设置了，则会在修改远程cron_file前备份这些⽂件\n    cron_file       # ⾃定义cron_file的⽂件名，使⽤相对路径则表⽰在/etc/cron.d中。必须同时指定user选项\n    user            # 指定哪个⽤户的crontab将要被修改，默认为root\n    disabled        # 禁⽤crontab中的某个job，要求state=present\n    env             # (yes/no)设置⼀个环境变量，将添加在crontab的顶端。使⽤name和value定义变量名和值\n    job             # 需要执⾏的命令。如果设置了env，则表⽰环境变量的值，此时job=\"XXXX\"等价于value=\"XXXX\"。\n                    # 要求state=present\n    minute          # 分(0-59, *, */N)，不写时，默认为*\n    hour            # 时(0-23, *, */N)，不写时，默认为*\n    day             # ⽇(1-31, *, */N)，不写时，默认为*\n    month           # ⽉(1-12, *, */N)，不写时，默认为*\n    weekday         # 周(0-6 for Sunday-Saturday, *)，不写时，默认为*\n    name            # 描述crontab任务的字符串。但如果设置的是env，则name为环境变量的名称。要求state=absent\n                    # 注意，若未设置name，且state=present，则总会创建⼀个新job条⽬，即使cron_file中已经存在同样的条⽬\n    special_time    # 定时任务的别称，⽤于定义何时运⾏job条⽬。\n                    # 有效值有reboot/hourly/daily/weekly/monthly/yearly/annually。\n    state           # job或者env的状态是present(默认)还是absent。present⽤于创建，absent⽤于移除\n```\n\n创建⼀个job，每2分钟进⾏⼀次时间同步，并且⾃定义cron_file。\n\n```bash\nansible centos7 -m cron -a 'name=\"ntpdate\" job=\"/usr/sbin/ntpdate ntp1.aliyun.com\" cron_file=ntpdate_cron user=root minute=*/2' -o\n```\n\n设置crontab环境变量，并定义⼀个job。\n    \n\n```bash\nansible centos7 -m cron -a 'env=yes name=app_home value=/tmp' -o\nansible centos7 -m cron -a 'name=\"ntpdate\" job=\"/usr/sbin/ntpdate ntp1.aliyun.com\" minute=*/2' -o\n```\n\n### archive模块\n\n用于在远端压缩文件，前提是远端主机上有对应的压缩工具。\n\n```bash\nansible-doc -s archive\n- name: Creates a compressed archive of one or more files or trees.\n  action: archive\n    dest            # ⽬标归档⽂件名。除⾮path指定要压缩的是单⽂件，否则需要dest选项\n    format          # 指定压缩格式，默认为gz格式\n    group           # ⽂件/⽬录的所属组\n    owner           # ⽂件/⽬录的所有者\n    mode            # 设置⽂件/⽬录的的权限，⽀持'0644'或'u+rwx'或'u=rw,g=r,o=r'等格式\n    path=           # 要压缩的⽂件，可以是绝对路径，也可以是glob统配的路径，还可以是⽂件列表\n    remove          # 压缩后删除源⽂件\n```\n\n### unarchive模块\n\n默认复制ansible端的归档⽂件到被控主机，然后在被控主机上进⾏解包。如果设置选项remote_src=yes，则表⽰\n解包被控主机上的归档⽂件。\n\n要求在被控主机上有对应的解包命令。unzip命令⽤于解压\".zip\"⽂件，gtar(tar包提供)命令⽤于解压\".tar\"、\n\".tar.gz\"、\".tar.bz2\"和\".tar.xz\"。\n\n```bash\nansible-doc -s unarchive\n- name: Unpacks an archive after (optionally) copying it from the local machine.\n  action: unarchive\n    creates         # 如果指定的⽂件存在则不执⾏该任务。可⽤于实现幂等性\n    dest=           # 远程机器上需要被解包的归档⽂件，要求是绝对路径\n    exclude         # 列出解包过程中想要忽略的⽬录和⽂件\n    group           # ⽂件/⽬录的所属组\n    owner           # ⽂件/⽬录的所有者\n    mode            # 设置⽂件/⽬录的的权限，⽀持'0644'或'u+rwx'或'u=rw,g=r,o=r'等格式\n    keep_newer      # 在解包过程中，如果⽬标路径中和包中有同名⽂件，且⽐包中的⽂件更新，则保留新的⽂件\n    list_files      # 设置为true时，将返回归档⽂件中的⽂件列表\n    remote_src      # 设置为yes表⽰远程主机上已有⽬标归档⽂件，即不再从本地复制归档⽂件到远端，直接在远端解包。\n                    # 默认为no\n    src=            # 如果remote_src=no,将复制本地归档⽂件到远端，可相对路径也可绝对路径.\n                    如果remote_src=yes, 将解包远程已存在的归档⽂件\n                    如果remote_src=yes且src中包含了\"://\",将指挥远程主机从url中下载⽂件并解包\n```\n\n### get_url模块\n\n```bash\nansible-doc -s get_url\n- name: Downloads files from HTTP, HTTPS, or FTP to node\n  action: get_url\n    backup          # 下载⽂件时同时创建⼀个名称中包含时间戳的备份⽂件\n    dest=           # ⽂件保存路径，必须为绝对路径。\n                    # 如果dest是⼀个⽬录，则使⽤url的base name作为⽂件名\n                    # 如果dest是⼀个⽬录，则'force'选项不⽣效\n                    # 如果dest是⼀个⽬录，则总是会下载⽬标⽂件，但只在已存在的⽂件变化了才会替换旧⽂件\n    force           # 如果设置为yes，且dest不是⼀个⽬录时，则总是会下载⽂件，但只在已存在的⽂件变化了才会替换旧⽂件\n                    # 如果设置为no(默认)，则只会在⽬录路径下不存在该⽂件时才会进⾏下载。\n    tmp_dest        # 下载时临时存放⽬录，在任务执⾏完成前会删除下载的临时⽂件\n    group           # ⽂件/⽬录的所属组\n    owner           # ⽂件/⽬录的所有者\n    mode            # 设置⽂件/⽬录的的权限，⽀持'0644'或'u+rwx'或'u=rw,g=r,o=r'等格式\n    timeout         # 请求url时的超时时间，默认10秒钟\n    url=            # 要下载的url路径，(http|https|ftp)://[user[:pass]]@host.\n```\n\n**注意：**dest为⽬录或者force=yes时，总是会下载⽂件到临时存放⽬录中，只不过不⼀定会替换旧⽂件。只有\nforce=no(默认)且dest是⼀个⽂件时，在⽂件已存在时才不会下载⽂件。\n\n### script模块\n\nscript模块⽤于控制远程主机执⾏脚本。在执⾏脚本前，ansible会将本地脚本传输到远程主机，然后再执⾏。在执行脚本的时候，采用的是远程主机上的shell。\n\n```bash\nansible-doc -s script\n- name: Runs a local script on a remote node after transferring it\n  action: script\n    chdir           # 在远程执⾏脚本前先切换到此⽬录下。\n    creates         # 当此⽂件存在时，不执⾏脚本。可⽤于实现幂等性。\n    removes         # 当此⽂件不存在时，不执⾏脚本。可⽤于实现幂等性。\n    free_form=      # 本地待执⾏的脚本路径、选项、参数。之所以称为free_form，是因为它是脚本名+选项+参数。\n```\n\n参考自：<https://www.cnblogs.com/f-ck-need-u/p/7576137.html#ansible>","categoryId":3,"viewCount":931,"categoryName":"Ansible","author":"球接子","authorAvatar":null,"tagIds":[],"tagNames":[]}}