変数の脚本スクリプト

ヒール
脚本プログラミング言語として、だけでなく、変数として、決定され、循環......
さまざまな方法で定義された脚本変数:

  • リストに定義されてHostInventoryホスト
  • ホストを定義するプレイブックスクリプト
  • 脚本は、検索されたファイル、ファイルに定義されています
  • 定義されたディレクトリhost_varsとgroup_vars(公式推奨)
  • -e定義された脚本でコマンドライン

ホスト変数定義されたリスト

## 修改hosts文件(主机和组都定义相同的,测试会用谁的)
[root@Ansible project]# cat /etc/ansible/hosts 
[web]
web1 ansible_ssh_host=192.168.1.2 file_name=invnetory_host   ##针对主机(包括前面这个都是变量)
[web:vars]    ## 针对组(组名,后面加上:vars)
file_name=invnetory_group
## 编写Playbook调用变量
[root@Ansible project]# vim create_file.yml
- hosts: web
  tasks:
    - name: Create File
      file:
        path: /tmp/ {{ file_name }}      ## 调用变量方式
        state: touch
## 执行一下(这里就不检测格式了)
[root@Ansible project]# ansible-playbook create_file.yml 

PLAY [web] ********************************************************************************

TASK [Gathering Facts] ********************************************************************
ok: [web1]

TASK [Create File] ************************************************************************
changed: [web1]

PLAY RECAP ********************************************************************************
web1 : ok=2 changed=1 unreachable=0 failed=0  
## 查看一下创建的文件(创建的是主机变量)
[root@Ansible project]# ansible web -a "ls /tmp/"
web1 | CHANGED | rc=0 >>
ansible_command_payload_4p5rSK
 invnetory_host
## 删除主机上 file_name 变量在执行一次
[root@Ansible project]# ansible-playbook create_file.yml 
## 再次查看一下创建的文件
[root@Ansible project]# ansible web -a "ls /tmp/"
web1 | CHANGED | rc=0 >>
ansible_command_payload_prOA1j
 invnetory_group
 invnetory_host

ホストで定義された脚本変数

## 修改create_file.yml文件(这种只对当前play)
[root@Ansible project]# vim create_file.yml 
- hosts: web
  vars: 
    file_name: playbook_file
  tasks:
    - name: Create File
      file:
        path: /tmp/ {{ file_name }}
        state: touch
## 执行一下
[root@Ansible project]# ansible-playbook --syntax-check create_file.yml 
## 查看一下结果
[root@Ansible project]# ansible web -a "ls /tmp/"                       
web1 | CHANGED | rc=0 >>
ansible_command_payload_LUBk4W
 invnetory_group
 invnetory_host
 playbook_file

変数文書、脚本コールを作成します。

## 创建变量文件
[root@Ansible project]# vim vars.yml
file_name: file_file
## 修改create_file.yml文件
- hosts: web
  vars_files: ./vars.yml
  tasks:
    - name: Create File
      file:
        path: /tmp/ {{ file_name }}
        state: touch
## 执行一下
[root@Ansible project]# ansible-playbook --syntax-check create_file.yml 
## 查看一下结果
[root@Ansible project]# ansible web -a "ls /tmp/"
web1 | CHANGED | rc=0 >>
ansible_command_payload_XAavWX
 file_file
 invnetory_group
 invnetory_host
 playbook_file

カタログとgroup_varsで定義されたhost_vars変数

## 创建目录
[root@Ansible project]# mkdir {host,group}_vars
## 根据主机清单上组名在group_vars上创建文件
[root@Ansible project]# vim group_vars/web
file_name: group_file
## 直接调用变量
[root@Ansible project]# vim create_file.yml 
- hosts: web
  tasks:
    - name: Create File
      file:
        path: /tmp/ {{ file_name }}
        state: touch
## 执行一下剧本查看结果
[root@Ansible project]# ansible-playbook create_file.yml
[root@Ansible project]# ansible web -a "ls /tmp/"
web1 | CHANGED | rc=0 >>
ansible_command_payload_N6kl0w
 file_file
 group_file
 invnetory_group
 invnetory_host
 playbook_file
## Ansible自带一个all组,代表全部主机
[root@Ansible project]# mv group_vars/web group_vars/all
[root@Ansible project]# vim group_vars/all
file_name: all_file
## 执行一下剧本查看结果
[root@Ansible project]# ansible-playbook create_file.yml
[root@Ansible project]# ansible web -a "ls /tmp/"        
web1 | CHANGED | rc=0 >>
 all_file
 file_file
 group_file
 invnetory_group
 invnetory_host
 playbook_file
## 根据主机清单上主机在host_vars上创建文件
[root@Ansible project]# vim host_vars/web1
file_name: host_file
## 执行一下剧本查看结果
[root@Ansible project]# ansible-playbook create_file.yml 
[root@Ansible project]# ansible web -a "ls /tmp/"        
web1 | CHANGED | rc=0 >>
 all_file
 file_file
 group_file
 host_file
 invnetory_group
 invnetory_host
 playbook_file

コマンドライン指定された変数

## 用 -e 直接指定变量
[root@Ansible project]# ansible-playbook create_file.yml -e "file_name=shell_file"
[root@Ansible project]# ansible web -a "ls /tmp/"                                 
web1 | CHANGED | rc=0 >>
 all_file
 file_file
 group_file
 host_file
 invnetory_group
 invnetory_host
 playbook_file
 shell_file

最も低い優先度の最も高い変数:

  • コマンドライン指定された変数
  • 脚本コール変数ファイル
  • 脚本は、変数のホストを定義し
  • ディレクトリで定義されているHost_vars変数
  • group_vars Directoryのグループ名で定義された変数
  • すべての定義された変数をカタログgroup_vars
  • ホストリストのホストに定義された変数
  • 定義された変数のホストグループリスト

変数がレジスタに割り当てられています

あなたは、デバッグモジュールを使用する必要があります

  • メッセージmsg ---デバッグ出力
  • varが---直接デバッグデバッグの引数として渡されたタスクの実行モジュールの出力は、それを印刷します
  • 冗長---デバッグレベル(デフォルトは0で、すべてを表示)
[root@Ansible project]# vim disk_use.yml 
- hosts: web
  tasks:
    - name: Get Network Port Status
      shell: netstat -lntp
      register: disk_use    ##执行结果赋予给disk_use变量中

    - name: OutPut Network Port Status
      debug:
        msg: "{{ disk_use }}"   ##输出变量
## 执行一下(尽量用检测一下格式是否正确)
[root@Ansible project]# ansible-playbook disk_use.yml                

PLAY [web] ********************************************************************************

TASK [Gathering Facts] ********************************************************************
ok: [web1]

TASK [Get Disk Statistics] ****************************************************************
changed: [web1]

TASK [OutPut Disk Statistics] *************************************************************
ok: [web1] => {
    "msg": {
        "changed": true, 
        "cmd": "df -h", 
        "delta": "0:00:00.028851", 
        "end": "2019-05-18 20:21:58.899206", 
        "failed": false, 
        "rc": 0, 
        "start": "2019-05-18 20:21:58.870355", 
        "stderr": "", 
        "stderr_lines": [], 
        "stdout": "Filesystem Size Used Avail Use% Mounted on\n/dev/mapper/centos-root 17G 3.1G 14G 18% /\ndevtmpfs 476M 0 476M 0% /dev\ntmpfs 488M 0 488M 0% /dev/shm\ntmpfs 488M 7.7M 480M 2% /run\ntmpfs 488M 0 488M 0% /sys/fs/cgroup\n/dev/sda1 1014M 173M 842M 18% /boot\ntmpfs 98M 0 98M 0% /run/user/0", 
        "stdout_lines": [
            "Filesystem Size Used Avail Use% Mounted on", 
            "/dev/mapper/centos-root 17G 3.1G 14G 18% /", 
            "devtmpfs 476M 0 476M 0% /dev", 
            "tmpfs 488M 0 488M 0% /dev/shm", 
            "tmpfs 488M 7.7M 480M 2% /run", 
            "tmpfs 488M 0 488M 0% /sys/fs/cgroup", 
            "/dev/sda1 1014M 173M 842M 18% /boot", 
            "tmpfs 98M 0 98M 0% /run/user/0"
        ]
    }
}

PLAY RECAP ********************************************************************************
web1 : ok=3 changed=1 unreachable=0 failed=0
## 指定变量中的选项精简输出
[root@Ansible project]# vim disk_use.yml 
- hosts: web
  tasks:
    - name: Get Network Port Status
      shell: netstat -lntp
      register: disk_use    ##执行结果赋予给disk_use变量中

    - name: OutPut Network Port Status
      debug:
        msg: "{{ disk_use.stdout_lines }}"   ##指定输出的信息
## 再次执行一下
[root@Ansible project]# ansible-playbook disk_use.yml 

PLAY [web] ********************************************************************************

TASK [Gathering Facts] ********************************************************************
ok: [web1]

TASK [Get Disk Statistics] ****************************************************************
changed: [web1]

TASK [OutPut Disk Statistics] *************************************************************
ok: [web1] => {
    "msg": [
        "Filesystem Size Used Avail Use% Mounted on", 
        "/dev/mapper/centos-root 17G 3.1G 14G 18% /", 
        "devtmpfs 476M 0 476M 0% /dev", 
        "tmpfs 488M 0 488M 0% /dev/shm", 
        "tmpfs 488M 7.7M 480M 2% /run", 
        "tmpfs 488M 0 488M 0% /sys/fs/cgroup", 
        "/dev/sda1 1014M 173M 842M 18% /boot", 
        "tmpfs 98M 0 98M 0% /run/user/0"
    ]
}

PLAY RECAP ********************************************************************************
web1 : ok=3 changed=1 unreachable=0 failed=0   

特別なエピソードの言葉:変数のフォーマット

会社のプロジェクトでは、変数は仕様で定義されています。

[root@Ansible project]# vim group_vars/all
project:
  nfs:
    package: nfs-utils
    file_name: data

変数は、2つの方法で呼び出すことができます

  • .たとえば、次のように{{ project.nfs.package }}お勧めしません、実行時間は問題がある可能性があります
  • []たとえば、次のように"{{ project['nfs']['package'] }}"{{ project["nfs"]["file_name"] }}、公式の推薦
- hosts: nfs
  tasks:
    - name: Install Nfs Server
      yum:
        name: "{{ project['nfs']['package'] }}"
        state: installed
    - name: Create File Directory
      file:
        path: / {{ project["nfs"]["file_name"] }}
        state: directory

おすすめ

転載: www.cnblogs.com/songguoyou/p/11883319.html