当前位置:首页 > 技术文章 > 正文内容

Centos7学习笔记(十五)- ansible初步

ivker_lee5年前 (2020-09-09)技术文章288

1、安装要求

管理主机:

必须不能是windows系统。类Uinx系统下,python版本为2.6或者2.7。OS X系统,需修改ulimit值才能使用ansible的多子进程。

托管节点:

Python版本不得低于2.4,如果Python版本低于2.4,那么需要安装python-simplejson模块。

2、ansible安装

redhat系需要安装epel源,fedora不用,可以直接安装

yum -y install ansible

(yum -y install libselinux-python,系统如果没这个包,需安装。在被操控主机(托管节点)上,也需要安装此软件,否则与copy/file/template相关的函数将不能使用)

3、基本的文件构成

/etc/ansible/hosts默认主机列表清单文件

/etc/ansible/ansible.cfg默认配置文件

/etc/ansible/roles/角色目录


4、基本的用法——公钥与密码

①公钥指纹的免yes确认。

三种方法:

1)/etc/ansible/ansible.cfg第71行,去除#符,修改为host_key_checking = False

2)/etc/ansible/ansible.cfg第375行,去除改行#注释,修改为

ssh_args = -C -o ControlMaster=auto -o ControlPersist=60s -o StrictHostKeyChecking=no

3)ansible命令执行时,添加--ssh-common-args "-p 52113 -o StrictHostkeyChecking=no"选项。

ansible  -u study -k --ssh-common-args "-p 52113 -o StrictHostKeyChecking=no" -m command -a "df -h" 172.16.1.71
SSH password: 
[WARNING]: sftp transfer mechanism failed on [172.16.1.71]. Use ANSIBLE_DEBUG=1 to see detailed
information
[WARNING]: scp transfer mechanism failed on [172.16.1.71]. Use ANSIBLE_DEBUG=1 to see detailed
information
172.16.1.71 | CHANGED | rc=0 >>
文件系统        容量  已用  可用 已用% 挂载点
devtmpfs        476M     0  476M    0% /dev
tmpfs           487M     0  487M    0% /dev/shm
tmpfs           487M  7.6M  479M    2% /run
tmpfs           487M     0  487M    0% /sys/fs/cgroup
/dev/sda3        28G  2.0G   26G    8% /
/dev/sda1       253M  136M  118M   54% /boot
tmpfs            98M     0   98M    0% /run/user/1000

②免输入密码认证

1)在/etc/ansible/hosts文件中,指定托管主机的ssh_user,ssh_pass,ssh_port等。

image.png

2)密码统一的情况下,可修改/etc/ansible/ansible.cfg中default部分,指定密码。

3)用ssh公钥免密登录方式。


5、基本用法——基本模块

usage: ansible [-h] [--version] [-v] [-b] [--become-method BECOME_METHOD]

              [--become-user  BECOME_USER] [-K] [-i INVENTORY] [--list-hosts] [-l SUBSET] [-P

              POLL_INTERVAL]  [-B  SECONDS]  [-o]  [-t   TREE]   [-k]   [--private-key   PRI‐

              VATE_KEY_FILE] [-u REMOTE_USER] [-c CONNECTION] [-T TIMEOUT] [--ssh-common-args

              SSH_COMMON_ARGS]    [--sftp-extra-args    SFTP_EXTRA_ARGS]    [--scp-extra-args

              SCP_EXTRA_ARGS]  [--ssh-extra-args  SSH_EXTRA_ARGS]  [-C] [--syntax-check] [-D]

              [-e  EXTRA_VARS]  [--vault-id  VAULT_IDS]  [--ask-vault-pass  |   --vault-pass‐

              word-file  VAULT_PASSWORD_FILES]  [-f  FORKS]  [-M MODULE_PATH] [--playbook-dir

              BASEDIR] [-a MODULE_ARGS] [-m MODULE_NAME] pattern

ansible-doc -l ——用于列表出所有模块

ansible-doc -s 模块名 ——查看该“模块名”的所有使用参数

①command模块

[root@m01 ~/.ssh]#ansible-doc -s command
- name: Execute commands on targets
  command:
      argv:                  # Passes the command as a list rather than a string. Use `argv' to
                               avoid quoting values that would
                               otherwise be interpreted
                               incorrectly (for example "user
                               name"). Only the string or the
                               list form can be provided, not
                               both.  One or the other must be
                               provided.
      chdir:                 # Change into this directory before running the command.           #《=====相当于cd命令,改变到某目录。用法:-a "chdir=/root ls"
      cmd:                   # The command to run.
      creates:               # A filename or (since 2.0) glob pattern. If it already exists,      #《=======相当于测试[ -e 文件或目录 ],测试成功则不执行后续步骤。
                               this step *won't* be run.
      free_form:             # The command module takes a free form command to run. There is no    #《======= -a能跟的""里的命令内容,基本都属于free_form.
                               actual parameter named 'free
                               form'.
      removes:               # A filename or (since 2.0) glob pattern. If it already exists,       #《=======跟creates相反,当[ -e 文件或目录 ]成功时,执行后续步骤。
                               this step *will* be run.
      stdin:                 # Set the stdin of the command directly to the specified value.
      stdin_add_newline:     # If set to `yes', append a newline to stdin data.
      strip_empty_ends:      # Strip empty lines from the end of stdout/stderr in result.
      warn:                  # Enable or disable task warnings.         #《========忽略或显示警告内容,布尔值,范围:0, 'on', 'f', 'false', 1, 'no', 'n', '1', '0', 't', 'y', 'off', 'yes', 'true'

image.png


②shell模块

shell跟command一样,不过shell支持管道等所有特殊字符

③copy模块

常用参数:

src——要复制到远程主机的文件在本地的地址,可以是绝对路径,也可以是相对路径。如果路径是一个目录,它将递归复制。在这种情况下,如果路径使用"/"来结尾,则只复制目录里的内容,如果没有使用"/"来结尾,则包含目录在内的整个内容全部复制,类似于rsync。

dest——必有参数。文件应被拷贝到的远程绝对路径。如果src是一个目录,dest也必须是目录。

ower——定义所拥有文件/目录的所属用户名称,类似chown功能

group——定义所拥有文件/目录的所属用户组名称,类似chown功能

mode——定义文件或目录的权限,等同于chmod,参数可以为“u+rwx or u=rw,g=r,o=r”形式,也可以是数字形式,新版本可以是preserve字串

backup——创建备份文件并包含时间戳信息,以便能够还原回文件,在某种情况下原文件被错误覆盖事。默认是no,可选值为yes、no。

content——当使用src参数时,将文件的内容直接设置为指定的值。远端创建有指定内容的文件,并且只能设置简单值。当设置复杂或格式化内容,用template模块。

force——默认为yes。当远程文件内容和源文件内容不同时,将覆盖目标文件。如果设置为no,文件将只被传输,在目标文件不存在时

remote-src——默认false。如果为true,那么将在远程/目标机器上搜索文件。2.8版本开始支持递归copy。

follow——yes/no。当拷贝的文件夹内有link存在的时候,那么拷贝过match去的也会有link

[study@c7study ~/.ssh]$ ansible www -u manager -m shell -a 'echo -e "abc\ndef" >/tmp/hosts'
156.96.148.72 | CHANGED | rc=0 >>
[study@c7study ~/.ssh]$ ansible www -u manager -m shell -a "cat /tmp/hosts"
156.96.148.72 | CHANGED | rc=0 >>
abc
def
[study@c7study ~/.ssh]$ ^C
[study@c7study ~/.ssh]$ ansible www -u manager -m copy -a "src=/etc/hosts dest=/tmp/hosts backup=yes"     #《=====这里,用了backup=yes
156.96.148.72 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "backup_file": "/tmp/hosts.19719.2020-09-15@16:11:52~", 
    "changed": true, 
    "checksum": "7335999eb54c15c67566186bdfc46f64e0d5a1aa", 
    "dest": "/tmp/hosts", 
    "gid": 1001, 
    "group": "manager", 
    "md5sum": "54fb6627dbaa37721048e4549db3224d", 
    "mode": "0664", 
    "owner": "manager", 
    "size": 158, 
    "src": "/home/manager/.ansible/tmp/ansible-tmp-1600157497.67-3521-279608571329628/source", 
    "state": "file", 
    "uid": 1001
}
[study@c7study ~/.ssh]$ ansible www -u manager -m shell -a "cat /tmp/hosts"
156.96.148.72 | CHANGED | rc=0 >>
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
[study@c7study ~/.ssh]$ ansible www -u manager -m shell -a "ls /tmp"
156.96.148.72 | CHANGED | rc=0 >>
ansible_command_payload_4WI3Xn
ansible_command_payload_z5ykCG
hosts
hosts.19719.2020-09-15@16:11:52~                               #《===========这里,备份后的文件,附加了时间戳信息
percona-version-check
systemd-private-b551031a4dbc4015a42883a5cc5143e2-php-fpm.service-0AYW2P
[study@c7study ~/.ssh]$ ansible www -u manager -m shell -a "cat /tmp/hosts.19719.2020-09-15@16:11:52~"
156.96.148.72 | CHANGED | rc=0 >>
abc
def


④script模块

作用:在远程主机上执行ansible主机上的脚本,且不需要将脚本复制到被执行的远程主机上。

参数:

脚本路径,必须参数

chdir:在执行脚本之前,先进入到指定目录

creates:当远程主机上的该文件存在时,不执行脚本;反之执行

removes:当远程主机上的该文件不存在时,不执行脚本;反之执行

⑤file模块

主要用于远程机器上的文件操作,file模块包含以下参数:

force:当state=link的时候,可配合此参数强制创建链接文件,当force=yes时,表示强制创建链接文件。不过强制创建链接文件分为三种情况。情况一:当要创建的链接文件指向的源文件并不存在时,使用此参数,可以先强制创建出链接文件。情况二:当要创建链接文件的目录中已经存在与链接文件同名的文件时,将force设置为yes,会将同名文件覆盖为链接文件,相当于删除同名文件,创建链接文件。情况三:当要创建链接文件的目录中已经存在与链接文件同名的文件,并且链接文件指向的源文件也不存在,这时会强制替换同名文件为链接文件。

group: 定义文件目录属性,用于指定被操作文件的属主,属主对应的用户必须在远程主机中存在,否则会报错。

mode:定义文件目录的权限,比如,如果想要将文件权限设置为”rw-r-x---“,则可以使用mode=650进行设置,或者使用mode=0650,效果也是相同的。如果想要设置特殊权限,比如为二进制文件设置suid,则可以使用mode=4700。

owner:定义文件目录的所有者,属主对应的用户必须在远程主机中存在,否则会报错。

path:必选项,定义文件目录的路径。在之前版本的ansible中,使用dest参数或者name参数指定要操作的文件或目录,为了兼容之前的版本,使用dest或name也可以

recurse: 只对目录有效,当要操作的文件为目录,将recurse设置为yes,可以递归的修改目录中文件的属性。

src:只适用于state=link或hard的情况。当state设置为link或者hard时,表示我们想要创建一个软链或者硬链,所以,我们必须指明软链或硬链链接的哪个文件,通过src参数即可指定链接源。

dest:被连接到的路径,,只适用于state=link或hard的情况

state:以下是stat的各种值

  • directory:如果目录不存在,创建目录

  • file:即使文件不存在,也不会被创建

  • link:创建软连接

  • hard:创建硬链接

  • touch:如果文件不存在时候,则则会创建一个新文件,如存在文件目录,则更新最后修改时间

  • absent:删除目录文件或者取消连接文件

⑥yum模块

参数比较多,常用的2个

name:需要安装的软件包名称,或包的版本标识信息

state:是否安装(present or installed, lastest),或者是删除(absent or removed)软件包
⑦systemed模块

常用的参数:

name:指定服务名称,必须是全称,比如crond.service

state:可以是started,stopped,restarted,reloaded四个值

enable:可以是yes或no的值

scope:可选值为user、system、global。该参数用于定义执行systemctl的能力。默认的应该为root用户,对应的是system的能力。对于user来说,执行命令的用户必须拥有开启dbus示例的权限。常规理解,对于普通拥有sudo权限的用户,则应制定为global。global是面向所有用户的。

[study@m01 ~]$ansible test -m systemd -a "name=crond.service state=restarted scope=global"    #《=====“test”清单中的主机,均启用的是study的普通sudo用户开启ssh通道
[WARNING]: Target is a chroot. This can lead to false positives or prevent the init system
tools from working.
172.16.1.81 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": false, 
    "name": "crond.service", 
    "state": "restarted", 
    "status": {}
}
172.16.1.71 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": false, 
    "name": "crond.service", 
    "state": "restarted", 
    "status": {}
}


分享给朋友:

相关文章

phpldapadmin之config.php过滤

phpldapadmin之config.php过滤

完全过滤掉/*--------*/"和空行,以及”//“开头、”#“开头的行,sed  -e '/\/\*/,/\*\//d' config.php|grep -Ev "(^$)|(^(\/\/))|(^#)"sed  -e '/\/\*/,/\*\//d' -e '/^\/\//d' -e ...

Centos7学习笔记(十)- rsync服务器搭建

Centos7学习笔记(十)- rsync服务器搭建

1、服务器端yum -y install rsyncsudo vim /etc/rsyncd.conf##全局配置参数## uid = rsync gid = rsync fake super = yes use chroot = no max connections = 200 timeout = 600 #motd fi...

Centos7学习笔记(七)— 性能调优一

Centos7学习笔记(七)— 性能调优一

1、nice,renice  调整进程nice值,让进程使用更多的CPUnice值   #范围,  -20 ~ 19  越小优先级越高 普通用户0-19作用:以什么优先级运行进程 。默认优先级是0语法: nice  -n 优先级数字   命令例:# nice -n -5 vim a.txt   # vim进程以-5级别运行查看:ps -axu | grep a.txt[root@xueg...

Centos7学习笔记(五)-tmpfs和xfs

Centos7学习笔记(五)-tmpfs和xfs

介绍/dev/shm/是一个使用就是tmpfs文件系统的设备,其实就是一个特殊的文件系统。redhat中默认大小为物理内存的一半,使用时不用mkfs格式化。tmpfs是Linux/Unix系统上的一种基于内存的虚拟文件系统。tmpfs可以使用您的内存或swap分区来存储文件(即它的存储空间在virtual memory 中, VM由real memory和swap组成)。由此可见,tmpfs主要存储暂存的文件。它有如下2个优势 : 1. 动态文件系统的大小。2. tmpfs 使用VM建的文件系统...

 Centos7学习笔记(十二)- inotify+rsync与sersync

Centos7学习笔记(十二)- inotify+rsync与sersync

1、inotify-tools的安装yum安装,安装好epel源后,yum -y install inotify-tools源码安装:wget  https://github.com/inotify-tools/inotify-tools/releases/download/3.20.2.2/inotify-tools-3.20.2.2.tar.gz tar zxvf inotify-tools-3.20.2.2.tar.gz cd inot...

Centos7学习笔记(三)——重定向、通配符、正则

Centos7学习笔记(三)——重定向、通配符、正则

1、STDIN、STDOUT、STDERR输入重定向和输出重定向的符号和作用,分别在下面2个表中。注意:当输出结果是error时,是不能将结果重定向到“标准输出”中,反之,输出结果是“标准输出”,也不能重定向至错误输出中。如下图实例:[study@nfs01 ~]$sudo echo "00 1 * * * /usr/bin/rsync  -avz -r /etc/r...

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。