一,ansible 目录结构

ansible  入门学习(一)_Ansible(来自于ansible权威指南)

二,ansible.cfg 配置项说明

/etc/ansible/ansible.cfg -->

ansible  入门学习(一)_linux_02

————————————————————————————————————————————————————————————



  • ANSIBLE_CFG 环境变量,可以定义配置文件的位置
  • ansible.cfg 存在于当前工作目录
  • ansible.cfg 存在与当前用户家目录
  • /etc/ansible/ansible.cfg

ansible 配置文件默认存使用 ​​/etc/ansible/ansible.cfg​

hosts文件默认存使用 ​​/etc/ansible/hosts​

[defaults]

配置

说明

#inventory = /etc/ansible/hosts

指定主机清单文件

#library = /usr/share/my_modules/

指定模块地址

#remote_tmp = $HOME/.ansible/tmp

指定远程执行的路径

#local_tmp = $HOME/.ansible/tmp

ansible 管理节点得执行路径

#forks = 5

置默认情况下Ansible最多能有多少个进程同时工作,默认设置最多5个进程并行处理

#poll_interval = 15

轮询间隔

#sudo_user = root

sudo默认用户

#ask_sudo_pass = True

是否需要用户输入sudo密码

#ask_pass = True

是否需要用户输入连接密码

#transport = smart


#remote_port = 22

远程链接的端口

#module_lang = C

这是默认模块和系统之间通信的计算机语言,默认为’C’语言.

#module_set_locale = True


#gathering = implicit


#gather_subset = all

定义获取fact的子集,默认全部

#roles_path = /etc/ansible/roles

角色存储路径

#host_key_checking = False

跳过ssh 首次连接提示验证部分,False表示跳过。

#stdout_callback = skippy


#callback_whitelist = timer, mail


#task_includes_static = True


#handler_includes_static = True


#sudo_exe = sudo

sudo的执行文件名

#sudo_flags = -H -S -n

sudo的参数

#timeout = 10

连接超时时间

#remote_user = root

指定默认的远程连接用户

#log_path = /var/log/ansible.log

指定日志文件

#module_name = command

指定ansible默认的执行模块

#executable = /bin/sh

用于执行脚本得解释器

#hash_behaviour = replace

如果变量重叠,优先级更高的一个是替换优先级低得还是合并在一起,默认为替换

#private_role_vars = yes

默认情况下,角色中的变量将在全局变量范围中可见。 为了防止这种情况,可以启用以下选项,只有tasks的任务和handlers得任务可以看到角色变量。

#jinja2_extensions = jinja2.ext.do,jinja2.ext.i18n

jinja2的扩展应用

#private_key_file = /path/to/file

指定私钥文件路径

#vault_password_file = /path/to/vault_password_file

指定vault密码文件路径

#ansible_managed = Ansible managed: {file} modified on %Y-%m-%d %H:%M:%S by {uid} on {host}

定义一个Jinja2变量,可以插入到Ansible配置模版系统生成的文件中

#display_skipped_hosts = True

如果设置为False,ansible 将不会显示任何跳过任务的状态.默认选项是显示跳过任务的状态

#display_args_to_stdout = False


#error_on_undefined_vars = False

如果所引用的变量名称错误的话, 是否让ansible在执行步骤上失败

#system_warnings = True


#deprecation_warnings = True


#command_warnings = False


#action_plugins = /usr/share/ansible/plugins/action

action模块的存放路径

#callback_plugins = /usr/share/ansible/plugins/callback

callback模块的存放路径

#connection_plugins = /usr/share/ansible/plugins/connection

connection模块的存放路径

#lookup_plugins = /usr/share/ansible/plugins/lookup

lookup模块的存放路径

#vars_plugins = /usr/share/ansible/plugins/vars

vars模块的存放路径

#test_plugins = /usr/share/ansible/plugins/test

test模块的存放路径

#strategy_plugins = /usr/share/ansible/plugins/strategy

strategy模块的存放路径

#bin_ansible_callbacks = False


#nocows = 1


#cow_selection = default


#cow_selection = random


#cow_whitelist=bud-frogs,bunny,cheese,daemon,default,dragon,elephant-in-snake,elephant,eyes,

#nocolor = 1

默认ansible会为输出结果加上颜色,用来更好的区分状态信息和失败信息.如果你想关闭这一功能,可以把’nocolor’设置为‘1’:

#fact_caching = memory

fact值默认存储在内存中,可以设置存储在redis中,用于持久化存储

#retry_files_enabled = False

当playbook失败得情况下,一个重试文件将会创建,默认为开启此功能

#retry_files_save_path = ~/.ansible-retry

重试文件的路径,默认为当前目录下.ansible-retry

#squash_actions = apk,apt,dnf,package,pacman,pkgng,yum,zypper

Ansible可以优化在循环时使用列表参数调用模块的操作。 而不是每个with_项调用模块一次,该模块会一次调用所有项目一次。该参数记录哪些action是这样操作得。

#no_log = False

任务数据的日志记录,默认情况下关闭

#no_target_syslog = False

防止任务的日志记录,但只在目标上,数据仍然记录在主/控制器上

#allow_world_readable_tmpfiles = False


#var_compression_level = 9

控制发送到工作进程的变量的压缩级别。 默认值为0,不使用压缩。 此值必须是从0到9的整数。

#module_compression = 'ZIP_DEFLATED'

指定压缩方法,默认使用zlib压缩,可以通过ansible_module_compression来为每个主机设置

#max_diff_size = 1048576

控制--diff文件上的截止点(以字节为单位),设置0则为无限制(可能对内存有影响)

[privilege_escalation]

#become=True

#become_method=sudo

#become_user=root

#become_ask_pass=False

[paramiko_connection]

#record_host_keys=False

#pty=False

[ssh_connection]

配置

说明

#ssh_args = -o ControlMaster=auto -o ControlPersist=60s

ssh连接时得参数

#control_path = %(directory)s/ansible-ssh-%%h-%%p-%%r

保存ControlPath套接字的位置

#pipelining = False

SSH pipelining 是一个加速 Ansible 执行速度的简单方法。ssh pipelining 默认是关闭,之所以默认关闭是为了兼容不同的 sudo 配置,主要是 requiretty 选项。如果不使用 sudo,建议开启。打开此选项可以减少 ansible 执行没有传输时 ssh 在被控机器上执行任务的连接数。不过,如果使用 sudo,必须关闭 requiretty 选项。

#scp_if_ssh = True

该项为True时,如果连接类型是ssh,使ansible使用scp,为False是,ansible使用sftp。默认为sftp

#sftp_batch_mode = False

该项为False时,sftp不会使用批处理模式传输文件。 这可能导致一些类型的文件传输失败而不可捕获,但应该只有在您的sftp版本在批处理模式上有问题时才应禁用

[accelerate]

加速配置

#accelerate_port = 5099

#accelerate_timeout = 30

#accelerate_connect_timeout = 5.0

#accelerate_daemon_timeout = 30

#accelerate_multi_key = yes

[selinux]

配置

说明

#special_context_filesystems=nfs,vboxsf,fuse,ramfs

文件系统在处理安全上下文时需要特殊处理,定义复制现有上下文的文件系统

#libvirt_lxc_noseclabel = yes

将此设置为yes,以允许libvirt_lxc连接在没有SELinux的情况下工作。

[colors]

定义输出颜色

#highlight = white

#verbose = blue

#warn = bright purple

#error = red

#debug = dark gray

#deprecate = purple

#skip = cyan

#unreachable = red

#ok = green

#changed = yellow

#diff_add = green

#diff_remove = red

#diff_lines = cyan

配置來源:简书

 三,ansible使用

01)配置host-----------》

ansible  入门学习(一)_正则_03

02)参数说明

  ansible <host-pattern> [options]

  <host-pattern> 这个就是Inventroy中定义的主机或者主机组  <> 这个选项内容是必须要有的

  [options]是Ansible参数选项   [ ]任选参数

  -m    NAME,--module-name=NAME:执行使用的模块

  -u  USERNAME,--user=USERNAME  指定远程主机以USERNAME执行

  -s    --sudo:相当于sudo

  -U SUDO_USERNAME,--sudo-user=SUDO_USERNAME 使用sudo


ansible all -m ping ----->在这个之前看我expect文章配置ssh+key全网分发,本身是具有分发的,你可以试试

ansible  入门学习(一)_正则_04

ok

三,ansible系列命令详解

01,ansible

  临时性操作,二次开发接口的调用,没有规律的性的操作

  如ansible all -m ping

  复制文件到目标上

  ansible all -m copy -a “src=/server/seript dest=/tmp/tset owner=root group=root mode=644 backup=yes”

    返回颜色有三种:红色        绿色       橘黄色

      红色:代表执行异常

    ansible  入门学习(一)_正则_05


      绿色: 执行成功

    ansible  入门学习(一)_Ansible_06


      橘黄色:执行成功但是目标存在状态变化

    ansible  入门学习(一)_Ansible_07  

02,ansible-galaxy

    这个功能可以理解为git与pip的功能,安装软件

    命令格式

    ansible-galaxy [ init | info | install | list | remove  ] [ -- help ] [ option ]

    001) [ init | info | install | list | remove  ]

         0001)init :初始化本地指定软件的配置

         0002)info : 列表指定的详细信息

         0003)install :下载并安装galaxy指定de软件到本地

         0004)list : 列出本地已下载的指定软件

         0005)remove :删除一下在的指定软件

    002) [ -- help ]

         前面的内容进行帮组

    003)[ option ]

            -f, --force           Force overwriting an existing role

            强制覆盖

            -h, --help            show this help message and exit

               显示这个帮助信息和退出

               -c, --ignore-certs    Ignore SSL certificate validation errors.

                忽略SSL证书验证错误。

           --init-path=INIT_PATH

                              The path in which the skeleton role will be created.

                              The default is the current working directory.

             默认值是当前工作目录。

             --offline             Don't query the galaxy API when creating roles

           离线时,在创建角色时不要查询galaxy API

            --role-skeleton=ROLE_SKELETON

                             The path to a role skeleton that the new role should be based upon.

03,Ansible-pull

    pull工作模式(ansible默认使用push模式)

    适合场景:1,机器数量巨大需要配置,效率高,

         2,在刚刚启动的,没有网络上的主机运行

04,Ansible-doc

    Ansible模块文档说明,相当于linux  man

      ansible  入门学习(一)_配置文件_08    


05,Ansible-playbook

    使用率超级高的模块

      工作机制:通过读写预编译的playbook文档实现批量管理

    play具有编写简单,可定制性高,灵活方便,可以固话日常所有操作,

06,Ansible-vault

    用于配置文件加密

 格式:   

 ansible-vault  [ create | decrypt | edit | encrypt | encrypt_string | rekey |view ] [ options ] [vaultfile.yml]


07,ansible-console

   用户交互式工具


四,host

   ansible的配置主机配置文件默认在/etc/ansible/hosts


  在执行 的时候我们是可以指定文件读取的


  - i  参数或者 --inventory-file

  ansible  入门学习(一)_Ansible_09


   定义主机的内容配置

  1)直接为IP

    ansible  入门学习(一)_linux_10

  2)既可以有IP 也可以有hostname

    ansible  入门学习(一)_Ansible_11

  3)支持多台一起写

    ansible  入门学习(一)_正则_12

  4)可以是数据库

    ansible  入门学习(一)_linux_13


  inventroy  ssh 相关参数

    ansible_ssh_host:指定连接的主机 

    ansible_ssh_port:指定ssh连接端口

    ansible_ssh_user:指定ssh连接用户

    ansible_ssh_pass:指定ssh连接密码

    ansible_sudo_pass:指定连接的sudo密码

    ansible_ssh_private_key_file:指定特有的私钥文件

五,ansible正则

  1)匹配所有aLL

  ansible all  -m  ping

                -->两者是一样的表示所有主机

  ansible “*” -m ping

  ansible 10.0.0.* -m ping 

    扫描存活ip

     ansible  入门学习(一)_linux_14


  2) 逻辑或(or)

    ansible 中或使用  :  表示

    ansible  入门学习(一)_linux_15

  3)逻辑非(!)

    表示在这个组的但是不再另一个组的主机

  4)逻辑与(&)

    表示两个组同时存在的主机

   5)模糊匹配

    * 匹配0个或多个任意字符

   6)域切割

     python切割方式差不多

     【server】

       10.0.0.0 

         10.0.0.1

       10.0.0.1

      server[0] ==>10.0.0.0

      server[-1] ==>10.0.0.2

       server0:1] ==>10.0.0.0,10.0.0.1

      server[1:] ==>10.0.0.1,10.0.0.2

   7)正则

     对主机进行正则匹配

六,Ansible AD-Hoc命令集用法

    及命令行执行



  • -v,--verbose:输出更详细的执行过程信息,-vvv可得到执行过程所有信息。
  • -i PATH,--inventory=PATH:指定inventory信息,默认/etc/absible/hosts。
  • -f NUM,--forks=NUM:并发线程数,默认5个线程。
  • --private-key=PRIVATE_KEY_FILE:指定密钥文件。
  • -m NAME,--module-name=NAME:指定执行使用的模块。
  • -M DIRECTORY,--module-path=DIRECTORY:指定模块存放路径,默认/usr/share/ansible,也可以通过ANSIBLE_LIBRARY设定默认路径。
  • -a 'ARGUMENTS',--args='ARGUMENTS':模块参数。
  • -k,--ask-pass SSH:认证密码。
  • -K,--ask-sudo-pass sudo:用户的密码(--sudo时使用)。
  • -o,--one-line:标准输出至一行。
  • -s,--sudo:相当于Linux系统下的sudo命令。
  • -t DIRECTORY,--tree=DIRECTORY:输出信息至DIRECTORY目录下,结果文件以远程主机名命名。
  • -T SECONDS,--timeout=SECONDS:指定连接远程主机的最大超时,单位是秒。
  • -B NUM,--background=NUM:后台执行命令,超NUM秒后中止正在执行的任务。
  • -P NUM,--poll=NUM:定期返回后台任务进度。
  • -u USERNAME,--user=USERNAME:指定远程主机以USERNAME运行命令。
  • -U SUDO_USERNAME,--sudo-user=SUDO_USERNAME:使用sudo,相当于Linux下的sudo命令。
  • -c CONNECTION,--connection=CONNECTION:指定连接方式,可用选项paramiko(SSH)、ssh、local,local方式常用于crontab和kickstarts。
  • -l SUBSET,--limit=SUBSET:指定运行主机。
  • -l ~REGEX,--limit=~REGEX:指定运行主机(正则)。
  • --list-hosts:列出符合条件的主机列表,不执行任何命令

ping 

   ansible  入门学习(一)_linux_16

ansible  入门学习(一)_linux_17

hostname执行过程信息

  ansible  入门学习(一)_配置文件_18

  ansible  入门学习(一)_linux_19

  ansible  入门学习(一)_Ansible_20



ansible  入门学习(一)_linux_17ansible执行流程介绍


ansible  入门学习(一)_linux_17ansible  入门学习(一)_正则_23

列出组的主机列表

 ansible  入门学习(一)_配置文件_24


 对10.0.0.71的服务器以root执行sleep20,设置最大连接超时时长为2S,设置为后台运行

执行没2s输出一次进度,5s未执行完则退出

ansible  入门学习(一)_linux_25



通过命令查看系统设置

  ansible  入门学习(一)_配置文件_26

shell模块使用

  ansible  入门学习(一)_正则_27


 七,ansiable-doc

   ansible-doc  -l  查看能用的模块


  ansible  入门学习(一)_linux_28

  ansible  入门学习(一)_Ansible_29

 yum 实战:

   ansible  入门学习(一)_linux_30


  给一台主机安装一个软件

    ansible  入门学习(一)_Ansible_31

  查看命令是否成功

  ansible  入门学习(一)_linux_32

  显示的信息:

    changed :主机是否有变更,true为有,false 为没有,第一次安装一般都是ture 否则false

    msg:安装过程

    rc:0 结果返回码

 给负载均衡服务器安装nginx

  ansible  入门学习(一)_正则_33


  ansible  入门学习(一)_Ansible_34


  ansible  入门学习(一)_Ansible_35


  ansible  入门学习(一)_正则_36


linux  用户管理

  user模块介绍[转]

   ansible  入门学习(一)_正则_37

  ansible  入门学习(一)_正则_38

   ansible  入门学习(一)_配置文件_39

 ansible创建用户

  ansible server -m user -a "name=test shell=/bin/bash groups=root append=yes home=/home/test state=present"

  ansible  入门学习(一)_linux_40

修改属主:

  ansible server -m user -a "name=test groups=test append=no"

  ansible  入门学习(一)_linux_41

  ansible  入门学习(一)_配置文件_42

更改用户属性

  设置用户登入过期时间

  ansible  入门学习(一)_Ansible_43

  ansible  入门学习(一)_正则_44

删除用户

  ansible server -m user -a "name=test state=absent remove=yes"

  ansible  入门学习(一)_正则_45

  ansible  入门学习(一)_配置文件_46

  没有了

 更改用户密码

  ansible  入门学习(一)_配置文件_47


 下一期见。。。。。。