自動化運維工具-Ansible基礎及Ansible Ad-Hoc

第58章 Ansible

 

一、Ansible基礎概述

1.1)什麼是Ansible

Ansible是一個IT自動化的配置管理工具,自動化主要體如今Ansible集成了豐富模塊,豐富的功能的組件,能夠經過一個命令行完成一系列的操做。進而能減小咱們重複性的工做和下降維護成本(下降出錯率),以提升工做的效率。

 

 

 

 

1.2)Ansible能夠完成哪些功能呢?

1)批量執行遠程命令,能夠對N多臺主機同時進行命令的執行。

2)批量配置軟件服務,能夠以自動化的方式進行配置和管理服務。

3)實現軟件開發功能,jumpserver底層使用ansible來實現自動化管理。

4)編排高級的IT任務,Ansible的Playbook是一門編程語言,能夠用來描繪一套IT架構。

5)事件驅動

經過Ansible的模塊,對服務進行不一樣的事件驅動

好比:

1)修改配置後重啓

2)只修改配置文件,不重啓

3)修改配置文件後,從新加載

4)遠程啓停服管理

6)管理公有云

經過API接口的方式管理公有云,不過這方面作的不如saltstacksaltstack自己能夠經過saltcloud管理各大雲廠商的雲平臺。

7)二次開發

由於語法是Python,因此便於運維進行二次開阿發。

8)任務編排

能夠經過playbook的方式來統一管理服務,而且可使用一條命令,實現一套架構的部署。

跨平臺、跨系統

幾乎不受到平臺和系統的限制,好比安裝apache和啓動服務。

Ubuntu上安裝apache服務名字叫apache2

CentOS安裝apache服務名字叫httpd

CentOS6上啓動服務器使用命令:/etc/init.d/nginx start

CentOS7上啓動服務器使用命令:systemctl start nginx

 

 

1.3)Ansible特色

1)容易學習,無代理模式,不像saltstack既要學客戶端與服務端,還要學客戶端與服務端中間通信協議;

2)操做靈活,體如今Ansible有較多的模塊,提供了豐富的功能,playbook則提供相似於編程語言的複雜功能;

3)簡單易用,體如今Ansible一個命令能夠完成不少事情;

4)安全可靠,由於Ansible使用了SSH協議進行通信,既穩定又安全;

5)移植性高,能夠將寫好的playbook拷貝至任意機器進行執行。

 

1.4)Ansible基礎架構(有必要了解,是知識要點)

Ansible的架構中的控制節點,被控制節點,inventroy、ad-hoc、playbook、鏈接協議這些是什麼?

 

 

 

 

Ansible的執行流程

一、Ansible讀取playbook劇本,劇本中會記錄對哪些主機執行哪些任務。

二、首先Ansible經過主機清單找到要執行的主機,而後調用具體的模塊。

三、其次Ansible會經過鏈接插件鏈接對應的主機並推送對應的任務列表。

四、最後被管理的主機會將Ansible發送過來的任務解析爲本地Shell命令執行。

2、ansible安裝

2.1)ansible安裝

#安裝ansible的前提是要有epel源
[root@m01 ~]# vim /etc/yum.repos.d/epel.repo

[root@m01 ~]# yum install ansible

#檢查ansible版本
[root@m01 ~]# ansible --version
ansible 2.8.4
config file = /etc/ansible/ansible.cfg
configured module search path = [u'/root/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
ansible python module location = /usr/lib/python2.7/site-packages/ansible
executable location = /usr/bin/ansible
python version = 2.7.5 (default, Oct 30 2018, 23:45:53) [GCC 4.8.5 20150623 (Red Hat 4.8.5-36)]

ansible配置文件存在優先級的問題

# nearly all parameters can be overridden in ansible-playbook
# or with command line flags. ansible will read ANSIBLE_CONFIG,
# ansible.cfg in the current working directory, .ansible.cfg in
# the home directory or /etc/ansible/ansible.cfg, whichever it
# finds first
[root@m01 ~]# rpm -ql ansible
[root@m01 ~]# zcat /usr/share/man/man1/ansible-config.1.gz

#要查看完整列表,請訪問https://docs.ansible.com/或使用ansible-config命令。
For a full list check \fI\%https://docs.ansible.com/\fP\&. or use the \fIansible\-config\fP command.

#/etc/ansible/ansible.cfg配置文件,若是存在則使用。
/etc/ansible/ansible.cfg \-\- Config file, used if present

#~/.ansible.cfg用戶配置文件,覆蓋默認配置(若是存在)
~/.ansible.cfg \-\- User config file, overrides the default config if present

#\&./ansible.cfg本地配置文件(在當前工做目錄中)假定爲(aqproject specific)(aq,若是存在,則重寫其他文件)。
\&./ansible.cfg \-\- Local config file (in current working directory) assumed to be \(aqproject specific\(aq and overrides the rest if present.

#入上所述,ANSIBLE_CONFIG環境變量將覆蓋全部其餘環境變量。
As mentioned above, the ANSIBLE_CONFIG environment variable will override all others.
1)ANSIBLE_CONFIG
2)ansible.cfg #當前項目目錄
3).ansible.cfg     #當前用戶的家目錄
4)/etc/ansible/ansible.cfg   #若是都沒有,則讀取/etc/ansible/ansible.cfg,它優先級最低

 

ansible配置文件詳解

[root@m01 ~]# cat /etc/ansible/ansible.cfg 
#inventory     = /etc/ansible/hosts     #主機列表配置文件
#library       = /usr/share/my_modules/ #庫文件存放目錄
#remote_tmp     = ~/.ansible/tmp         #臨時py文件存放在遠程主機目錄
#local_tmp     = ~/.ansible/tmp         #本機的臨時執行目錄
#forks         = 5                       #默認併發數
#sudo_user     = root                   #默認sudo用戶
#ask_sudo_pass = True                     #每次執行是否詢問sudo的ssh密碼
#ask_pass     = True                     #每次執行是否詢問ssh密碼
#remote_port   = 22                     #遠程主機端口
host_key_checking = False                 #跳過檢查主機指紋
log_path = /var/log/ansible.log           #ansible日誌


[privilege_escalation]   #若是是普通用戶則須要配置提權
#become=True
#become_method=sudo
#become_user=root
#become_ask_pass=False

 

3、Ansible Inventory

Inventory文件中填寫須要被管理主機與主機組信息(邏輯上定義)。默認Inventory文件在/etc/ansible/hosts。固然也能夠自定義,而後使用-i指定Inventory文件位置。下面經過幾個場景演示如何配置Inventory文件。

3.1)場景一:基於密碼鏈接

 

 

 

3.二、場景二:基於密鑰鏈接,須要先建立公鑰和私鑰,並下發公鑰至被控端

1)ansible管理機下發公鑰

[root@m01 ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub root@172.16.1.7

[root@m01 ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub root@172.16.1.8

#檢查是否存在公鑰,若已存在則沒必要更新了
[root@m01 ~]# ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:KPOcbRCXTz7GXhjysaEJXaABJpZKSI+7xfQaPtjiJVY root@m01
The key's randomart image is:
+---[RSA 2048]----+
|o.o.o.. ...     |
|.o+o   + o       |
|.o o + = =     |
|. + . = X *     |
| . Eo.o S X .   |
| B o= + o o     |
| * * + o .     |
|o + . .         |
| .               |
+----[SHA256]-----+


#表示公鑰已存在
[root@m01 ~]# ls ~/.ssh/
id_rsa id_rsa.pub


#ansible管理機下發公鑰至web01
[root@m01 ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub root@172.16.1.7
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub"
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys

Number of key(s) added: 1

Now try logging into the machine, with:   "ssh 'root@172.16.1.7'"
and check to make sure that only the key(s) you wanted were added.


#經過公鑰方式鏈接一下web02,鏈接成功後使用exit命令斷開鏈接
[root@m01 ~]# ssh 'root@172.16.1.8'

[root@m01 ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub root@172.16.1.8
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub"
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys

Number of key(s) added: 1

Now try logging into the machine, with:   "ssh 'root@172.16.1.8'"
and check to make sure that only the key(s) you wanted were added.

 

#方式1:主機+端口+密鑰
#建立主機目錄
[root@m01 ~]# mkdir project1/
[root@m01 ~]# cd project1/

#在project1目錄下建立並配置hosts主機清單
[root@m01 project1]# vim hosts
[oldboy]
172.16.1.7
172.16.1.8
保存並退出


[root@m01 project1]# ansible oldboy -m ping -i hosts
#配置成功
172.16.1.7 | SUCCESS => {
  "ansible_facts": {
      "discovered_interpreter_python": "/usr/bin/python"
  },
  "changed": false,
  "ping": "pong"
}
172.16.1.8 | SUCCESS => {
  "ansible_facts": {
      "discovered_interpreter_python": "/usr/bin/python"
  },
  "changed": false,
  "ping": "pong"
}

=====================================================
##方式2:別名+主機+端口+密鑰
#在project1目錄下建立並配置hosts主機清單
[root@m01 project1]# vim hosts
[oldboy]
web01 ansible_ssh_host=172.16.1.7
web02 ansible_ssh_host=172.16.1.8


[root@m01 project1]# ansible oldboy -m ping -i hosts
#配置成功
web02 | SUCCESS => {
  "ansible_facts": {
      "discovered_interpreter_python": "/usr/bin/python"
  },
  "changed": false,
  "ping": "pong"
}
web01 | SUCCESS => {
  "ansible_facts": {
      "discovered_interpreter_python": "/usr/bin/python"
  },
  "changed": false,
  "ping": "pong"
}

3)列出每一個主機組下面的主機狀況

[root@m01 project1]# ansible oldboy -i hosts --list-hosts
hosts (2):
  172.16.1.7
  172.16.1.8

 

生產案例一、若是控制端和被控制端第一次通信,須要確認指紋信息,若是機器特別多少的狀況下怎麼辦?

將 Ansible 配置文件中的 host_key_checking = False 參數註釋打開便可。 但要注意ansible.cfg文件的讀取順序。

[root@m01 project1]# vim /etc/ansible/ansible.cfg 
將 Ansible 配置文件中的 host_key_checking = False 參數註釋打開
#確保讀的是以下的配置文件
[root@m01 project1]# ansible --version
ansible 2.8.4
config file = /etc/ansible/ansible.cfg
configured module search path = [u'/root/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
ansible python module location = /usr/lib/python2.7/site-packages/ansible
executable location = /usr/bin/ansible
python version = 2.7.5 (default, Oct 30 2018, 23:45:53) [GCC 4.8.5 20150623 (Red Hat 4.8.5-36)]

 

4、Ansible Ad-Hoc

4.1)什麼是ad-hoc

ad-hoc簡而言之就是「臨時命令」,執行完即結束,並不會保存。

4.2)ad-hoc模式的使用場景

好比在多臺機器上查看某個進程是否啓動,或拷貝指定文件到本地等等。

4.3)ad-hoc模式的命令使用,ansible 'oldboy' -m command -a 'df-h',含義以下圖

 

 

4.4)使用ad-hoc執行一次遠程命令,注意觀察返回結果的顏色

綠色:表明被管理端主機沒有被修改

黃色:表明被管理端主機發生變動

紅色:表明出現了故障,注意查看提示

#打印兩臺主機的磁盤狀態信息
[root@m01 project1]# ansible oldboy -m command -a "df -h" -i hosts
172.16.1.8 | CHANGED | rc=0 >>
Filesystem     Size Used Avail Use% Mounted on
/dev/sda3       18G 1.3G   17G   8% /
devtmpfs       476M     0 476M   0% /dev
tmpfs           487M     0 487M   0% /dev/shm
tmpfs           487M 7.7M 479M   2% /run
tmpfs           487M     0 487M   0% /sys/fs/cgroup
/dev/sda1     1014M 127M 888M 13% /boot
tmpfs           98M     0   98M   0% /run/user/0

172.16.1.7 | CHANGED | rc=0 >>
Filesystem     Size Used Avail Use% Mounted on
/dev/sda3       18G 1.3G   17G   8% /
devtmpfs       476M     0 476M   0% /dev
tmpfs           487M     0 487M   0% /dev/shm
tmpfs           487M 7.7M 479M   2% /run
tmpfs           487M     0 487M   0% /sys/fs/cgroup
/dev/sda1     1014M 127M 888M 13% /boot
tmpfs           98M     0   98M   0% /run/user/0

4.5)Ansible Ad-Hoc經常使用模塊

模塊類型 模塊內容
命令模塊 command(默認)、shell模塊、scripts模塊
安裝模塊 yum
配置模塊 copy、file、get_url
啓動模塊 service、systemd
用戶模塊 user、group
任務模塊 cron
掛載模塊 mount
防火牆模塊 firewall、selinux

4.5.1)ad-hoc模式的經常使用模塊有以下:

command         #執行shell命令(不支持管道等特殊字符)
shell           #執行shell命令
scripts         #執行shell命令
yum_repository   #配置yum倉庫
yum     #安裝軟件
copy #變動配置文件
file #創建目錄或文件
service #啓動與中止服務
mount     #掛載設備
cron   #定時任務
firewalld #防火牆
get_url #下載軟件

4.5.1.1)使用過程當中須要先了解ansible-doc幫助手冊

[root@m01 project1]# ansible-doc -l       #查看全部模塊說明
[root@m01 project1]# ansible-doc copy     #表示指定模塊方法
[root@m01 project1]# ansible-doc -s copy   #表示指定模塊參數

#查看yum命令的幫助手冊
[root@m01 ~]# ansible-doc yum
推薦直接看EXAMPLES示例

4.5.2)ansible經常使用模塊

1)command 

[root@m01 project1]# ansible oldboy -m command -a "ps aux|grep nginx" -i hosts
172.16.1.8 | FAILED | rc=1 >>
error: unsupported option (BSD syntax)

Usage:
ps [options]

Try 'ps --help <simple|list|output|threads|misc|all>'
or 'ps --help <s|l|o|t|m|a>'
for additional help text.

For more details see ps(1).non-zero return code

172.16.1.7 | FAILED | rc=1 >>
error: unsupported option (BSD syntax)

Usage:
ps [options]

Try 'ps --help <simple|list|output|threads|misc|all>'
or 'ps --help <s|l|o|t|m|a>'
for additional help text.

For more details see ps(1).non-zero return code

 

2)shell

[root@m01 project1]# ansible oldboy -m shell -a "ps aux|grep nginx" -i hosts
172.16.1.7 | CHANGED | rc=0 >>
root     11433 0.0 0.1 113176 1220 pts/0   S+   19:53   0:00 /bin/sh -c ps aux|grep nginx
root     11435 0.0 0.0 112708   968 pts/0   S+   19:53   0:00 grep nginx

172.16.1.8 | CHANGED | rc=0 >>
root       9650 0.0 0.2 47084 2048 ?       Ss   07:46   0:00 nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf
www       9751 0.0 0.2 47088 2192 ?       S   07:56   0:00 nginx: worker process
root     11599 0.0 0.1 113176 1220 pts/0   S+   19:53   0:00 /bin/sh -c ps aux|grep nginx
root     11601 0.0 0.0 112708   968 pts/0   S+   19:53   0:00 grep nginx

command不支持管道技術

shell支持管道技術

不指定-m 默認使用的是command模塊

 

 

3)script

[root@m01 ~]# vim vsftpd.sh 
#!/usr/bin/bash
mkdir /tmp/zls

[root@m01 ~]# ansible 'web01' -m script -a '/root/vsftpd.sh'

[root@m01 ~]# ansible 'web01' -m shell -a 'ls -l /tmp'

 

 

4)安裝---yum模塊(安裝present 卸載absent 升級latest 排除exclude 指定倉庫enablerepo)


[root@m01 ~]# ansible 'web_group' -m yum -a 'name=vsftpd state=present'
#至關於:yum install -y vsftpd

[root@m01 ~]# ansible 'web_group' -m yum -a 'name=https://mirrors.aliyun.com/zabbix/zabbix/4.0/rhel/7/x86_64/zabbix-agent-4.0.0-2.el7.x86_64.rpm state=present'
#至關於:yum install -y https://mirrors.aliyun.com/zabbix/zabbix/4.0/rhel/7/x86_64/zabbix-agent-4.0.0-2.el7.x86_64.rpm

[root@m01 ~]# ansible 'web_group' -m yum -a 'name=file:///root/nagios-4.4.3-1.el7.x86_64.rpm state=present'
#至關於:yum localinstall -y nagios-4.4.3-1.el7.x86_64.rpm

[root@m01 ~]# ansible 'web_group' -m yum -a 'name=vsftpd state=absent'
#至關於:yum remove -y vsftpd

name                            
  httpd                       #指定要安裝的軟件包名稱
  file://                     #指定本地安裝路徑(yum localinstall 本地rpm包)
  http://                     #指定yum源(從遠程倉庫獲取rpm包)
   
state                           #指定使用yum的方法
  installed,present           #安裝軟件包
  removed,absent             #移除軟件包
  latest                     #安裝最新軟件包




EXAMPLES:安裝最新版本的Apache
- name: install the latest version of Apache
yum:
  name: httpd
  state: latest
   
   
   
EXAMPLES:刪除Apache
- name: remove the Apache package
yum:
  name: httpd
  state: absent
   
   
EXAMPLES:從testing倉庫中安裝最新版本的Apache(present正常安裝)
  - name: install the latest version of Apache from the testing repo
yum:
  name: httpd
  enablerepo: testing
  state: present
   

EXAMPLES:安裝指定版本的Apache
  - name: install one specific version of Apache
yum:
  name: httpd-2.2.29-1.4.amzn1
  state: present
   
   
EXAMPLES:更新全部的軟件包
- name: upgrade all packages
yum:
  name: '*'
  state: latest
   
   
   
EXAMPLES: 更新全部的軟件包,但排除全部內核包及foo包
- name: upgrade all packages, excluding kernel & foo related packages
yum:
  name: '*'
  state: latest
  exclude: kernel*,foo*
   
   
   
EXAMPLES: 從遠程的倉庫中安裝nginx
- name: install the nginx rpm from a remote repo
yum:
  name: http://nginx.org/packages/centos/6/noarch/RPMS/nginx-release-centos-6-0.el6.
  state: present
   
   
   
EXAMPLES: 從本地的倉庫中安裝nginx
- name: install nginx rpm from a local file
yum:
  name: /usr/local/src/nginx-release-centos-6-0.el6.ngx.noarch.rpm
  state: present
   
   
   
EXAMPLES: 安裝組包
- name: install the 'Development tools' package group
yum:
  name: "@Development tools"
  state: present
#示例1、安裝當前最新的Apache軟件,若是存在則更新
[root@m01 project1]# ansible oldboy -m yum -a "name=httpd state=latest" -i hosts

#示例2、安裝當前最新的Apache軟件,經過epel倉庫安裝
[root@m01 project1]# ansible oldboy -m yum -a "name=httpd state=latest enablerepo=epel" -i hosts

#示例3、經過公網URL安裝rpm軟件
[root@m01 project1]# ansible oldboy -m yum -a "name=https://mirrors.aliyun.com/zabbix/zabbix/4.2/rhel/7/x86_64/zabbix-agent-4.2.3-2.el7.x86_64.rpm state=latest" -i hosts

#示例5、更新全部的軟件包,但排除和kernel相關的
[root@m01 project1]# ansible oldboy -m yum -a "name=* state=latest exclude=kernel*,foo*" -i hosts
           
#示例6、刪除Apache軟件
[root@m01 project1]# ansible oldboy -m yum -a "name=httpd state=absent" -i hosts

5)yum_repository 

- name: Add repository
yum_repository:
  name: epel
  description: EPEL YUM repo
  baseurl: https://download.fedoraproject.org/pub/epel/$releasever/$basearch/


#添加yum倉庫
ansible 'web_group' -m yum_repository -a 'name=zls_epel,zls_base description=EPEL baseurl=https://download.fedoraproject.org/pub/epel/$releasever/$basearch/ gpgcheck=no enabled=yes file=zls_epel'

#添加mirrorlist
ansible 'web_group' -m yum_repository -a 'name=zls_epel description=EPEL baseurl=https://download.fedoraproject.org/pub/epel/$releasever/$basearch/ gpgcheck=no enabled=yes file=epel mirrorlist=http://mirrorlist.repoforge.org/el7/mirrors-rpmforge'

#刪除yum倉庫
ansible 'web_group' -m yum_repository -a 'name=zls_epel,zls_base file=zls_epel state=absent'

#修改yum倉庫
ansible 'web_group' -m yum_repository -a 'name=epel description=EPEL baseurl=https://download.fedoraproject.org/pub/epel/$releasever/$basearch/ gpgcheck=no enabled=no file=epel'

name #指定倉庫名字
description #添加描述(repo文件中的name)
baseurl #指定yum倉庫的地址
gpgcheck #是否開啓校驗
yes
no
enabled #是否啓用yum倉庫
yes
no
file #指定倉庫文件名
state
absent #刪除yum倉庫
present #建立yum倉庫


ansible 'web_group' -m yum_repository -a 'name=zls_yum description=EPEL baseurl=http://www.driverzeng.com gpgcheck=no enabled=no file=zls'

 

4.5.3)ansible文件管理

1)copy

- name: Copy file with owner and permissions
copy:
  src: /srv/myfiles/foo.conf
  dest: /etc/foo.conf
  owner: foo
  group: foo
  mode: '0644'


#推送文件
[root@m01 ~]# ansible 'web_group' -m copy -a 'src=/root/index.html dest=/var/www/html owner=root group=root mode=0644'

#推送文件並備份
[root@m01 ~]# ansible 'web_group' -m copy -a 'src=/root/index.html dest=/var/www/html owner=root group=root mode=0644 backup=yes'

#編輯nfs配置文件
[root@m01 ~]# ansible 'web_group' -m copy -a 'content="/data 172.16.1.0/24(rw,sync,all_squash,anonuid=666,anongid=666)" dest=/etc/exports'

src #指定推送的源文件
dest #指定推送的目標位置
owner #指定屬主
group #指定屬組
mode #指定權限(數字方式)
content #在指定文件中添加內容
backup #是否備份(注意:控制端和被控端,內容不一致纔會備份)
yes
no


EXAMPLES: 拷貝文件
- name: Copy file with owner and permissions
copy:
  src: /srv/myfiles/foo.conf       #拷貝的內容
  dest: /etc/foo.conf               #拷貝到目標機器上哪一個位置
  owner: foo                       #屬主
  group: foo                       #屬組
  mode: '0644'                     #其權限

 

2)file

- name: Create an insecure file
file:
  path: /work
  owner: root
  group: root
  mode: 0755

#建立目錄 mkdir
[root@m01 ~]# ansible 'web_group' -m file -a 'path=/backup state=directory owner=adm group=adm mode=0700'

#遞歸建立目錄並受權chown -R chmod -R
[root@m01 ~]# ansible 'web_group' -m file -a 'path=/zls/mysql/db01 state=directory owner=adm group=adm mode=0700 recurse=yes'

#建立文件(前提條件,上級目錄必須存在) touch
[root@m01 ~]# ansible 'web_group' -m file -a 'path=/root/zls.txt state=touch'

#刪除目錄 rm -fr
[root@m01 ~]# ansible 'web_group' -m file -a 'path=/backup state=absent'

#作軟連接 ln -s
[root@m01 ~]# ansible 'web_group' -m file -a 'src=/root/zls.txt dest=/root/zls.txt.ori state=link'

src #指定軟連接的源文件
dest #指定軟鏈接的目標文件
path #指定建立目錄或文件
state
touch #建立文件
directory #建立目錄
absent #刪除目錄或文件
link #作軟連接
owner #指定屬主
group #指定屬組
mode #指定權限
recurse #遞歸受權
yes
no

 

3)get_url

- name: Download foo.conf
get_url:
  url: http://example.com/path/file.conf
  dest: /etc/foo.conf
  mode: '0440'

#下載worldpress代碼
[root@m01 ~]# ansible 'web_group' -m get_url -a 'url=http://test.driverzeng.com/Nginx_Code/wordpress-5.0.3-zh_CN.tar.gz dest=/root mode=0777'

#下載並校驗MD5
[root@m01 ~]# ansible 'web_group' -m get_url -a 'url=http://test.driverzeng.com/Nginx_Code/test.txt dest=/root mode=0777 checksum=md5:ba1f2511fc30423bdbb183fe33f3dd0f'

url #指定下載文件的url
dest #指定下載的位置
mode #指定下載後的權限
checksum #校驗
md5 #md5校驗
sha256 #sha256校驗

 

4.5.4)ansible服務管理模塊

1)service,systemd

[root@m01 ~]# ansible 'web_group' -m systemd -a 'name=httpd state=stopped enabled=yes'
[root@m01 ~]# ansible 'web_group' -m systemd -a 'name=httpd state=started enabled=yes'
[root@m01 ~]# ansible 'web_group' -m systemd -a 'name=httpd state=restarted enabled=yes'
[root@m01 ~]# ansible 'web_group' -m systemd -a 'name=httpd state=reloaded enabled=yes'

name #指定服務名稱
state
started #啓動
stopped #中止
restarted #重啓
reloaded #重載
enabled #是否開機自啓
yes
no

 

4.5.5)ansible用戶管理模塊

1)group

- name: Ensure group "somegroup" exists
group:
  name: somegroup
  state: present

#建立組
[root@m01 ~]# ansible 'web_group' -m group -a 'name=www gid=666 state=present'

#刪除組
[root@m01 ~]# ansible 'web_group' -m group -a 'name=www gid=666 state=absent'

name #指定組名
gid #指定gid
state
present #建立
absent #刪除

 

2)user 

- name: Create a 2048-bit SSH key for user jsmith in ~jsmith/.ssh/id_rsa
user:
  name: jsmith
  generate_ssh_key: yes
  ssh_key_bits: 2048
  ssh_key_file: .ssh/id_rsa

#建立用戶
[root@m01 ~]# ansible 'web_group' -m user -a 'name=www uid=666 group=www state=present shell=/sbin/nologin create_home=false'

#刪除用戶
[root@m01 ~]# ansible 'web_group' -m user -a 'name=www uid=666 state=absent'

#建立用戶的同時建立密鑰對
[root@m01 ~]# ansible 'web_group' -m user -a 'name=zls generate_ssh_key=yes ssh_key_bits=2048 ssh_key_file=.ssh/id_rsa'

name #指定用戶名
uid #指定uid
group #指定屬組
groups #指定附加組
state
present #建立用戶
absent #刪除用戶
shell #指定用戶登陸的shell
/bin/bash
/sbin/nologin
create_home #是否建立家目錄
true
false
comment #添加註釋
generate_ssh_key #建立密鑰對
ssh_key_bits #指定密鑰對長度
ssh_key_file #指定密鑰文件
相關文章
相關標籤/搜索