Ansible常用模块介绍

刺骨的言语ヽ痛彻心扉 2022-05-23 07:37 461阅读 0赞

Ansible-playbook命令常用参数:

  1. ansible-playbook
  2. -i 指定inventory文件
  3. -v 详细输出,-vvv更详细,-vvvv更更详细
  4. -f 并发数
  5. -e 定义Playbook中使用的变量,格式"key=value,key=value"
  6. --remote-user #远程用户
  7. --ask-pass #远程用户密码
  8. --sudo #使用sudo
  9. --sudo-user #sudo的用户,默认root
  10. --ask-sudo-pass #sudo密码

模块初识:

案例:

  1. - name: 判断域名是否可以解析
  2. shell: ping mirrors.intra.openredcloud.com -c 2
  3. register: dns_useful
  4. ignore_errors: True

Shell是执行一条shell命令,代表某一个模块,这里是shell模块

register是将shell的返回值注入到dns_useful变量中,这是一种声明临时变量的方式。 Ignore_errors是忽略错误,对应echo $?这样的查看前面命令执行的结果,shell结果不为0都会认为是失败,ignore_errors默认是flase,失败后会使整个ansible脚本终端,所以一般可能失败而又不能影响后续的操作记得要配置成true。

Command模块:

  1. - name: yum-clean-metadata
  2. command: yum clean all
  3. args:
  4. warn: no

与shell模块的功能是重复的,但是shell比command更灵活,看下官方的command与shell区别的解释:

“ so variables like $HOME and operationslike “<”, “>”, “|”, and “&”will not work (use the shell module if you need these features).”

总结就是简单的没特殊字符的用command,command搞不定的用shell,当然也可以全部用shell。

Yum模块:

  1. - name: remove epel if installed
  2. yum:
  3. name: epel-release
  4. state: absent
  5. ignore_errors: true

name表示要操作的软件包的名字;state标识要做什么操作, present:默认的,表示为安装;lastest:安装为最新的版本, absent:表示删除

yum常用的name有很多,这里操作的是:epel-release:Extra Packages for EnterpriseLinux,此外还有

dnsmasq:内网的DNS+DHCP配置工具

selinux:加强安全

Copy模块:

  1. - name: config system reslov.conf
  2. copy:
  3. src: resolv.conf
  4. dest: /etc/resolv.conf

src要指向把本地(宿主机)的文件,在/files目录下去找;

dest:服务器上的目的地址

Template模块:

  1. - name: config dnsmasq.conf
  2. template:
  3. src: dnsmasq.conf.j2
  4. dest: /etc/dnsmasq.conf

template模块是专门为jinjia2模板提供服务的,jinjia2文件是一种以.j2后缀的模板文件,预留了变量供使用时初始化。

src要指定宿主机上的jinjia2模板文件,去/templates目录下去找

dest好理解,就是目的服务器上的位置

此外还有owner、group、mode,对应linux里的概念,也很好理解。

我们来看下dnsmasq.conf.j2的结构:

  1. resolv-file= {
  2. { resolv_file }}
  3. listen-address=127.0.0.1
  4. no-hosts
  5. cache-size={
  6. { cache_size }}
  7. local-ttl={
  8. { ttl }}
  9. all-servers

{ { }}中的内容就会被自动填充,填充规则上一篇讲过,有多种方式不同的优先级,我个人推荐的是命令指定和/vars目录下预设两种方式。

File模块

大部分属性与template模块类似,该模块是对远程文件进行操作管理的模块,与template最大的区别是state属性:

state:

  1. touch:创建一个新的空文件
  2. directory:创建一个新的目录,当目录存在时不会进行修改
  3. link:创建软连接,结果src一起使用此选项才生效
  4. hard:创建硬连接
  5. absent:删除文件,目录,软连接

Wait_for模块:

等待事情发生,例如等待数据库启动、web容器启动等。

  1. - name: wait for dnsmasq port 53
  2. wait_for:
  3. port: 53
  4. timeout: 10

port:等待某端口号必须启动

path:等待某文件必须创建

host:默认是127.0.0.1,为了满足等待其它远程服务器的场景

timeout的单位是秒

state:默认是started,也就是等待启动或创建,也可能存在等待删除或停止等场景。对象是端口的时候start状态会确保端口是打开的,stoped状态会确认端口是关闭的;对象是文件的时候,present或者started会确认文件是存在的,而absent会确认文件是不存在的。

Service模块:

如果说yum模块是对linux组件的增删改,那么service模块就是对linux组件的操纵。

  1. - name: restarting dnsmasq
  2. service: name=dnsmasq state=restarted enabled=yes

name:组件的名称

state:对组件进行的操作

enabled:这个注意了,默认是no,拿本案例来说如果配置成false就是restart了之后就不关心结果了,配置成yes是要关心结果。

Lineinfile文件编辑模块:

  1. - name: edit /etc/sysconfig/init
  2. lineinfile:
  3. dest=/etc/sysconfig/init
  4. regexp="^ulimit "
  5. line="ulimit -n {
  6. { ulimit_num | default('65536') }}"
  7. create=/etc/sysconfig/init
  8. ignore_errors: yes

dest:被编辑的文件

regexp:使用正则表达式进行匹配

line:编辑的内容

create:如果dest不存在,那么就创建,默认没有create,找不到dest的文件就会失败

sysctl模块:

远程主机sysctl配置

  1. - name: config sysctl.conf
  2. sysctl:
  3. name: "{
  4. { item.key }}"
  5. value: "{
  6. { item.value }}"
  7. state: present
  8. reload: no
  9. with_dict: "{
  10. { sysctl_dict }}"

name+value:sysctl模块是以key:value的方式来配置的,name和value分别对应着key、value

state:state=present修改,state=absent 删除

reload :reload=yes 重载 sysctl.conf 文件

Pip模块:

Python的pip安装或卸载,该模块比较好理解

  1. - name: Ensure Supervisor is installed (specific version).
  2. pip:
  3. name: supervisor
  4. state: present
  5. version: "{
  6. { supervisor_version }}"

Group和user模块:

相当于linux里对group和user的操作

案例(判断某group是否存在):

  1. - name: Ensure supervisor_user group exists
  2. group:
  3. name: "{
  4. { supervisor_user }}"
  5. state: present

同理,将group替换成user就是对用户的判断。

Git模块:

对于git版本服务的操作模块

  1. - name: ANSISTRANO | GIT | Update remote repository
  2. git:
  3. repo: "{
  4. { ansistrano_git_repo }}"
  5. dest: "{
  6. { ansistrano_deploy_to }}/repo"
  7. version: "{
  8. { ansistrano_git_branch }}"
  9. accept_hostkey: true
  10. update: yes
  11. force: yes
  12. register: ansistrano_git_result_update
  13. when: ansistrano_git_identity_key_path|trim == '' and ansistrano_git_identity_key_remote_path|trim == ''

repo:git仓库的地址

dest:仓库中的相对目录

version:哪个版本

accept_hostkey:如果ssh_opts包含” -o StrictHostKeyChecking=no”,此参数可以省略,如果配置成true或yes,需要添加hostkey

update:是否要更新新版本

force:配置成yes,本地仓库将永远被仓库服务端覆盖

与git相似的是svn操作,也就是subversion模块,如果自己代码是用svn管理的可以自己去了解下subversion模块,这里不再做介绍。

unarchive模块:

于解压包,支持 zip、tar、jar 等

  1. - name: codelivery | Unarchive | Unarchive source
  2. unarchive:
  3. copy: no
  4. src: "{
  5. { codelivery_releases_dir }}/{
  6. { codelivery_product_url | basename }}"
  7. dest: "{
  8. { codelivery_releases_dir }}"

src和dest很好理解,不再解释

copy:在哪里解压,no代表的是压缩包传到dest目的机后在目的机解压,yes代表在ansible宿主机上解压完毕后再将加压后的文件上传到目的机。

get_url模块,

也就是download操作:

  1. - name: codelivery | download | Download artifact
  2. get_url:
  3. url: "{
  4. { codelivery_product_url }}"
  5. dest: "{
  6. { codelivery_releases_dir }}/{
  7. { codelivery_product_url | basename }}"
  8. force_basic_auth: "{
  9. { codelivery_download_force_basic_auth | default(omit) }}"
  10. headers: "{
  11. { codelivery_download_headers | default(omit) }}"

url:http的地址

dest:下载文件到目的机的路径

force_basic_auth:在发起请求前是否发出权限校验信息

headers:报文头信息

uri模块:

比get_url功能更强大的http请求模块,可以发起get、post、put等各种请求方式,也可以处理返回值及内容

  1. - name: codelivery | healthcheck | urlcheck status==200?
  2. uri:
  3. url: "http://{
  4. { codelivery_urlcheck_addr }}:{
  5. { codelivery_urlcheck_port }}{
  6. { codelivery_urlcheck_url }}"
  7. method: GET
  8. headers:
  9. Host: "{
  10. { codelivery_urlcheck_host }}"
  11. timeout: 10
  12. status_code: 200
  13. return_content: no

属性如字面意思,比较好理解,不再做解释。

常用魔数:

  1. ansible_distribution=Ubuntu
  2. ansible_distribution_version=14.04
  3. ansible_distribution_major_version:系统的大版本号
  4. ansible_os_family:系统的操作系统(‘RedHat’,’Debian’,’FreeBSD’)

其他小细节:

自定义报错:

  1. - name: check curl environment | 2
  2. fail: msg="curl不支持nss"
  3. when: curl_nss | failed

很明显curl_nss是前面register下来的参数,通过这种方式可以封装一个自定义的友好的报错信息。

自定义局部变量并赋值:

  1. - name: Define nginx_user.
  2. set_fact:
  3. nginx_user: "{
  4. { __nginx_user }}"
  5. when: nginx_user is not defined

通过set_fact可以设置一个局部的变量,可以在后续脚本或jinjia2模板中引用。

发表评论

表情:
评论列表 (有 0 条评论,461人围观)

还没有评论,来说两句吧...

相关阅读