Asible学习笔记--常用模块(二)

Ansible常用模块

本节包括的模块:

创新互联为客户提供专业的成都网站设计、网站制作、程序、域名、空间一条龙服务,提供基于WEB的系统开发. 服务项目涵盖了网页设计、网站程序开发、WEB系统开发、微信二次开发、移动网站建设等网站方面业务。

(1)包管理模块yum

(2)配置yum源模块yum_repository

(3)服务管理模块service

(4)systemd模块

(5)用户管理模块user

(6)debug模块

(7)定时任务模块cron

包管理模块yum

yum--Ansible官方使用说明文档

ansible-doc -s yum
- name: Manages packages with the `yum' package manager
  yum:
      disable_gpg_check: # 安装包时禁止gpgcheck,仅在state=present或latest时生效。
      disablerepo:       # 禁用指定的repoid,多个repoid使用逗号分隔。
      enablerepo:        # 明确使用该repoid
      exclude:           # 排除哪些包不安装,仅在state=present或latest时生效。
      list:              # 类似于yum list。
      name:              # 指定安装的包名,可带上版本号。多个包可使用逗号分隔。
      state:             # 状态。('present'、'installed','latest')用于安装包,
                         # ('absent'、'removed')用于移除已安装包。
      update_cache:      # 强制更新yum的cache。                    

name需要配合state来使用,如果state指定为present/installed/latest将安装包,其中latest是安装最新包,默认为present。如果指定为absent/removed则用于卸载包。

在ansible中,很多地方都会出现present和absent的状态,它们一般都表示目标是否应该存在还是不存在,也就是要进行的动作是创建和删除。

被控制端列出和nginx相关的包,如下:

ansible test -m yum -a "list=nginx" -f 10

被控制端安装tree包,如下:

ansible test -m yum -a "name=tree state=installed" -o -f 8

被控制端安装本地的包,且排除某些包不安装,如下:

ansible centos -m yum -a "name=/tmp/*.rpm exclude=*unix* state=present"

被控制端卸载包:

ansible test -m yum -a "name=tree state=removed" -o -f 8

配置yum源模块yum_repository

yum_repository--Ansible官方使用说明文档

用于配置yum源。可以实现非常完整的yum仓库配置。但是一般只需简单的添加yum源即可。所以,以下是简单版的用法和示例。

ansible-doc -s yum_repository
- name: Add or remove YUM repositories
  yum_repository:
      baseurl:      #地址
      mirrorlist:   # 设置mirrorlist地址
      description:  # 描述信息
      enabled:      # 是否启用该仓库,默认为yes
      file:         # 保存此仓库的文件,不设置该项的话则默认以name选项中的名称命名,将自动以".repo"后缀结尾。
      gpgcheck:     # 是否要进行gpgcheck
      name:         # 仓库的名称,要保证名称的唯一性
      reposdir:     # 保存.repo文件的目录,默认/etc/yum.repos.d/
      state:        # repo文件的状态,present/absent,默认present。

示例如下:

ansible test -m yum_repository -a 'name=aliyun_epel description="epel repo" baseurl=http://mirrors.aliyun.com/epel/7/$basearch/ gpgcheck=no enabled=yes'

ansible test -m yum_repository -a 'name=rpmforge description="RPMforge YUM repo" file="external_repos" baseurl=http://apt.sw.be/redhat/el7/en/$basearch/rpmforge mirrorlist=http://mirrorlist.repoforge.org/el7/mirrors-rpmforge gpgcheck=no enabled=yes'

关于 baseurl 和 mirrorlist 之间的区别,可参考 yum配置文件中baseurl和mirrorlist的区别

- name: Add multiple repositories into the same file (2/2)
  yum_repository:
    name: rpmforge
    description: RPMforge YUM repo
    file: external_repos
    baseurl: http://apt.sw.be/redhat/el7/en/$basearch/rpmforge
    mirrorlist: http://mirrorlist.repoforge.org/el7/mirrors-rpmforge
    enabled: no

服务管理模块service

service--Ansible官方使用说明文档

ansible-doc -s service
- name: Manage services
  service:
      enabled: # 设置服务为开机自启动,默认为no
      name:    # 服务名
      state:   # 'started'和'stoped'分别启动和停止服务,它们是幂等操作,多次启动或停止服务的结果是一样的,
               # 也就是说对于运行中的服务不会再执行启动操作,同理停止也是一样。'restarted'总是重启服务,
               # 'reloaded'总是重读配置文件,如果服务是未运行状态,则'reloaded会启动服务。
               # (state和enabled两者至少要给一个)

设置nginx开机自启动:

ansible test -m service -a "name=nginx enabled=yes" -o -f 8

启动nginx服务:

ansible test -m service -a "name=nginx state=started" -o -f 8

systemd模块

管理systemd风格的服务。systemd--Ansible官方使用说明文档

ansible-doc -s systemd
- name: Manage services
  systemd:
      daemon_reload: # 在执行所有动作之前,先确定是否要reload一次。值为yes/no。
      enabled:       # 是否设置开机自启动。
      masked:        # 是否将此unit做mask(隐藏、掩盖)处理。mask后的unit将无法启动。
      name:          # 待操作服务名。可以是name,也可以是name.service。
      state:         # 'started'/'stopped'具有幂等性。但restarted和reloaded总是会执行

关于 masked 这点,我这里举个例子说明,我们使用 docker 时,有时候会遇到这样的错误:

Failed to start docker.service: Unit docker.service is masked.

那么这个时候,我们是无法使用 restart/start 来启动 docker 的,因为 docker 被 mask 了~,我们可以采用下面的命令来启动 docker :

systemctl unmask docker.service
systemctl unmask docker.socket
systemctl start docker.service

用户管理模块user

同理还有组管理模块group,就不多做说明了。同样,创建用户时,默认会创建同名group。

user--Ansible官方使用说明文档

group--Ansible官方使用说明文档

ansible-doc -s user
- name: Manage user accounts
  user:
      name:            # 要创建、修改、移除的用户名。
      password:        # 设置用户密码。此处只能使用加密密码作为值。
      system:          # state=present 设置为yes表示创建一个系统用户,只能用于创建,不能用于修改已有用户为系统用户。
      state:           # 创建用户(present)还是删除用户(absent)。默认为present。
      create_home:     # 创建家目录,或者已有的用户但家目录不存在也会创建。设置为no则不创建家目录。
      home:            # 指定要创建的家目录路径
      move_home:       # 如果设置为yes,则"home="则表示将家目录移动到此选项指定的路径下。
      uid:             # 设置用户的uid
      group:           # 设置用户的primary group
      groups:          # 将用户加入到辅助组列表中。如果设置"groups=",则会将此用户从所有辅助组中移除。
      shell:           # 设置用户的shell。
      force:           # 配合'state=absent'时,等价于'userdel --force',即强制删除用户、家目录和邮件列表。
      remove:          # 配合'state=absent'时,等价于'userdel --remove',即删除家目录和邮件列表。
      update_password: # user是幂等模块,"always"将总是修改密码。"on_create"将只在创建用户时设置密码。 

创建系统用户,并指定shell:

ansible test -m user -a "name=wtf system=yes shell=/bin/bash"

删除用户:

ansible test -m user -a "name=wtf state=absent"

指定update_password=always将总是修改用户的密码,不管该用户是否已存在。而update_password=on_create则只有新创建用户时才设置密码,如果用户已存在,则不会修改该用户的密码。默认值就是always 。

## 生成加密密码
openssl passwd -1 123456
$1$U0LHGwj5$bMocUtBQtkBwdplK.FIYe1

ansible test -m user -a 'name=wtf_test password="$1$U0LHGwj5$bMocUtBQtkBwdplK.FIYe1" update_password=always'

创建用户并指定密码,但如果用户已存在则不修改密码。

## 生成加密密码
openssl passwd -1 12345678
$1$IPjg/uyu$YmJzqBHkqYrDHgrQ9zdJs/

ansible test -m user -a 'name=wtf_td password="$1$IPjg/uyu$YmJzqBHkqYrDHgrQ9zdJs/" update_password=on_create'

debug模块

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

debug--Ansible官方使用说明文档

ansible-doc -s debug
- name: Print statements during execution
  debug:
      msg:       # 输出自定义信息。如果省略,则输出普通字符。
      var:       # 指定待调试的变量。只能指定变量,不能指定自定义信息,且变量不能加{{}}包围,而是直接的变量名。
      verbosity: # 控制debug运行的调试级别,有效值为一个数值N。

举例如下:

ansible test -m debug -a 'msg="this is a test"'

ansible test -m debug -a 'var=ansible_eth0.ipv4.address'

可以输出变量值,不过一般使用到变量的时候都会在playbook中使用debug模块,以下是一个示例:

tasks:
  - name: print any messages
      debug: msg="you name is {{ name }}"

定时任务模块cron

cron模块用于设置定时任务,也用于管理定时任务中的环境变量。cron--Ansible官方使用说明文档

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

说明

本博文是参考马龙帅大佬文章整理生成,属于博主读书笔记,如有侵权,请大佬与我联系,立删!

最后,感谢开源,拥抱开源~


文章名称:Asible学习笔记--常用模块(二)
本文路径:http://ybzwz.com/article/giehdo.html