# Added AIX support

**URL:** <https://forum.ansible.com/t/added-aix-support/12355>\
**Category:** Ansible Project\
**Created:** [February 14, 2013, 9:53am UTC](https://forum.ansible.com/t/added-aix-support/12355 "2013-02-14T09:53:03Z")\
**Posts on this page:** 14\
**Page:** 1

<div class="post-metadata">

**Author:** ![Mark\_Maas](https://avatars.discourse-cdn.com/v4/letter/m/7c8e57/32.png) [@Mark\_Maas](https://forum.ansible.com/u/Mark_Maas)\
**Post date:** [February 14, 2013, 9:53am UTC](https://forum.ansible.com/t/added-aix-support/12355/1 "2013-02-14T09:53:03Z")

</div>

Dear List,

A collegue of mine has added basix AIX support to the setup, user and group modules.  
We have no access to GIT behind the corporate firewall I’m afraid and he has no interest in using GIT anyway 😉

Is it helpfull to just add the diff’s here?

**setup module**

> mmaas@xmgtansible:~/playbooks$ diff library/setup /usr/share/ansible/setup
> 
> 122,125d121
> 
> \< if self.facts[‘system’] == ‘AIX’:
> 
> \< rc, out, err = module.run\_command(“/usr/sbin/bootinfo -p”)
> 
> \< data = out.split(‘\n’)
> 
> \< self.facts[‘architecture’] = data[0]
> 
> 147,152d142
> 
> \< if self.facts[‘system’] == ‘AIX’:
> 
> \< self.facts[‘distribution’] = ‘AIX’
> 
> \< rc, out, err = module.run\_command(“/usr/bin/oslevel”)
> 
> \< data = out.split(‘.’)
> 
> \< self.facts[‘distribution\_version’] = data[0]
> 
> \< self.facts[‘distribution\_release’] = data[1]
> 
> 612,677d601
> 
> \<
> 
> \< class AIX(Hardware):
> 
> \< “”"
> 
> \< AIX-specific subclass of Hardware. Defines memory and CPU facts:
> 
> \< - memfree\_mb
> 
> \< - memtotal\_mb
> 
> \< - swapfree\_mb
> 
> \< - swaptotal\_mb
> 
> \< - processor (a list)
> 
> \< - processor\_cores
> 
> \< - processor\_count
> 
> \< “”"
> 
> \< platform = ‘AIX’
> 
> \<
> 
> \< def **init** (self):
> 
> \< Hardware. **init** (self)
> 
> \<
> 
> \< def populate(self):
> 
> \< self.get\_cpu\_facts()
> 
> \< self.get\_memory\_facts()
> 
> \< self.get\_dmi\_facts()
> 
> \< return self.facts
> 
> \<
> 
> \< def get\_cpu\_facts(self):
> 
> \< self.facts[‘processor’] =
> 
> \< rc, out, err = module.run\_command(“/usr/sbin/lsattr -El proc0 -a type”)
> 
> \< data = out.split(’ ')
> 
> \< self.facts[‘processor’] = data[1]
> 
> \< rc, out, err = module.run\_command(“/usr/sbin/lsattr -El proc0 -a smt\_threads”)
> 
> \< data = out.split(’ ')
> 
> \< self.facts[‘processor\_cores’] = int(data[1])
> 
> \< rc, out, err = module.run\_command(“/usr/sbin/lsdev -Cc processor”)
> 
> \< i = 0
> 
> \< for line in out.split(‘\n’):
> 
> \< data = line.split(‘:’)
> 
> \< if ‘Available’ in line:
> 
> \< i += 1
> 
> \< self.facts[‘processor\_count’] = int(i)
> 
> \<
> 
> \< def get\_memory\_facts(self):
> 
> \< pagesize = 4096
> 
> \< rc, out, err = module.run\_command(“/usr/bin/vmstat -v”)
> 
> \< for line in out.split(‘\n’):
> 
> \< data = line.split()
> 
> \< if ‘memory pages’ in line:
> 
> \< pagecount = long(data[0])
> 
> \< if ‘free pages’ in line:
> 
> \< freecount = long(data[0])
> 
> \< self.facts[‘memtotal\_mb’] = pagesize \* pagecount / 1024 / 1024
> 
> \< self.facts[‘memfree\_mb’] = pagesize \* freecount / 1024 / 1024
> 
> \< # Get swapinfo. swapinfo output looks like:
> 
> \< # Device 1M-blocks Used Avail Capacity
> 
> \< # /dev/ada0p3 314368 0 314368 0%
> 
> \< #
> 
> \< rc, out, err = module.run\_command(“/usr/sbin/lsps -s”)
> 
> \< lines = out.split(‘\n’)
> 
> \< data = lines[1].split()
> 
> \< swaptotal\_mb = long(data[0].rstrip(‘MB’))
> 
> \< percused = int(data[1].rstrip(‘%’))
> 
> \< self.facts[‘swaptotal\_mb’] = swaptotal\_mb
> 
> \< self.facts[‘swapfree\_mb’] = long(swaptotal\_mb \* ( 100 - percused ) / 100)
> 
> \<
> 
> \< def get\_dmi\_facts(self):
> 
> \< rc, out, err = module.run\_command(“/usr/sbin/lsattr -El sys0 -a fwversion”)
> 
> \< data = out.split()
> 
> \< self.facts[‘firmware\_version’] = data[1].strip(‘IBM,’)

**user module**

> mmaas@xmgtansible:~/playbooks$ diff library/user /usr/share/ansible/user
> 
> 810,962d809
> 
> \< class AIX(User):
> 
> \< “”"
> 
> \< This is a AIX User manipulation class.
> 
> \<
> 
> \< This overrides the following methods from the generic class:-
> 
> \< - create\_user()
> 
> \< - remove\_user()
> 
> \< - modify\_user()
> 
> \< “”"
> 
> \<
> 
> \< platform = ‘AIX’
> 
> \< distribution = None
> 
> \< SHADOWFILE = ‘/etc/security/passwd’
> 
> \<
> 
> \< def remove\_user(self):
> 
> \< cmd = [self.module.get\_bin\_path(‘userdel’, True)]
> 
> \< if self.remove:
> 
> \< cmd.append(‘-r’)
> 
> \< cmd.append(self.name)
> 
> \<
> 
> \< return self.execute\_command(cmd)
> 
> \<
> 
> \< def create\_user\_useradd(self, command\_name=‘useradd’):
> 
> \< cmd = [self.module.get\_bin\_path(command\_name, True)]
> 
> \<
> 
> \< if self.uid is not None:
> 
> \< cmd.append(‘-u’)
> 
> \< cmd.append(self.uid)
> 
> \<
> 
> \< if self.group is not None:
> 
> \< if not self.group\_exists(self.group):
> 
> \< self.module.fail\_json(msg=“Group %s does not exist” % self.group)
> 
> \< cmd.append(‘-g’)
> 
> \< cmd.append(self.group)
> 
> \<
> 
> \< if self.groups is not None:
> 
> \< for g in self.groups.split(‘,’):
> 
> \< if not self.group\_exists(g):
> 
> \< self.module.fail\_json(msg=“Group %s does not exist” % (g))
> 
> \< cmd.append(‘-G’)
> 
> \< cmd.append(self.groups)
> 
> \<
> 
> \< if self.comment is not None:
> 
> \< cmd.append(‘-c’)
> 
> \< cmd.append(self.comment)
> 
> \<
> 
> \< if self.home is not None:
> 
> \< cmd.append(‘-d’)
> 
> \< cmd.append(self.home)
> 
> \<
> 
> \< if self.shell is not None:
> 
> \< cmd.append(‘-s’)
> 
> \< cmd.append(self.shell)
> 
> \<
> 
> \< if self.createhome:
> 
> \< cmd.append(‘-m’)
> 
> \<
> 
> \< if self.system:
> 
> \< cmd.append(‘-r’)
> 
> \<
> 
> \< cmd.append(self.name)
> 
> \< (rc, out, err) = self.execute\_command(cmd)
> 
> \<
> 
> \< # set password with chpasswd
> 
> \< if self.password is not None:
> 
> \< cmd =
> 
> \< cmd.append(‘echo "’+self.name+‘:’+self.password+‘" |’)
> 
> \< cmd.append(self.module.get\_bin\_path(‘chpasswd’, True))
> 
> \< cmd.append(‘-e’)
> 
> \< cmd.append(‘-c’)
> 
> \< self.execute\_command(’ '.join(cmd))
> 
> \<
> 
> \< return (rc, out, err)
> 
> \<
> 
> \< def modify\_user\_usermod(self):
> 
> \< cmd = [self.module.get\_bin\_path(‘usermod’, True)]
> 
> \< info = self.user\_info()
> 
> \<
> 
> \< if self.uid is not None and info[2] != int(self.uid):
> 
> \< cmd.append(‘-u’)
> 
> \< cmd.append(self.uid)
> 
> \<
> 
> \< if self.group is not None:
> 
> \< if not self.group\_exists(self.group):
> 
> \< self.module.fail\_json(msg=“Group %s does not exist” % self.group)
> 
> \< ginfo = self.group\_info(self.group)
> 
> \< if info[3] != ginfo[2]:
> 
> \< cmd.append(‘-g’)
> 
> \< cmd.append(self.group)
> 
> \<
> 
> \< if self.groups is not None:
> 
> \< current\_groups = self.user\_group\_membership()
> 
> \< groups = self.groups.split(‘,’)
> 
> \< for g in groups:
> 
> \< if not self.group\_exists(g):
> 
> \< self.module.fail\_json(msg=“Group %s does not exist” % (g))
> 
> \<
> 
> \< group\_diff = set(sorted(current\_groups)).symmetric\_difference(set(sorted(groups)))
> 
> \< groups\_need\_mod = False
> 
> \<
> 
> \< if group\_diff:
> 
> \< if self.append:
> 
> \< for g in groups:
> 
> \< if g in group\_diff:
> 
> \< groups.extend(current\_groups)
> 
> \< set(groups)
> 
> \< groups\_need\_mod = True
> 
> \< break
> 
> \< else:
> 
> \< groups\_need\_mod = True
> 
> \<
> 
> \< if groups\_need\_mod:
> 
> \< cmd.append(‘-G’)
> 
> \< cmd.append(‘,’.join(groups))
> 
> \<
> 
> \< if self.comment is not None and info[4] != self.comment:
> 
> \< cmd.append(‘-c’)
> 
> \< cmd.append(self.comment)
> 
> \<
> 
> \< if self.home is not None and info[5] != self.home:
> 
> \< cmd.append(‘-d’)
> 
> \< cmd.append(self.home)
> 
> \<
> 
> \< if self.shell is not None and info[6] != self.shell:
> 
> \< cmd.append(‘-s’)
> 
> \< cmd.append(self.shell)
> 
> \<
> 
> \<
> 
> \< # skip if no changes to be made
> 
> \< if len(cmd) == 1:
> 
> \< (rc, out, err) = (None, ‘’, ‘’)
> 
> \< else:
> 
> \< cmd.append(self.name)
> 
> \< (rc, out, err) = self.execute\_command(cmd)
> 
> \<
> 
> \< # set password with chpasswd
> 
> \< if self.password is not None and info[1] != self.password:
> 
> \< cmd =
> 
> \< cmd.append(‘echo "’+self.name+‘:’+self.password+‘" |’)
> 
> \< cmd.append(self.module.get\_bin\_path(‘chpasswd’, True))
> 
> \< cmd.append(‘-e’)
> 
> \< cmd.append(‘-c’)
> 
> \< (rc2, out2, err2) = self.execute\_command(’ '.join(cmd))
> 
> \< else:
> 
> \< (rc2, out2, err2) = (None, ‘’, ‘’)
> 
> \<
> 
> \< if rc != None:
> 
> \< return (rc, out+out2, err+err2)
> 
> \< else:
> 
> \< return (rc2, out+out2, err+err2)
> 
> \<
> 
> \< # ===========================================
> 
> \<

**group module**

> mmaas@xmgtansible:~/playbooks$ diff library/group /usr/share/ansible/group
> 
> 163,204d162
> 
> \<
> 
> \< # ===========================================
> 
> \<
> 
> \< class AIX(Group):
> 
> \< “”"
> 
> \< This is a AIX Group manipulation class.
> 
> \<
> 
> \< This overrides the following methods from the generic class:-
> 
> \< - group\_del()
> 
> \< - group\_add()
> 
> \< - group\_mod()
> 
> \< “”"
> 
> \<
> 
> \< platform = ‘AIX’
> 
> \< distribution = None
> 
> \< GROUPFILE = ‘/etc/group’
> 
> \<
> 
> \< def group\_del(self):
> 
> \< cmd = [self.module.get\_bin\_path(‘rmgroup’, True), self.name]
> 
> \< return self.execute\_command(cmd)
> 
> \<
> 
> \< def group\_add(self, \*\*kwargs):
> 
> \< cmd = [self.module.get\_bin\_path(‘mkgroup’, True)]
> 
> \< for key in kwargs:
> 
> \< if key == ‘gid’ and kwargs[key] is not None:
> 
> \< cmd.append(‘id=’+kwargs[key])
> 
> \< elif key == ‘system’ and kwargs[key] == ‘yes’:
> 
> \< cmd.append(‘-a’)
> 
> \< cmd.append(self.name)
> 
> \< return self.execute\_command(cmd)
> 
> \<
> 
> \< def group\_mod(self, \*\*kwargs):
> 
> \< cmd = [self.module.get\_bin\_path(‘chgroup’, True)]
> 
> \< info = self.group\_info()
> 
> \< for key in kwargs:
> 
> \< if key == ‘gid’:
> 
> \< if kwargs[key] is not None and info[2] != int(kwargs[key]):
> 
> \< cmd.append(‘id=’+kwargs[key])
> 
> \< if len(cmd) == 1:
> 
> \< return (None, ‘’, ‘’)
> 
> \< cmd.append(self.name)
> 
> \< return self.execute\_command(cmd)

We have tested this on AIX 5.3 and 6.1 and it works “as advertised”

Thanks,  
Mark

---

<div class="post-metadata">

**Author:** ![Nigel\_Metheringham](https://avatars.discourse-cdn.com/v4/letter/n/3ec8ea/32.png) [@Nigel\_Metheringham](https://forum.ansible.com/u/Nigel_Metheringham)\
**Post date:** [February 14, 2013, 10:51am UTC](https://forum.ansible.com/t/added-aix-support/12355/2 "2013-02-14T10:51:02Z")

</div>

I can graft those pieces in and submit a pull request for them, but unfortunately cannot test them, although if there is anyone else on the list who can test AIX and would like me to do the integration I can do that.

A couple of questions...

&nbsp;&nbsp;&nbsp;- What version of ansible are you working against

&nbsp;&nbsp;&nbsp;- Any chance you could just send me the files - the  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HTML email conversion of a diff may have unexpected  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;damage to the diff, which with my inability to test  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;is not a good thing! Alternatively a unified diff  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(diff -u) in plain text would be good.

&nbsp;&nbsp;Nigel.

Mark Maas wrote:

> A collegue of mine has added basix AIX support to the setup, user and  
> group modules.  
> We have no access to GIT behind the corporate firewall I'm afraid and he  
> has no interest in using GIT anyway 😉

[snip of diffs]

---

<div class="post-metadata">

**Author:** ![Mark\_Maas](https://avatars.discourse-cdn.com/v4/letter/m/7c8e57/32.png) [@Mark\_Maas](https://forum.ansible.com/u/Mark_Maas)\
**Post date:** [February 14, 2013, 11:42am UTC](https://forum.ansible.com/t/added-aix-support/12355/3 "2013-02-14T11:42:29Z")

</div>

Hi,

I’ve sent the files in a different email, and as for the version:

mmaas@xmgtansible:~/playbooks$ ansible --version  
ansible 1.1

Thanks!  
Mark

---

<div class="post-metadata">

**Author:** ![Dag\_Wieers](https://avatars.discourse-cdn.com/v4/letter/d/45deac/32.png) [@Dag\_Wieers](https://forum.ansible.com/u/Dag_Wieers)\
**Post date:** [February 14, 2013, 11:50am UTC](https://forum.ansible.com/t/added-aix-support/12355/4 "2013-02-14T11:50:02Z")

</div>

It is certainly better than not sharing it at all 🙂

I have made the pull-request in your behalf:

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[https://github.com/ansible/ansible/pull/2083](https://github.com/ansible/ansible/pull/2083)

It would have helped considerably if the diff was in unified diff format, however I assume this was done on AIX (without GNU diff :-)).

PS I made one change related to get\_distribution\_facts(), if we know what to do for AIX, we can avoid doing the default first. All the other stuff is cleanly separated so I won't touch it. Please test !

---

<div class="post-metadata">

**Author:** ![Mark\_Maas](https://avatars.discourse-cdn.com/v4/letter/m/7c8e57/32.png) [@Mark\_Maas](https://forum.ansible.com/u/Mark_Maas)\
**Post date:** [February 14, 2013, 11:54am UTC](https://forum.ansible.com/t/added-aix-support/12355/5 "2013-02-14T11:54:13Z")

</div>

We’re talking old farts here 😉 Old-AIX-users… They do not like all that new fangled GIT stuff…  
Luckily the Colleague in this case has an open mind.

Here are the diffs and the adjusted modules:  
[https://dl.dropbox.com/u/7875588/reansibleprojectaddedaixsupport.zip](https://dl.dropbox.com/u/7875588/reansibleprojectaddedaixsupport.zip)

---

<div class="post-metadata">

**Author:** ![Dag\_Wieers](https://avatars.discourse-cdn.com/v4/letter/d/45deac/32.png) [@Dag\_Wieers](https://forum.ansible.com/u/Dag_Wieers)\
**Post date:** [February 14, 2013, 11:57am UTC](https://forum.ansible.com/t/added-aix-support/12355/6 "2013-02-14T11:57:41Z")

</div>

I already made the pull request based on your initial email, so unless you changed anything in these files, they are no longer needed. See the link I send you:

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[https://github.com/ansible/ansible/pull/2083](https://github.com/ansible/ansible/pull/2083)

---

<div class="post-metadata">

**Author:** ![Mark\_Maas](https://avatars.discourse-cdn.com/v4/letter/m/7c8e57/32.png) [@Mark\_Maas](https://forum.ansible.com/u/Mark_Maas)\
**Post date:** [February 14, 2013, 12:02pm UTC](https://forum.ansible.com/t/added-aix-support/12355/7 "2013-02-14T12:02:32Z")

</div>

> Here are the diffs and the adjusted modules:

> > [https://dl.dropbox.com/u/7875588/reansibleprojectaddedaixsupport.zip](https://dl.dropbox.com/u/7875588/reansibleprojectaddedaixsupport.zip)
> 
> I already made the pull request based on your initial email, so unless you  
> changed anything in these files, they are no longer needed. See the link I  
> send you:

Excellent, thanks, the diff’s are now unified versions. That’s all. But too little too late I guess 😉

Thanks Dag!  
Mark

---

<div class="post-metadata">

**Author:** ![Michael\_DeHaan](https://avatars.discourse-cdn.com/v4/letter/m/c4cdca/32.png) [@Michael\_DeHaan](https://forum.ansible.com/u/Michael_DeHaan)\
**Post date:** [February 14, 2013, 12:24pm UTC](https://forum.ansible.com/t/added-aix-support/12355/8 "2013-02-14T12:24:07Z")

</div>

Hugely interesting, I'll probably get around to merging the pull  
request this weekend.

If Linux remains happy, that's good, and we'll let others test the AIX!

---

<div class="post-metadata">

**Author:** ![Mark\_Maas](https://avatars.discourse-cdn.com/v4/letter/m/7c8e57/32.png) [@Mark\_Maas](https://forum.ansible.com/u/Mark_Maas)\
**Post date:** [February 14, 2013, 12:30pm UTC](https://forum.ansible.com/t/added-aix-support/12355/9 "2013-02-14T12:30:21Z")

</div>

Not even puppet / Chef have this kind of AIX support 😉

---

<div class="post-metadata">

**Author:** ![Martin\_Adema](https://avatars.discourse-cdn.com/v4/letter/m/ac8455/32.png) [@Martin\_Adema](https://forum.ansible.com/u/Martin_Adema)\
**Post date:** [May 8, 2013, 8:00am UTC](https://forum.ansible.com/t/added-aix-support/12355/10 "2013-05-08T08:00:43Z")

</div>

Fixed an error in the get\_cpu\_facts of the AIX class (assumed proc0 as the first processor but can be different in a LPAR environment):

def get\_cpu\_facts(self):  
self.facts[‘processor’] =   
rc, out, err = module.run\_command(“/usr/sbin/lsdev -Cc processor”)  
i = 0  
for line in out.split(‘\n’):  
if ‘Available’ in line:  
if i == 0:  
data = line.split(’ ‘)  
cpudev = data[0]  
i += 1  
self.facts[‘processor\_count’] = int(i)  
rc, out, err = module.run\_command(“/usr/sbin/lsattr -El " + cpudev + " -a type”)  
data = out.split(’ ‘)  
self.facts[‘processor’] = data[1]  
rc, out, err = module.run\_command(“/usr/sbin/lsattr -El " + cpudev + " -a smt\_threads”)  
data = out.split(’ ')  
self.facts[‘processor\_cores’] = int(data[1])

---

<div class="post-metadata">

**Author:** ![Martin\_Adema](https://avatars.discourse-cdn.com/v4/letter/m/ac8455/32.png) [@Martin\_Adema](https://forum.ansible.com/u/Martin_Adema)\
**Post date:** [May 8, 2013, 12:50pm UTC](https://forum.ansible.com/t/added-aix-support/12355/11 "2013-05-08T12:50:57Z")

</div>

Added AIX class in the service module to control AIX SRC processes.  
Class is added at line 849:

# ===========================================

# Subclass: AIX

class AIX(Service):  
“”"  
This is the AIX Service (SRC) manipulation class - it uses lssrc, startsrc, stopsrc  
and refresh for service control. Enabling a service is currently not supported.  
Would require to add an entry in the /etc/inittab file (mkitab, chitab and rmitab  
commands)  
“”"

platform = ‘AIX’  
distribution = None

def get\_service\_tools(self):  
self.lssrc\_cmd = self.module.get\_bin\_path(‘lssrc’, True)

if not self.lssrc\_cmd:  
self.module.fail\_json(msg=‘unable to find lssrc binary’)

self.startsrc\_cmd = self.module.get\_bin\_path(‘startsrc’, True)

if not self.startsrc\_cmd:  
self.module.fail\_json(msg=‘unable to find startsrc binary’)

self.stopsrc\_cmd = self.module.get\_bin\_path(‘stopsrc’, True)

if not self.stopsrc\_cmd:  
self.module.fail\_json(msg=‘unable to find stopsrc binary’)

self.refresh\_cmd = self.module.get\_bin\_path(‘refresh’, True)

if not self.refresh\_cmd:  
self.module.fail\_json(msg=‘unable to find refresh binary’)

def get\_service\_status(self):  
rc, stdout, stderr = self.execute\_command(“%s -s %s” % (self.lssrc\_cmd, self.name))  
if rc == 1:  
self.running = False  
elif rc == 0:  
self.running = True

def get\_service\_status(self):  
status = self.get\_aix\_src\_status()

# Only ‘active’ is considered properly running. Everything else is off

# or has some sort of problem.

if status == ‘active’:  
self.running = True  
else:  
self.running = False

def get\_aix\_src\_status(self):  
rc, stdout, stderr = self.execute\_command(“%s -s %s” % (self.lssrc\_cmd, self.name))  
if rc == 1:  
if stderr:  
self.module.fail\_json(msg=stderr)  
else:  
self.module.fail\_json(msg=stdout)

lines = stdout.rstrip(“\n”).split(“\n”)  
status = lines[-1].split(" ")[-1]

# status is one of: active, inoperative

return status

def service\_control(self):  
if self.action == ‘start’:  
srccmd = self.startsrc\_cmd  
elif self.action == ‘stop’:  
srccmd = self.stopsrc\_cmd  
elif self.action == ‘reload’:  
srccmd = self.refresh\_cmd  
elif self.action == ‘restart’:  
self.execute\_command(“%s -s %s” % (self.stopsrc\_cmd, self.name))  
srccmd = self.startsrc\_cmd

if self.arguments and self.action == ‘start’:  
return self.execute\_command(“%s -a "%s" -s %s” % (srccmd, self.arguments, self.name))  
else:  
return self.execute\_command(“%s -s %s” % (srccmd, self.name))

---

<div class="post-metadata">

**Author:** ![Michael\_DeHaan](https://avatars.discourse-cdn.com/v4/letter/m/c4cdca/32.png) [@Michael\_DeHaan](https://forum.ansible.com/u/Michael_DeHaan)\
**Post date:** [May 8, 2013, 12:53pm UTC](https://forum.ansible.com/t/added-aix-support/12355/12 "2013-05-08T12:53:58Z")

</div>

Happy to have AIX things added.

Can you please submit a github pull request instead?

---

<div class="post-metadata">

**Author:** ![Martin\_Adema](https://avatars.discourse-cdn.com/v4/letter/m/ac8455/32.png) [@Martin\_Adema](https://forum.ansible.com/u/Martin_Adema)\
**Post date:** [May 8, 2013, 1:15pm UTC](https://forum.ansible.com/t/added-aix-support/12355/13 "2013-05-08T13:15:11Z")

</div>

Just submitted two pull requests for both changes.

---

<div class="post-metadata">

**Author:** ![Mark\_Maas](https://avatars.discourse-cdn.com/v4/letter/m/7c8e57/32.png) [@Mark\_Maas](https://forum.ansible.com/u/Mark_Maas)\
**Post date:** [May 8, 2013, 1:45pm UTC](https://forum.ansible.com/t/added-aix-support/12355/14 "2013-05-08T13:45:11Z")

</div>

My man Martin! Excellent!

See you on Friday!
