Ansible: перебирать вывод команды - PullRequest
0 голосов
/ 09 апреля 2020

Я пытаюсь преобразовать существующий сценарий Perl в роль Ansible. Я столкнулся с проблемой при переборе выходных данных захваченной команды.

Вот сценарий Perl:

# Description: This script will adjust the oom score of all the important system processes to a negative value so that OOM killer does not touch these processes ############


chomp(my $OS = `uname`);

if($OS eq "Linux")
{
  my @file = `ps -ef|egrep 'sssd|wdmd|portreserve|autofs|automount|ypbind|rpcbind|rpc.statd|rpc.mountd|rpc.idampd|ntpd|lmgrd|Xvnc|vncconfig|irqblance|rpc.rquotad|metric|nscd|crond|snpslmd|getpwname.pl|mysqld|rsyslogd|xinetd|sendmail|lsf|tigervnc|tightvnc|cfadm' |egrep -ve 'ps|egrep' |awk '{print \$8,\$2}'`;
  chomp(@file);

  foreach my $element (@file)
  {
    chomp($element);
    (my $process, my $pid) = (split(/\s/,$element))[0,1];
    print "($process)($pid)\n";
    system("echo -17 > /proc/$pid/oom_adj");
    system("cat /proc/$pid/oom_adj");
  }
}

else
{
  print "The host is a $OS system, so no action taken\n";
}

Вот что я пробовал до сих пор в Ansible:

---
  - name: Capture uname ouput
    shell: "uname"
    register: os_type

  - name: Adjust OOM to negative so that OOM killer does not kill below processes
    shell: 'ps -ef|egrep "sssd|wdmd|portreserve|autofs|automount|ypbind|rpcbind|rpc.statd|rpc.mountd|rpc.idampd|ntpd|lmgrd|Xvnc|vncconfig|irqblance|rpc.rquotad|metric|nscd|crond|snpslmd|getpwname.pl|mysqld|rsyslogd|xinetd|sendmail|lsf|tigervnc|tightvnc|cfadm" |egrep -ve "ps|egrep" |awk "{print \$8,\$2}"'
    register: oom
    when: os_type.stdout == 'Linux'

  - debug:  var=oom.stdout_lines

Теперь я хочу перебрать var и реализовать эту часть в Ansible:

foreach my $element (@file)
  {
    chomp($element);
    (my $process, my $pid) = (split(/\s/,$element))[0,1];
    print "($process)($pid)\n";
    system("echo -17 > /proc/$pid/oom_adj");
    system("cat /proc/$pid/oom_adj");
  }

Пожалуйста, помогите.

Ответы [ 3 ]

0 голосов
/ 10 апреля 2020

ниже работало для меня

- hosts: temp
  gather_facts: yes
  remote_user: root
  tasks:

   - name: Adjust OOM to negative so that OOM killer does not kill below processes
     shell: 'ps -ef|egrep "sssd|wdmd|portreserve|autofs|automount|ypbind|rpcbind|rpc.statd|rpc.mountd|rpc.idampd|ntpd|lmgrd|Xvnc|vncconfig|irqblance|rpc.rquotad|metric|nscd|crond|snpslmd|getpwname.pl|mysqld|rsyslogd|xinetd|sendmail|lsf|tigervnc|tightvnc|cfadm" |egrep -ve "ps|egrep" |awk "{print \$2}"'
     register: oom
     when: ansible_system == 'Linux'

   - debug:  var=oom.stdout
   - name: update the pid
     raw: echo -17 > /proc/{{ item }}/oom_adj
     loop: "{{ oom.stdout_lines }}"
0 голосов
/ 29 апреля 2020

Я смог понять это. Ниже приведено решение, которое сработало для меня. Спасибо всем, кто пытался мне помочь. Цени это:)

---
  - name: Capture uname ouput
    shell: "uname"
    register: os_type
  - name: Gather important processes
    shell: 'ps -ef|egrep "sssd|wdmd|portreserve|autofs|automount|ypbind|rpcbind|rpc.statd|rpc.mountd|rpc.idampd|ntpd|lmgrd|Xvnc|vncconfig|irqblance|rpc.rquotad|metric|nscd|crond|snpslmd|getpwname.pl|mysqld|rsyslogd|xinetd|sendmail|lsf|tigervnc|tightvnc|cfadm" |egrep -ve "ps|egrep" |awk "{print \$8,\$2}"'
    register: oom
    when: os_type.stdout == 'Linux'
  - name: Adjust OOM to negative so that OOM killer does not kill important processes
    shell: "echo -17 >> /proc/{{ item.split()[1] }}/oom_adj"
    loop: "{{ oom.stdout_lines }}"
    register: echo
  - set_fact:
      stdout_lines: []
  - set_fact:
      stdout_lines: "{{ stdout_lines + item.stdout_lines }}"
    with_items: "{{ echo.results }}"
  - debug:
      msg: "This is a stdout line: {{ item }}"
    with_items: "{{ stdout_lines }}"
0 голосов
/ 09 апреля 2020

я попробовал ниже, но не повезло, что я делаю не так? Кто-нибудь это правильное направление

- hosts: temp
  gather_facts: yes
  become: yes
  remote_user: root
  tasks:
   - name: Capture uname ouput
     shell: "uname"
     register: os_type
   - name: Adjust OOM to negative so that OOM killer does not kill below processes
     shell: 'ps -ef|egrep "sssd|wdmd|portreserve|autofs|automount|ypbind|rpcbind|rpc.statd|rpc.mountd|rpc.idampd|ntpd|lmgrd|Xvnc|vncconfig|irqblance|rpc.rquotad|metric|nscd|crond|snpslmd|getpwname.pl|mysqld|rsyslogd|xinetd|sendmail|lsf|tigervnc|tightvnc|cfadm" |egrep -ve "ps|egrep" |awk "{print \$2}"'
     register: oom
     when: os_type.stdout == 'Linux'
   - debug:  var=oom.stdout
   - name: update the pid 
     raw: echo -17 > /proc/{{ item.pid }}/oom_adj
     with_items:
       - "{{ var=oom.stdout }}"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...